Source code for traitsui.menu
# (C) Copyright 2004-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!
""" Defines the standard menu bar for use with Traits UI windows and panels,
and standard actions and buttons.
"""
from traits.api import Str
# Import and rename the needed Pyface elements:
from pyface.action.api import ToolBarManager as ToolBar
from pyface.action.api import MenuBarManager as MenuBar
from pyface.action.api import MenuManager as Menu
from pyface.action.api import Group as ActionGroup
from pyface.action.api import Action as PyFaceAction
# -------------------------------------------------------------------------
# 'Action' class (extends the core pyface Action class):
# -------------------------------------------------------------------------
[docs]class Action(PyFaceAction):
"""An action on a menu bar in a Traits UI window or panel."""
# -------------------------------------------------------------------------
# Trait definitions:
# -------------------------------------------------------------------------
#: Pre-condition for showing the action. If the expression evaluates to
#: False, the action is not visible (and disappears if it was previously
#: visible). If the value evaluates to True, the action becomes visible.
#: All **visible_when** conditions are checked each time that any trait
#: value on an object in the UI's context is changed. Therefore, you can
#: use **visible_when** conditions to hide or show actions in response to
#: user input. Be aware that this only applies to traits in the UI's
#: context. As a result, changes to nested traits that don't also change a
#: trait on some object in the context may not trigger the expression to be
#: checked. Additionally, the expression needs to be a valid python
#: expression given the context. i.e.
#: eval(visible_when, globals=globals(), locals=context) should succeed.
visible_when = Str()
#: Pre-condition for enabling the action. If the expression evaluates to
#: False, the action is disabled, that is, it cannot be selected. All
#: **enabled_when** conditions are checked each time that any trait value
#: on an object in the UI's context is changed. Therefore, you can use
#: **enabled_when** conditions to enable or disable actions in response to
#: user input. Be aware that this only applies to traits in the UI's
#: context. As a result, changes to nested traits that don't also change a
#: trait on some object in the context may not trigger the expression to be
#: checked. Additionally, the expression needs to be a valid python
#: expression given the context. i.e.
#: eval(visible_when, globals=globals(), locals=context) should succeed.
enabled_when = Str()
#: Boolean expression indicating when the action is displayed with a check
#: mark beside it. This attribute applies only to actions that are included
#: in menus.
checked_when = Str()
#: Pre-condition for including the action in the menu bar or toolbar. If
#: the expression evaluates to False, the action is not defined in the
#: display. Conditions for **defined_when** are evaluated only once, when
#: the display is first constructed.
defined_when = Str()
#: The method to call to perform the action, on the Handler for the window.
#: The method must accept a single parameter, which is a UIInfo object.
#: Because Actions are associated with Views rather than Handlers, you must
#: ensure that the Handler object for a particular window has a method with
#: the correct name, for each Action defined on the View for that window.
action = Str()
# -------------------------------------------------------------------------
# Standard actions and menu bar definitions:
# -------------------------------------------------------------------------
#: Menu separator
Separator = ActionGroup
#: The standard "close window" action
CloseAction = Action(name="Close", action="_on_close")
#: The standard "undo last change" action
UndoAction = Action(
name="Undo",
action="_on_undo",
defined_when="ui.history is not None",
enabled_when="ui.history.can_undo",
)
#: The standard "redo last undo" action
RedoAction = Action(
name="Redo",
action="_on_redo",
defined_when="ui.history is not None",
enabled_when="ui.history.can_redo",
)
#: The standard "revert all changes" action
RevertAction = Action(
name="Revert",
action="_on_revert",
defined_when="ui.history is not None",
enabled_when="ui.history.can_undo",
)
#: The standard "show help" action
HelpAction = Action(name="Help", action="show_help")
#: The standard Traits UI menu bar
StandardMenuBar = MenuBar(
Menu(CloseAction, name="File"),
Menu(UndoAction, RedoAction, RevertAction, name="Edit"),
Menu(HelpAction, name="Help"),
)
# -------------------------------------------------------------------------
# Standard buttons (i.e. actions):
# -------------------------------------------------------------------------
NoButton = Action(name="")
#: Appears as two buttons: **Undo** and **Redo**. When **Undo** is clicked, the
#: most recent change to the data is cancelled, restoring the previous value.
#: **Redo** cancels the most recent "undo" operation.
UndoButton = Action(name="Undo")
#: When the user clicks the **Revert** button, all changes made in the window
#: are cancelled and the original values are restored. If the changes have been
#: applied to the model (because the user clicked **Apply** or because the
#: window is live), the model data is restored as well. The window remains
#: open.
RevertButton = Action(name="Revert")
#: When the user clicks the **Apply** button, all changes made in the window are
#: applied to the model. This option is meaningful only for modal windows.
ApplyButton = Action(name="Apply")
#: When the user clicks the **OK** button, all changes made in the window are
#: applied to the model, and the window is closed.
OKButton = Action(name="OK")
#: When the user clicks the **Cancel** button, all changes made in the window
#: are discarded; if the window is live, the model is restored to the values it
#: held before the window was opened. The window is then closed.
CancelButton = Action(name="Cancel")
#: When the user clicks the **Help** button, the current help handler is
#: invoked. If the default help handler is used, a pop-up window is displayed,
#: which contains the **help** text for the top-level Group (if any), and for
#: the items in the view. If the default help handler has been overridden,
#: the action is determined by the custom help handler. See
#: **traitsui.help**.
HelpButton = Action(name="Help")
OKCancelButtons = [OKButton, CancelButton]
ModalButtons = [ApplyButton, RevertButton, OKButton, CancelButton, HelpButton]
LiveButtons = [UndoButton, RevertButton, OKButton, CancelButton, HelpButton]
#: The window has no command buttons
NoButtons = [NoButton]