From 6b3b5a5757bea2e89738aeaa6077abc9cb847b44 Mon Sep 17 00:00:00 2001
From: Tom Rondeau <trondeau@vt.edu>
Date: Sun, 17 Feb 2013 19:56:21 -0500
Subject: ctrlport: adding display type for stripchart as opposed to
 timeseries.

Stripcharts add data to the back of what's plotted; time series plots just plot the vector given. All single-value RPC vars have been converted to use stripchart mode.
---
 .../src/python/gnuradio/ctrlport/GrDataPlotter.py  | 101 ++++++++++++---------
 .../python/gnuradio/ctrlport/gr-ctrlport-monitor   |  14 ++-
 2 files changed, 66 insertions(+), 49 deletions(-)

(limited to 'gnuradio-core/src/python')

diff --git a/gnuradio-core/src/python/gnuradio/ctrlport/GrDataPlotter.py b/gnuradio-core/src/python/gnuradio/ctrlport/GrDataPlotter.py
index b96a47e77f..1990e21aa4 100644
--- a/gnuradio-core/src/python/gnuradio/ctrlport/GrDataPlotter.py
+++ b/gnuradio-core/src/python/gnuradio/ctrlport/GrDataPlotter.py
@@ -32,9 +32,10 @@ except ImportError:
     sys.exit(1)
 
 class GrDataPlotterC(gr.top_block):
-    def __init__(self, name, rate, pmin=None, pmax=None):
+    def __init__(self, name, rate, pmin=None, pmax=None, stripchart=False):
         gr.top_block.__init__(self)
 
+        self._stripchart = stripchart
         self._name = name
         self._npts = 500
         samp_rate = 1.0
@@ -84,33 +85,39 @@ class GrDataPlotterC(gr.top_block):
             self._npts = npts
             self.snk.reset()
         
-        # Update the plot data depending on type
-        if(type(data) == list):
-            data_r = data[0::2]
-            data_i = data[1::2]
-            data = [complex(r,i) for r,i in zip(data_r, data_i)]
-            if(len(data) > self._npts):
-                self.src.set_data(data)
-                self._last_data = data[-self._npts:]
-            else:
-                newdata = self._last_data[-(self._npts-len(data)):]
-                newdata += data
-                self.src.set_data(newdata)
-                self._last_data = newdata
-
-        else: # single value update
-            if(self._data_len < self._npts):
-                self._last_data[self._data_len] = data
-                self._data_len += 1
-            else:
-                self._last_data = self._last_data[1:]
-                self._last_data.append(data)
-            self.src.set_data(self._last_data)
+        if(self._stripchart):
+            # Update the plot data depending on type
+            if(type(data) == list):
+                data_r = data[0::2]
+                data_i = data[1::2]
+                data = [complex(r,i) for r,i in zip(data_r, data_i)]
+                if(len(data) > self._npts):
+                    self.src.set_data(data)
+                    self._last_data = data[-self._npts:]
+                else:
+                    newdata = self._last_data[-(self._npts-len(data)):]
+                    newdata += data
+                    self.src.set_data(newdata)
+                    self._last_data = newdata
+
+            else: # single value update
+                if(self._data_len < self._npts):
+                    self._last_data[self._data_len] = data
+                    self._data_len += 1
+                else:
+                    self._last_data = self._last_data[1:]
+                    self._last_data.append(data)
+                self.src.set_data(self._last_data)
+        else:
+            if(type(data) != list):
+                data = [data,]
+            self.src.set_data(data)
 
 class GrDataPlotterF(gr.top_block):
-    def __init__(self, name, rate, pmin=None, pmax=None):
+    def __init__(self, name, rate, pmin=None, pmax=None, stripchart=False):
         gr.top_block.__init__(self)
 
+        self._stripchart = stripchart
         self._name = name
         self._npts = 500
         samp_rate = 1.0
@@ -156,28 +163,32 @@ class GrDataPlotterF(gr.top_block):
                 self._last_data += (npts - self._npts)*[0,]
             self._npts = npts
             self.snk.reset()
-        
-        # Update the plot data depending on type
-        if(type(data) == list):
-            if(len(data) > self._npts):
-                self.src.set_data(data)
-                self._last_data = data[-self._npts:]
-            else:
-                newdata = self._last_data[-(self._npts-len(data)):]
-                newdata += data
-                self.src.set_data(newdata)
-                self._last_data = newdata
-
-        else: # single value update
-            if(self._data_len < self._npts):
-                self._last_data[self._data_len] = data
-                self._data_len += 1
-            else:
-                self._last_data = self._last_data[1:]
-                self._last_data.append(data)
-            self.src.set_data(self._last_data)
-
 
+        if(self._stripchart):
+            # Update the plot data depending on type
+            if(type(data) == list):
+                if(len(data) > self._npts):
+                    self.src.set_data(data)
+                    self._last_data = data[-self._npts:]
+                else:
+                    newdata = self._last_data[-(self._npts-len(data)):]
+                    newdata += data
+                    self.src.set_data(newdata)
+                    self._last_data = newdata
+
+            else: # single value update
+                if(self._data_len < self._npts):
+                    self._last_data[self._data_len] = data
+                    self._data_len += 1
+                else:
+                    self._last_data = self._last_data[1:]
+                    self._last_data.append(data)
+                self.src.set_data(self._last_data)
+        else:
+            if(type(data) != list):
+                data = [data,]
+            self.src.set_data(data)
+            
 class GrDataPlotterConst(gr.top_block):
     def __init__(self, name, rate, pmin=None, pmax=None):
         gr.top_block.__init__(self)
diff --git a/gnuradio-core/src/python/gnuradio/ctrlport/gr-ctrlport-monitor b/gnuradio-core/src/python/gnuradio/ctrlport/gr-ctrlport-monitor
index 7e3384d017..4625a2d863 100755
--- a/gnuradio-core/src/python/gnuradio/ctrlport/gr-ctrlport-monitor
+++ b/gnuradio-core/src/python/gnuradio/ctrlport/gr-ctrlport-monitor
@@ -192,6 +192,10 @@ class MAINWindow(QtGui.QMainWindow):
             self.newPlotF(tag, uid, title, pmin, pmax, True)
         elif(knobprop.display == GNURadio.DisplayType.DISPLOGTIMESERIESC):
             self.newPlotC(tag, uid, title, pmin, pmax, True)
+        elif(knobprop.display == GNURadio.DisplayType.DISPSTRIPCHARTF):
+            self.newPlotC(tag, uid, title, pmin, pmax, False, True)
+        elif(knobprop.display == GNURadio.DisplayType.DISPSTRIPCHARTC):
+            self.newPlotC(tag, uid, title, pmin, pmax, False, True)
 
     def createPlot(self, plot, uid, title):
         plot.start()
@@ -216,13 +220,15 @@ class MAINWindow(QtGui.QMainWindow):
         plot = GrDataPlotterConst(tag, 32e6, pmin, pmax)
         self.createPlot(plot, uid, title)
     
-    def newPlotF(self, tag, uid, title="", pmin=None, pmax=None, logy=False):
-        plot = GrDataPlotterF(tag, 32e6, pmin, pmax)
+    def newPlotF(self, tag, uid, title="", pmin=None, pmax=None, 
+                 logy=False, stripchart=False):
+        plot = GrDataPlotterF(tag, 32e6, pmin, pmax, stripchart)
         plot.semilogy(logy)
         self.createPlot(plot, uid, title)
 
-    def newPlotC(self, tag, uid, title="", pmin=None, pmax=None, logy=False):
-        plot = GrDataPlotterC(tag, 32e6, pmin, pmax)
+    def newPlotC(self, tag, uid, title="", pmin=None, pmax=None,
+                 logy=False, stripchart=False):
+        plot = GrDataPlotterC(tag, 32e6, pmin, pmax, stripchart)
         plot.semilogy(logy)
         self.createPlot(plot, uid, title)
 
-- 
cgit v1.2.3