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)