Source code for fsleyes.controls.lightboxtoolbar
#
# lightboxtoolbar.py - The LightBoxToolBar class.
#
# Author: Paul McCarthy <pauldmccarthy@gmail.com>
#
"""This module provides the :class:`LightBoxToolBar` class, which is a
:class:`.ControlToolBar` for use with the :class:`.LightBoxPanel`.
"""
import wx
import fsleyes_props as props
import fsleyes.controls.controlpanel as ctrlpanel
import fsleyes.views.lightboxpanel as lightboxpanel
import fsleyes.toolbar as fsltoolbar
import fsleyes.actions as actions
import fsleyes.icons as fslicons
import fsleyes.tooltips as fsltooltips
import fsleyes.strings as strings
[docs]class LightBoxToolBar(ctrlpanel.ControlToolBar):
"""The ``LightBoxToolBar`` is a :class:`.ControlToolBar` for use with the
:class:`.LightBoxPanel`. A ``LightBoxToolBar`` looks something like this:
.. image:: images/lightboxtoolbar.png
:scale: 50%
:align: center
The ``LightBoxToolBar`` allows the user to control important parts of the
:class:`.LightBoxPanel` display, and also to display a
:class:`.CanvasSettingsPanel`, which allows control over all aspects of a
``LightBoxPanel``.
"""
[docs] @staticmethod
def supportedViews():
"""Overrides :meth:`.ControlMixin.supportedViews`. The
``LightBoxToolBar`` is only intended to be added to
:class:`.LightBoxPanel` views.
"""
return [lightboxpanel.LightBoxPanel]
[docs] def __init__(self, parent, overlayList, displayCtx, lb):
"""Create a ``LightBoxToolBar``.
:arg parent: The :mod:`wx` parent object.
:arg overlayList: The :class:`.OverlayList` instance.
:arg displayCtx: The :class:`.DisplayContext` instance.
:arg lb: The :class:`.LightBoxPanel` instance.
"""
ctrlpanel.ControlToolBar.__init__(self,
parent,
overlayList,
displayCtx,
lb,
height=24,
kbFocus=True)
self.lightBoxPanel = lb
lbOpts = lb.sceneOpts
coronalIcon = 'coronalSlice24'
coronalHighlightIcon = 'coronalSliceHighlight24'
icons = {
'screenshot' : fslicons.findImageFile('camera24'),
'movieMode' : [
fslicons.findImageFile('movieHighlight24'),
fslicons.findImageFile('movie24')],
'CanvasSettingsPanel' : [
fslicons.findImageFile('spannerHighlight24'),
fslicons.findImageFile('spanner24')],
'zax' : {
0 : [fslicons.findImageFile('sagittalSliceHighlight24'),
fslicons.findImageFile('sagittalSlice24')],
1 : [fslicons.findImageFile(coronalHighlightIcon),
fslicons.findImageFile(coronalIcon)],
2 : [fslicons.findImageFile('axialSliceHighlight24'),
fslicons.findImageFile('axialSlice24')],
}
}
tooltips = {
'screenshot' : fsltooltips.actions[ lb, 'screenshot'],
'movieMode' : fsltooltips.properties[lb, 'movieMode'],
'zax' : fsltooltips.properties[lbOpts, 'zax'],
'sliceSpacing' : fsltooltips.properties[lbOpts, 'sliceSpacing'],
'zrange' : fsltooltips.properties[lbOpts, 'zrange'],
'zoom' : fsltooltips.properties[lbOpts, 'zoom'],
'CanvasSettingsPanel' : fsltooltips.actions[
lb, 'CanvasSettingsPanel'],
}
specs = {
'CanvasSettingsPanel' : actions.ToggleActionButton(
'CanvasSettingsPanel',
actionKwargs={'floatPane' : True},
icon=icons['CanvasSettingsPanel'],
tooltip=tooltips['CanvasSettingsPanel']),
'screenshot' : actions.ActionButton(
'screenshot',
icon=icons['screenshot'],
tooltip=tooltips['screenshot']),
'movieMode' : props.Widget(
'movieMode',
icon=icons['movieMode'],
tooltip=tooltips['movieMode']),
'zax' : props.Widget(
'zax',
icons=icons['zax'],
tooltip=tooltips['zax']),
'sliceSpacing' : props.Widget(
'sliceSpacing',
spin=False,
showLimits=False,
tooltip=tooltips['sliceSpacing']),
'zrange' : props.Widget(
'zrange',
spin=False,
showLimits=False,
tooltip=tooltips['zrange'],
labels=[strings.choices[lbOpts, 'zrange', 'min'],
strings.choices[lbOpts, 'zrange', 'max']]),
'zoom' : props.Widget(
'zoom',
spin=False,
showLimits=False,
tooltip=tooltips['zoom']),
}
# Slice spacing and zoom go on a single panel
panel = wx.Panel(self)
sizer = wx.FlexGridSizer(2, 2, 0, 0)
panel.SetSizer(sizer)
more = props.buildGUI(self,
lb,
specs['CanvasSettingsPanel'])
screenshot = props.buildGUI(self, lb, specs['screenshot'])
movieMode = props.buildGUI(self, lb, specs['movieMode'])
zax = props.buildGUI(self, lbOpts, specs['zax'])
zrange = props.buildGUI(self, lbOpts, specs['zrange'])
zoom = props.buildGUI(panel, lbOpts, specs['zoom'])
spacing = props.buildGUI(panel, lbOpts, specs['sliceSpacing'])
zoomLabel = wx.StaticText(panel)
spacingLabel = wx.StaticText(panel)
zoomLabel .SetLabel(strings.properties[lbOpts, 'zoom'])
spacingLabel.SetLabel(strings.properties[lbOpts, 'sliceSpacing'])
sizer.Add(zoomLabel)
sizer.Add(zoom, flag=wx.EXPAND)
sizer.Add(spacingLabel)
sizer.Add(spacing, flag=wx.EXPAND)
tools = [more,
screenshot,
fsltoolbar.ToolBarDivider(self,
height=24,
orient=wx.VERTICAL),
zax,
fsltoolbar.ToolBarDivider(self,
height=24,
orient=wx.VERTICAL),
movieMode,
zrange,
panel]
nav = [more, screenshot, zax, movieMode, zrange, zoom, spacing]
self.SetTools(tools)
self.setNavOrder(nav)