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.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
"""
[docs] def __init__(self, parent, overlayList, displayCtx, frame, ortho):
"""Create an ``OrthoEditActionToolBar``.
:arg parent: The :mod:`wx` parent object
:arg overlayList: The :class:`.OverlayList` instance.
:arg displayCtx: The :class:`.DisplayContext` instance.
:arg frame: The :class:`.FSLeyesFrame` instance.
:arg ortho: The :class:`.OrthoPanel` instance.
"""
ctrlpanel.ControlToolBar.__init__(self,
parent,
overlayList,
displayCtx,
frame,
height=24,
orient=wx.VERTICAL,
kbFocus=True)
self.__ortho = ortho
ortho.addListener('profile', self.name, self.__profileChanged)
self.__profileChanged()
[docs] def destroy(self):
"""Must be called when this ``OrthoEditAction`` is no longer
needed. Removes property listeners, and calls the
:meth:`.ControlToolBar.destroy` method.
"""
self.__ortho.removeListener('profile', self.name)
ctrlpanel.ControlToolBar.destroy(self)
[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]
def __profileChanged(self, *a):
"""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
profile = ortho.profile
profileObj = ortho.getCurrentProfile()
if profile != 'edit':
return
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 = ortho
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'),
'copySelection' : fslicons.findImageFile('copySelection24'),
'pasteSelection' : fslicons.findImageFile('pasteSelection24'),
}
_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'],
'copySelection' : fsltooltips.actions['OrthoEditProfile.'
'copySelection'],
'pasteSelection' : fsltooltips.actions['OrthoEditProfile.'
'pasteSelection'],
}
_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.ActionButton(
'copySelection',
icon=_ICONS['copySelection'],
tooltip=_TOOLTIPS['copySelection']),
actions.ActionButton(
'pasteSelection',
icon=_ICONS['pasteSelection'],
tooltip=_TOOLTIPS['pasteSelection']),
]