Source code for fsleyes.controls.scene3dtoolbar
#
# scene3dtoolbar.py -
#
# Author: Paul McCarthy <pauldmccarthy@gmail.com>
#
import wx
import fsleyes_props as props
import fsleyes.controls.controlpanel as ctrlpanel
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):
"""
"""
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] def __init__(self, parent, overlayList, displayCtx, frame, panel):
"""Create a ``Scene3DToolBar``.
: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 panel: The :class:`.Scene3DPanel` instance.
"""
ctrlpanel.ControlToolBar.__init__(self,
parent,
overlayList,
displayCtx,
frame,
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)
[docs] @staticmethod
def supportedViews():
"""Overrides :meth:`.ControlMixin.supportedViews`. The
``Scene3DToolBar`` is only intended to be added to
:class:`.Scene3DPanel` views.
"""
from fsleyes.views.scene3dpanel import Scene3DPanel
return [Scene3DPanel]
def __makeTools(self):
"""Called by :meth:`__init__`. Creates the toolbar widgets. """
panel = self.panel
opts = panel.sceneOpts
profile = panel.getCurrentProfile()
icons = {
'screenshot' : fslicons.findImageFile('camera24'),
'resetDisplay' : fslicons.findImageFile('resetZoom24'),
'showCursorAndLegend' : [
fslicons.findImageFile('addHighlight24'),
fslicons.findImageFile('add24')],
'movieMode' : [
fslicons.findImageFile('movieHighlight24'),
fslicons.findImageFile('movie24')],
'toggleCanvasSettingsPanel' : [
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'],
'toggleCanvasSettingsPanel' : fsltooltips.actions[
panel, 'toggleCanvasSettingsPanel'],
}
targets = {
'screenshot' : panel,
'resetDisplay' : profile,
'movieMode' : panel,
'showCursorAndLegend' : self,
'zoom' : opts,
'toggleCanvasSettingsPanel' : panel,
}
toolSpecs = [
actions.ToggleActionButton(
'toggleCanvasSettingsPanel',
actionKwargs={'floatPane' : True},
icon=icons['toggleCanvasSettingsPanel'],
tooltip=tooltips['toggleCanvasSettingsPanel']),
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