summaryrefslogtreecommitdiff
path: root/src/windows.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/windows.py')
-rw-r--r--src/windows.py241
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()