# HG changeset patch # User Laurent Bessard # Date 1369824691 -7200 # Node ID d8783c0c7d8029cec62482004244f556da572dab # Parent 5237f87e035fd1ece6063d7b145b95adf770263b Fixed bugs in DebugVariablePanel with ticktime modifications diff -r 5237f87e035f -r d8783c0c7d80 controls/DebugVariablePanel.py --- a/controls/DebugVariablePanel.py Wed May 29 11:46:33 2013 +0200 +++ b/controls/DebugVariablePanel.py Wed May 29 12:51:31 2013 +0200 @@ -1432,8 +1432,6 @@ self.ParentWindow = window - DebugViewer.__init__(self, producer, True) - self.HasNewData = False self.Force = False @@ -1466,10 +1464,12 @@ border=5, flag=wx.LEFT|wx.ALIGN_CENTER_VERTICAL) self.CanvasRange.Clear() - for text, value in RANGE_VALUES: + default_range_idx = 0 + for idx, (text, value) in enumerate(RANGE_VALUES): self.CanvasRange.Append(text) - self.CanvasRange.SetStringSelection(RANGE_VALUES[6][0]) - self.CurrentRange = RANGE_VALUES[6][1] / self.Ticktime + if text == "1s": + default_range_idx = idx + self.CanvasRange.SetSelection(default_range_idx) for name, bitmap, help in [ ("CurrentButton", "current", _("Go to current value")), @@ -1586,16 +1586,24 @@ self.Table.ResetView(self.VariablesGrid) self.VariablesGrid.RefreshButtons() + DebugViewer.__init__(self, producer, True) + self.SetSizer(main_sizer) - + + def SetTickTime(self, ticktime=0): + if USE_MPL: + self.Ticktime = ticktime + if self.Ticktime == 0: + self.Ticktime = MILLISECOND + self.CurrentRange = RANGE_VALUES[ + self.CanvasRange.GetSelection()][1] / self.Ticktime + def SetDataProducer(self, producer): DebugViewer.SetDataProducer(self, producer) if USE_MPL: if self.DataProducer is not None: - self.Ticktime = self.DataProducer.GetTicktime() - else: - self.Ticktime = MILLISECOND + self.SetTickTime(self.DataProducer.GetTicktime()) def RefreshNewData(self, *args, **kwargs): if self.HasNewData or self.Force: @@ -1644,8 +1652,12 @@ cursor_tick = max(self.Ticks[0], min(self.CursorTick + move, self.Ticks[-1])) - self.CursorTick = self.Ticks[ - numpy.argmin(numpy.abs(self.Ticks - cursor_tick))] + cursor_tick_idx = numpy.argmin(numpy.abs(self.Ticks - cursor_tick)) + if self.Ticks[cursor_tick_idx] == self.CursorTick: + cursor_tick_idx = max(0, + min(cursor_tick_idx + abs(move) / move, + len(self.Ticks) - 1)) + self.CursorTick = self.Ticks[cursor_tick_idx] self.StartTick = max(self.Ticks[ numpy.argmin(numpy.abs(self.Ticks - self.CursorTick + self.CurrentRange))], @@ -1806,23 +1818,20 @@ tick = None if tick is not None: self.TickLabel.SetLabel("Tick: %d" % tick) - if self.Ticktime > 0: - tick_duration = int(tick * self.Ticktime) - not_null = False - duration = "" - for value, format in [(tick_duration / DAY, "%dd"), - ((tick_duration % DAY) / HOUR, "%dh"), - ((tick_duration % HOUR) / MINUTE, "%dm"), - ((tick_duration % MINUTE) / SECOND, "%ds")]: - - if value > 0 or not_null: - duration += format % value - not_null = True + tick_duration = int(tick * self.Ticktime) + not_null = False + duration = "" + for value, format in [(tick_duration / DAY, "%dd"), + ((tick_duration % DAY) / HOUR, "%dh"), + ((tick_duration % HOUR) / MINUTE, "%dm"), + ((tick_duration % MINUTE) / SECOND, "%ds")]: - duration += "%gms" % (float(tick_duration % SECOND) / MILLISECOND) - self.TickTimeLabel.SetLabel("t: %s" % duration) - else: - self.TickTimeLabel.SetLabel("") + if value > 0 or not_null: + duration += format % value + not_null = True + + duration += "%gms" % (float(tick_duration % SECOND) / MILLISECOND) + self.TickTimeLabel.SetLabel("t: %s" % duration) else: self.TickLabel.SetLabel("") self.TickTimeLabel.SetLabel("") @@ -1845,7 +1854,8 @@ self.SubscribeAllDataConsumers() if USE_MPL: if self.DataProducer is not None: - self.Ticktime = self.DataProducer.GetTicktime() + if self.DataProducer is not None: + self.SetTickTime(self.DataProducer.GetTicktime()) for panel in self.GraphicPanels: panel.UnregisterObsoleteData()