--- 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)