controls/DebugVariablePanel/DebugVariablePanel.py
changeset 2301 5b8a7dd43f9f
parent 2257 eb6b68c4439f
child 2437 105c20fdeb19
equal deleted inserted replaced
2300:f19788028d99 2301:5b8a7dd43f9f
    48 SECOND = 1000 * MILLISECOND  # Number of nanosecond in a second
    48 SECOND = 1000 * MILLISECOND  # Number of nanosecond in a second
    49 MINUTE = 60 * SECOND         # Number of nanosecond in a minute
    49 MINUTE = 60 * SECOND         # Number of nanosecond in a minute
    50 HOUR = 60 * MINUTE           # Number of nanosecond in a hour
    50 HOUR = 60 * MINUTE           # Number of nanosecond in a hour
    51 DAY = 24 * HOUR              # Number of nanosecond in a day
    51 DAY = 24 * HOUR              # Number of nanosecond in a day
    52 
    52 
    53 # List of values possible for graph range
       
    54 # Format is [(time_in_plain_text, value_in_nanosecond),...]
       
    55 RANGE_VALUES = \
       
    56     [(_("%dms") % i, i * MILLISECOND) for i in (10, 20, 50, 100, 200, 500)] + \
       
    57     [(_("%ds") % i, i * SECOND) for i in (1, 2, 5, 10, 20, 30)] + \
       
    58     [(_("%dm") % i, i * MINUTE) for i in (1, 2, 5, 10, 20, 30)] + \
       
    59     [(_("%dh") % i, i * HOUR) for i in (1, 2, 3, 6, 12, 24)]
       
    60 
       
    61 # Scrollbar increment in pixel
    53 # Scrollbar increment in pixel
    62 SCROLLBAR_UNIT = 10
    54 SCROLLBAR_UNIT = 10
    63 
    55 
    64 
    56 
    65 def compute_mask(x, y):
    57 def compute_mask(x, y):
   187         consumers
   179         consumers
   188         @param window: Reference to Beremiz frame
   180         @param window: Reference to Beremiz frame
   189         """
   181         """
   190         wx.Panel.__init__(self, parent, style=wx.SP_3D | wx.TAB_TRAVERSAL)
   182         wx.Panel.__init__(self, parent, style=wx.SP_3D | wx.TAB_TRAVERSAL)
   191 
   183 
       
   184         # List of values possible for graph range
       
   185         # Format is [(time_in_plain_text, value_in_nanosecond),...]
       
   186         self.RANGE_VALUES = [(_("%dms") % i, i * MILLISECOND) for i in (10, 20, 50, 100, 200, 500)] + \
       
   187                             [(_("%ds") % i, i * SECOND) for i in (1, 2, 5, 10, 20, 30)] + \
       
   188                             [(_("%dm") % i, i * MINUTE) for i in (1, 2, 5, 10, 20, 30)] + \
       
   189                             [(_("%dh") % i, i * HOUR) for i in (1, 2, 3, 6, 12, 24)]
       
   190 
   192         # Save Reference to Beremiz frame
   191         # Save Reference to Beremiz frame
   193         self.ParentWindow = window
   192         self.ParentWindow = window
   194 
   193 
   195         # Variable storing flag indicating that variable displayed in table
   194         # Variable storing flag indicating that variable displayed in table
   196         # received new value and then table need to be refreshed
   195         # received new value and then table need to be refreshed
   231                                         border=5,
   230                                         border=5,
   232                                         flag=wx.LEFT | wx.ALIGN_CENTER_VERTICAL)
   231                                         flag=wx.LEFT | wx.ALIGN_CENTER_VERTICAL)
   233 
   232 
   234         self.CanvasRange.Clear()
   233         self.CanvasRange.Clear()
   235         default_range_idx = 0
   234         default_range_idx = 0
   236         for idx, (text, _value) in enumerate(RANGE_VALUES):
   235         for idx, (text, _value) in enumerate(self.RANGE_VALUES):
   237             self.CanvasRange.Append(text)
   236             self.CanvasRange.Append(text)
   238             if _value == 1000000000:
   237             if _value == 1000000000:
   239                 default_range_idx = idx
   238                 default_range_idx = idx
   240         self.CanvasRange.SetSelection(default_range_idx)
   239         self.CanvasRange.SetSelection(default_range_idx)
   241 
   240 
   305         # Set ticktime to millisecond if undefined
   304         # Set ticktime to millisecond if undefined
   306         if self.Ticktime == 0:
   305         if self.Ticktime == 0:
   307             self.Ticktime = MILLISECOND
   306             self.Ticktime = MILLISECOND
   308 
   307 
   309         # Calculate range to apply to data
   308         # Calculate range to apply to data
   310         self.CurrentRange = RANGE_VALUES[
   309         self.CurrentRange = self.RANGE_VALUES[
   311             self.CanvasRange.GetSelection()][1] / self.Ticktime
   310             self.CanvasRange.GetSelection()][1] / self.Ticktime
   312 
   311 
   313     def SetDataProducer(self, producer):
   312     def SetDataProducer(self, producer):
   314         """
   313         """
   315         Set Data Producer
   314         Set Data Producer
   612         self.CanvasPosition.SetScrollbar(pos, self.CurrentRange, range, self.CurrentRange)
   611         self.CanvasPosition.SetScrollbar(pos, self.CurrentRange, range, self.CurrentRange)
   613 
   612 
   614     def ChangeRange(self, dir, tick=None):
   613     def ChangeRange(self, dir, tick=None):
   615         current_range = self.CurrentRange
   614         current_range = self.CurrentRange
   616         current_range_idx = self.CanvasRange.GetSelection()
   615         current_range_idx = self.CanvasRange.GetSelection()
   617         new_range_idx = max(0, min(current_range_idx + dir, len(RANGE_VALUES) - 1))
   616         new_range_idx = max(0, min(current_range_idx + dir, len(self.RANGE_VALUES) - 1))
   618         if new_range_idx != current_range_idx:
   617         if new_range_idx != current_range_idx:
   619             self.CanvasRange.SetSelection(new_range_idx)
   618             self.CanvasRange.SetSelection(new_range_idx)
   620             self.CurrentRange = RANGE_VALUES[new_range_idx][1] / self.Ticktime
   619             self.CurrentRange = self.RANGE_VALUES[new_range_idx][1] / self.Ticktime
   621             if len(self.Ticks) > 0:
   620             if len(self.Ticks) > 0:
   622                 if tick is None:
   621                 if tick is None:
   623                     tick = self.StartTick + self.CurrentRange / 2.
   622                     tick = self.StartTick + self.CurrentRange / 2.
   624                 new_start_tick = min(tick - (tick - self.StartTick) * self.CurrentRange / current_range,
   623                 new_start_tick = min(tick - (tick - self.StartTick) * self.CurrentRange / current_range,
   625                                      self.Ticks[-1] - self.CurrentRange)
   624                                      self.Ticks[-1] - self.CurrentRange)
   637                 self.StartTick = max(self.Ticks[0], self.Ticks[-1] - self.CurrentRange)
   636                 self.StartTick = max(self.Ticks[0], self.Ticks[-1] - self.CurrentRange)
   638         self.ForceRefresh()
   637         self.ForceRefresh()
   639 
   638 
   640     def OnRangeChanged(self, event):
   639     def OnRangeChanged(self, event):
   641         try:
   640         try:
   642             self.CurrentRange = RANGE_VALUES[self.CanvasRange.GetSelection()][1] / self.Ticktime
   641             self.CurrentRange = self.RANGE_VALUES[self.CanvasRange.GetSelection()][1] / self.Ticktime
   643         except ValueError:
   642         except ValueError:
   644             self.CanvasRange.SetValue(str(self.CurrentRange))
   643             self.CanvasRange.SetValue(str(self.CurrentRange))
   645         wx.CallAfter(self.RefreshRange)
   644         wx.CallAfter(self.RefreshRange)
   646         event.Skip()
   645         event.Skip()
   647 
   646