diff -r 072f9f830659 -r 62570186dad4 GraphicViewer.py --- 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)