Source code for pyface.workbench.action.perspective_menu_manager

# (C) Copyright 2005-2023 Enthought, Inc., Austin, TX
# All rights reserved.
#
# This software is provided without warranty under the terms of the BSD
# license included in LICENSE.txt and may be redistributed only under
# the conditions described in the aforementioned license. The license
# is also available online at http://www.enthought.com/licenses/BSD.txt
#
# Thanks for using Enthought open source!
""" The default perspective menu for a workbench window. """


from pyface.action.api import Group, MenuManager
from traits.api import Instance, List, observe


from .delete_user_perspective_action import DeleteUserPerspectiveAction
from .new_user_perspective_action import NewUserPerspectiveAction
from .rename_user_perspective_action import RenameUserPerspectiveAction
from .reset_all_perspectives_action import ResetAllPerspectivesAction
from .reset_active_perspective_action import ResetActivePerspectiveAction
from .save_as_user_perspective_action import SaveAsUserPerspectiveAction
from .set_active_perspective_action import SetActivePerspectiveAction


[docs]class PerspectiveMenuManager(MenuManager): """ The default perspective menu for a workbench window. """ # 'ActionManager' interface -------------------------------------------- # All of the groups in the manager. groups = List(Group) # The manager's unique identifier. id = "PerspectivesMenu" # 'MenuManager' interface ---------------------------------------------# # The menu manager's name. name = "Perspectives" # 'PerspectiveMenuManager' interface ----------------------------------- # The workbench window that the manager is part of. window = Instance("pyface.workbench.api.WorkbenchWindow") # ------------------------------------------------------------------------ # 'ActionManager' interface. # ------------------------------------------------------------------------ def _groups_default(self): """ Trait initializer. """ groups = [ # Create a group containing the actions that switch to specific # perspectives. self._create_perspective_group(self.window), # Create a group containing the user perspective create/save/rename # /delete actions. self._create_user_perspective_group(self.window), # Create a group containing the reset actions. self._create_reset_perspective_group(self.window), ] return groups # ------------------------------------------------------------------------ # 'PerspectiveMenuManager' interface. # ------------------------------------------------------------------------
[docs] @observe("window.perspectives.items") def rebuild(self, event): """ Rebuild the menu. This is called when user perspectives have been added or removed. """ # Clear out the old menu. This gives any actions that have trait # listeners (i.e. the rename and delete actions!) a chance to unhook # them. self.destroy() # Resetting the trait allows the initializer to run again (which will # happen just as soon as we fire the 'changed' event). self.reset_traits(["groups"]) # Let the associated menu know that we have changed. self.changed = True return
# ------------------------------------------------------------------------ # Private interface. # ------------------------------------------------------------------------ def _create_perspective_group(self, window): """ Create the actions that switch to specific perspectives. """ # fixme: Not sure if alphabetic sorting is appropriate in all cases, # but it will do for now! perspectives = window.perspectives[:] perspectives.sort(key=lambda x: x.name) # For each perspective, create an action that sets the active # perspective to it. group = Group() for perspective in perspectives: group.append( SetActivePerspectiveAction( perspective=perspective, window=window ) ) return group def _create_user_perspective_group(self, window): """ Create the user perspective create/save/rename/delete actions. """ group = Group( NewUserPerspectiveAction(window=window), SaveAsUserPerspectiveAction(window=window), RenameUserPerspectiveAction(window=window), DeleteUserPerspectiveAction(window=window), ) return group def _create_reset_perspective_group(self, window): """ Create the reset perspective actions. """ group = Group( ResetActivePerspectiveAction(window=window), ResetAllPerspectivesAction(window=window), ) return group