GraphicViewer.py
changeset 361 62570186dad4
parent 344 0acc2bd658f0
child 374 16a0a6cb1644
--- a/GraphicViewer.py	Thu May 28 08:10:18 2009 +0200
+++ b/GraphicViewer.py	Sat May 30 17:15:22 2009 +0200
@@ -24,6 +24,7 @@
 
 import wx
 import wx.lib.plot as plot
+from graphics.GraphicCommons import DebugViewer
 
 
 colours = ['blue', 'red', 'green', 'yellow', 'orange', 'purple', 'brown', 'cyan',
@@ -44,7 +45,7 @@
  ID_GRAPHICVIEWERSTATICTEXT1, ID_GRAPHICVIEWERSTATICTEXT2,
 ] = [wx.NewId() for _init_ctrls in range(8)]
 
-class GraphicViewer(wx.Panel):
+class GraphicViewer(wx.Panel, DebugViewer):
 
     def _init_coll_MainGridSizer_Items(self, parent):
         # generated method, don't edit
@@ -145,7 +146,8 @@
 
     def __init__(self, parent, window, controler, instancepath = ""):
         self._init_ctrls(parent)
-
+        DebugViewer.__init__(self, controler, True, False)
+        
         self.ParentWindow = window
         self.Controler = controler
         self.InstancePath = instancepath
@@ -154,35 +156,41 @@
         self.CurrentValue = 0
         self.CurrentRange = 25
         
-        self.Controler.SubscribeDebugIECVariable(self.InstancePath.upper(), self)
+        self.AddDataConsumer(self.InstancePath.upper(), self)
     
     def __del__(self):
-        self.Controler.UnsubscribeDebugIECVariable(self.InstancePath.upper(), self)
+        DebugViewer.__del__(self)
+        self.RemoveDataConsumer(self)
     
     def ResetView(self):
         self.Datas = []
         self.CurrentValue = 0
         self.RefreshView()
     
-    def RefreshView(self):
-        var_name = self.InstancePath.split(".")[-1]
-        
-        self.VariableGraphic = plot.PolyLine(self.Datas[self.CurrentValue:self.CurrentValue + self.CurrentRange], 
-                                             legend=var_name, colour=colours[0])
-        self.GraphicsObject = plot.PlotGraphics([self.VariableGraphic], "%s Graphics" % var_name, "Tick", "Values")
-        datas_length = len(self.Datas)
-        if datas_length > 1:
-            start = self.Datas[self.CurrentValue][0]
-            if self.CurrentValue + self.CurrentRange > datas_length:
-                end = start + (self.Datas[datas_length - 1][0] - start) * self.CurrentRange / (datas_length - self.CurrentValue - 1)
+    def RefreshNewData(self):
+        self.RefreshView(False)
+    
+    def RefreshView(self, force=True):
+        self.Freeze()
+        if force or self.CurrentValue + self.CurrentRange == len(self.Datas) or self.CurrentValue + len(self.Datas) < self.CurrentRange:
+            var_name = self.InstancePath.split(".")[-1]
+            
+            self.VariableGraphic = plot.PolyLine(self.Datas[self.CurrentValue:self.CurrentValue + self.CurrentRange], 
+                                                 legend=var_name, colour=colours[0])
+            self.GraphicsObject = plot.PlotGraphics([self.VariableGraphic], "%s Graphics" % var_name, "Tick", "Values")
+            datas_length = len(self.Datas)
+            if datas_length > 1:
+                start = self.Datas[self.CurrentValue][0]
+                if self.CurrentValue + self.CurrentRange > datas_length:
+                    end = start + (self.Datas[datas_length - 1][0] - start) * self.CurrentRange / (datas_length - self.CurrentValue - 1)
+                else:
+                    end = self.Datas[self.CurrentValue + self.CurrentRange - 1][0]
             else:
-                end = self.Datas[self.CurrentValue + self.CurrentRange - 1][0]
-        else:
-            start = 0.
-            end = 25.
-        self.Canvas.Draw(self.GraphicsObject, xAxis=(start, end))
-        
+                start = 0.
+                end = 25.
+            self.Canvas.Draw(self.GraphicsObject, xAxis=(start, end))
         self.RefreshScrollBar()
+        self.Thaw()
     
     def SetMode(self, mode):
         pass
@@ -205,17 +213,12 @@
     def SelectAll(self):
         pass
     
-    def AddPoint(self, tick, value):
-        if self:
-            self.Datas.append((float(tick), {True:1., False:0.}.get(value, float(value))))
-            if self.CurrentValue + self.CurrentRange == len(self.Datas) - 1:
-                self.CurrentValue += 1
-                self.RefreshView()
-            elif len(self.Datas) < self.CurrentValue + self.CurrentRange:
-                self.RefreshView()
-            else:
-                self.RefreshScrollBar()
-            
+    def NewValue(self, tick, value):
+        self.Datas.append((float(tick), {True:1., False:0.}.get(value, float(value))))
+        if self.CurrentValue + self.CurrentRange == len(self.Datas) - 1:
+            self.CurrentValue += 1
+        self.NewDataAvailable()
+    
     def RefreshScrollBar(self):
         self.CanvasPosition.SetScrollbar(self.CurrentValue, self.CurrentRange, len(self.Datas), self.CurrentRange)