diff options
Diffstat (limited to 'src/windows.py')
-rw-r--r-- | src/windows.py | 241 |
1 files changed, 137 insertions, 104 deletions
diff --git a/src/windows.py b/src/windows.py index 3e607541..2352a82a 100644 --- a/src/windows.py +++ b/src/windows.py @@ -33,12 +33,14 @@ from poopt import cut_text from sleekxmpp.xmlstream.stanzabase import JID import core -import theme import common import wcwidth import singleton import collections +from theming import get_theme, to_curses_attr + +allowed_color_digits = ('0', '1', '2', '3', '4', '5', '6', '7') # msg is a reference to the corresponding Message tuple. text_start and text_end are the position # delimiting the text in this line. # first is a bool telling if this is the first line of the message. @@ -111,7 +113,7 @@ class Win(object): attributes as they are in the string. For example: \x19bhello → hello in bold - \xc1Bonj\xc2our → 'Bonj' in red and 'our' in green + \x191}Bonj\x192}our → 'Bonj' in red and 'our' in green next_attr_char is the \x19 delimiter attr_char is the char following it, it can be one of 'u', 'b', 'c[0-9]' @@ -119,6 +121,37 @@ class Win(object): if y is not None and x is not None: self.move(y, x) next_attr_char = text.find('\x19') + while next_attr_char != -1 and text: + log.debug('Addstr_Colored: [%s]' % text.replace('\x19', '\\x19')) + if next_attr_char + 1 < len(text): + attr_char = text[next_attr_char+1].lower() + else: + attr_char = str() + if next_attr_char != 0: + self.addstr(text[:next_attr_char]) + if attr_char == 'o': + self._win.attrset(0) + elif attr_char == 'u': + self._win.attron(curses.A_UNDERLINE) + elif attr_char == 'b': + self._win.attron(curses.A_BOLD) + if attr_char in string.digits and attr_char != '': + color_str = text[next_attr_char+1:text.find('}', next_attr_char)] + self._win.attron(to_curses_attr((int(color_str), -1))) + text = text[next_attr_char+len(color_str)+2:] + else: + text = text[next_attr_char+2:] + next_attr_char = text.find('\x19') + self.addstr(text) + + def addstr_colored_lite(self, text, y=None, x=None): + """ + Just like addstr_colored, but only handles colors with one digit. + \x193 is the 3rd color. We do not use any } char in this version + """ + if y is not None and x is not None: + self.move(y, x) + next_attr_char = text.find('\x19') while next_attr_char != -1: if next_attr_char + 1 < len(text): attr_char = text[next_attr_char+1].lower() @@ -134,7 +167,7 @@ class Win(object): elif attr_char == 'b': self._win.attron(curses.A_BOLD) elif attr_char in string.digits and attr_char != '': - self._win.attron(common.curses_color_pair(int(attr_char))) + self._win.attron(to_curses_attr((int(attr_char), -1))) next_attr_char = text.find('\x19') self.addstr(text) @@ -145,7 +178,7 @@ class Win(object): (y, x) = self._win.getyx() size = self.width-x if color: - self.addnstr(' '*size, size, common.curses_color_pair(color)) + self.addnstr(' '*size, size, to_curses_attr(color)) else: self.addnstr(' '*size, size) @@ -159,18 +192,18 @@ class UserList(Win): def __init__(self): Win.__init__(self) self.pos = 0 - self.color_role = {'moderator': theme.COLOR_USER_MODERATOR, - 'participant':theme.COLOR_USER_PARTICIPANT, - 'visitor':theme.COLOR_USER_VISITOR, - 'none':theme.COLOR_USER_NONE, - '':theme.COLOR_USER_NONE + self.color_role = {'moderator': get_theme().COLOR_USER_MODERATOR, + 'participant':get_theme().COLOR_USER_PARTICIPANT, + 'visitor':get_theme().COLOR_USER_VISITOR, + 'none':get_theme().COLOR_USER_NONE, + '':get_theme().COLOR_USER_NONE } - self.color_show = {'xa':theme.COLOR_STATUS_XA, - 'none':theme.COLOR_STATUS_NONE, - '':theme.COLOR_STATUS_NONE, - 'dnd':theme.COLOR_STATUS_DND, - 'away':theme.COLOR_STATUS_AWAY, - 'chat':theme.COLOR_STATUS_CHAT + self.color_show = {'xa':get_theme().COLOR_STATUS_XA, + 'none':get_theme().COLOR_STATUS_NONE, + '':get_theme().COLOR_STATUS_NONE, + 'dnd':get_theme().COLOR_STATUS_DND, + 'away':get_theme().COLOR_STATUS_AWAY, + 'chat':get_theme().COLOR_STATUS_CHAT } def scroll_up(self): @@ -182,7 +215,7 @@ class UserList(Win): self.pos = 0 def draw_plus(self, y): - self.addstr(y, self.width-2, '++', common.curses_color_pair(theme.COLOR_MORE_INDICATOR)) + self.addstr(y, self.width-2, '++', to_curses_attr(get_theme().COLOR_MORE_INDICATOR)) def refresh(self, users): log.debug('Refresh: %s'%self.__class__.__name__) @@ -194,11 +227,11 @@ class UserList(Win): self.pos = len(users)-1 for user in users[self.pos:]: if not user.role in self.color_role: - role_col = theme.COLOR_USER_NONE + role_col = get_theme().COLOR_USER_NONE else: role_col = self.color_role[user.role] if not user.show in self.color_show: - show_col = theme.COLOR_STATUS_NONE + show_col = get_theme().COLOR_STATUS_NONE else: show_col = self.color_show[user.show] if user.chatstate == 'composing': @@ -208,9 +241,9 @@ class UserList(Win): elif user.chatstate == 'paused': char = 'p' else: - char = theme.CHAR_STATUS - self.addstr(y, 0, char, common.curses_color_pair(show_col)) - self.addstr(y, 1, user.nick[:self.width-2], common.curses_color_pair(role_col)) + 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 @@ -223,9 +256,9 @@ class UserList(Win): def resize(self, height, width, y, x): self._resize(height, width, y, x) - self._win.attron(common.curses_color_pair(theme.COLOR_VERTICAL_SEPARATOR)) + self._win.attron(to_curses_attr(get_theme().COLOR_VERTICAL_SEPARATOR)) self._win.vline(0, 0, curses.ACS_VLINE, self.height) - self._win.attroff(common.curses_color_pair(theme.COLOR_VERTICAL_SEPARATOR)) + self._win.attroff(to_curses_attr(get_theme().COLOR_VERTICAL_SEPARATOR)) class Topic(Win): def __init__(self): @@ -240,12 +273,12 @@ class Topic(Win): msg = topic[:self.width-1] else: msg = self._message[:self.width-1] - self.addstr(0, 0, msg, common.curses_color_pair(theme.COLOR_TOPIC_BAR)) + self.addstr(0, 0, msg, to_curses_attr(get_theme().COLOR_TOPIC_BAR)) (y, x) = self._win.getyx() remaining_size = self.width - x if remaining_size: self.addnstr(' '*remaining_size, remaining_size, - common.curses_color_pair(theme.COLOR_INFORMATION_BAR)) + to_curses_attr(get_theme().COLOR_INFORMATION_BAR)) self._refresh() def set_message(self, message): @@ -262,24 +295,24 @@ class GlobalInfoBar(Win): comp = lambda x: x.nb with g_lock: self._win.erase() - self.addstr(0, 0, "[", common.curses_color_pair(theme.COLOR_INFORMATION_BAR)) + self.addstr(0, 0, "[", to_curses_attr(get_theme().COLOR_INFORMATION_BAR)) sorted_tabs = sorted(self.core.tabs, key=comp) for tab in sorted_tabs: color = tab.get_color_state() if config.get('show_inactive_tabs', 'true') == 'false' and\ - color == theme.COLOR_TAB_NORMAL: + color == get_theme().COLOR_TAB_NORMAL: continue try: - self.addstr("%s" % str(tab.nb), common.curses_color_pair(color)) - self.addstr("|", common.curses_color_pair(theme.COLOR_INFORMATION_BAR)) + self.addstr("%s" % str(tab.nb), to_curses_attr(color)) + self.addstr("|", to_curses_attr(get_theme().COLOR_INFORMATION_BAR)) except: # end of line break (y, x) = self._win.getyx() - self.addstr(y, x-1, '] ', common.curses_color_pair(theme.COLOR_INFORMATION_BAR)) + self.addstr(y, x-1, '] ', to_curses_attr(get_theme().COLOR_INFORMATION_BAR)) (y, x) = self._win.getyx() remaining_size = self.width - x self.addnstr(' '*remaining_size, remaining_size, - common.curses_color_pair(theme.COLOR_INFORMATION_BAR)) + to_curses_attr(get_theme().COLOR_INFORMATION_BAR)) self._refresh() class InfoWin(Win): @@ -298,7 +331,7 @@ class InfoWin(Win): """ if window.pos > 0: plus = ' -PLUS(%s)-' % window.pos - self.addstr(plus, common.curses_color_pair(theme.COLOR_SCROLLABLE_NUMBER)) + self.addstr(plus, to_curses_attr(get_theme().COLOR_SCROLLABLE_NUMBER)) class PrivateInfoWin(InfoWin): """ @@ -315,33 +348,33 @@ class PrivateInfoWin(InfoWin): self.write_room_name(room) self.print_scroll_position(window) self.write_chatstate(chatstate) - self.finish_line(theme.COLOR_INFORMATION_BAR) + self.finish_line(get_theme().COLOR_INFORMATION_BAR) self._refresh() def write_room_name(self, room): jid = JID(room.name) room_name, nick = jid.bare, jid.resource - self.addstr(nick, common.curses_color_pair(theme.COLOR_PRIVATE_NAME)) + self.addstr(nick, to_curses_attr(get_theme().COLOR_PRIVATE_NAME)) txt = ' from room %s' % room_name - self.addstr(txt, common.curses_color_pair(theme.COLOR_INFORMATION_BAR)) + self.addstr(txt, to_curses_attr(get_theme().COLOR_INFORMATION_BAR)) def write_chatstate(self, state): if state: - self.addstr(' %s' % (state,), common.curses_color_pair(theme.COLOR_INFORMATION_BAR)) + self.addstr(' %s' % (state,), to_curses_attr(get_theme().COLOR_INFORMATION_BAR)) class ConversationInfoWin(InfoWin): """ The line above the information window, displaying informations about the user we are talking to """ - color_show = {'xa':theme.COLOR_STATUS_XA, - 'none':theme.COLOR_STATUS_ONLINE, - '':theme.COLOR_STATUS_ONLINE, - 'available':theme.COLOR_STATUS_ONLINE, - 'dnd':theme.COLOR_STATUS_DND, - 'away':theme.COLOR_STATUS_AWAY, - 'chat':theme.COLOR_STATUS_CHAT, - 'unavailable':theme.COLOR_STATUS_UNAVAILABLE + color_show = {'xa':get_theme().COLOR_STATUS_XA, + 'none':get_theme().COLOR_STATUS_ONLINE, + '':get_theme().COLOR_STATUS_ONLINE, + 'available':get_theme().COLOR_STATUS_ONLINE, + 'dnd':get_theme().COLOR_STATUS_DND, + 'away':get_theme().COLOR_STATUS_AWAY, + 'chat':get_theme().COLOR_STATUS_CHAT, + 'unavailable':get_theme().COLOR_STATUS_UNAVAILABLE } def __init__(self): @@ -372,7 +405,7 @@ class ConversationInfoWin(InfoWin): self.write_resource_information(resource) self.print_scroll_position(window) self.write_chatstate(chatstate) - self.finish_line(theme.COLOR_INFORMATION_BAR) + self.finish_line(get_theme().COLOR_INFORMATION_BAR) self._refresh() def write_resource_information(self, resource): @@ -384,31 +417,31 @@ class ConversationInfoWin(InfoWin): else: presence = resource.get_presence() color = RosterWin.color_show[presence] - self.addstr('[', common.curses_color_pair(theme.COLOR_INFORMATION_BAR)) - self.addstr(" ", common.curses_color_pair(color)) - self.addstr(']', common.curses_color_pair(theme.COLOR_INFORMATION_BAR)) + self.addstr('[', to_curses_attr(get_theme().COLOR_INFORMATION_BAR)) + self.addstr(" ", to_curses_attr(color)) + self.addstr(']', to_curses_attr(get_theme().COLOR_INFORMATION_BAR)) def write_contact_informations(self, contact): """ Write the informations about the contact """ if not contact: - self.addstr("(contact not in roster)", common.curses_color_pair(theme.COLOR_INFORMATION_BAR)) + self.addstr("(contact not in roster)", to_curses_attr(get_theme().COLOR_INFORMATION_BAR)) return display_name = contact.get_name() or contact.get_bare_jid() - self.addstr('%s '%(display_name), common.curses_color_pair(theme.COLOR_INFORMATION_BAR)) + self.addstr('%s '%(display_name), to_curses_attr(get_theme().COLOR_INFORMATION_BAR)) def write_contact_jid(self, jid): """ Just write the jid that we are talking to """ - self.addstr('[', common.curses_color_pair(theme.COLOR_INFORMATION_BAR)) - self.addstr(jid.full, common.curses_color_pair(theme.COLOR_CONVERSATION_NAME)) - self.addstr('] ', common.curses_color_pair(theme.COLOR_INFORMATION_BAR)) + self.addstr('[', to_curses_attr(get_theme().COLOR_INFORMATION_BAR)) + self.addstr(jid.full, to_curses_attr(get_theme().COLOR_CONVERSATION_NAME)) + self.addstr('] ', to_curses_attr(get_theme().COLOR_INFORMATION_BAR)) def write_chatstate(self, state): if state: - self.addstr(' %s' % (state,), common.curses_color_pair(theme.COLOR_INFORMATION_BAR)) + self.addstr(' %s' % (state,), to_curses_attr(get_theme().COLOR_INFORMATION_BAR)) class ConversationStatusMessageWin(InfoWin): """ @@ -431,11 +464,11 @@ class ConversationStatusMessageWin(InfoWin): self._win.erase() if resource: self.write_status_message(resource) - self.finish_line(theme.COLOR_INFORMATION_BAR) + self.finish_line(get_theme().COLOR_INFORMATION_BAR) self._refresh() def write_status_message(self, resource): - self.addstr(resource.get_status(), common.curses_color_pair(theme.COLOR_INFORMATION_BAR)) + self.addstr(resource.get_status(), to_curses_attr(get_theme().COLOR_INFORMATION_BAR)) class MucInfoWin(InfoWin): """ @@ -455,20 +488,20 @@ class MucInfoWin(InfoWin): self.write_role(room) if window: self.print_scroll_position(window) - self.finish_line(theme.COLOR_INFORMATION_BAR) + self.finish_line(get_theme().COLOR_INFORMATION_BAR) self._refresh() def write_room_name(self, room): - self.addstr('[', common.curses_color_pair(theme.COLOR_INFORMATION_BAR)) - self.addstr(room.name, common.curses_color_pair(theme.COLOR_GROUPCHAT_NAME)) - self.addstr('] ', common.curses_color_pair(theme.COLOR_INFORMATION_BAR)) + self.addstr('[', to_curses_attr(get_theme().COLOR_INFORMATION_BAR)) + self.addstr(room.name, to_curses_attr(get_theme().COLOR_GROUPCHAT_NAME)) + self.addstr('] ', to_curses_attr(get_theme().COLOR_INFORMATION_BAR)) def write_disconnected(self, room): """ Shows a message if the room is not joined """ if not room.joined: - self.addstr(' -!- Not connected ', common.curses_color_pair(theme.COLOR_INFORMATION_BAR)) + self.addstr(' -!- Not connected ', to_curses_attr(get_theme().COLOR_INFORMATION_BAR)) def write_own_nick(self, room): """ @@ -477,7 +510,7 @@ class MucInfoWin(InfoWin): nick = room.own_nick if not nick: return - self.addstr(truncate_nick(nick, 13), common.curses_color_pair(theme.COLOR_INFORMATION_BAR)) + self.addstr(truncate_nick(nick, 13), to_curses_attr(get_theme().COLOR_INFORMATION_BAR)) def write_role(self, room): """ @@ -494,7 +527,7 @@ class MucInfoWin(InfoWin): if own_user.affiliation != 'none': txt += own_user.affiliation+', ' txt += own_user.role+')' - self.addstr(txt, common.curses_color_pair(theme.COLOR_INFORMATION_BAR)) + self.addstr(txt, to_curses_attr(get_theme().COLOR_INFORMATION_BAR)) class TextWin(Win): def __init__(self, lines_nb_limit=config.get('max_lines_in_memory', 2048)): @@ -559,9 +592,9 @@ class TextWin(Win): offset = 1 + len(message.str_time) if nick: offset += wcwidth.wcswidth(nick) + 2 # + nick + spaces length - if theme.CHAR_TIME_LEFT: + if get_theme().CHAR_TIME_LEFT: offset += 1 - if theme.CHAR_TIME_RIGHT: + if get_theme().CHAR_TIME_RIGHT: offset += 1 lines = cut_text(txt, self.width-offset) for line in lines: @@ -610,7 +643,7 @@ class TextWin(Win): self._refresh() def write_line_separator(self): - self.addnstr('- '*(self.width//2-1)+'-', self.width, common.curses_color_pair(theme.COLOR_NEW_TEXT_SEPARATOR)) + self.addnstr('- '*(self.width//2-1)+'-', self.width, to_curses_attr(get_theme().COLOR_NEW_TEXT_SEPARATOR)) def write_text(self, y, x, txt): """ @@ -626,10 +659,10 @@ class TextWin(Win): if not nickname: return if color: - self._win.attron(common.curses_color_pair(color)) + self._win.attron(to_curses_attr(color)) self.addstr(truncate_nick(nickname)) if color: - self._win.attroff(common.curses_color_pair(color)) + self._win.attroff(to_curses_attr(color)) self.addstr("> ") def write_time(self, time): @@ -672,8 +705,8 @@ class HelpText(Win): self.txt = txt with g_lock: self._win.erase() - self.addstr(0, 0, self.txt[:self.width-1], common.curses_color_pair(theme.COLOR_INFORMATION_BAR)) - self.finish_line(theme.COLOR_INFORMATION_BAR) + self.addstr(0, 0, self.txt[:self.width-1], to_curses_attr(get_theme().COLOR_INFORMATION_BAR)) + self.finish_line(get_theme().COLOR_INFORMATION_BAR) self._refresh() def do_command(self, key): @@ -1034,16 +1067,16 @@ class Input(Win): text = self.text.replace('\n', '|') self._win.erase() if self.color: - self._win.attron(common.curses_color_pair(self.color)) + self._win.attron(to_curses_attr(self.color)) displayed_text = text[self.line_pos:self.line_pos+self.width-1] self.addstr(displayed_text) if self.color: (y, x) = self._win.getyx() size = self.width-x - self.addnstr(' '*size, size, common.curses_color_pair(self.color)) + self.addnstr(' '*size, size, to_curses_attr(self.color)) self.addstr(0, wcwidth.wcswidth(displayed_text[:self.pos]), '') if self.color: - self._win.attroff(common.curses_color_pair(self.color)) + self._win.attroff(to_curses_attr(self.color)) self._refresh() def refresh(self): @@ -1100,7 +1133,7 @@ class MessageInput(Input): Read one more char (c) and add \x19c to the string """ attr_char = self.core.read_keyboard()[0] - if attr_char in self.text_attributes or (attr_char in string.digits and int(attr_char) < 7): + if attr_char in self.text_attributes or attr_char in allowed_color_digits: self.do_command('\x19', False) self.do_command(attr_char) @@ -1138,13 +1171,13 @@ class MessageInput(Input): text = self.text.replace('\n', '|') self._win.erase() if self.color: - self._win.attron(common.curses_color_pair(self.color)) + self._win.attron(to_curses_attr(self.color)) displayed_text = text[self.line_pos:self.line_pos+self.width-1] self._win.attrset(0) - self.addstr_colored(displayed_text) + self.addstr_colored_lite(displayed_text) self.addstr(0, wcwidth.wcswidth(displayed_text[:self.pos]), '') if self.color: - self._win.attroff(common.curses_color_pair(self.color)) + self._win.attroff(to_curses_attr(self.color)) self._refresh() class CommandInput(Input): @@ -1201,7 +1234,7 @@ class CommandInput(Input): """ with g_lock: self._win.erase() - self.addstr(self.help_message, common.curses_color_pair(theme.COLOR_INFORMATION_BAR)) + self.addstr(self.help_message, to_curses_attr(get_theme().COLOR_INFORMATION_BAR)) cursor_pos = self.pos + len(self.help_message) if len(self.help_message): self.addstr(' ') @@ -1276,7 +1309,7 @@ class VerticalSeparator(Win): def rewrite_line(self): with g_lock: - self._win.vline(0, 0, curses.ACS_VLINE, self.height, common.curses_color_pair(theme.COLOR_VERTICAL_SEPARATOR)) + self._win.vline(0, 0, curses.ACS_VLINE, self.height, to_curses_attr(get_theme().COLOR_VERTICAL_SEPARATOR)) self._refresh() def refresh(self): @@ -1284,14 +1317,14 @@ class VerticalSeparator(Win): self.rewrite_line() class RosterWin(Win): - color_show = {'xa':theme.COLOR_STATUS_XA, - 'none':theme.COLOR_STATUS_ONLINE, - '':theme.COLOR_STATUS_ONLINE, - 'available':theme.COLOR_STATUS_ONLINE, - 'dnd':theme.COLOR_STATUS_DND, - 'away':theme.COLOR_STATUS_AWAY, - 'chat':theme.COLOR_STATUS_CHAT, - 'unavailable':theme.COLOR_STATUS_UNAVAILABLE + color_show = {'xa':get_theme().COLOR_STATUS_XA, + 'none':get_theme().COLOR_STATUS_ONLINE, + '':get_theme().COLOR_STATUS_ONLINE, + 'available':get_theme().COLOR_STATUS_ONLINE, + 'dnd':get_theme().COLOR_STATUS_DND, + 'away':get_theme().COLOR_STATUS_AWAY, + 'chat':get_theme().COLOR_STATUS_CHAT, + 'unavailable':get_theme().COLOR_STATUS_UNAVAILABLE } def __init__(self): @@ -1388,22 +1421,22 @@ class RosterWin(Win): Draw the indicator that shows that the list is longer than what is displayed """ - self.addstr(y, self.width-5, '++++', common.curses_color_pair(theme.COLOR_MORE_INDICATOR)) + self.addstr(y, self.width-5, '++++', to_curses_attr(get_theme().COLOR_MORE_INDICATOR)) def draw_roster_information(self, roster): """ The header at the top """ self.addstr('Roster: %s/%s contacts' % (roster.get_nb_connected_contacts(), roster.get_contact_len())\ - , common.curses_color_pair(theme.COLOR_INFORMATION_BAR)) - self.finish_line(theme.COLOR_INFORMATION_BAR) + , to_curses_attr(get_theme().COLOR_INFORMATION_BAR)) + self.finish_line(get_theme().COLOR_INFORMATION_BAR) def draw_group(self, y, group, colored): """ Draw a groupname on a line """ if colored: - self._win.attron(common.curses_color_pair(theme.COLOR_SELECTED_ROW)) + self._win.attron(to_curses_attr(get_theme().COLOR_SELECTED_ROW)) if group.folded: self.addstr(y, 0, '[+] ') else: @@ -1411,7 +1444,7 @@ class RosterWin(Win): contacts = " (%s/%s)" % (group.get_nb_connected_contacts(), len(group)) self.addstr(y, 4, group.name + contacts) if colored: - self._win.attroff(common.curses_color_pair(theme.COLOR_SELECTED_ROW)) + self._win.attroff(to_curses_attr(get_theme().COLOR_SELECTED_ROW)) self.finish_line() def draw_contact_line(self, y, contact, colored): @@ -1438,16 +1471,16 @@ class RosterWin(Win): else: display_name = '%s%s' % (contact.get_bare_jid(), nb,) self.addstr(y, 0, ' ') - self.addstr(" ", common.curses_color_pair(color)) + self.addstr(" ", to_curses_attr(color)) if resource: self.addstr(' [+]' if contact._folded else ' [-]') self.addstr(' ') if colored: - self.addstr(display_name, common.curses_color_pair(theme.COLOR_SELECTED_ROW)) + self.addstr(display_name, to_curses_attr(get_theme().COLOR_SELECTED_ROW)) else: self.addstr(display_name) if contact.get_ask() == 'asked': - self.addstr('?', common.curses_color_pair(theme.COLOR_HIGHLIGHT_NICK)) + self.addstr('?', to_curses_attr(get_theme().COLOR_HIGHLIGHT_NICK)) self.finish_line() def draw_resource_line(self, y, resource, colored): @@ -1455,9 +1488,9 @@ class RosterWin(Win): Draw a specific resource line """ color = RosterWin.color_show[resource.get_presence()] - self.addstr(y, 4, " ", common.curses_color_pair(color)) + self.addstr(y, 4, " ", to_curses_attr(color)) if colored: - self.addstr(y, 6, resource.get_jid().full, common.curses_color_pair(theme.COLOR_SELECTED_ROW)) + self.addstr(y, 6, resource.get_jid().full, to_curses_attr(get_theme().COLOR_SELECTED_ROW)) else: self.addstr(y, 6, resource.get_jid().full) self.finish_line() @@ -1482,12 +1515,12 @@ class ContactInfoWin(Win): presence = resource.get_presence() else: presence = 'unavailable' - self.addstr(0, 0, '%s (%s)'%(jid, presence,), common.curses_color_pair(theme.COLOR_INFORMATION_BAR)) - self.finish_line(theme.COLOR_INFORMATION_BAR) + self.addstr(0, 0, '%s (%s)'%(jid, presence,), to_curses_attr(get_theme().COLOR_INFORMATION_BAR)) + self.finish_line(get_theme().COLOR_INFORMATION_BAR) self.addstr(1, 0, 'Subscription: %s' % (contact.get_subscription(),)) if contact.get_ask(): if contact.get_ask() == 'asked': - self.addstr(' Ask: %s' % (contact.get_ask(),), common.curses_color_pair(theme.COLOR_HIGHLIGHT_NICK)) + self.addstr(' Ask: %s' % (contact.get_ask(),), to_curses_attr(get_theme().COLOR_HIGHLIGHT_NICK)) else: self.addstr(' Ask: %s' % (contact.get_ask(),)) self.finish_line() @@ -1497,8 +1530,8 @@ class ContactInfoWin(Win): """ draw the group information """ - self.addstr(0, 0, group.name, common.curses_color_pair(theme.COLOR_INFORMATION_BAR)) - self.finish_line(theme.COLOR_INFORMATION_BAR) + self.addstr(0, 0, group.name, to_curses_attr(get_theme().COLOR_INFORMATION_BAR)) + self.finish_line(get_theme().COLOR_INFORMATION_BAR) def refresh(self, selected_row): log.debug('Refresh: %s'%self.__class__.__name__) @@ -1581,7 +1614,7 @@ class ListWin(Win): if not txt: continue if line is self.lines[self._selected_row]: - self.addstr(y, x, txt[:size], common.curses_color_pair(theme.COLOR_INFORMATION_BAR)) + self.addstr(y, x, txt[:size], to_curses_attr(get_theme().COLOR_INFORMATION_BAR)) else: self.addstr(y, x, txt[:size]) x += size @@ -1659,7 +1692,7 @@ class ColumnHeaderWin(Win): txt = col size = self._columns_sizes[col] txt += ' ' * (size-len(txt)) - self.addstr(0, x, txt, common.curses_color_pair(theme.COLOR_COLUMN_HEADER)) + self.addstr(0, x, txt, to_curses_attr(get_theme().COLOR_COLUMN_HEADER)) x += size self._refresh() |