Index: engine/engine.py =================================================================== diff -u -r552cde1b884edc9f5fc7c1930b7cc39e3fd4bbe9 -r95c0bc77d05f227737bf6c8c8d510b9096ef7e4b --- engine/engine.py (.../engine.py) (revision 552cde1b884edc9f5fc7c1930b7cc39e3fd4bbe9) +++ engine/engine.py (.../engine.py) (revision 95c0bc77d05f227737bf6c8c8d510b9096ef7e4b) @@ -77,27 +77,37 @@ return False top_menu_name = "View" - sub_menu_name = name + menus = [] + action_name = name names = name.split("/") if len(names) > 1: + menus = names[0:-1] top_menu_name = names[0] - sub_menu_name = names[1] + action_name = names[-1] - menu = None - if top_menu_name != "": - found = False - for item in self.menuBar.actions(): - if item.text().replace('&', '').strip().lower() == top_menu_name.replace('&', '').strip().lower(): - menu = item.menu() - found = True - break + if len(menus) > 3: + print(f"WARNING: Maximum number of submenus (3) exceeded, not adding item \"{name}\"") + return False - if not found: - menu = self.menuBar.addMenu(top_menu_name) + def find_submenu(menu, submenu): + for action in menu.actions(): + if action.text().replace('&', '').strip().lower() == submenu.replace('&', '').strip().lower(): + return action.menu() + return None - action = menu.addAction(sub_menu_name) + current_menu = self.menuBar + for submenu in menus: + next_menu = find_submenu(current_menu, submenu) + if next_menu == None: + next_menu = current_menu.addMenu(QtWidgets.QMenu(submenu, current_menu)) + current_menu = next_menu.menu() + else: + current_menu = next_menu + + action = current_menu.addAction(action_name) action.triggered.connect(lambda: self.__action_triggered(window)) self.action_show_all.toggled.connect(action.setChecked) + def __action_triggered(self, window): if window.isVisible():