From e585534194bd23aa3dfbb88b422fb3510c104e5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edgar=20Andr=C3=A9s=20Margffoy=20Tuay?= Date: Fri, 16 Jul 2021 11:34:58 -0500 Subject: [PATCH] Add remove_item_from_application_menu method in main menu --- spyder/api/widgets/menus.py | 3 ++ spyder/plugins/application/plugin.py | 28 +++++++++++++++- spyder/plugins/mainmenu/plugin.py | 48 ++++++++++++++++++++++++++++ 3 files changed, 78 insertions(+), 1 deletion(-) diff --git a/spyder/api/widgets/menus.py b/spyder/api/widgets/menus.py index 445f4c40165..219e4faf5f2 100644 --- a/spyder/api/widgets/menus.py +++ b/spyder/api/widgets/menus.py @@ -107,6 +107,9 @@ def add_action(self, action, section=None, before=None, self._dirty = True self._ordered_actions = [] + def remove_action(self, item): + self._actions.remove(item) + def get_title(self): """ Return the title for menu. diff --git a/spyder/plugins/application/plugin.py b/spyder/plugins/application/plugin.py index 7585867b229..3b36f027633 100644 --- a/spyder/plugins/application/plugin.py +++ b/spyder/plugins/application/plugin.py @@ -178,7 +178,9 @@ def _populate_help_menu(self): def _depopulate_help_menu(self): mainmenu = self.get_plugin(Plugins.MainMenu) - # self._depopulate_help_menu_documentation_section(mainmenu) + self._depopulate_help_menu_documentation_section(mainmenu) + self._depopulate_help_menu_support_section(mainmenu) + self._populate_help_menu_about_section(mainmenu) def _populate_help_menu_documentation_section(self, mainmenu): """Add base Spyder documentation actions to the Help main menu.""" @@ -218,6 +220,30 @@ def _populate_help_menu_about_section(self, mainmenu): menu_id=ApplicationMenus.Help, section=HelpMenuSections.About) + def _depopulate_help_menu_documentation_section(self, mainmenu): + if mainmenu: + for documentation_action in [ + self.documentation_action, self.video_action]: + mainmenu.remove_item_from_application_menu( + documentation_action, + menu_id=ApplicationMenus.Help) + + def _depopulate_help_menu_support_section(self, mainmenu): + """Remove Spyder base support actions from the Help main menu.""" + if mainmenu: + for support_action in [ + self.trouble_action, self.dependencies_action, + self.check_updates_action, self.support_group_action]: + mainmenu.remove_item_from_application_menu( + support_action, + menu_id=ApplicationMenus.Help) + + def _depopulate_help_menu_about_section(self, mainmenu): + if mainmenu: + mainmenu.remove_item_from_application_menu( + self.about_action, + menu_id=ApplicationMenus.Help) + # ---- Public API # ------------------------------------------------------------------------ def get_application_context_menu(self, parent=None): diff --git a/spyder/plugins/mainmenu/plugin.py b/spyder/plugins/mainmenu/plugin.py index c3840cd46be..06318b0d88e 100644 --- a/spyder/plugins/mainmenu/plugin.py +++ b/spyder/plugins/mainmenu/plugin.py @@ -233,6 +233,54 @@ def add_item_to_application_menu(self, item, menu=None, menu_id=None, menu.add_action(item, section=section, before=before, before_section=before_section) + def remove_item_from_application_menu(self, item, menu=None, menu_id=None): + """ + Remove action or widget `item` from given application menu. + + Parameters + ---------- + item: SpyderAction or SpyderMenu + The item to add to the `menu`. + menu: ApplicationMenu or None + Instance of a Spyder application menu. + menu_id: str or None + The application menu unique string identifier. + + Notes + ----- + Must provide a `menu` or a `menu_id`. + """ + if menu and menu_id: + raise SpyderAPIError('Must provide only menu or menu_id!') + + if menu is None and menu_id is None: + raise SpyderAPIError('Must provide at least menu or menu_id!') + + if menu and not isinstance(menu, ApplicationMenu): + raise SpyderAPIError('Not an `ApplicationMenu`!') + + if menu_id and menu_id not in self._APPLICATION_MENUS: + raise SpyderAPIError('{} is not a valid menu_id'.format(menu_id)) + + # TODO: For now just add the item to the bottom for non-migrated menus. + # Temporal solution while migration is complete + app_menu_actions = { + ApplicationMenus.Edit: self._main.edit_menu_actions, + ApplicationMenus.Search: self._main.search_menu_actions, + ApplicationMenus.Source: self._main.source_menu_actions, + ApplicationMenus.Run: self._main.run_menu_actions, + ApplicationMenus.Debug: self._main.debug_menu_actions, + } + + menu_id = menu_id if menu_id else menu.menu_id + menu = menu if menu else self.get_application_menu(menu_id) + + if menu_id in app_menu_actions: + actions = app_menu_actions[menu_id] + actions.remove(item) + else: + menu.remove_action(item) + def get_application_menu(self, menu_id): """ Return an application menu by menu unique id.