Source code for fsleyes.controls.scene3dtoolbar
#
# scene3dtoolbar.py - The Scene3DToolBar class
#
# Author: Paul McCarthy <pauldmccarthy@gmail.com>
#
"""This module provides the :class:`Scene3DToolBar` class, a FSLeyes control
which implements a toolbar for use with the :class:`.Scene3DPanel`.
"""
import wx
import fsleyes_props as props
import fsleyes.controls.controlpanel as ctrlpanel
import fsleyes.views.scene3dpanel as scene3dpanel
import fsleyes.toolbar as fsltoolbar
import fsleyes.strings as strings
import fsleyes.actions as actions
import fsleyes.icons as fslicons
import fsleyes.tooltips as fsltooltips
[docs]class Scene3DToolBar(ctrlpanel.ControlToolBar):
"""The ``Scene3DToolBar`` is a FSLeyes control which implements a toolbar for
use with the :class:`.Scene3DPanel`.
"""
showCursorAndLegend = props.Boolean(default=True)
"""This property is linked to a button on the toolbar which allows the
user to simultaneously toggle the :attr:`.SceneOpts.showCursor` and
:attr:`.Scene3DOpts.showLegend` properties.
"""
[docs] @staticmethod
def supportedViews():
"""The ``Scene3DToolBar`` is restricted for use with the
:class:`.Scene3DPanel`.
"""
return [scene3dpanel.Scene3DPanel]
[docs] def __init__(self, parent, overlayList, displayCtx, panel):
"""Create a ``Scene3DToolBar``.
:arg parent: The :mod:`wx` parent object.
:arg overlayList: The :class:`.OverlayList` instance.
:arg displayCtx: The :class:`.DisplayContext` instance.
:arg panel: The :class:`.Scene3DPanel` instance.
"""
ctrlpanel.ControlToolBar.__init__(self,
parent,
overlayList,
displayCtx,
panel,
height=24,
kbFocus=True)
self.panel = panel
self.addListener('showCursorAndLegend',
self.name,
self.__showCursorAndLegendChanged)
self.__makeTools()
[docs] def destroy(self):
"""Must be called when this ``Scene3DToolBar`` is no longer in use.
Removes some property listeners, and calls the base class
implementation.
"""
self.removeListener('showCursorAndLegend', self.name)
ctrlpanel.ControlToolBar.destroy(self)
def __makeTools(self):
"""Called by :meth:`__init__`. Creates the toolbar widgets. """
panel = self.panel
opts = panel.sceneOpts
profile = panel.currentProfile
icons = {
'screenshot' : fslicons.findImageFile('camera24'),
'resetDisplay' : fslicons.findImageFile('resetZoom24'),
'showCursorAndLegend' : [
fslicons.findImageFile('addHighlight24'),
fslicons.findImageFile('add24')],
'movieMode' : [
fslicons.findImageFile('movieHighlight24'),
fslicons.findImageFile('movie24')],
'CanvasSettingsPanel' : [
fslicons.findImageFile('spannerHighlight24'),
fslicons.findImageFile('spanner24')],
}
tooltips = {
'screenshot' : fsltooltips.actions[ panel, 'screenshot'],
'resetDisplay' : fsltooltips.actions[ profile, 'resetDisplay'],
'movieMode' : fsltooltips.properties[panel, 'movieMode'],
'showCursorAndLegend' : fsltooltips.properties[
self, 'showCursorAndLegend'],
'zoom' : fsltooltips.properties[opts, 'zoom'],
'CanvasSettingsPanel' : fsltooltips.actions[
panel, 'CanvasSettingsPanel'],
}
targets = {
'screenshot' : panel,
'resetDisplay' : profile,
'movieMode' : panel,
'showCursorAndLegend' : self,
'zoom' : opts,
'CanvasSettingsPanel' : panel,
}
toolSpecs = [
actions.ToggleActionButton(
'CanvasSettingsPanel',
actionKwargs={'floatPane' : True},
icon=icons['CanvasSettingsPanel'],
tooltip=tooltips['CanvasSettingsPanel']),
actions.ActionButton('screenshot',
icon=icons['screenshot'],
tooltip=tooltips['screenshot']),
'div',
props .Widget( 'movieMode',
icon=icons['movieMode'],
tooltip=tooltips['movieMode']),
props .Widget( 'showCursorAndLegend',
icon=icons['showCursorAndLegend'],
tooltip=tooltips['showCursorAndLegend']),
actions.ActionButton('resetDisplay',
icon=icons['resetDisplay'],
tooltip=tooltips['resetDisplay']),
props.Widget( 'zoom',
spin=True,
slider=True,
showLimits=False,
spinWidth=5,
tooltip=tooltips['zoom']),
]
tools = []
nav = []
for spec in toolSpecs:
if spec == 'div':
tools.append(fsltoolbar.ToolBarDivider(self,
height=24,
orient=wx.VERTICAL))
continue
widget = props.buildGUI(self, targets[spec.key], spec)
navWidget = widget
if spec.key in ('zoom', ):
widget = self.MakeLabelledTool(
widget,
strings.properties[targets[spec.key], spec.key])
tools.append(widget)
nav .append(navWidget)
self.SetTools(tools, destroy=True)
self.setNavOrder(nav)
def __showCursorAndLegendChanged(self, *a):
"""Called when the :attr:`showCursorAndLegend` property is changed.
Propagates the change on to the :attr:`.Scene3DOpts.showCursor` and
:attr:`.Scene3DOpts.showLegend` properties.
"""
opts = self.panel.sceneOpts
opts.showCursor = self.showCursorAndLegend
opts.showLegend = self.showCursorAndLegend