def __init__(self, xml): self.target = None self.menu_loader = MenuLoader() self.menu_path = [] self.xml = xml self.treeMenu = self.xml.get_widget('treeMenu') renderer = gtk.CellRendererText() renderer.set_data("column", 0) column = gtk.TreeViewColumn("Name", renderer, text=0) self.treeMenu.append_column(column)
class MenuNavigator: def __init__(self, xml): self.target = None self.menu_loader = MenuLoader() self.menu_path = [] self.xml = xml self.treeMenu = self.xml.get_widget('treeMenu') renderer = gtk.CellRendererText() renderer.set_data("column", 0) column = gtk.TreeViewColumn("Name", renderer, text=0) self.treeMenu.append_column(column) def __create_menu_model(self): pass def __is_showing_menu(self, menu_name): current_model = self.treeMenu.get_model() if current_model: current_menu = current_model.menu if current_menu and current_menu.name == menu_name: return True return False def __is_showing_menu_or_submenu(self, menu_name): current_model = self.treeMenu.get_model() if current_model: current_menu = current_model.menu if current_menu and current_menu.name == menu_name: return True else: for menu in self.menu_path: if menu_name == menu.name: return True return False def show_menu(self, trait_category): if self.__is_showing_menu_or_submenu(trait_category): return self.__change_menu_model(trait_category) self.menu_path = [] def __change_menu_model(self, trait_category): menu = self.menu_loader.get_expanded_menu(trait_category) if not menu: raise ValueError('Selected invalid menu %s' % (trait_category)) model = MenuModel(menu) self.treeMenu.set_model(model) self.xml.get_widget('lblMenuTitle').set_label(trait_category) def __back_up_menu_path(self): if len(self.menu_path) == 0: return self.__change_menu_model(self.menu_path[-1].name) del self.menu_path[-1] def __add_to_menu_path(self, trait_category): old_menu = self.treeMenu.get_model().menu self.__change_menu_model(trait_category) self.menu_path.append(old_menu) def __add_menu_item_to_target(self): if self.target is None: return (mainModel, selIter) = self.treeMenu.get_selection().get_selected() if selIter == None: raise ValueError('No menu item selected') path = mainModel.get_path(selIter) event_menu_item = copy.copy(mainModel.get_item(path[0])) if isinstance(event_menu_item, MenuReference): raise ValueError('Cannot add an entire submenu at once!') event_menu_path = [] event_menu_path.extend(self.menu_path) event_menu_path.append(self.treeMenu.get_model().menu) self.target.add(event_menu_item, event_menu_path) def on_btnAddTrait_clicked(self, widget): self.__add_menu_item_to_target() def on_btnRemoveTrait_clicked(self, widget): self.target.remove() def add_custom(self, widget=None): self.target.add_custom() def add_note(self, widget=None): self.target.add_note() def on_treeMenu_row_activated(self, treeview, path, view_column): menu_item = treeview.get_model().get_item_from_path(path) if isinstance(menu_item, MenuReference) and menu_item.tagname == 'submenu': if menu_item.reference == '(back)': self.__back_up_menu_path() else: self.__add_to_menu_path(menu_item.reference) else: self.__add_menu_item_to_target()