Mercurial > libervia-backend
diff frontends/primitivus/primitivus @ 137:227394eb080c
Primitivus: menu are now managed and fully working
- new class MenuRoller for manager different menus
- Chat window now create is own menu
- some menu items added for general/contact menus
author | Goffi <goffi@goffi.org> |
---|---|
date | Fri, 16 Jul 2010 20:25:06 +0800 |
parents | 6cad483a6d84 |
children | 80661755ea8d |
line wrap: on
line diff
--- a/frontends/primitivus/primitivus Fri Jul 16 20:17:01 2010 +0800 +++ b/frontends/primitivus/primitivus Fri Jul 16 20:25:06 2010 +0800 @@ -129,7 +129,7 @@ if input == 'meta m': try: if self.main_widget.header == None: - self.main_widget.header = self.menu + self.main_widget.header = self.menu_roller else: self.main_widget.header = None except AttributeError: @@ -160,19 +160,24 @@ self.loop.widget = self.save_main_widget del self.save_main_widget try: - return self.menu.checkShortcuts(input) + return self.menu_roller.checkShortcuts(input) except AttributeError: return input - def __buildMainMenu(self): + def __buildMenuRoller(self): menu = custom_widgets.Menu(self.loop) - connect = _("Connect") - menu.addMenu(connect, connect, self.onConnectRequest) - menu.addMenu(connect, _("Disconnect"), self.onDisconnectRequest) - menu.addMenu(connect, _("Exit"), self.onExitRequest, 'ctrl x') + general = _("General") + menu.addMenu(general, _("Connect"), self.onConnectRequest) + menu.addMenu(general, _("Disconnect"), self.onDisconnectRequest) + menu.addMenu(general, _("About"), self.onAboutRequest) + menu.addMenu(general, _("Exit"), self.onExitRequest, 'ctrl x') + contact = _("Contact") + menu.addMenu(contact, _("Add contact"), self.onAddContactRequest) + menu.addMenu(contact, _("Remove contact"), self.onRemoveContactRequest) communication = _("Communication") menu.addMenu(communication, _("Join room"), self.onJoinRoomRequest, 'meta j') - return menu + menu_roller = custom_widgets.MenuRoller([(_('Main menu'),menu)]) + return menu_roller def __buildMainWidget(self): self.contactList = ContactList(self, self.CM, on_click = self.contactSelected, on_change=lambda w: self.redraw()) @@ -180,8 +185,8 @@ self.center_part = urwid.Columns([('weight',2,self.contactList), ('weight',8,urwid.Filler(urwid.Text('')))]) editBar = custom_widgets.AdvancedEdit('> ') urwid.connect_signal(editBar,'click',self.onTextEntered) - self.menu = self.__buildMainMenu() - self.main_widget = custom_widgets.FocusFrame(self.center_part, header=self.menu, footer=editBar, focus_part='footer') + self.menu_roller = self.__buildMenuRoller() + self.main_widget = custom_widgets.FocusFrame(self.center_part, header=self.menu_roller, footer=editBar, focus_part='footer') return self.main_widget def plug_profile(self, profile_key='@DEFAULT@'): @@ -199,9 +204,8 @@ 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] + self.menu_roller.addMenu(_('Chat Menu'), self.chat_wins[contact].getMenu()) def onTextEntered(self, editBar): """Called when text is entered in the main edit bar""" @@ -232,6 +236,21 @@ error (message) custom_widgets.Alert(_("Error"), message, ok_cb=self.removePopUp) + def onAddContact(self, button, edit): + self.removePopUp() + jid=JID(edit.get_edit_text()) + if jid.is_valid(): + self.bridge.addContact(jid.short, profile_key=self.profile) + else: + message = _("'%s' is an invalid JID !") % jid + error (message) + custom_widgets.Alert(_("Error"), message, ok_cb=self.removePopUp) + + def onRemoveContact(self, button): + self.removePopUp() + info(_("Unsubscribing %s presence"),self.contactList.get_contact()) + self.bridge.delContact(self.contactList.get_contact(), profile_key=self.profile) + #Menu events# def onConnectRequest(self, menu): self.bridge.connect(self.profile) @@ -247,6 +266,25 @@ pop_up_widget = custom_widgets.InputDialog(_("Entering a MUC room"), _("Please enter MUC's JID"), default_txt = 'test@conference.necton2.int', cancel_cb=self.removePopUp, ok_cb=self.onJoinRoom) self.showPopUp(pop_up_widget) + def onAddContactRequest(self, menu): + pop_up_widget = custom_widgets.InputDialog(_("Adding a contact"), _("Please enter new contact JID"), default_txt = 'name@server.tld', cancel_cb=self.removePopUp, ok_cb=self.onAddContact) + self.showPopUp(pop_up_widget) + + def onRemoveContactRequest(self, menu): + contact = self.contactList.get_contact() + if not contact: + self.showPopUp(custom_widgets.Alert(_("Error"), _("You have not selected any contact to delete !"), ok_cb=self.removePopUp)) + else: + pop_up_widget = custom_widgets.ConfirmDialog(_("Are you sure you want to delete the contact [%s] ?" % contact), yes_cb=self.onRemoveContact, no_cb=self.removePopUp) + self.showPopUp(pop_up_widget) + + + + + def onAboutRequest(self, menu): + self.showPopUp(custom_widgets.Alert(_("About"), const_APP_NAME + " v" + self.bridge.getVersion(), ok_cb=self.removePopUp)) + + sat = PrimitivusApp() sat.start()