Skip to content

Commit

Permalink
Add remove_item_from_application_menu method in main menu
Browse files Browse the repository at this point in the history
  • Loading branch information
andfoy committed Jul 16, 2021
1 parent 019d46f commit e585534
Show file tree
Hide file tree
Showing 3 changed files with 78 additions and 1 deletion.
3 changes: 3 additions & 0 deletions spyder/api/widgets/menus.py
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
28 changes: 27 additions & 1 deletion spyder/plugins/application/plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -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."""
Expand Down Expand Up @@ -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):
Expand Down
48 changes: 48 additions & 0 deletions spyder/plugins/mainmenu/plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down

0 comments on commit e585534

Please sign in to comment.