From 416ceddbe498a70d703c46a531d89aeaecb1f5f0 Mon Sep 17 00:00:00 2001 From: mathieui Date: Sun, 4 Aug 2013 15:28:35 +0200 Subject: Add the same pluggable "information element" to the PrivateTab --- src/tabs.py | 20 ++++++++++++++++++-- src/windows.py | 11 ++++++++++- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/src/tabs.py b/src/tabs.py index e5564aa6..bae192e6 100644 --- a/src/tabs.py +++ b/src/tabs.py @@ -1837,6 +1837,7 @@ class PrivateTab(ChatTab): """ message_type = 'chat' plugin_commands = {} + additional_informations = {} plugin_keys = {} def __init__(self, name, nick): ChatTab.__init__(self, name) @@ -1870,6 +1871,21 @@ class PrivateTab(ChatTab): def general_jid(self): return self.get_name() + @property + def nick(self): + return self.get_nick() + + @staticmethod + def add_information_element(plugin_name, callback): + """ + Lets a plugin add its own information to the PrivateInfoWin + """ + PrivateTab.additional_informations[plugin_name] = callback + + @staticmethod + def remove_information_element(plugin_name): + del PrivateTab.additional_informations[plugin_name] + def log_message(self, txt, nickname, time=None, typ=1): """ Log the messages in the archives. @@ -2019,13 +2035,13 @@ class PrivateTab(ChatTab): self.resize() log.debug(' TAB Refresh: %s',self.__class__.__name__) self.text_win.refresh() - self.info_header.refresh(self.name, self.text_win, self.chatstate) + self.info_header.refresh(self.name, self.text_win, self.chatstate, PrivateTab.additional_informations) self.info_win.refresh() self.refresh_tab_win() self.input.refresh() def refresh_info_header(self): - self.info_header.refresh(self.name, self.text_win, self.chatstate) + self.info_header.refresh(self.name, self.text_win, self.chatstate, PrivateTab.additional_informations) self.input.refresh() def get_name(self): diff --git a/src/windows.py b/src/windows.py index 96c7ee1c..0abbc501 100644 --- a/src/windows.py +++ b/src/windows.py @@ -467,16 +467,25 @@ class PrivateInfoWin(InfoWin): def __init__(self): InfoWin.__init__(self) - def refresh(self, name, window, chatstate): + def refresh(self, name, window, chatstate, informations): log.debug('Refresh: %s',self.__class__.__name__) with g_lock: self._win.erase() self.write_room_name(name) self.print_scroll_position(window) self.write_chatstate(chatstate) + self.write_additional_informations(informations, name) self.finish_line(get_theme().COLOR_INFORMATION_BAR) self._refresh() + def write_additional_informations(self, informations, jid): + """ + Write all informations added by plugins by getting the + value returned by the callbacks. + """ + for key in informations: + self.addstr(informations[key](jid), to_curses_attr(get_theme().COLOR_INFORMATION_BAR)) + def write_room_name(self, name): jid = safeJID(name) room_name, nick = jid.bare, jid.resource -- cgit v1.2.3