Mercurial > libervia-backend
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()