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
This commit is contained in:
parent
f46a7bf23d
commit
b7bf434cd2
1 changed files with 129 additions and 132 deletions
|
|
@ -116,17 +116,6 @@ class MainWindow(wx.Frame, QuickApp):
|
|||
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 @@ class MainWindow(wx.Frame, QuickApp):
|
|||
|
||||
#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 @@ class MainWindow(wx.Frame, QuickApp):
|
|||
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)
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue