Source code for fsleyes.controls.orthoeditactiontoolbar

#
# orthoeditactiontoolbar.py - Ortho edit mode action toolbar.
#
# Author: Paul McCarthy <pauldmccarthy@gmail.com>
#
"""This module provides the :class:`OrthoEditActionToolbar`, a toolbar used
by the :class:`.OrthoPanel` in edit mode, which contains various buttons
allowing the user to run various edit-related actions.
"""

import wx

import fsleyes_props                           as props
import fsleyes.controls.controlpanel           as ctrlpanel
import fsleyes.controls.orthoeditsettingspanel as editpanel
import fsleyes.profiles.orthoeditprofile       as orthoeditprofile
import fsleyes.toolbar                         as fsltoolbar
import fsleyes.actions                         as actions
import fsleyes.icons                           as fslicons
import fsleyes.tooltips                        as fsltooltips


[docs]class OrthoEditActionToolBar(ctrlpanel.ControlToolBar): """The ``OrthoEditActionToolBar`` is a toolbar used by the :class:`.OrthoPanel`, which contains buttons allowing the user to: - Open the :class:`.OrthoEditSettingsPanel` - Create a new :class:`.Image` - Undo/redo the last change - Clear/fill/erase the current selection - Copy/paste data between images """
[docs] @staticmethod def supportedViews(): """Overrides :meth:`.ControlMixin.supportedViews`. The ``OrthoEditActionToolBar`` is only intended to be added to :class:`.OrthoPanel` views. """ from fsleyes.views.orthopanel import OrthoPanel return [OrthoPanel]
[docs] @staticmethod def profileCls(): """The ``OrthoEditActionToolBar`` is intended to be activated with the :class:`.OrthoEditProfile`. """ return orthoeditprofile.OrthoEditProfile
[docs] @staticmethod def ignoreControl(): """The ``OrthoEditActionToolBar`` is not intended to be explicitly added by the user - it is added via :meth:`.OrthoPanel.toggleEditMode`. Overriding this method tells the :class:`.FSLeyesFrame` that it should not be added to the ortho panel settings menu. """ return True
[docs] def __init__(self, parent, overlayList, displayCtx, ortho): """Create an ``OrthoEditActionToolBar``. :arg parent: The :mod:`wx` parent object :arg overlayList: The :class:`.OverlayList` instance. :arg displayCtx: The :class:`.DisplayContext` instance. :arg ortho: The :class:`.OrthoPanel` instance. """ ctrlpanel.ControlToolBar.__init__(self, parent, overlayList, displayCtx, ortho, height=24, orient=wx.VERTICAL, kbFocus=True) self.toggleEditPanel = actions.ToggleControlPanelAction( overlayList, displayCtx, ortho, editpanel.OrthoEditSettingsPanel) self.__ortho = ortho self.__createTools()
[docs] def destroy(self): """Must be called when this ``OrthoEditActionToolBar`` is no longer needed. Clears references, and calls the base-class ``destroy`` method. """ super().destroy() self.__ortho = None
def __createTools(self): """Called when the :attr:`.ViewPanel.profile` property of the :class:`.OrthoPanel` changes. Shows/hides edit controls accordingly. """ self.ClearTools(destroy=True, postevent=False) ortho = self.__ortho profileObj = ortho.currentProfile tools = [] nav = [] for spec in _TOOLBAR_SPECS: if spec == 'div': tools.append(fsltoolbar.ToolBarDivider(self, height=24, orient=wx.HORIZONTAL)) continue if spec.key == 'toggleEditPanel': target = self else: target = profileObj widget = props.buildGUI(self, target, spec) navWidget = widget if spec.label is not None: widget = self.MakeLabelledTool(widget, spec.label) tools.append(widget) nav .append(navWidget) self.SetTools(tools) self.setNavOrder(nav)
_ICONS = { 'locationFollowsMouse' : [ fslicons.findImageFile('locationFollowsMouseHighlight24'), fslicons.findImageFile('locationFollowsMouse24')], 'showSelection' : [ fslicons.findImageFile('showSelectionHighlight24'), fslicons.findImageFile('showSelection24')], 'toggleEditPanel' : [fslicons.findImageFile('editSpannerHighlight24'), fslicons.findImageFile('editSpanner24')], 'undo' : fslicons.findImageFile('undo24'), 'redo' : fslicons.findImageFile('redo24'), 'createMask' : fslicons.findImageFile('new24'), 'clearSelection' : fslicons.findImageFile('clearSelection24'), 'fillSelection' : fslicons.findImageFile('fillSelection24'), 'eraseSelection' : fslicons.findImageFile('eraseSelection24'), 'copyPasteData' : [fslicons.findImageFile('copyDataHighlight24'), fslicons.findImageFile('copyData24')], 'copyPasteSelection' : [fslicons.findImageFile('copySelectionHighlight24'), fslicons.findImageFile('copySelection24')] } _TOOLTIPS = { 'locationFollowsMouse' : fsltooltips.properties['OrthoEditProfile.' 'locationFollowsMouse'], 'showSelection' : fsltooltips.properties['OrthoEditProfile.' 'showSelection'], 'toggleEditPanel' : fsltooltips.actions['OrthoPanel.' 'toggleEditPanel'], 'undo' : fsltooltips.actions['OrthoEditProfile.' 'undo'], 'redo' : fsltooltips.actions['OrthoEditProfile.' 'redo'], 'createMask' : fsltooltips.actions['OrthoEditProfile.' 'createMask'], 'clearSelection' : fsltooltips.actions['OrthoEditProfile.' 'clearSelection'], 'fillSelection' : fsltooltips.actions['OrthoEditProfile.' 'fillSelection'], 'eraseSelection' : fsltooltips.actions['OrthoEditProfile.' 'eraseSelection'], 'copyPasteData' : fsltooltips.actions['OrthoEditProfile.' 'copyPasteData'], 'copyPasteSelection' : fsltooltips.actions['OrthoEditProfile.' 'copyPasteSelection'], } _TOOLBAR_SPECS = [ actions.ToggleActionButton( 'toggleEditPanel', actionKwargs={'floatPane' : True}, icon=_ICONS['toggleEditPanel'], tooltip=_TOOLTIPS['toggleEditPanel']), actions.ActionButton( 'createMask', icon=_ICONS['createMask'], tooltip=_TOOLTIPS['createMask']), 'div', props.Widget( 'locationFollowsMouse', icon=_ICONS['locationFollowsMouse'], tooltip=_TOOLTIPS['locationFollowsMouse']), 'div', actions.ActionButton( 'undo', icon=_ICONS['undo'], tooltip=_TOOLTIPS['undo']), actions.ActionButton( 'redo', icon=_ICONS['redo'], tooltip=_TOOLTIPS['redo']), 'div', props.Widget( 'showSelection', icon=_ICONS['showSelection'], tooltip=_TOOLTIPS['showSelection'], dependencies=['drawMode'], enabledWhen=lambda i, m: not m), actions.ActionButton( 'clearSelection', icon=_ICONS['clearSelection'], tooltip=_TOOLTIPS['clearSelection']), actions.ActionButton( 'fillSelection', icon=_ICONS['fillSelection'], tooltip=_TOOLTIPS['fillSelection']), actions.ActionButton( 'eraseSelection', icon=_ICONS['eraseSelection'], tooltip=_TOOLTIPS['eraseSelection']), 'div', actions.ToggleActionButton( 'copyPasteData', icon=_ICONS['copyPasteData'], tooltip=_TOOLTIPS['copyPasteData']), actions.ToggleActionButton( 'copyPasteSelection', icon=_ICONS['copyPasteSelection'], tooltip=_TOOLTIPS['copyPasteSelection']), ]