Source code for fsleyes.actions.togglecontrolpanel

#
# togglecontrolpanel.py - The ToggleControlPanelAction class.
#
# Author: Paul McCarthy <pauldmccarthy@gmail.com>
#
"""This module provides the :class:`ToggleControlPanelAction` class,
an action intended for use by :class:`.ViewPanel` classes to manage
the addition/removal of control panels.
"""


from . import base


[docs]class ToggleControlPanelAction(base.ToggleAction): """The ``ToggleControlPanelAction`` class is an action which is intended to augment :class:`.ViewPanel` actions which add/remove a control panel. The ``ToggleControlPanelAction`` keeps track of the :class:`.ViewPanel` state, and updates its own :attr:`.ToggleAction.toggled` property whenever its designated control panel is added/removed from the ``ViewPanel``. This sounds a bit silly, but is necessary to ensure that any bound widgets (most likely menu items) are updated whenever the control panel managed by a ``ToggleControlPanelAction`` is added/removed. """
[docs] def __init__(self, overlayList, displayCtx, func, instance, cpType): """Create a ``ToggleControlPanelAction``. :arg overlayList: The :class:`.OverlayList` :arg displayCtx: The :class:`.DisplayContext` :arg func: The function which toggles the :arg instance: The :class:`.ViewPanel` instance. :arg cpType: The type of the control panel being managed by this ``ToggleControlPanelAction``. """ import wx.lib.agw.aui as aui base.ToggleAction.__init__(self, overlayList, displayCtx, func, instance) self.__viewPanel = instance self.__cpType = cpType auiMgr = instance.auiManager # WTF. The AuiManager does not post an event # when a pane is added - only when one # is closed. So I have to listen for # whenever the perspective changes. This # includes sash resizes :( auiMgr.Bind(aui.EVT_AUI_PERSPECTIVE_CHANGED, self.__viewPanelChanged)
[docs] def destroy(self): """Must be called when this ``ToggleControlPanelAction`` is no longer used. Clears references, and calls the base-class ``destroy`` method. """ base.ToggleAction.destroy(self) self.__viewPanel = None
def __viewPanelChanged(self, ev): """Called whenever a control panel is added to/removed from the :class:`.ViewPanel` that owns this ``ToggleControlPanelAction``. Updates the :attr:`.ToggleAction.toggled` attribute of this action. """ ev.Skip() controlPanels = self.__viewPanel.getPanels() controlPanels = [type(cp) for cp in controlPanels] self.toggled = self.__cpType in controlPanels