Mercurial > libervia-backend
diff frontends/src/wix/main_window.py @ 773:eac23b1aad90
core: dynamics menus refactoring:
- menu now use generic callback system, with extra data
- asyncMenuCall is removed in favor of launchAction
- menu_id (== callback_id) is used to identify menu instead of category/name/type tuple
- i18n is managed throught deferred translation, and returned with _i18n suffix
e.g.: menu (D_('File'), D_('Open')): (u'File', u'Open') is menu_path, (u'Fichier', u'Ouvrir') is french menu_path_i18n.
- type actually can have the following values:
- NORMAL: classical menu
- JID_CONTEXT: contextual menu, used with any jid
- ROSTER_JID_CONTEXT: like JID_CONTEXT, but restricted to jids in roster.
- ROSTER_GROUP_CONTEXT: contextual menu, use with groups
- security_limit is used, in the same way as for parameters
- when using importMenu, callback can be an actual callback, or one already registered with registerCallback
author | Goffi <goffi@goffi.org> |
---|---|
date | Sun, 29 Dec 2013 17:10:14 +0100 |
parents | bfabeedbf32e |
children | 5642939d254e |
line wrap: on
line diff
--- a/frontends/src/wix/main_window.py Sun Dec 29 17:10:10 2013 +0100 +++ b/frontends/src/wix/main_window.py Sun Dec 29 17:10:14 2013 +0100 @@ -116,17 +116,6 @@ self.menuBar.EnableTop(i, True) super(MainWindow, self).plug_profile(profile_key) - def _dynamicMenuCb(self, xmlui): - XMLUI(self, xml_data = xmlui) - - def _dynamicMenuEb(self, failure): - dlg = wx.MessageDialog(self, _(u"Error while calling menu"), - _('Error'), - wx.OK | wx.ICON_ERROR - ) - dlg.ShowModal() - dlg.Destroy() - def createMenus(self): info(_("Creating menus")) connectMenu = wx.Menu() @@ -152,10 +141,13 @@ #additionals menus #FIXME: do this in a more generic way (in quickapp) - add_menus = self.bridge.getMenus() - for menu in add_menus: - type_,category,name = menu + add_menus = self.bridge.getMenus('', Const.NO_SECURITY_LIMIT) + for id_, type_, path, path_i18n in add_menus: assert(type_=="NORMAL") #TODO: manage other types + if len(path) != 2: + raise NotImplementedError("Menu with a path != 2 are not implemented yet") + category = path_i18n[0] # TODO: manage path with more than 2 levels + name = path_i18n[1] menu_idx = self.menuBar.FindMenu(category) current_menu = None if menu_idx == wx.NOT_FOUND: @@ -166,11 +158,12 @@ current_menu = self.menuBar.GetMenu(menu_idx) assert(current_menu != None) item_id = wx.NewId() - help_string = self.bridge.getMenuHelp(category, name, type_) - current_menu.Append(item_id, name, help = help_string) + help_string = self.bridge.getMenuHelp(id_, '') + current_menu.Append(item_id, name, help=help_string) #now we register the event def event_answer(e): - self.bridge.asyncCallMenu(category, name, Const.MENU_NORMAL, self.profile, callback=self._dynamicMenuCb, errback=self._dynamicMenuEb) + self.launchAction(id_, None, profile_key = self.profile) + wx.EVT_MENU(self, item_id, event_answer)