From 2d43d9e26a8dc398864d7e0a3e04d6a8d40b3a05 Mon Sep 17 00:00:00 2001
From: Paul McCarthy <pauld.mccarthy@gmail.com>
Date: Wed, 28 Oct 2015 12:03:58 +0000
Subject: [PATCH] TimeSeriesListPanel updated to work with refactored
 TimeSeriesPanel. Some work to go.

---
 fsl/fsleyes/controls/timeserieslistpanel.py | 80 ++++++++++++---------
 fsl/fsleyes/plotting/__init__.py            | 18 +++++
 2 files changed, 66 insertions(+), 32 deletions(-)

diff --git a/fsl/fsleyes/controls/timeserieslistpanel.py b/fsl/fsleyes/controls/timeserieslistpanel.py
index 234a3eb0a..86f406b41 100644
--- a/fsl/fsleyes/controls/timeserieslistpanel.py
+++ b/fsl/fsleyes/controls/timeserieslistpanel.py
@@ -10,17 +10,15 @@
 """
 
 
-import          copy
-
 import          wx
 import numpy as np
 
-import                                    props
-import pwidgets.elistbox               as elistbox
-import fsl.fsleyes.panel               as fslpanel
-import fsl.fsleyes.tooltips            as fsltooltips
-import fsl.data.strings                as strings
-import fsl.fsleyes.colourmaps          as fslcm
+import                           props
+import pwidgets.elistbox      as elistbox
+import fsl.fsleyes.panel      as fslpanel
+import fsl.fsleyes.tooltips   as fsltooltips
+import fsl.fsleyes.plotting   as plotting
+import fsl.data.strings       as strings
 
 
 class TimeSeriesListPanel(fslpanel.FSLEyesPanel):
@@ -152,37 +150,48 @@ class TimeSeriesListPanel(fslpanel.FSLEyesPanel):
         :class:`.TimeSeriesPanel` (see the :class:`.TimeSeriesPanel` class
         documentation).
         """
+
+        overlay = self._displayCtx.getSelectedOverlay()
         
-        import fsl.fsleyes.views.timeseriespanel as tsp
+        if overlay is None:
+            return
         
-        ts = self.__tsPanel.getCurrent()
+        ts = self.__tsPanel.getTimeSeries(overlay)
 
         if ts is None:
             return
 
-        ts           = copy.copy(ts)
+        if isinstance(ts, plotting.FEATTimeSeries):
+            toAdd = list(ts.getModelTimeSeries())
+        else:
+            toAdd = [ts]
 
-        ts.alpha     = 1
-        ts.lineWidth = 2
-        ts.lineStyle = '-'
-        ts.colour    = fslcm.randomColour()
-        ts.label     = self.__makeLabel(ts)
+        copies = []
 
-        self.__tsPanel.dataSeries.append(ts)
+        for ts in toAdd:
 
-        if isinstance(ts, tsp.FEATTimeSeries):
-            
-            modelTs = ts.getModelTimeSeries()
-            modelTs.remove(ts)
+            copy = plotting.DataSeries(ts.overlay)
 
-            for mts in modelTs:
+            copy.alpha     = ts.alpha
+            copy.lineWidth = ts.lineWidth
+            copy.lineStyle = ts.lineStyle
+            copy.colour    = ts.colour
+            copy.label     = ts.label
 
-                mts.alpha     = 1
-                mts.lineWidth = 2
-                mts.lineStyle = '-'
-                mts.label     = mts.makeLabel()
+            copy.setData(*ts.getData())
 
-            self.__tsPanel.dataSeries.extend(modelTs)
+            # This is hacky, and is here in order to
+            # make the __onLIstSelect method work.
+            if isinstance(ts, plotting.MelodicTimeSeries):
+                copy.tsLoc = 'volume'
+                copy.coord = ts.getComponent()
+            else:
+                copy.tsLoc = 'location'
+                copy.coord = ts.getVoxel()
+
+            copies.append(copy)
+
+        self.__tsPanel.dataSeries.extend(copies)
 
         
     def __onListEdit(self, ev):
@@ -201,14 +210,21 @@ class TimeSeriesListPanel(fslpanel.FSLEyesPanel):
         the corresponding :class:`.TimeSeries` instance.
         """
 
-        overlay = ev.data.overlay
-        coords  = ev.data.coords
+        ts      = ev.data
+        overlay = ts.overlay 
         opts    = self._displayCtx.getOpts(overlay)
-        vox     = np.array(coords)
-        disp    = opts.transformCoords([vox], 'voxel', 'display')[0]
+
+        # See hacky things in __onListAdd
+        if ts.tsLoc == 'volume':
+            opts.volume = ts.coord
+            
+        elif ts.tsLoc == 'location':
+            voxLoc = np.array(ts.coord)
+            disLoc = opts.transformCoords([voxLoc], 'voxel', 'display')[0]
+
+            self._displayCtx.location = disLoc
 
         self._displayCtx.selectedOverlay = self._overlayList.index(overlay)
-        self._displayCtx.location        = disp
 
         
     def __onListRemove(self, ev):
diff --git a/fsl/fsleyes/plotting/__init__.py b/fsl/fsleyes/plotting/__init__.py
index e69de29bb..202ec69c2 100644
--- a/fsl/fsleyes/plotting/__init__.py
+++ b/fsl/fsleyes/plotting/__init__.py
@@ -0,0 +1,18 @@
+#!/usr/bin/env python
+#
+# __init__.py -
+#
+# Author: Paul McCarthy <pauldmccarthy@gmail.com>
+#
+
+import dataseries
+import timeseries
+
+DataSeries               = dataseries.DataSeries
+TimeSeries               = timeseries.TimeSeries 
+FEATTimeSeries           = timeseries.FEATTimeSeries
+FEATPartialFitTimeSeries = timeseries.FEATPartialFitTimeSeries
+FEATEVTimeSeries         = timeseries.FEATEVTimeSeries
+FEATResidualTimeSeries   = timeseries.FEATResidualTimeSeries
+FEATModelFitTimeSeries   = timeseries.FEATModelFitTimeSeries
+MelodicTimeSeries        = timeseries.MelodicTimeSeries
-- 
GitLab