From cd4e857942f05977598b4633bf22ea4d0b471500 Mon Sep 17 00:00:00 2001
From: "louiz@4325f9fc-e183-4c21-96ce-0ab188b42d13"
 <louiz@4325f9fc-e183-4c21-96ce-0ab188b42d13>
Date: Sat, 12 Jun 2010 23:42:55 +0000
Subject: cleanup + sort userlist (by role and alphabetically). fixed #1469

---
 src/gui.py    |   6 +--
 src/window.py | 116 ++++++++--------------------------------------------------
 2 files changed, 18 insertions(+), 104 deletions(-)

(limited to 'src')

diff --git a/src/gui.py b/src/gui.py
index 71b125b5..b9bbcb66 100644
--- a/src/gui.py
+++ b/src/gui.py
@@ -232,9 +232,9 @@ Avail: Sets your availability to available and (optional) sets your status
         stdscr.keypad(True)
         curses.init_pair(1, curses.COLOR_WHITE,
                          curses.COLOR_BLUE)
-        curses.init_pair(2, curses.COLOR_BLUE, -1)
-        curses.init_pair(3, curses.COLOR_RED, -1) # Admin
-        curses.init_pair(4, curses.COLOR_BLUE, -1) # Participant
+        curses.init_pair(4, curses.COLOR_CYAN, -1)
+        curses.init_pair(2, curses.COLOR_RED, -1) # Admin
+        curses.init_pair(3, curses.COLOR_BLUE, -1) # Participant
         curses.init_pair(5, curses.COLOR_WHITE, -1) # Visitor
         curses.init_pair(6, curses.COLOR_CYAN, -1)
         curses.init_pair(7, curses.COLOR_GREEN, -1)
diff --git a/src/window.py b/src/window.py
index 447e5271..85084573 100644
--- a/src/window.py
+++ b/src/window.py
@@ -55,8 +55,8 @@ class UserList(Win):
         self.win.attron(curses.color_pair(2))
         # self.win.vline(0, 0, curses.ACS_VLINE, self.height)
         self.win.attroff(curses.color_pair(2))
-        self.color_role = {'moderator': 3,
-                           'participant':2,
+        self.color_role = {'moderator': 2,
+                           'participant':3,
                            'visitor':4
                            }
         self.color_show = {'xa':12,
@@ -67,18 +67,24 @@ class UserList(Win):
                            }
 
     def refresh(self, users):
+        def compare_user(a, b):
+            if self.color_role[a.role] == self.color_role[b.role]:
+                if a.nick.lower() < b.nick.lower():
+                    return -1
+                return 1
+            return self.color_role[a.role] - self.color_role[b.role]
         if not self.visible:
             return
         self.win.erase()
         y = 0
-        for user in users:
+        for user in sorted(users, compare_user):
             try:
                 role_col = self.color_role[user.role]
-            except:
+            except KeyError:
                 role_col = 1
             try:
                 show_col = self.color_show[user.show]
-            except:
+            except KeyError:
                 show_col = 8
             self.win.attron(curses.color_pair(show_col))
             self.win.addnstr(y, 0, " ", 1)
@@ -192,10 +198,8 @@ class TextWin(Win):
                 offset += len(nick) + 2 # + nick + spaces length
             first = True
             while txt != '':
-                # debug(txt)
                 if txt[:self.width-offset].find('\n') != -1:
                     limit = txt[:self.width-offset].find('\n')
-                    # debug("=================="+str(limit))
                 else:
                     limit = self.width-offset-1
                 if limit == 0:
@@ -225,7 +229,6 @@ class TextWin(Win):
             messages = room.messages[-self.height - room.pos : -room.pos]
         else:
             messages = room.messages[-self.height:]
-        # lines = self.keep_n_lines(messages)
         lines = self.build_lines_from_messages(messages)
         y = 0
         for line in lines:
@@ -234,13 +237,8 @@ class TextWin(Win):
                 self.write_time(line.time)
             if line.nickname is not None:
                 self.write_nickname(line.nickname.encode('utf-8'), line.nickname_color)
-            # else:
-            #     self.win.attron(curses.color_pair(8))
-            # TODO on information
             self.write_text(y, line.text_offset, line.text, line.text_color)
             y += 1
-            # if message.nickname is None:
-            #     self.win.attroff(curses.color_pair(8))
         self.win.refresh()
 
     def write_text(self, y, x, txt, color):
@@ -251,19 +249,8 @@ class TextWin(Win):
         if color:
             self.win.attron(curses.color_pair(color))
         self.win.addstr(y, x, txt)
-        # while txt != '':
-        #     # debug(txt)
-        #     if txt[:self.width-x].find('\n') != -1:
-        #         limit = txt[:self.width-x].find('\n')
-        #         # debug("=================="+str(limit))
-        #     else:
-        #         limit = self.width-x
-        #     self.win.addnstr(txt, limit)
-        #     txt = txt[limit+1:]
-        #     l += 1
         if color:
             self.win.attroff(curses.color_pair(color))
-        # return l-1
 
     def write_nickname(self, nickname, color):
         """
@@ -298,79 +285,6 @@ class TextWin(Win):
         self.visible = visible
         self._resize(height, width, y, x, stdscr)
 
-    # def redraw(self, room):
-    #     """
-    #     called when the buffer changes or is
-    #     resized (a complete redraw is needed)
-    #     """
-    #     if not self.visible:
-    #         return
-    #     win = self.wins[room.name].win
-    #     win.clear()
-    #     win.move(0, 0)
-    #     for line in room.lines:
-    #         self.add_line(room, line)
-
-    # def refresh(self, winname):
-    #     self.
-    #     if self.visible:
-    #         self.wins[winname].refresh()
-
-    # def add_line(self, room, line):
-    #     if not self.visible:
-    #         return
-    #     win = self.wins[room.name].win
-    #     users = room.users
-    #     win.addstr('\n['+line[0].strftime("%H"))
-    #     win.attron(curses.color_pair(9))
-    #     win.addstr(':')
-    #     win.attroff(curses.color_pair(9))
-    #     win.addstr(line[0].strftime('%M'))
-    #     win.attron(curses.color_pair(9))
-    #     win.addstr(':')
-    #     win.attroff(curses.color_pair(9))
-    #     win.addstr(line[0].strftime('%S') + "] ")
-    #     if len(line) == 2:
-    #         try:
-    #             win.attron(curses.color_pair(8))
-    #             win.addstr(line[1])
-    #             win.attroff(curses.color_pair(8))
-    #         except:pass
-    #     elif len(line) == 4:
-    #         for user in users:
-    #             if user.nick == line[1]:
-    #                 break
-    #         try:
-    #             length = len('['+line[0].strftime("%H:%M:%S") + "] <")
-    #             if line[1]:
-    #                 win.attron(curses.color_pair(user.color))
-    #                 win.addstr(line[1])
-    #                 win.attroff(curses.color_pair(user.color))
-    #             win.addstr("> ")
-    #             if line[3]:
-    #                 win.attron(curses.color_pair(line[3]))
-    #             win.addstr(line[2])
-    #             if line[3]:
-    #                 win.attroff(curses.color_pair(line[3]))
-    #         except:pass
-
-    # def new_win(self, winname):
-    #     newwin = Win(self.height, self.width, self.y, self.x, self.parent_win)
-    #     newwin.win.idlok(True)
-    #     newwin.win.scrollok(True)
-    #     newwin.win.leaveok(1)
-    #     self.wins[winname] = newwin
-
-    # def resize(self, height, width, y, x, stdscr, visible):
-    #     self.visible = visible
-    #     if not visible:
-    #         return
-    #     for winname in self.wins.keys():
-    #         self.wins[winname]._resize(height, width, y, x, stdscr)
-    #         self.wins[winname].win.idlok(True)
-    #         self.wins[winname].win.scrollok(True)
-    #         self.wins[winname].win.leaveok(1)
-
 class Input(Win):
     """
     """
@@ -639,9 +553,9 @@ class Window(object):
         else:
             visible = True
         if visible:
-            stdscr.attron(curses.color_pair(2))
+            stdscr.attron(curses.color_pair(3))
             stdscr.vline(1, 9*(self.width/10), curses.ACS_VLINE, self.height-2)
-            stdscr.attroff(curses.color_pair(2))
+            stdscr.attroff(curses.color_pair(3))
         self.user_win = UserList(self.height-3, (self.width/10)-1, 1, 9*(self.width/10)+1, stdscr, visible)
         self.topic_win = Topic(1, self.width, 0, 0, stdscr, visible)
         self.info_win = RoomInfo(1, self.width, self.height-2, 0, stdscr, visible)
@@ -658,9 +572,9 @@ class Window(object):
         else:
             visible = True
         if visible:
-            stdscr.attron(curses.color_pair(2))
+            stdscr.attron(curses.color_pair(3))
             stdscr.vline(1, 9*(self.width/10), curses.ACS_VLINE, self.height-2)
-            stdscr.attroff(curses.color_pair(2))
+            stdscr.attroff(curses.color_pair(3))
         text_width = (self.width/10)*9;
         self.topic_win.resize(1, self.width, 0, 0, stdscr, visible)
         self.info_win.resize(1, self.width, self.height-2, 0, stdscr, visible)
-- 
cgit v1.2.3