GraphicViewer.py
changeset 632 3ea55a5db68e
parent 586 9aa96a36cf33
child 640 c32c169b8f63
equal deleted inserted replaced
631:e4dd5bf1f1db 632:3ea55a5db68e
    34 
    34 
    35 #-------------------------------------------------------------------------------
    35 #-------------------------------------------------------------------------------
    36 #                       Debug Variable Graphic Viewer class
    36 #                       Debug Variable Graphic Viewer class
    37 #-------------------------------------------------------------------------------
    37 #-------------------------------------------------------------------------------
    38 
    38 
    39 
    39 SECOND = 1000000000
    40 RANGE_VALUES = [str(25 * 2 ** i) for i in xrange(6)]
    40 MINUTE = 60 * SECOND
       
    41 HOUR = 60 * MINUTE
       
    42 
       
    43 RANGE_VALUES = [(str(25 * 2 ** i), 25 * 2 ** i) for i in xrange(6)]
       
    44 TIME_RANGE_VALUES = [("%ds" % i, i * SECOND) for i in (10, 20, 30)] + \
       
    45                     [("%dm" % i, i * MINUTE) for i in (1, 2, 5, 10, 20, 30)] + \
       
    46                     [("%dh" % i, i * HOUR) for i in (1, 2, 3, 6, 12, 24)]
    41 
    47 
    42 [ID_GRAPHICVIEWER, ID_GRAPHICVIEWERCANVAS,
    48 [ID_GRAPHICVIEWER, ID_GRAPHICVIEWERCANVAS,
    43  ID_GRAPHICVIEWERCANVASRANGE, ID_GRAPHICVIEWERCANVASPOSITION,
    49  ID_GRAPHICVIEWERCANVASRANGE, ID_GRAPHICVIEWERCANVASPOSITION,
    44  ID_GRAPHICVIEWERRESETBUTTON, ID_GRAPHICVIEWERCURRENTBUTTON, 
    50  ID_GRAPHICVIEWERRESETBUTTON, ID_GRAPHICVIEWERCURRENTBUTTON, 
    45  ID_GRAPHICVIEWERSTATICTEXT1, ID_GRAPHICVIEWERSTATICTEXT2,
    51  ID_GRAPHICVIEWERSTATICTEXT1, ID_GRAPHICVIEWERSTATICTEXT2,
   106               label=_('Range:'), name='staticText1', parent=self.Editor,
   112               label=_('Range:'), name='staticText1', parent=self.Editor,
   107               pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
   113               pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
   108         
   114         
   109         self.CanvasRange = wx.ComboBox(id=ID_GRAPHICVIEWERCANVASRANGE,
   115         self.CanvasRange = wx.ComboBox(id=ID_GRAPHICVIEWERCANVASRANGE,
   110               name='CanvasRange', parent=self.Editor, pos=wx.Point(0, 0),
   116               name='CanvasRange', parent=self.Editor, pos=wx.Point(0, 0),
   111               size=wx.Size(100, 28), choices=RANGE_VALUES, style=0)
   117               size=wx.Size(100, 28), style=0)
   112         self.CanvasRange.SetStringSelection("25")
       
   113         self.Bind(wx.EVT_COMBOBOX, self.OnRangeChanged, id=ID_GRAPHICVIEWERCANVASRANGE)
   118         self.Bind(wx.EVT_COMBOBOX, self.OnRangeChanged, id=ID_GRAPHICVIEWERCANVASRANGE)
   114         self.Bind(wx.EVT_TEXT_ENTER, self.OnRangeChanged, id=ID_GRAPHICVIEWERCANVASRANGE)
   119         self.Bind(wx.EVT_TEXT_ENTER, self.OnRangeChanged, id=ID_GRAPHICVIEWERCANVASRANGE)
   115         
   120         
   116         self.staticText2 = wx.StaticText(id=ID_GRAPHICVIEWERSTATICTEXT2,
   121         self.staticText2 = wx.StaticText(id=ID_GRAPHICVIEWERSTATICTEXT2,
   117               label=_('Position:'), name='staticText2', parent=self.Editor,
   122               label=_('Position:'), name='staticText2', parent=self.Editor,
   147     def __init__(self, parent, window, producer, instancepath = ""):
   152     def __init__(self, parent, window, producer, instancepath = ""):
   148         EditorPanel.__init__(self, parent, "", window, None)
   153         EditorPanel.__init__(self, parent, "", window, None)
   149         DebugViewer.__init__(self, producer, True, False)
   154         DebugViewer.__init__(self, producer, True, False)
   150         
   155         
   151         self.InstancePath = instancepath
   156         self.InstancePath = instancepath
   152 
   157         self.RangeValues = None
       
   158         
   153         self.Datas = []
   159         self.Datas = []
   154         self.CurrentValue = 0
   160         self.CurrentValue = 0
   155         self.CurrentRange = 25
   161         self.Ticktime = self.DataProducer.GetTicktime()
       
   162         self.RefreshCanvasRange()
   156         
   163         
   157         self.AddDataConsumer(self.InstancePath.upper(), self)
   164         self.AddDataConsumer(self.InstancePath.upper(), self)
   158     
   165     
   159     def __del__(self):
   166     def __del__(self):
   160         DebugViewer.__del__(self)
   167         DebugViewer.__del__(self)
   166         return self.InstancePath
   173         return self.InstancePath
   167     
   174     
   168     def ResetView(self):
   175     def ResetView(self):
   169         self.Datas = []
   176         self.Datas = []
   170         self.CurrentValue = 0
   177         self.CurrentValue = 0
       
   178         self.Ticktime = self.DataProducer.GetTicktime()
       
   179         self.RefreshCanvasRange()
   171         self.RefreshView()
   180         self.RefreshView()
   172     
   181     
   173     def RefreshNewData(self):
   182     def RefreshNewData(self):
   174         self.RefreshView(False)
   183         self.RefreshView(False)
   175         DebugViewer.RefreshNewData(self)
   184         DebugViewer.RefreshNewData(self)
   176     
   185     
       
   186     def RefreshCanvasRange(self):
       
   187         if self.Ticktime == 0 and self.RangeValues != RANGE_VALUES:
       
   188             self.RangeValues = RANGE_VALUES
       
   189             self.RangeValues_dict = dict(RANGE_VALUES)
       
   190             self.CanvasRange.Clear()
       
   191             for text, value in RANGE_VALUES:
       
   192                 self.CanvasRange.Append(text)
       
   193             self.CanvasRange.SetStringSelection(RANGE_VALUES[0][0])
       
   194             self.CurrentRange = RANGE_VALUES[0][1]
       
   195         elif self.RangeValues != TIME_RANGE_VALUES:
       
   196             self.RangeValues = TIME_RANGE_VALUES
       
   197             self.RangeValues_dict = dict(TIME_RANGE_VALUES)
       
   198             self.CanvasRange.Clear()
       
   199             for text, value in TIME_RANGE_VALUES:
       
   200                 self.CanvasRange.Append(text)
       
   201             self.CanvasRange.SetStringSelection(TIME_RANGE_VALUES[0][0])
       
   202             self.CurrentRange = TIME_RANGE_VALUES[0][1] / self.Ticktime
       
   203         
   177     def RefreshView(self, force=True):
   204     def RefreshView(self, force=True):
   178         self.Freeze()
   205         self.Freeze()
   179         if force or self.CurrentValue + self.CurrentRange == len(self.Datas) or self.CurrentValue + len(self.Datas) < self.CurrentRange:
   206         if force or self.CurrentValue + self.CurrentRange == len(self.Datas) or self.CurrentValue + len(self.Datas) < self.CurrentRange:
   180             var_name = self.InstancePath.split(".")[-1]
   207             var_name = self.InstancePath.split(".")[-1]
   181             
   208             
   212         self.CanvasPosition.SetScrollbar(self.CurrentValue, self.CurrentRange, len(self.Datas), self.CurrentRange)
   239         self.CanvasPosition.SetScrollbar(self.CurrentValue, self.CurrentRange, len(self.Datas), self.CurrentRange)
   213 
   240 
   214     def OnRangeChanged(self, event):
   241     def OnRangeChanged(self, event):
   215         old_range = self.CurrentRange
   242         old_range = self.CurrentRange
   216         try:
   243         try:
   217             self.CurrentRange = int(self.CanvasRange.GetValue())
   244             if self.Ticktime == 0:
       
   245                 self.CurrentRange = self.RangeValues_dict[self.CanvasRange.GetValue()]
       
   246             else:
       
   247                 self.CurrentRange = self.RangeValues_dict[self.CanvasRange.GetValue()] / self.Ticktime
   218         except ValueError, e:
   248         except ValueError, e:
   219             self.CanvasRange.SetValue(str(self.CurrentRange))
   249             self.CanvasRange.SetValue(str(self.CurrentRange))
   220         self.CurrentValue = max(0, min(self.CurrentValue + old_range - self.CurrentRange, 
   250         self.CurrentValue = max(0, min(self.CurrentValue + old_range - self.CurrentRange, 
   221                                        len(self.Datas) - self.CurrentRange))
   251                                        len(self.Datas) - self.CurrentRange))
   222         self.RefreshView()
   252         self.RefreshView()