diff frontends/primitivus/contact_list.py @ 119:ded2431cea5a

Primitivus: chat window / text sending. Primitivus has now the most basics features \o/ - core: new getVersion method - primitivus: new debug key (C-d), only work if SàT is in dev version (D in version) - quick_app: new post_init method, used for automatique task like auto-plug - primitivus: lists now use genericList (Box) or List (Flow) - primitivus: List now manage correctly its size - primitivus: new FocusFrame widget which manage focus changing with 'tab' - primitivus: advancedEdit now manage 'click' signal - primitivus: contactList now manager 'change' and 'click' signals - primitivus: Chat window now working
author Goffi <goffi@goffi.org>
date Mon, 05 Jul 2010 19:13:36 +0800
parents 7c482ecac0ff
children 1ca5f254ce41
line wrap: on
line diff
--- a/frontends/primitivus/contact_list.py	Sat Jul 03 13:56:44 2010 +0800
+++ b/frontends/primitivus/contact_list.py	Mon Jul 05 19:13:36 2010 +0800
@@ -25,12 +25,12 @@
 
 
 class ContactList(urwid.WidgetWrap, QuickContactList):
+    signals = ['click','change']
 
-    def __init__(self, host, CM):
-        QuickContactList.__init__(self, CM)
+    def __init__(self, host, CM, on_click=None, on_change=None, user_data=None):
         self.host = host
                
-        self.list_wid = List([], style=['single'], align='left')
+        self.list_wid = List([], style=['single','no_first_select'], align='left', on_click=self.__contactClicked, on_change=on_change)
 
         #we now build the widget
         body_content = urwid.SimpleListWalker([self.list_wid])
@@ -38,21 +38,35 @@
         frame = urwid.Frame(frame_body,urwid.AttrMap(urwid.Text(_("Contacts"),align='center'),'title'))
         self.main_widget = urwid.LineBox(frame)
         urwid.WidgetWrap.__init__(self, self.main_widget)
+        if on_click:
+            urwid.connect_signal(self, 'click', on_click, user_data)
+        if on_change:
+            urwid.connect_signal(self, 'change', on_change, user_data)
+        QuickContactList.__init__(self, CM)
+
+    def __contactClicked(self, list_wid):
+        self._emit('click')
+
+    def get_contact(self):
+        """Return contact currently selected"""
+        return self.list_wid.getSelectedValue()
             
     def clear_contacts(self):
         """clear all the contact list"""
         self.list_wid.changeValues([])
 
     def replace(self, jid, groups=None):
-            """add a contact to the list if doesn't exist, else update it"""
-            contacts = self.list_wid.getValues()
-            if jid.short not in contacts:
-                contacts.append(jid.short)
-                contacts.sort()
-                self.list_wid.changeValues(contacts)
+        """add a contact to the list if doesn't exist, else update it"""
+        contacts = self.list_wid.getAllValues()
+        if jid.short not in contacts:
+            contacts.append(jid.short)
+            contacts.sort()
+            self.list_wid.changeValues(contacts)
+            self._emit('change')
     
     def disconnect(self, jid):
         """mark a contact disconnected"""
+        #self.host.debug()
         self.remove(jid)
     
     def remove(self, jid):