comparison frontends/src/primitivus/primitivus @ 755:e3ad48a2aab2

core, frontends: callMenu is now async and don't use callback_id anymore
author Goffi <goffi@goffi.org>
date Tue, 24 Dec 2013 15:18:31 +0100
parents f49945d728de
children 93bd868b8fb6
comparison
equal deleted inserted replaced
754:f021bf27a557 755:e3ad48a2aab2
279 try: 279 try:
280 return self.menu_roller.checkShortcuts(input) 280 return self.menu_roller.checkShortcuts(input)
281 except AttributeError: 281 except AttributeError:
282 return input 282 return input
283 283
284 284 def _dynamicMenuCb(self, xmlui):
285 def __buildMenuRoller(self): 285 misc = {}
286 ui = XMLUI(self, xml_data = xmlui)
287 ui.show('popup')
288
289 def _dynamicMenuEb(self, failure):
290 self.showDialog(_(u"Error while calling menu"), type="error")
291
292 def _buildMenuRoller(self):
286 menu = sat_widgets.Menu(self.loop) 293 menu = sat_widgets.Menu(self.loop)
287 general = _("General") 294 general = _("General")
288 menu.addMenu(general, _("Connect"), self.onConnectRequest) 295 menu.addMenu(general, _("Connect"), self.onConnectRequest)
289 menu.addMenu(general, _("Disconnect"), self.onDisconnectRequest) 296 menu.addMenu(general, _("Disconnect"), self.onDisconnectRequest)
290 menu.addMenu(general, _("Parameters"), self.onParam) 297 menu.addMenu(general, _("Parameters"), self.onParam)
299 menu.addMenu(communication, _("Search directory"), self.onSearchDirectory) 306 menu.addMenu(communication, _("Search directory"), self.onSearchDirectory)
300 #additionals menus 307 #additionals menus
301 #FIXME: do this in a more generic way (in quickapp) 308 #FIXME: do this in a more generic way (in quickapp)
302 add_menus = self.bridge.getMenus() 309 add_menus = self.bridge.getMenus()
303 def add_menu_cb(menu): 310 def add_menu_cb(menu):
304 category, item = menu 311 category, name = menu
305 id = self.bridge.callMenu(category, item, "NORMAL", self.profile) 312 self.bridge.asyncCallMenu(category, name, Const.MENU_NORMAL, self.profile, callback=self._dynamicMenuCb, errback=self._dynamicMenuEb)
306 self.current_action_ids.add(id)
307 for new_menu in add_menus: 313 for new_menu in add_menus:
308 category,item,type = new_menu 314 type_, category, name = new_menu
309 assert(type=="NORMAL") #TODO: manage other types 315 assert(type_=="NORMAL") #TODO: manage other types
310 menu.addMenu(unicode(category), unicode(item), add_menu_cb) 316 menu.addMenu(unicode(category), unicode(name), add_menu_cb)
311 317
312 menu_roller = sat_widgets.MenuRoller([(_('Main menu'),menu)]) 318 menu_roller = sat_widgets.MenuRoller([(_('Main menu'),menu)])
313 return menu_roller 319 return menu_roller
314 320
315 def __buildMainWidget(self): 321 def _buildMainWidget(self):
316 self.contact_list = ContactList(self, on_click=self.contactSelected, on_change=lambda w: self.redraw()) 322 self.contact_list = ContactList(self, on_click=self.contactSelected, on_change=lambda w: self.redraw())
317 #self.center_part = urwid.Columns([('weight',2,self.contact_list),('weight',8,Chat('',self))]) 323 #self.center_part = urwid.Columns([('weight',2,self.contact_list),('weight',8,Chat('',self))])
318 self.center_part = urwid.Columns([('weight', 2, self.contact_list), ('weight', 8, urwid.Filler(urwid.Text('')))]) 324 self.center_part = urwid.Columns([('weight', 2, self.contact_list), ('weight', 8, urwid.Filler(urwid.Text('')))])
319 325
320 self.editBar = EditBar(self) 326 self.editBar = EditBar(self)
321 self.menu_roller = self.__buildMenuRoller() 327 self.menu_roller = self._buildMenuRoller()
322 self.main_widget = sat_widgets.FocusFrame(self.center_part, header=self.menu_roller, footer=self.editBar, focus_part='footer') 328 self.main_widget = sat_widgets.FocusFrame(self.center_part, header=self.menu_roller, footer=self.editBar, focus_part='footer')
323 return self.main_widget 329 return self.main_widget
324 330
325 def plug_profile(self, profile_key='@DEFAULT@'): 331 def plug_profile(self, profile_key='@DEFAULT@'):
326 self.loop.widget = self.__buildMainWidget() 332 self.loop.widget = self._buildMainWidget()
327 self.redraw() 333 self.redraw()
328 QuickApp.plug_profile(self, profile_key) 334 QuickApp.plug_profile(self, profile_key)
329 335
330 def removePopUp(self, widget=None): 336 def removePopUp(self, widget=None):
331 "Remove current pop-up, and if there is other in queue, show it" 337 "Remove current pop-up, and if there is other in queue, show it"