def __init__(self, pageview): self.pageview = pageview self.edit_format_actions = ( pageview.toggle_format_strong, pageview.toggle_format_emphasis, pageview.toggle_format_mark, pageview.toggle_format_strike, pageview.toggle_format_code, pageview.toggle_format_sub, pageview.toggle_format_sup, ) self.edit_menus = ( ('_List', 'view-list-symbolic', self._create_list_menu()), ('_Heading', 'format-text-heading-symbolic', self._create_head_menu()), ('_Insert', 'insert-image-symbolic', self._create_insert_menu()), ) self.edit_clear_action = pageview.clear_formatting def on_extensions_changed(o, obj): if obj in (pageview, PluginManager.insertedobjects): self._update_insert_menu() PluginManager.connect('extensions-changed', on_extensions_changed)
class InsertedObjectUI(object): def __init__(self, uimanager, pageview): self.uimanager = uimanager self.pageview = pageview self.insertedobjects = PluginManager().insertedobjects self._ui_id = None self._actiongroup = None self.add_ui() self.insertedobjects.connect('changed', self.on_changed) def on_changed(self, o): self.uimanager.remove_ui(self._ui_id) self.uimanager.remove_action_group(self._actiongroup) self._ui_id = None self._actiongroup = None self.add_ui() def add_ui(self): assert self._ui_id is None assert self._actiongroup is None self._actiongroup = self.get_actiongroup() ui_xml = self.get_ui_xml() self.uimanager.insert_action_group(self._actiongroup, 0) self._ui_id = self.uimanager.add_ui_from_string(ui_xml) def get_actiongroup(self): actions = [('insert_' + obj.name, obj.verb_icon, obj.label, '', None, self._action_handler) for obj in self.insertedobjects.values()] group = Gtk.ActionGroup('inserted_objects') group.add_actions(actions) return group def get_ui_xml(self): menulines = [] toollines = [] for obj in self.insertedobjects.values(): name = 'insert_' + obj.name menulines.append("<menuitem action='%s'/>\n" % name) if obj.verb_icon is not None: toollines.append("<toolitem action='%s'/>\n" % name) return """\ <ui> <menubar name='menubar'> <menu action='insert_menu'> <placeholder name='plugin_items'> %s </placeholder> </menu> </menubar> <toolbar name='toolbar'> <placeholder name='insert_plugin_items'> %s </placeholder> </toolbar> </ui> """ % ( ''.join(menulines), ''.join(toollines), ) def _action_handler(self, action): try: name = action.get_name()[7:] # len('insert_') = 7 otype = self.insertedobjects[name] pageview = self.pageview notebook = pageview.notebook page = pageview.page try: model = otype.new_model_interactive(self.pageview, notebook, page) except ValueError: return # dialog cancelled self.pageview.insert_object_model(otype, model) except: zim.errors.exception_handler('Exception during action: %s' % name)