diff frontends/primitivus/primitivus @ 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 76055a209ed9
children 1ca5f254ce41
line wrap: on
line diff
--- a/frontends/primitivus/primitivus	Sat Jul 03 13:56:44 2010 +0800
+++ b/frontends/primitivus/primitivus	Mon Jul 05 19:13:36 2010 +0800
@@ -27,7 +27,8 @@
 import urwid
 from profile_manager import ProfileManager
 from contact_list import ContactList
-from custom_widgets import AdvancedEdit
+from chat import Chat
+from custom_widgets import AdvancedEdit,FocusFrame
 import pdb
 """from window import Window
 from editbox import EditBox
@@ -60,6 +61,15 @@
                  ('default_focus', 'default,bold', 'default'),
                  ]
             
+class ChatList(QuickChatList):
+    """This class manage the list of chat windows"""
+    
+    def __init__(self, host):
+        QuickChatList.__init__(self, host)
+    
+    def createChat(self, target):
+        return Chat(target, self.host)
+
 class PrimitivusApp(QuickApp):
     
     def __init__(self):
@@ -70,17 +80,38 @@
         self.main_widget = ProfileManager(self)
         self.loop = urwid.MainLoop(self.main_widget, const_PALETTE, event_loop=urwid.GLibEventLoop(), unhandled_input=self.key_handler)
 
+        ##misc setup##
+        self.chat_wins=ChatList(self)
+    
+    def debug(self):
+        """convenience method to reset screen and launch pdb"""
+        import os
+        os.system('reset')
+        print 'Entered debug mode'
+        pdb.set_trace()
+
+    def redraw(self):
+        """redraw the screen"""
+        self.loop.draw_screen()
+
     def start(self):
+        self.i = 0
+        self.loop.set_alarm_in(0,lambda a,b: self.postInit())
         self.loop.run()
 
     def key_handler(self, input):
         if input in ('q', 'Q') or input == 'ctrl x':
             raise urwid.ExitMainLoop()
-
+        elif input == 'ctrl d' and 'D' in self.bridge.getVersion(): #Debug only for dev versions
+            self.debug()
+  
     def __buildMainWidget(self):
-        self.contactList = ContactList(self, self.CM)
-        self.center_part = urwid.Columns([self.contactList])
-        self.main_widget = urwid.Frame(self.center_part, footer=AdvancedEdit('> '), focus_part='footer')
+        self.contactList = ContactList(self, self.CM, on_click = self.contactSelected, on_change=lambda w: self.redraw())
+        #self.center_part = urwid.Columns([('weight',2,self.contactList),('weight',8,Chat('',self))])
+        self.center_part = urwid.Columns([('weight',2,self.contactList), ('weight',8,urwid.Filler(urwid.Text('')))])
+        editBar = AdvancedEdit('> ')
+        urwid.connect_signal(editBar,'click',self.onTextEntered)
+        self.main_widget = FocusFrame(self.center_part, footer=editBar, focus_part='footer')
         return self.main_widget
 
     def plug_profile(self, profile_key='@DEFAULT@'):
@@ -94,6 +125,20 @@
         display_widget = urwid.Overlay(pop_up_widget, self.main_widget, 'center', ('relative', 40), 'middle', ('relative', 40))
         self.loop.widget = display_widget
 
+    def contactSelected(self, contact_list):
+        contact = contact_list.get_contact()
+        if contact:
+            assert(len(self.center_part.widget_list)==2)
+            #self.center_part.widget_list.append(self.chat_wins[contact])
+            #self.center_part.column_types.append(('weight',8))
+            self.center_part.widget_list[1] = self.chat_wins[contact]
+
+    def onTextEntered(self, editBar):
+        contact = self.contactList.get_contact()
+        if contact:
+            self.bridge.sendMessage(contact, editBar.get_edit_text(), profile_key=self.profile)
+            editBar.set_edit_text('')
+
 sat = PrimitivusApp()
 sat.start()