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