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 |