From 7311c12e5853434a39eb9d666aebd4643ea066f2 Mon Sep 17 00:00:00 2001 From: Paul McCarthy <pauld.mccarthy@gmail.com> Date: Tue, 21 Jul 2015 12:18:02 +0100 Subject: [PATCH] 1. Replaced OrthoSettingsPanel and LightBoxSettingsPanel with a CanvasSettingsPanel, which uses WidgetList to display/organise its controls. 2. DisplayContext (and CanvasPanel) has a new property, 'syncOverlayDisplay`, which syncs/unsyncs Display/DisplayOpts properties to/from the parent instances. --- fsl/data/strings.py | 14 +- fsl/fslview/controls/__init__.py | 11 +- fsl/fslview/controls/canvassettingspanel.py | 123 ++++++++++++++++ fsl/fslview/controls/lightboxsettingspanel.py | 68 --------- fsl/fslview/controls/lightboxtoolbar.py | 4 +- fsl/fslview/controls/orthosettingspanel.py | 65 --------- fsl/fslview/controls/orthotoolbar.py | 4 +- fsl/fslview/displaycontext/displaycontext.py | 51 ++++++- fsl/fslview/layouts.py | 131 ------------------ fsl/fslview/views/canvaspanel.py | 6 +- 10 files changed, 193 insertions(+), 284 deletions(-) create mode 100644 fsl/fslview/controls/canvassettingspanel.py delete mode 100644 fsl/fslview/controls/lightboxsettingspanel.py delete mode 100644 fsl/fslview/controls/orthosettingspanel.py diff --git a/fsl/data/strings.py b/fsl/data/strings.py index 0ab677cef..4d0308f80 100644 --- a/fsl/data/strings.py +++ b/fsl/data/strings.py @@ -118,12 +118,11 @@ titles = TypeDict({ 'AtlasPanel' : 'Atlases', 'LocationPanel' : 'Location', 'OverlayDisplayToolBar' : 'Display toolbar', + 'CanvasSettingsPanel' : 'View settings', 'OverlayDisplayPanel' : 'Display settings', 'OrthoToolBar' : 'Ortho view toolbar', 'OrthoProfileToolBar' : 'Ortho view mode toolbar', - 'OrthoSettingsPanel' : 'Ortho view settings', 'LightBoxToolBar' : 'Lightbox view toolbar', - 'LightBoxSettingsPanel' : 'Lightbox view settings', 'LookupTablePanel' : 'Lookup tables', 'LutLabelDialog' : 'New LUT label', 'NewLutDialog' : 'New LUT', @@ -268,6 +267,10 @@ labels = TypeDict({ 'OverlayDisplayPanel.ModelOpts' : 'Model settings', 'OverlayDisplayPanel.loadCmap' : 'Load colour map', + + 'CanvasSettingsPanel.scene' : 'Scene settings', + 'CanvasSettingsPanel.ortho' : 'Ortho view settings', + 'CanvasSettingsPanel.lightbox' : 'Lightbox settings', }) @@ -276,9 +279,10 @@ properties = TypeDict({ 'Profile.mode' : 'Profile', - 'CanvasPanel.syncLocation' : 'Sync location', - 'CanvasPanel.syncOverlayOrder' : 'Sync overlay order', - 'CanvasPanel.profile' : 'Mode', + 'CanvasPanel.syncLocation' : 'Sync location', + 'CanvasPanel.syncOverlayOrder' : 'Sync overlay order', + 'CanvasPanel.syncOverlayDisplay' : 'Sync overlay display settings', + 'CanvasPanel.profile' : 'Mode', 'SceneOpts.showCursor' : 'Show location cursor', 'SceneOpts.showColourBar' : 'Show colour bar', diff --git a/fsl/fslview/controls/__init__.py b/fsl/fslview/controls/__init__.py index a286401ff..5013b8029 100644 --- a/fsl/fslview/controls/__init__.py +++ b/fsl/fslview/controls/__init__.py @@ -9,17 +9,16 @@ from atlaspanel import AtlasPanel from overlaydisplaypanel import OverlayDisplayPanel from overlaylistpanel import OverlayListPanel from overlayselectpanel import OverlaySelectPanel -from lightboxsettingspanel import LightBoxSettingsPanel from locationpanel import LocationPanel -from orthosettingspanel import OrthoSettingsPanel from lookuptablepanel import LookupTablePanel from timeserieslistpanel import TimeSeriesListPanel from timeseriescontrolpanel import TimeSeriesControlPanel from histogramlistpanel import HistogramListPanel from histogramcontrolpanel import HistogramControlPanel from clusterpanel import ClusterPanel +from canvassettingspanel import CanvasSettingsPanel -from orthotoolbar import OrthoToolBar -from orthoprofiletoolbar import OrthoProfileToolBar -from lightboxtoolbar import LightBoxToolBar -from overlaydisplaytoolbar import OverlayDisplayToolBar +from orthotoolbar import OrthoToolBar +from orthoprofiletoolbar import OrthoProfileToolBar +from lightboxtoolbar import LightBoxToolBar +from overlaydisplaytoolbar import OverlayDisplayToolBar diff --git a/fsl/fslview/controls/canvassettingspanel.py b/fsl/fslview/controls/canvassettingspanel.py new file mode 100644 index 000000000..82c076ecf --- /dev/null +++ b/fsl/fslview/controls/canvassettingspanel.py @@ -0,0 +1,123 @@ +#!/usr/bin/env python +# +# canvassettingspanel.py - +# +# Author: Paul McCarthy <pauldmccarthy@gmail.com> +# + +import wx + +import props + +import pwidgets.widgetlist as widgetlist + +import fsl.data.strings as strings +import fsl.fslview.panel as fslpanel + + +_CANVASPANEL_PROPS = [ + props.Widget( + 'profile', + visibleWhen=lambda i: len(i.getProp('profile').getChoices(i)) > 1), + props.Widget('syncOverlayOrder'), + props.Widget('syncLocation'), + props.Widget('syncOverlayDisplay') +] + +_SCENEOPTS_PROPS = [ + props.Widget('showCursor'), + props.Widget('performance', spin=False, showLimits=False), + props.Widget('showColourBar'), + props.Widget('colourBarLabelSide', enabledWhen=lambda o: o.showColourBar), + props.Widget('colourBarLocation', enabledWhen=lambda o: o.showColourBar) +] + +_ORTHOOPTS_PROPS = [ + props.Widget('layout'), + props.Widget('zoom', spin=False, showLimits=False), + props.Widget('showLabels'), + props.Widget('showXCanvas'), + props.Widget('showYCanvas'), + props.Widget('showZCanvas') +] + +_LIGHTBOXOPTS_PROPS = [ + props.Widget('zax'), + props.Widget('zoom', showLimits=False, spin=False), + props.Widget('sliceSpacing', showLimits=False), + props.Widget('zrange', showLimits=False), + props.Widget('highlightSlice'), + props.Widget('showGridLines') +] + + +class CanvasSettingsPanel(fslpanel.FSLViewPanel): + + def __init__(self, parent, overlayList, displayCtx, canvasPanel): + + fslpanel.FSLViewPanel.__init__(self, parent, overlayList, displayCtx) + + self.__widgets = widgetlist.WidgetList(self) + + self.__sizer = wx.BoxSizer(wx.VERTICAL) + + self.SetSizer(self.__sizer) + + self.__sizer.Add(self.__widgets, flag=wx.EXPAND, proportion=1) + + import fsl.fslview.views.orthopanel as orthopanel + import fsl.fslview.views.lightboxpanel as lightboxpanel + + if isinstance(canvasPanel, orthopanel.OrthoPanel): + panelGroup = 'ortho' + panelProps = _ORTHOOPTS_PROPS + + elif isinstance(canvasPanel, lightboxpanel.LightBoxPanel): + panelGroup = 'lightbox' + panelProps = _LIGHTBOXOPTS_PROPS + + self.__widgets.AddGroup('scene' , strings.labels[self, 'scene']) + self.__widgets.AddGroup( panelGroup, strings.labels[self, panelGroup]) + + for dispProp in _CANVASPANEL_PROPS: + + widget = props.buildGUI(self.__widgets, + canvasPanel, + dispProp, + showUnlink=False) + + self.__widgets.AddWidget( + widget, + strings.properties[canvasPanel, dispProp.key], + groupName='scene') + + opts = canvasPanel.getSceneOptions() + + for dispProp in _SCENEOPTS_PROPS: + + widget = props.buildGUI(self.__widgets, + opts, + dispProp, + showUnlink=False) + + self.__widgets.AddWidget( + widget, + strings.properties[opts, dispProp.key], + groupName='scene') + + for dispProp in panelProps: + + widget = props.buildGUI(self.__widgets, + opts, + dispProp, + showUnlink=False) + + self.__widgets.AddWidget( + widget, + strings.properties[opts, dispProp.key], + groupName=panelGroup) + + self.__widgets.Expand('scene') + self.__widgets.Expand(panelGroup) + + self.SetMinSize((21, 21)) diff --git a/fsl/fslview/controls/lightboxsettingspanel.py b/fsl/fslview/controls/lightboxsettingspanel.py deleted file mode 100644 index e7853c2a1..000000000 --- a/fsl/fslview/controls/lightboxsettingspanel.py +++ /dev/null @@ -1,68 +0,0 @@ -#!/usr/bin/env python -# -# lightboxsettingspanel.py - -# -# Author: Paul McCarthy <pauldmccarthy@gmail.com> -# - -import logging - -import wx - -import props - -import fsl.fslview.panel as fslpanel - - -log = logging.getLogger(__name__) - - -class LightBoxSettingsPanel(fslpanel.FSLViewPanel): - - def __init__(self, parent, overlayList, displayCtx, lb): - fslpanel.FSLViewPanel.__init__(self, parent, overlayList, displayCtx) - - import fsl.fslview.layouts as layouts - - self.panel = wx.ScrolledWindow(self) - self.panel.SetScrollRate(0, 5) - self.sizer = wx.BoxSizer(wx.VERTICAL) - self.SetSizer(self.sizer) - self.sizer.Add(self.panel, flag=wx.EXPAND, proportion=1) - - self.canvasSettings = props.buildGUI( - self.panel, lb, layouts.layouts['CanvasPanel']) - - self.divider1 = wx.StaticLine( - self.panel, size=(-1, -1), style=wx.LI_HORIZONTAL) - - self.sceneSettings = props.buildGUI( - self.panel, - lb.getSceneOptions(), - layouts.layouts['SceneOpts']) - - self.divider2 = wx.StaticLine( - self.panel, size=(-1, -1), style=wx.LI_HORIZONTAL) - - self.lightBoxSettings = props.buildGUI( - self.panel, - lb.getSceneOptions(), - layouts.layouts['LightBoxPanel']) - - self.panelSizer = wx.BoxSizer(wx.VERTICAL) - self.panel.SetSizer(self.panelSizer) - - flags = wx.wx.EXPAND | wx.ALIGN_CENTRE | wx.ALL - - self.panelSizer.Add(self.canvasSettings, border=20, flag=flags) - self.panelSizer.Add(self.divider1, flag=flags) - self.panelSizer.Add(self.sceneSettings, border=20, flag=flags) - self.panelSizer.Add(self.divider2, flag=flags) - self.panelSizer.Add(self.lightBoxSettings, border=20, flag=flags) - - self.sizer .Layout() - self.panelSizer.Layout() - - size = self.panelSizer.GetMinSize() - - self.SetMinSize((size[0], size[1] / 3.0)) diff --git a/fsl/fslview/controls/lightboxtoolbar.py b/fsl/fslview/controls/lightboxtoolbar.py index 5ac3a9f8e..8508b33b2 100644 --- a/fsl/fslview/controls/lightboxtoolbar.py +++ b/fsl/fslview/controls/lightboxtoolbar.py @@ -7,7 +7,6 @@ import fsl.fslview.toolbar as fsltoolbar -import lightboxsettingspanel class LightBoxToolBar(fsltoolbar.FSLViewToolBar): @@ -50,7 +49,8 @@ class LightBoxToolBar(fsltoolbar.FSLViewToolBar): def showMoreSettings(self, *a): + import canvassettingspanel self.lightBoxPanel.togglePanel( - lightboxsettingspanel.LightBoxSettingsPanel, + canvassettingspanel.CanvasSettingsPanel, True, self.lightBoxPanel) diff --git a/fsl/fslview/controls/orthosettingspanel.py b/fsl/fslview/controls/orthosettingspanel.py deleted file mode 100644 index c41cddb5c..000000000 --- a/fsl/fslview/controls/orthosettingspanel.py +++ /dev/null @@ -1,65 +0,0 @@ -#!/usr/bin/env python -# -# orthosettingspanel.py - -# -# Author: Paul McCarthy <pauldmccarthy@gmail.com> -# - -import logging - -import wx - -import props - -import fsl.fslview.panel as fslpanel - - -log = logging.getLogger(__name__) - - -class OrthoSettingsPanel(fslpanel.FSLViewPanel): - - def __init__(self, parent, overlayList, displayCtx, ortho): - fslpanel.FSLViewPanel.__init__(self, parent, overlayList, displayCtx) - - import fsl.fslview.layouts as layouts - - self.panel = wx.ScrolledWindow(self) - self.panel.SetScrollRate(0, 5) - - self.sizer = wx.BoxSizer(wx.VERTICAL) - self.SetSizer(self.sizer) - self.sizer.Add(self.panel, flag=wx.EXPAND, proportion=1) - - self.canvasSettings = props.buildGUI( - self.panel, ortho, layouts.layouts['CanvasPanel']) - - self.divider1 = wx.StaticLine( - self.panel, size=(-1, -1), style=wx.LI_HORIZONTAL) - - self.sceneSettings = props.buildGUI( - self.panel, ortho.getSceneOptions(), layouts.layouts['SceneOpts']) - - self.divider2 = wx.StaticLine( - self.panel, size=(-1, -1), style=wx.LI_HORIZONTAL) - - self.orthoSettings = props.buildGUI( - self.panel, ortho.getSceneOptions(), layouts.layouts['OrthoPanel']) - - self.panelSizer = wx.BoxSizer(wx.VERTICAL) - self.panel.SetSizer(self.panelSizer) - - flags = wx.wx.EXPAND | wx.ALIGN_CENTRE | wx.ALL - - self.panelSizer.Add(self.canvasSettings, border=20, flag=flags) - self.panelSizer.Add(self.divider1, flag=flags) - self.panelSizer.Add(self.sceneSettings, border=20, flag=flags) - self.panelSizer.Add(self.divider2, flag=flags) - self.panelSizer.Add(self.orthoSettings, border=20, flag=flags) - - self.sizer .Layout() - self.panelSizer.Layout() - - size = self.panelSizer.GetMinSize() - - self.SetMinSize((size[0], size[1] / 3.0)) diff --git a/fsl/fslview/controls/orthotoolbar.py b/fsl/fslview/controls/orthotoolbar.py index 3b79dee4c..53bad4874 100644 --- a/fsl/fslview/controls/orthotoolbar.py +++ b/fsl/fslview/controls/orthotoolbar.py @@ -7,7 +7,6 @@ import fsl.fslview.toolbar as fsltoolbar -import orthosettingspanel class OrthoToolBar(fsltoolbar.FSLViewToolBar): @@ -38,5 +37,6 @@ class OrthoToolBar(fsltoolbar.FSLViewToolBar): def showMoreSettings(self, *a): + import canvassettingspanel self.orthoPanel.togglePanel( - orthosettingspanel.OrthoSettingsPanel, True, self.orthoPanel) + canvassettingspanel.CanvasSettingsPanel, True, self.orthoPanel) diff --git a/fsl/fslview/displaycontext/displaycontext.py b/fsl/fslview/displaycontext/displaycontext.py index 1804040ea..931b25acf 100644 --- a/fsl/fslview/displaycontext/displaycontext.py +++ b/fsl/fslview/displaycontext/displaycontext.py @@ -72,6 +72,16 @@ class DisplayContext(props.SyncableHasProperties): """ + syncOverlayDisplay = props.Boolean(default=True) + """If this ``DisplayContext`` instance has a parent (see + :mod:`props.syncable`), and this is ``True``, the properties of the + :class:`.Display` and :class:`.DisplayOpts` for every overlay managed + by this ``DisplayContext`` instance will be synchronised to those of + the parent instance. Otherwise, the display properties for every overlay + will be unsynchronised from the parent. + """ + + def __init__(self, overlayList, parent=None): """Create a :class:`DisplayContext` object. @@ -81,9 +91,11 @@ class DisplayContext(props.SyncableHasProperties): as the parent of this instance. """ - props.SyncableHasProperties.__init__(self, - parent, - nounbind=['overlayGroups']) + props.SyncableHasProperties.__init__( + self, + parent, + nounbind=['overlayGroups'], + nobind=[ 'syncOverlayDisplay']) self.__overlayList = overlayList self.__name = '{}_{}'.format(self.__class__.__name__, id(self)) @@ -103,6 +115,10 @@ class DisplayContext(props.SyncableHasProperties): self.__name, self.__overlayListChanged) + self.addListener('syncOverlayDisplay', + self.__name, + self.__syncOverlayDisplayChanged) + log.memory('{}.init ({})'.format(type(self).__name__, id(self))) @@ -164,6 +180,11 @@ class DisplayContext(props.SyncableHasProperties): parent=dParent, overlayType=overlayType) self.__displays[overlay] = display + + if (self.getParent() is not None) and \ + (not self.syncOverlayDisplay): + display .unsyncAllFromParent() + display.getDisplayOpts().unsyncAllFromParent() return display @@ -453,6 +474,30 @@ class DisplayContext(props.SyncableHasProperties): self.location.xyz = newDispLoc + def __syncOverlayDisplayChanged(self, *a): + """Called when the :attr:`syncOverlayDisplay` property + changes. + + Synchronises or unsychronises the :class:`.Display` and + :class:`.DisplayOpts` instances for every overlay to/from their + parent instances. + """ + + if self.getParent() is None: + return + + for display in self.__displays.values(): + + opts = display.getDisplayOpts() + + if self.syncOverlayDisplay: + display.syncAllToParent() + opts .syncAllToParent() + else: + display.unsyncAllFromParent() + opts .unsyncAllFromParent() + + def __updateBounds(self, *a): """Called when the overlay list changes, or when any overlay display transform is changed. Updates the :attr:`bounds` property. diff --git a/fsl/fslview/layouts.py b/fsl/fslview/layouts.py index d16cb5835..0365fac0c 100644 --- a/fsl/fslview/layouts.py +++ b/fsl/fslview/layouts.py @@ -17,7 +17,6 @@ import fsl.fslview.actions as actions from fsl.fslview.profiles.orthoviewprofile import OrthoViewProfile from fsl.fslview.profiles.orthoeditprofile import OrthoEditProfile -from fsl.fslview.views import CanvasPanel from fsl.fslview.views import OrthoPanel from fsl.fslview.views import LightBoxPanel @@ -29,12 +28,9 @@ from fsl.fslview.displaycontext import Display from fsl.fslview.displaycontext import VolumeOpts from fsl.fslview.displaycontext import MaskOpts from fsl.fslview.displaycontext import VectorOpts -from fsl.fslview.displaycontext import RGBVectorOpts -from fsl.fslview.displaycontext import LineVectorOpts from fsl.fslview.displaycontext import ModelOpts from fsl.fslview.displaycontext import LabelOpts -from fsl.fslview.displaycontext import SceneOpts from fsl.fslview.displaycontext import OrthoOpts from fsl.fslview.displaycontext import LightBoxOpts @@ -92,30 +88,6 @@ OrthoProfileToolBarEditLayout = [ enabledWhen=lambda p: p.mode == 'selint')] -CanvasPanelLayout = props.VGroup(( - widget(CanvasPanel, - 'profile', - visibleWhen=lambda i: len(i.getProp('profile').getChoices(i)) > 1), - widget(CanvasPanel, 'syncOverlayOrder'), - widget(CanvasPanel, 'syncLocation'))) - -SceneOptsLayout = props.VGroup(( - widget(SceneOpts, 'showCursor'), - widget(SceneOpts, 'performance', spin=False, showLimits=False), - widget(SceneOpts, 'showColourBar'), - widget(SceneOpts, 'colourBarLabelSide'), - widget(SceneOpts, 'colourBarLocation'))) - - -OrthoPanelLayout = props.VGroup(( - widget(OrthoOpts, 'layout'), - widget(OrthoOpts, 'zoom', spin=False, showLimits=False), - widget(OrthoOpts, 'showLabels'), - props.HGroup((widget(OrthoOpts, 'showXCanvas'), - widget(OrthoOpts, 'showYCanvas'), - widget(OrthoOpts, 'showZCanvas'))))) - - ####################################### # LightBoxPanel control panels/toolbars ####################################### @@ -130,15 +102,6 @@ LightBoxToolBarLayout = [ actions.ActionButton(LightBoxToolBar, 'more')] -LightBoxPanelLayout = props.VGroup(( - widget(LightBoxOpts, 'zax'), - widget(LightBoxOpts, 'zoom'), - widget(LightBoxOpts, 'sliceSpacing'), - widget(LightBoxOpts, 'zrange'), - widget(LightBoxOpts, 'highlightSlice'), - widget(LightBoxOpts, 'showGridLines'))) - - ########################################## # Overlay display property panels/toolbars @@ -181,93 +144,8 @@ LabelOptsToolBarLayout = [ actions.ActionButton(OverlayDisplayToolBar, 'more')] -DisplayLayout = [ - widget(Display, 'name'), - widget(Display, 'overlayType'), - widget(Display, 'enabled'), - widget(Display, 'alpha', showLimits=False, editLimits=False), - widget(Display, 'brightness', showLimits=False, editLimits=False), - widget(Display, 'contrast', showLimits=False, editLimits=False)] - - -VolumeOptsLayout = [ - widget(VolumeOpts, 'resolution', showLimits=False), - widget(VolumeOpts, 'transform'), - widget(VolumeOpts, 'volume', showLimits=False), - widget(VolumeOpts, 'interpolation'), - widget(VolumeOpts, 'cmap'), - widget(VolumeOpts, 'invert'), - widget(VolumeOpts, 'invertClipping'), - widget(VolumeOpts, 'displayRange', showLimits=False, slider=True), - widget(VolumeOpts, 'clippingRange', showLimits=False, slider=True)] - - -MaskOptsLayout = [ - widget(MaskOpts, 'resolution', showLimits=False), - widget(MaskOpts, 'transform'), - widget(MaskOpts, 'volume', showLimits=False), - widget(MaskOpts, 'colour'), - widget(MaskOpts, 'invert'), - widget(MaskOpts, 'threshold', showLimits=False)] - - -RGBVectorOptsLayout = [ - widget(RGBVectorOpts, 'resolution', showLimits=False), - widget(RGBVectorOpts, 'transform'), - widget(RGBVectorOpts, 'interpolation'), - widget(RGBVectorOpts, 'xColour'), - widget(RGBVectorOpts, 'yColour'), - widget(RGBVectorOpts, 'zColour'), - widget(RGBVectorOpts, 'suppressX'), - widget(RGBVectorOpts, 'suppressY'), - widget(RGBVectorOpts, 'suppressZ'), - widget(RGBVectorOpts, 'modulate'), - widget(RGBVectorOpts, 'modThreshold', showLimits=False, spin=False)] - -LineVectorOptsLayout = [ - widget(LineVectorOpts, 'resolution', showLimits=False), - widget(LineVectorOpts, 'transform'), - widget(LineVectorOpts, 'xColour'), - widget(LineVectorOpts, 'yColour'), - widget(LineVectorOpts, 'zColour'), - widget(LineVectorOpts, 'suppressX'), - widget(LineVectorOpts, 'suppressY'), - widget(LineVectorOpts, 'suppressZ'), - widget(LineVectorOpts, 'directed'), - widget(LineVectorOpts, 'lineWidth', showLimits=False), - widget(LineVectorOpts, 'modulate'), - widget(LineVectorOpts, 'modThreshold', showLimits=False, spin=False)] - - -ModelOptsLayout = [ - widget(ModelOpts, 'colour'), - widget(ModelOpts, 'outline'), - widget(ModelOpts, 'outlineWidth', showLimits=False), - widget(ModelOpts, 'refImage'), - # widget(ModelOpts, 'showName'), - widget(ModelOpts, 'coordSpace', - visibleWhen=lambda o: o.refImage != 'none')] - - -LabelOptsLayout = [ - widget(LabelOpts, 'lut'), - widget(LabelOpts, 'outline'), - widget(LabelOpts, 'outlineWidth', showLimits=False), - # widget(LabelOpts, 'showNames'), - widget(LabelOpts, 'resolution', showLimits=False), - widget(LabelOpts, 'transform'), - widget(LabelOpts, 'volume', showLimits=False)] - - - layouts = td.TypeDict({ - 'CanvasPanel' : CanvasPanelLayout, - 'OrthoPanel' : OrthoPanelLayout, - 'LightBoxPanel' : LightBoxPanelLayout, - - 'SceneOpts' : SceneOptsLayout, - ('OverlayDisplayToolBar', 'Display') : DisplayToolBarLayout, ('OverlayDisplayToolBar', 'VolumeOpts') : VolumeOptsToolBarLayout, ('OverlayDisplayToolBar', 'MaskOpts') : MaskOptsToolBarLayout, @@ -275,14 +153,6 @@ layouts = td.TypeDict({ ('OverlayDisplayToolBar', 'ModelOpts') : ModelOptsToolBarLayout, ('OverlayDisplayToolBar', 'LabelOpts') : LabelOptsToolBarLayout, - ('OverlayDisplayPanel', 'Display') : DisplayLayout, - ('OverlayDisplayPanel', 'VolumeOpts') : VolumeOptsLayout, - ('OverlayDisplayPanel', 'MaskOpts') : MaskOptsLayout, - ('OverlayDisplayPanel', 'RGBVectorOpts') : RGBVectorOptsLayout, - ('OverlayDisplayPanel', 'LineVectorOpts') : LineVectorOptsLayout, - ('OverlayDisplayPanel', 'ModelOpts') : ModelOptsLayout, - ('OverlayDisplayPanel', 'LabelOpts') : LabelOptsLayout, - 'OrthoToolBar' : OrthoToolBarLayout, 'LightBoxToolBar' : LightBoxToolBarLayout, @@ -296,5 +166,4 @@ locations = td.TypeDict({ 'OverlayListPanel' : aui.AUI_DOCK_BOTTOM, 'AtlasPanel' : aui.AUI_DOCK_BOTTOM, 'ImageDisplayToolBar' : aui.AUI_DOCK_TOP, - }) diff --git a/fsl/fslview/views/canvaspanel.py b/fsl/fslview/views/canvaspanel.py index 3a559c243..ef25c835b 100644 --- a/fsl/fslview/views/canvaspanel.py +++ b/fsl/fslview/views/canvaspanel.py @@ -164,8 +164,9 @@ class CanvasPanel(viewpanel.ViewPanel): """ """ - syncLocation = props.Boolean(default=True) - syncOverlayOrder = props.Boolean(default=True) + syncLocation = props.Boolean(default=True) + syncOverlayOrder = props.Boolean(default=True) + syncOverlayDisplay = props.Boolean(default=True) def __init__(self, parent, @@ -209,6 +210,7 @@ class CanvasPanel(viewpanel.ViewPanel): self.bindProps('syncOverlayOrder', displayCtx, displayCtx.getSyncPropertyName('overlayOrder')) + self.bindProps('syncOverlayDisplay', displayCtx) # If the displayCtx instance does not # have a parent, this means that it is -- GitLab