New participant list. Displaying the nick color, the affiliation, role, chatstate and status!

This commit is contained in:
Florent Le Coz 2012-01-24 17:07:04 +01:00
parent 99a16f2b86
commit 561af013b1
2 changed files with 31 additions and 19 deletions

View file

@ -678,6 +678,7 @@ class MucTab(ChatTab):
for i, user in enumerate(sorted_users):
user.color = colors[i % len(colors)]
self.text_win.rebuild_everything(self._text_buffer)
self.user_win.refresh(self.users)
self.text_win.refresh()
self.input.refresh()

View file

@ -196,6 +196,10 @@ class UserList(Win):
'none': lambda: get_theme().COLOR_USER_NONE,
'': lambda: get_theme().COLOR_USER_NONE
}
self.symbol_affiliation = {'owner': '~',
'admin': '&',
'member': '+',
'none': '-'}
self.color_show = {'xa': lambda: get_theme().COLOR_STATUS_XA,
'none': lambda: get_theme().COLOR_STATUS_NONE,
'': lambda: get_theme().COLOR_STATUS_NONE,
@ -203,7 +207,6 @@ class UserList(Win):
'away': lambda: get_theme().COLOR_STATUS_AWAY,
'chat': lambda: get_theme().COLOR_STATUS_CHAT
}
def scroll_up(self):
self.pos += self.height-1
@ -224,10 +227,28 @@ class UserList(Win):
if self.pos >= len(users) and self.pos != 0:
self.pos = len(users)-1
for user in users[self.pos:]:
self.draw_role_affiliation(y, user)
self.draw_status_chatstate(y, user)
self.addstr(y, 2, user.nick[:self.width-2], to_curses_attr(user.color))
y += 1
if y == self.height:
break
# draw indicators of position in the list
if self.pos > 0:
self.draw_plus(0)
if self.pos + self.height < len(users):
self.draw_plus(self.height-1)
self._refresh()
def draw_role_affiliation(self, y, user):
if not user.role in self.color_role:
role_col = get_theme().COLOR_USER_NONE
color = get_theme().COLOR_USER_NONE
else:
role_col = self.color_role[user.role]()
color = self.color_role[user.role]()
symbol = self.symbol_affiliation.get(user.affiliation) or '-'
self.addstr(y, 1, symbol, to_curses_attr(color))
def draw_status_chatstate(self, y, user):
if not user.show in self.color_show:
show_col = get_theme().COLOR_STATUS_NONE
else:
@ -241,16 +262,6 @@ class UserList(Win):
else:
char = get_theme().CHAR_STATUS
self.addstr(y, 0, char, to_curses_attr(show_col))
self.addstr(y, 1, user.nick[:self.width-2], to_curses_attr(role_col))
y += 1
if y == self.height:
break
# draw indicators of position in the list
if self.pos > 0:
self.draw_plus(0)
if self.pos + self.height < len(users):
self.draw_plus(self.height-1)
self._refresh()
def resize(self, height, width, y, x):
with g_lock: