From 80d7cf45f82ecad3b8b8f154438a7c8f9d77bae8 Mon Sep 17 00:00:00 2001 From: Paul McCarthy <pauld.mccarthy@gmail.com> Date: Fri, 4 Dec 2015 14:03:42 +0000 Subject: [PATCH] All plot panels were drawing twice. Also fixed plot initialisation via an explicit call from FSLEyesFrame. --- fsl/fsleyes/frame.py | 5 +++++ fsl/fsleyes/views/histogrampanel.py | 2 ++ fsl/fsleyes/views/plotpanel.py | 4 ++-- fsl/fsleyes/views/powerspectrumpanel.py | 4 +++- fsl/fsleyes/views/timeseriespanel.py | 7 +++++++ 5 files changed, 19 insertions(+), 3 deletions(-) diff --git a/fsl/fsleyes/frame.py b/fsl/fsleyes/frame.py index 2cbf65ca3..68cc9e716 100644 --- a/fsl/fsleyes/frame.py +++ b/fsl/fsleyes/frame.py @@ -276,6 +276,11 @@ class FSLEyesFrame(wx.Frame): self.__auiManager.Update() + # PlotPanels don't draw themselves + # automatically when created. + if isinstance(panel, views.PlotPanel): + panel.draw() + self.Thaw() diff --git a/fsl/fsleyes/views/histogrampanel.py b/fsl/fsleyes/views/histogrampanel.py index b33a1db5d..4e3f799b0 100644 --- a/fsl/fsleyes/views/histogrampanel.py +++ b/fsl/fsleyes/views/histogrampanel.py @@ -149,7 +149,9 @@ class HistogramPanel(plotpanel.OverlayPlotPanel): hss = [hs for hs in hss if hs is not None] for hs in hss: + hs.disableNotification('label') hs.label = self._displayCtx.getDisplay(hs.overlay).name + hs.enableNotification('label') if self.smooth: self.drawDataSeries(hss, diff --git a/fsl/fsleyes/views/plotpanel.py b/fsl/fsleyes/views/plotpanel.py index 4bf22abdd..8350d1797 100644 --- a/fsl/fsleyes/views/plotpanel.py +++ b/fsl/fsleyes/views/plotpanel.py @@ -967,7 +967,7 @@ class OverlayPlotPanel(PlotPanel): allOverlays = self.__refreshProps.keys() allOverlays = set(allOverlays) - set(targetOverlays) allOverlays = list(allOverlays) + targetOverlays - + # Make sure that property listeners are not # registered on overlays that we're not # interested in, and are registered on those @@ -975,7 +975,7 @@ class OverlayPlotPanel(PlotPanel): # above ensures that we inadvertently don't # de-register a listener that we have just # registered, from the same target. - for overlay in allOverlays + targetOverlays: + for overlay in allOverlays: targets, propNames = self.__refreshProps.get(overlay, (None, None)) diff --git a/fsl/fsleyes/views/powerspectrumpanel.py b/fsl/fsleyes/views/powerspectrumpanel.py index 7b0fc1511..893eaebce 100644 --- a/fsl/fsleyes/views/powerspectrumpanel.py +++ b/fsl/fsleyes/views/powerspectrumpanel.py @@ -159,7 +159,9 @@ class PowerSpectrumPanel(plotpanel.OverlayPlotPanel): pss = [ps for ps in pss if ps is not None] for ps in pss: - ps.label = ps.makeLabel() + ps.disableNotification('label') + ps.label = ps.makeLabel() + ps.enableNotification('label') self.drawDataSeries(extraSeries=pss, preproc=self.__prepareSpectrumData) diff --git a/fsl/fsleyes/views/timeseriespanel.py b/fsl/fsleyes/views/timeseriespanel.py index 616cbc4b1..4bcf94758 100644 --- a/fsl/fsleyes/views/timeseriespanel.py +++ b/fsl/fsleyes/views/timeseriespanel.py @@ -210,7 +210,14 @@ class TimeSeriesPanel(plotpanel.OverlayPlotPanel): tss = tss[:i] + ts.getModelTimeSeries() + tss[i:] for ts in tss: + + # Changing the label might trigger + # another call to this method, as + # the PlotPanel might have a listener + # registered on it. + ts.disableNotification('label') ts.label = ts.makeLabel() + ts.enableNotification('label') self.drawDataSeries(extraSeries=tss, preproc=self.__prepareTimeSeriesData) -- GitLab