Skip to content
Snippets Groups Projects
Commit 59ba241f authored by Paul McCarthy's avatar Paul McCarthy
Browse files

Extra options for each histogram plot available via 'More' button in

HistogramListPanel
parent 0bdad9be
No related branches found
No related tags found
No related merge requests found
...@@ -251,6 +251,13 @@ properties = TypeDict({ ...@@ -251,6 +251,13 @@ properties = TypeDict({
'HistogramPanel.showCurrent' : 'Plot histogram for current overlay', 'HistogramPanel.showCurrent' : 'Plot histogram for current overlay',
'HistogramPanel.enableOverlay' : 'Enable 3D histogram overlay', 'HistogramPanel.enableOverlay' : 'Enable 3D histogram overlay',
'HistogramSeries.nbins' : 'Number of bins',
'HistogramSeries.ignoreZeros' : 'Ignore zeros',
'HistogramSeries.volume' : 'Volume',
'HistogramSeries.allVolumes' : 'Use all volumes',
'HistogramSeries.dataRange' : 'Data range',
'OrthoEditProfile.selectionSize' : 'Selection size', 'OrthoEditProfile.selectionSize' : 'Selection size',
'OrthoEditProfile.selectionIs3D' : '3D selection', 'OrthoEditProfile.selectionIs3D' : '3D selection',
'OrthoEditProfile.fillValue' : 'Fill value', 'OrthoEditProfile.fillValue' : 'Fill value',
......
...@@ -14,11 +14,6 @@ import fsl.data.strings as strings ...@@ -14,11 +14,6 @@ import fsl.data.strings as strings
import plotcontrolpanel import plotcontrolpanel
class OverlayHistOptionsPanel(fslpanel.FSLViewPanel):
def __init__(self, parent, overlayList, displayCtx, hsPanel):
pass
class HistogramControlPanel(fslpanel.FSLViewPanel): class HistogramControlPanel(fslpanel.FSLViewPanel):
......
...@@ -8,8 +8,11 @@ ...@@ -8,8 +8,11 @@
import wx import wx
import props
import pwidgets.elistbox as elistbox import pwidgets.elistbox as elistbox
import fsl.fslview.panel as fslpanel import fsl.fslview.panel as fslpanel
import fsl.data.strings as strings
import fsl.fslview.colourmaps as fslcm import fsl.fslview.colourmaps as fslcm
import timeserieslistpanel import timeserieslistpanel
...@@ -55,10 +58,28 @@ class HistogramListPanel(fslpanel.FSLViewPanel): ...@@ -55,10 +58,28 @@ class HistogramListPanel(fslpanel.FSLViewPanel):
for hs in self.__hsPanel.dataSeries: for hs in self.__hsPanel.dataSeries:
widg = timeserieslistpanel.TimeSeriesWidget(self, hs) widg = timeserieslistpanel.TimeSeriesWidget(self, hs)
widg.more = wx.Button(widg, label='More')
widg.sizer.Add(widg.more)
widg.Layout()
widg.more.target = hs
widg.more.Bind(wx.EVT_BUTTON, self.__showHsControlPanel)
self.__hsList.Append(hs.overlay.name, self.__hsList.Append(hs.overlay.name,
clientData=hs, clientData=hs,
extraWidget=widg) extraWidget=widg)
if len(self.__hsPanel.dataSeries) > 0:
self.__hsList.SetSelection(0)
def __showHsControlPanel(self, ev):
hs = ev.GetEventObject().target
dlg = HistSeriesDialog(self, self.__hsPanel, hs)
dlg.Show()
def __onListAdd(self, ev): def __onListAdd(self, ev):
...@@ -72,6 +93,7 @@ class HistogramListPanel(fslpanel.FSLViewPanel): ...@@ -72,6 +93,7 @@ class HistogramListPanel(fslpanel.FSLViewPanel):
hs.lineStyle = '-' hs.lineStyle = '-'
hs.colour = fslcm.randomColour() hs.colour = fslcm.randomColour()
hs.label = hs.overlay.name hs.label = hs.overlay.name
self.__hsPanel.dataSeries.append(hs) self.__hsPanel.dataSeries.append(hs)
...@@ -86,3 +108,98 @@ class HistogramListPanel(fslpanel.FSLViewPanel): ...@@ -86,3 +108,98 @@ class HistogramListPanel(fslpanel.FSLViewPanel):
def __onListRemove(self, ev): def __onListRemove(self, ev):
self.__hsPanel.dataSeries.remove(ev.data) self.__hsPanel.dataSeries.remove(ev.data)
class HistSeriesDialog(wx.Dialog):
def __init__(self, parent, hsPanel, hs):
wx.Dialog.__init__(self,
parent,
title=hs.overlay.name,
style=wx.CLOSE_BOX | wx.STAY_ON_TOP)
self.__name = '{}_{}'.format(type(self).__name__, id(self))
self.__hsPanel = hsPanel
self.__hs = hs
self.__nbins = props.makeWidget(self, hs, 'nbins',
showLimits=False)
self.__ignoreZeros = props.makeWidget(self, hs, 'ignoreZeros')
self.__volume = props.makeWidget(self, hs, 'volume',
showLimits=False)
self.__allVolumes = props.makeWidget(self, hs, 'allVolumes')
self.__dataRange = props.makeWidget(self, hs, 'dataRange',
showLimits=False)
self.__nbinsLbl = wx.StaticText(self)
self.__ignoreZerosLbl = wx.StaticText(self)
self.__volumeLbl = wx.StaticText(self)
self.__allVolumesLbl = wx.StaticText(self)
self.__dataRangeLbl = wx.StaticText(self)
self.__nbinsLbl .SetLabel(strings.properties[hs, 'nbins'])
self.__ignoreZerosLbl.SetLabel(strings.properties[hs, 'ignoreZeros'])
self.__volumeLbl .SetLabel(strings.properties[hs, 'volume'])
self.__allVolumesLbl .SetLabel(strings.properties[hs, 'allVolumes'])
self.__dataRangeLbl .SetLabel(strings.properties[hs, 'dataRange'])
self.__sizer = wx.FlexGridSizer(5, 2)
self.SetSizer(self.__sizer)
self.__sizer.Add(self.__nbinsLbl, flag=wx.EXPAND)
self.__sizer.Add(self.__nbins, flag=wx.EXPAND)
self.__sizer.Add(self.__ignoreZerosLbl, flag=wx.EXPAND)
self.__sizer.Add(self.__ignoreZeros, flag=wx.EXPAND)
self.__sizer.Add(self.__volumeLbl, flag=wx.EXPAND)
self.__sizer.Add(self.__volume, flag=wx.EXPAND)
self.__sizer.Add(self.__allVolumesLbl, flag=wx.EXPAND)
self.__sizer.Add(self.__allVolumes, flag=wx.EXPAND)
self.__sizer.Add(self.__dataRangeLbl, flag=wx.EXPAND)
self.__sizer.Add(self.__dataRange, flag=wx.EXPAND)
self.__volume .Enable(hs.overlay.is4DImage())
self.__volumeLbl .Enable(hs.overlay.is4DImage())
self.__allVolumes .Enable(hs.overlay.is4DImage())
self.__allVolumesLbl.Enable(hs.overlay.is4DImage())
self.__autoBinChanged()
hsPanel.addListener('autoBin',
self.__name,
self.__autoBinChanged)
hsPanel.addListener('dataSeries',
self.__name,
self.__dataSeriesChanged)
hs .addListener('allVolumes',
self.__name,
self.__allVolumesChanged)
self.Bind(wx.EVT_WINDOW_DESTROY, self.__onDestroy)
self.Layout()
self.Fit()
self.CentreOnParent()
def __onDestroy(self, ev=None):
if ev is not None:
ev.Skip()
self.__hsPanel.removeListener('autoBin', self.__name)
self.__hs .removeListener('allVolumes', self.__name)
def __dataSeriesChanged(self, *a):
if self.__hs not in self.__hsPanel.dataSeries:
self.Close()
self.Destroy()
self.__onDestroy()
def __allVolumesChanged(self, *a):
self.__volume .Enable(not self.__hs.allVolumes)
self.__volumeLbl.Enable(not self.__hs.allVolumes)
def __autoBinChanged(self, *a):
self.__nbins .Enable(not self.__hsPanel.autoBin)
self.__nbinsLbl.Enable(not self.__hsPanel.autoBin)
...@@ -547,9 +547,9 @@ class LutLabelDialog(wx.Dialog): ...@@ -547,9 +547,9 @@ class LutLabelDialog(wx.Dialog):
self._ok.SetDefault() self._ok.SetDefault()
self.Fit()
self.Layout() self.Layout()
self.Fit()
self.CentreOnParent() self.CentreOnParent()
self.value = None self.value = None
......
...@@ -185,10 +185,10 @@ class HistogramPanel(plotpanel.PlotPanel): ...@@ -185,10 +185,10 @@ class HistogramPanel(plotpanel.PlotPanel):
self._overlayList.addListener('overlays', self._overlayList.addListener('overlays',
self._name, self._name,
self.__updateCurrent) self.__overlaysChanged)
self._displayCtx .addListener('selectedOverlay', self._displayCtx .addListener('selectedOverlay',
self._name, self._name,
self.__updateCurrent) self.draw)
# Re draw whenever any PlotPanel or # Re draw whenever any PlotPanel or
# HistogramPanel property changes. # HistogramPanel property changes.
...@@ -216,6 +216,15 @@ class HistogramPanel(plotpanel.PlotPanel): ...@@ -216,6 +216,15 @@ class HistogramPanel(plotpanel.PlotPanel):
self._overlayList.removeListener('overlays', self._name) self._overlayList.removeListener('overlays', self._name)
self._displayCtx .removeListener('selectedOverlay', self._name) self._displayCtx .removeListener('selectedOverlay', self._name)
def __overlaysChanged(self, *a):
self.disableListener('dataSeries', self._name)
for ds in self.dataSeries:
if ds.overlay not in self._overlayList:
self.dataSeries.remove(ds)
self.enableListener('dataSeries', self._name)
self.draw()
def __autoBinChanged(self, *a): def __autoBinChanged(self, *a):
"""Called when the :attr:`autoBin` property changes. Makes sure that """Called when the :attr:`autoBin` property changes. Makes sure that
...@@ -230,7 +239,6 @@ class HistogramPanel(plotpanel.PlotPanel): ...@@ -230,7 +239,6 @@ class HistogramPanel(plotpanel.PlotPanel):
self.__current.histPropsChanged() self.__current.histPropsChanged()
self.draw() self.draw()
def __updateCurrent(self, *a): def __updateCurrent(self, *a):
...@@ -239,14 +247,15 @@ class HistogramPanel(plotpanel.PlotPanel): ...@@ -239,14 +247,15 @@ class HistogramPanel(plotpanel.PlotPanel):
currentHs = self.__current currentHs = self.__current
self.__current = None self.__current = None
if len(self._overlayList) == 0: if len(self._overlayList) == 0 or \
pass not isinstance(overlay, fslimage.Image) or \
elif not isinstance(overlay, fslimage.Image): overlay in [hs.overlay for hs in self.dataSeries]:
pass return
elif overlay in [hs.overlay for hs in self.dataSeries]:
pass if currentHs is not None and \
elif currentHs is not None and overlay == currentHs.overlay: currentHs.overlay not in [hs.overlay for hs in self.dataSeries]:
self.__current = currentHs self.__current = currentHs
else: else:
hs = HistogramSeries(self, overlay) hs = HistogramSeries(self, overlay)
hs.colour = [0, 0, 0] hs.colour = [0, 0, 0]
...@@ -256,8 +265,6 @@ class HistogramPanel(plotpanel.PlotPanel): ...@@ -256,8 +265,6 @@ class HistogramPanel(plotpanel.PlotPanel):
hs.label = None hs.label = None
self.__current = hs self.__current = hs
self.draw()
def getCurrent(self): def getCurrent(self):
...@@ -266,6 +273,7 @@ class HistogramPanel(plotpanel.PlotPanel): ...@@ -266,6 +273,7 @@ class HistogramPanel(plotpanel.PlotPanel):
def draw(self, *a): def draw(self, *a):
self.__updateCurrent()
current = self.getCurrent() current = self.getCurrent()
if self.showCurrent and \ if self.showCurrent and \
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment