controls/DebugVariablePanel.py
changeset 1192 d8783c0c7d80
parent 1191 5237f87e035f
equal deleted inserted replaced
1191:5237f87e035f 1192:d8783c0c7d80
  1430     def __init__(self, parent, producer, window):
  1430     def __init__(self, parent, producer, window):
  1431         wx.Panel.__init__(self, parent, style=wx.SP_3D|wx.TAB_TRAVERSAL)
  1431         wx.Panel.__init__(self, parent, style=wx.SP_3D|wx.TAB_TRAVERSAL)
  1432         
  1432         
  1433         self.ParentWindow = window
  1433         self.ParentWindow = window
  1434         
  1434         
  1435         DebugViewer.__init__(self, producer, True)
       
  1436         
       
  1437         self.HasNewData = False
  1435         self.HasNewData = False
  1438         self.Force = False
  1436         self.Force = False
  1439         
  1437         
  1440         if USE_MPL:
  1438         if USE_MPL:
  1441             self.SetBackgroundColour(wx.WHITE)
  1439             self.SetBackgroundColour(wx.WHITE)
  1464             self.Bind(wx.EVT_COMBOBOX, self.OnRangeChanged, self.CanvasRange)
  1462             self.Bind(wx.EVT_COMBOBOX, self.OnRangeChanged, self.CanvasRange)
  1465             graphics_button_sizer.AddWindow(self.CanvasRange, 1, 
  1463             graphics_button_sizer.AddWindow(self.CanvasRange, 1, 
  1466                   border=5, flag=wx.LEFT|wx.ALIGN_CENTER_VERTICAL)
  1464                   border=5, flag=wx.LEFT|wx.ALIGN_CENTER_VERTICAL)
  1467             
  1465             
  1468             self.CanvasRange.Clear()
  1466             self.CanvasRange.Clear()
  1469             for text, value in RANGE_VALUES:
  1467             default_range_idx = 0
       
  1468             for idx, (text, value) in enumerate(RANGE_VALUES):
  1470                 self.CanvasRange.Append(text)
  1469                 self.CanvasRange.Append(text)
  1471             self.CanvasRange.SetStringSelection(RANGE_VALUES[6][0])
  1470                 if text == "1s":
  1472             self.CurrentRange = RANGE_VALUES[6][1] / self.Ticktime
  1471                     default_range_idx = idx
       
  1472             self.CanvasRange.SetSelection(default_range_idx)
  1473             
  1473             
  1474             for name, bitmap, help in [
  1474             for name, bitmap, help in [
  1475                 ("CurrentButton", "current", _("Go to current value")),
  1475                 ("CurrentButton", "current", _("Go to current value")),
  1476                 ("ExportGraphButton", "export_graph", _("Export graph values to clipboard"))]:
  1476                 ("ExportGraphButton", "export_graph", _("Export graph values to clipboard"))]:
  1477                 button = wx.lib.buttons.GenBitmapButton(self, 
  1477                 button = wx.lib.buttons.GenBitmapButton(self, 
  1584                 self.VariablesGrid.SetColSize(col, self.GridColSizes[col])
  1584                 self.VariablesGrid.SetColSize(col, self.GridColSizes[col])
  1585             
  1585             
  1586             self.Table.ResetView(self.VariablesGrid)
  1586             self.Table.ResetView(self.VariablesGrid)
  1587             self.VariablesGrid.RefreshButtons()
  1587             self.VariablesGrid.RefreshButtons()
  1588         
  1588         
       
  1589         DebugViewer.__init__(self, producer, True)
       
  1590         
  1589         self.SetSizer(main_sizer)
  1591         self.SetSizer(main_sizer)
  1590         
  1592     
       
  1593     def SetTickTime(self, ticktime=0):
       
  1594         if USE_MPL:
       
  1595             self.Ticktime = ticktime
       
  1596             if self.Ticktime == 0:
       
  1597                 self.Ticktime = MILLISECOND
       
  1598             self.CurrentRange = RANGE_VALUES[
       
  1599                 self.CanvasRange.GetSelection()][1] / self.Ticktime
       
  1600     
  1591     def SetDataProducer(self, producer):
  1601     def SetDataProducer(self, producer):
  1592         DebugViewer.SetDataProducer(self, producer)
  1602         DebugViewer.SetDataProducer(self, producer)
  1593         
  1603         
  1594         if USE_MPL:
  1604         if USE_MPL:
  1595             if self.DataProducer is not None:
  1605             if self.DataProducer is not None:
  1596                 self.Ticktime = self.DataProducer.GetTicktime()
  1606                 self.SetTickTime(self.DataProducer.GetTicktime())
  1597             else:
       
  1598                 self.Ticktime = MILLISECOND
       
  1599     
  1607     
  1600     def RefreshNewData(self, *args, **kwargs):
  1608     def RefreshNewData(self, *args, **kwargs):
  1601         if self.HasNewData or self.Force:
  1609         if self.HasNewData or self.Force:
  1602             self.HasNewData = False
  1610             self.HasNewData = False
  1603             self.RefreshView(only_values=True)
  1611             self.RefreshView(only_values=True)
  1642     def MoveCursorTick(self, move):
  1650     def MoveCursorTick(self, move):
  1643         if self.CursorTick is not None:
  1651         if self.CursorTick is not None:
  1644             cursor_tick = max(self.Ticks[0], 
  1652             cursor_tick = max(self.Ticks[0], 
  1645                           min(self.CursorTick + move, 
  1653                           min(self.CursorTick + move, 
  1646                               self.Ticks[-1]))
  1654                               self.Ticks[-1]))
  1647             self.CursorTick = self.Ticks[
  1655             cursor_tick_idx = numpy.argmin(numpy.abs(self.Ticks - cursor_tick))
  1648                 numpy.argmin(numpy.abs(self.Ticks - cursor_tick))]
  1656             if self.Ticks[cursor_tick_idx] == self.CursorTick:
       
  1657                 cursor_tick_idx = max(0, 
       
  1658                                   min(cursor_tick_idx + abs(move) / move, 
       
  1659                                       len(self.Ticks) - 1))
       
  1660             self.CursorTick = self.Ticks[cursor_tick_idx]
  1649             self.StartTick = max(self.Ticks[
  1661             self.StartTick = max(self.Ticks[
  1650                                 numpy.argmin(numpy.abs(self.Ticks - 
  1662                                 numpy.argmin(numpy.abs(self.Ticks - 
  1651                                         self.CursorTick + self.CurrentRange))],
  1663                                         self.CursorTick + self.CurrentRange))],
  1652                              min(self.StartTick, self.CursorTick))
  1664                              min(self.StartTick, self.CursorTick))
  1653             self.RefreshCanvasPosition()
  1665             self.RefreshCanvasPosition()
  1804                 tick = self.Ticks[-1]
  1816                 tick = self.Ticks[-1]
  1805             else:
  1817             else:
  1806                 tick = None
  1818                 tick = None
  1807             if tick is not None:
  1819             if tick is not None:
  1808                 self.TickLabel.SetLabel("Tick: %d" % tick)
  1820                 self.TickLabel.SetLabel("Tick: %d" % tick)
  1809                 if self.Ticktime > 0:
  1821                 tick_duration = int(tick * self.Ticktime)
  1810                     tick_duration = int(tick * self.Ticktime)
  1822                 not_null = False
  1811                     not_null = False
  1823                 duration = ""
  1812                     duration = ""
  1824                 for value, format in [(tick_duration / DAY, "%dd"),
  1813                     for value, format in [(tick_duration / DAY, "%dd"),
  1825                                       ((tick_duration % DAY) / HOUR, "%dh"),
  1814                                           ((tick_duration % DAY) / HOUR, "%dh"),
  1826                                       ((tick_duration % HOUR) / MINUTE, "%dm"),
  1815                                           ((tick_duration % HOUR) / MINUTE, "%dm"),
  1827                                       ((tick_duration % MINUTE) / SECOND, "%ds")]:
  1816                                           ((tick_duration % MINUTE) / SECOND, "%ds")]:
       
  1817                         
       
  1818                         if value > 0 or not_null:
       
  1819                             duration += format % value
       
  1820                             not_null = True
       
  1821                     
  1828                     
  1822                     duration += "%gms" % (float(tick_duration % SECOND) / MILLISECOND) 
  1829                     if value > 0 or not_null:
  1823                     self.TickTimeLabel.SetLabel("t: %s" % duration)
  1830                         duration += format % value
  1824                 else:
  1831                         not_null = True
  1825                     self.TickTimeLabel.SetLabel("")
  1832                 
       
  1833                 duration += "%gms" % (float(tick_duration % SECOND) / MILLISECOND) 
       
  1834                 self.TickTimeLabel.SetLabel("t: %s" % duration)
  1826             else:
  1835             else:
  1827                 self.TickLabel.SetLabel("")
  1836                 self.TickLabel.SetLabel("")
  1828                 self.TickTimeLabel.SetLabel("")
  1837                 self.TickTimeLabel.SetLabel("")
  1829             self.TickSizer.Layout()
  1838             self.TickSizer.Layout()
  1830         else:
  1839         else:
  1843         
  1852         
  1844     def UnregisterObsoleteData(self):
  1853     def UnregisterObsoleteData(self):
  1845         self.SubscribeAllDataConsumers()
  1854         self.SubscribeAllDataConsumers()
  1846         if USE_MPL:
  1855         if USE_MPL:
  1847             if self.DataProducer is not None:
  1856             if self.DataProducer is not None:
  1848                 self.Ticktime = self.DataProducer.GetTicktime()
  1857                 if self.DataProducer is not None:
       
  1858                     self.SetTickTime(self.DataProducer.GetTicktime())
  1849             
  1859             
  1850             for panel in self.GraphicPanels:
  1860             for panel in self.GraphicPanels:
  1851                 panel.UnregisterObsoleteData()
  1861                 panel.UnregisterObsoleteData()
  1852                 if panel.IsEmpty():
  1862                 if panel.IsEmpty():
  1853                     if panel.HasCapture():
  1863                     if panel.HasCapture():