GraphicViewer.py
changeset 724 57b6446d54f8
parent 722 8c098eb05498
child 726 300ced19d03c
equal deleted inserted replaced
723:5df934c273e1 724:57b6446d54f8
    73                 return plot.PlotCanvas._axisInterval(self.Canvas, spec, lower, upper)
    73                 return plot.PlotCanvas._axisInterval(self.Canvas, spec, lower, upper)
    74         self.Canvas._axisInterval = _axisInterval
    74         self.Canvas._axisInterval = _axisInterval
    75         self.Canvas.SetYSpec('border')
    75         self.Canvas.SetYSpec('border')
    76         self.Canvas.canvas.Bind(wx.EVT_LEFT_DOWN, self.OnCanvasLeftDown)
    76         self.Canvas.canvas.Bind(wx.EVT_LEFT_DOWN, self.OnCanvasLeftDown)
    77         self.Canvas.canvas.Bind(wx.EVT_LEFT_UP, self.OnCanvasLeftUp)
    77         self.Canvas.canvas.Bind(wx.EVT_LEFT_UP, self.OnCanvasLeftUp)
       
    78         self.Canvas.canvas.Bind(wx.EVT_MIDDLE_DOWN, self.OnCanvasMiddleDown)
       
    79         self.Canvas.canvas.Bind(wx.EVT_MIDDLE_UP, self.OnCanvasMiddleUp)
    78         self.Canvas.canvas.Bind(wx.EVT_MOTION, self.OnCanvasMotion)
    80         self.Canvas.canvas.Bind(wx.EVT_MOTION, self.OnCanvasMotion)
    79         self.Canvas.canvas.Bind(wx.EVT_MOUSEWHEEL, self.OnCanvasMouseWheel)
    81         self.Canvas.canvas.Bind(wx.EVT_MOUSEWHEEL, self.OnCanvasMouseWheel)
    80         self.Canvas.canvas.Bind(wx.EVT_SIZE, self.OnCanvasResize)
    82         self.Canvas.canvas.Bind(wx.EVT_SIZE, self.OnCanvasResize)
    81         main_sizer.AddWindow(self.Canvas, 0, border=0, flag=wx.GROW)
    83         main_sizer.AddWindow(self.Canvas, 0, border=0, flag=wx.GROW)
    82         
    84         
    83         range_sizer = wx.FlexGridSizer(cols=9, hgap=5, rows=1, vgap=0)
    85         range_sizer = wx.FlexGridSizer(cols=10, hgap=5, rows=1, vgap=0)
    84         range_sizer.AddGrowableCol(5)
    86         range_sizer.AddGrowableCol(5)
    85         range_sizer.AddGrowableRow(0)
    87         range_sizer.AddGrowableRow(0)
    86         main_sizer.AddSizer(range_sizer, 0, border=5, flag=wx.GROW|wx.ALL)
    88         main_sizer.AddSizer(range_sizer, 0, border=5, flag=wx.GROW|wx.ALL)
    87         
    89         
    88         range_label = wx.StaticText(self.Editor, label=_('Range:'))
    90         range_label = wx.StaticText(self.Editor, label=_('Range:'))
   129               bitmap=GetBitmap("current"), size=wx.Size(28, 28), style=wx.NO_BORDER)
   131               bitmap=GetBitmap("current"), size=wx.Size(28, 28), style=wx.NO_BORDER)
   130         self.CurrentButton.SetToolTipString(_("Go to current value"))
   132         self.CurrentButton.SetToolTipString(_("Go to current value"))
   131         self.Bind(wx.EVT_BUTTON, self.OnCurrentButton, self.CurrentButton)
   133         self.Bind(wx.EVT_BUTTON, self.OnCurrentButton, self.CurrentButton)
   132         range_sizer.AddWindow(self.CurrentButton, 0, border=0, flag=0)
   134         range_sizer.AddWindow(self.CurrentButton, 0, border=0, flag=0)
   133         
   135         
       
   136         self.ResetZoomOffsetButton = wx.lib.buttons.GenBitmapButton(self.Editor, 
       
   137               bitmap=GetBitmap("fit"), size=wx.Size(28, 28), style=wx.NO_BORDER)
       
   138         self.CurrentButton.SetToolTipString(_("Reset zoom and offset"))
       
   139         self.Bind(wx.EVT_BUTTON, self.OnResetZoomOffsetButton, 
       
   140               self.ResetZoomOffsetButton)
       
   141         range_sizer.AddWindow(self.ResetZoomOffsetButton, 0, border=0, flag=0)
       
   142         
   134         self.ExportGraphButton = wx.lib.buttons.GenBitmapButton(self.Editor, 
   143         self.ExportGraphButton = wx.lib.buttons.GenBitmapButton(self.Editor, 
   135               bitmap=GetBitmap("export_graph"), size=wx.Size(28, 28), style=wx.NO_BORDER)
   144               bitmap=GetBitmap("export_graph"), size=wx.Size(28, 28), style=wx.NO_BORDER)
   136         self.ExportGraphButton.SetToolTipString(_("Export graph values to clipboard"))
   145         self.ExportGraphButton.SetToolTipString(_("Export graph values to clipboard"))
   137         self.Bind(wx.EVT_BUTTON, self.OnExportGraphButtonClick, 
   146         self.Bind(wx.EVT_BUTTON, self.OnExportGraphButtonClick, 
   138                 self.ExportGraphButton)
   147                 self.ExportGraphButton)
   160         self.StartIdx = 0
   169         self.StartIdx = 0
   161         self.EndIdx = 0
   170         self.EndIdx = 0
   162         self.MinValue = None
   171         self.MinValue = None
   163         self.MaxValue = None
   172         self.MaxValue = None
   164         self.YCenter = 0
   173         self.YCenter = 0
   165         self.CurrentZoom = 1
   174         self.CurrentZoom = 1.0
   166         self.Fixed = False
   175         self.Fixed = False
   167         self.Ticktime = self.DataProducer.GetTicktime()
   176         self.Ticktime = self.DataProducer.GetTicktime()
   168         self.RefreshCanvasRange()
   177         self.RefreshCanvasRange()
   169         
   178         
   170         for zoom_txt, zoom in ZOOM_VALUES:
   179         for zoom_txt, zoom in ZOOM_VALUES:
   283     
   292     
   284     def IsViewing(self, tagname):
   293     def IsViewing(self, tagname):
   285         return self.InstancePath == tagname
   294         return self.InstancePath == tagname
   286     
   295     
   287     def NewValue(self, tick, value, forced=False):
   296     def NewValue(self, tick, value, forced=False):
   288         self.Datas.append((float(tick), {True:1., False:0.}.get(value, float(value))))
   297         value = {True:1., False:0.}.get(value, float(value))
       
   298         self.Datas.append((float(tick), value))
   289         if self.MinValue is None:
   299         if self.MinValue is None:
   290             self.MinValue = value
   300             self.MinValue = value
   291         else:
   301         else:
   292             self.MinValue = min(self.MinValue, value)
   302             self.MinValue = min(self.MinValue, value)
   293         if self.MaxValue is None:
   303         if self.MaxValue is None:
   338         self.CurrentZoom = ZOOM_VALUES[self.CanvasZoom.GetSelection()][1]
   348         self.CurrentZoom = ZOOM_VALUES[self.CanvasZoom.GetSelection()][1]
   339         wx.CallAfter(self.RefreshView, True)
   349         wx.CallAfter(self.RefreshView, True)
   340         event.Skip()
   350         event.Skip()
   341     
   351     
   342     def OnPositionChanging(self, event):
   352     def OnPositionChanging(self, event):
   343         self.ResetBounds()
   353         if len(self.Datas) > 0:
   344         self.StartTick = self.Datas[0][0] + event.GetPosition()
   354             self.ResetBounds()
   345         self.Fixed = True
   355             self.StartTick = self.Datas[0][0] + event.GetPosition()
   346         self.NewDataAvailable(True)
   356             self.Fixed = True
       
   357             self.NewDataAvailable(True)
   347         event.Skip()
   358         event.Skip()
   348 
   359 
   349     def OnResetButton(self, event):
   360     def OnResetButton(self, event):
   350         self.Fixed = False
   361         self.Fixed = False
   351         self.ResetView()
   362         self.ResetView()
   352         event.Skip()
   363         event.Skip()
   353 
   364 
   354     def OnCurrentButton(self, event):
   365     def OnCurrentButton(self, event):
   355         self.ResetBounds()
   366         if len(self.Datas) > 0:
   356         self.StartTick = max(self.Datas[0][0], self.Datas[-1][0] - self.CurrentRange)
   367             self.ResetBounds()
   357         self.Fixed = False
   368             self.StartTick = max(self.Datas[0][0], self.Datas[-1][0] - self.CurrentRange)
   358         self.NewDataAvailable(True)
   369             self.Fixed = False
       
   370             self.NewDataAvailable(True)
       
   371         event.Skip()
       
   372     
       
   373     def OnResetZoomOffsetButton(self, event):
       
   374         if len(self.Datas) > 0:
       
   375             self.YCenter = (self.MaxValue + self.MinValue) / 2
       
   376         else:
       
   377             self.YCenter = 0.0
       
   378         self.CurrentZoom = 1.0
       
   379         self.CanvasZoom.SetSelection(0)
       
   380         wx.CallAfter(self.RefreshView, True)
   359         event.Skip()
   381         event.Skip()
   360     
   382     
   361     def OnExportGraphButtonClick(self, event):
   383     def OnExportGraphButtonClick(self, event):
   362         data_copy = self.Datas[:]
   384         data_copy = self.Datas[:]
   363         text = "tick;%s;\n" % self.InstancePath
   385         text = "tick;%s;\n" % self.InstancePath
   378             elif self.Mode == MODE_MOTION:
   400             elif self.Mode == MODE_MOTION:
   379                 self.GetBounds()
   401                 self.GetBounds()
   380                 self.CurrentMousePos = event.GetPosition()
   402                 self.CurrentMousePos = event.GetPosition()
   381                 self.CurrentMotionValue = self.Datas[self.StartIdx][0]
   403                 self.CurrentMotionValue = self.Datas[self.StartIdx][0]
   382         event.Skip()
   404         event.Skip()
   383         
   405     
   384     def OnCanvasLeftUp(self, event):
   406     def OnCanvasLeftUp(self, event):
   385         self.Dragging = False
   407         self.Dragging = False
   386         if self.Mode == MODE_MOTION:
   408         if self.Mode == MODE_MOTION:
   387             self.CurrentMousePos = None
   409             self.CurrentMousePos = None
   388             self.CurrentMotionValue = None
   410             self.CurrentMotionValue = None
       
   411         if self.Canvas.canvas.HasCapture():
       
   412             self.Canvas.canvas.ReleaseMouse()
       
   413         event.Skip()
       
   414     
       
   415     def OnCanvasMiddleDown(self, event):
       
   416         self.Fixed = True
       
   417         self.Canvas.canvas.CaptureMouse()
       
   418         if len(self.Datas) > 0:
       
   419             self.GetBounds()
       
   420             self.CurrentMousePos = event.GetPosition()
       
   421             self.CurrentMotionValue = self.Datas[self.StartIdx][0]
       
   422         event.Skip()
       
   423         
       
   424     def OnCanvasMiddleUp(self, event):
       
   425         self.CurrentMousePos = None
       
   426         self.CurrentMotionValue = None
   389         if self.Canvas.canvas.HasCapture():
   427         if self.Canvas.canvas.HasCapture():
   390             self.Canvas.canvas.ReleaseMouse()
   428             self.Canvas.canvas.ReleaseMouse()
   391         event.Skip()
   429         event.Skip()
   392         
   430         
   393     def OnCanvasMotion(self, event):
   431     def OnCanvasMotion(self, event):