controls/DebugVariablePanel/DebugVariablePanel.py
changeset 2742 5f7445b582d4
parent 2741 3cc5663af196
child 3303 0ffb41625592
equal deleted inserted replaced
2741:3cc5663af196 2742:5f7445b582d4
   355             if not self.Fixed or tick < self.StartTick + self.CurrentRange:
   355             if not self.Fixed or tick < self.StartTick + self.CurrentRange:
   356                 self.StartTick = max(self.StartTick, tick - self.CurrentRange)
   356                 self.StartTick = max(self.StartTick, tick - self.CurrentRange)
   357 
   357 
   358             # Force refresh if graph is fixed because range of data received
   358             # Force refresh if graph is fixed because range of data received
   359             # is too small to fill data range selected
   359             # is too small to fill data range selected
   360             if self.Fixed and \
   360             if self.Fixed :
   361                self.Ticks.view[-1] - self.Ticks.view[0] < self.CurrentRange:
   361                 if self.Ticks.view[-1] - self.Ticks.view[0] < self.CurrentRange:
   362                 self.Force = True
   362                     self.Force = True
       
   363                 if self.Ticks.view[0] > self.StartTick:
       
   364                     self.StartTick = self.Ticks.view[0]
       
   365                     self.Force = True
       
   366 
   363 
   367 
   364             self.HasNewData = False
   368             self.HasNewData = False
   365             self.RefreshView()
   369             self.RefreshView()
   366 
   370 
   367         else:
   371         else:
   386 
   390 
   387     def MoveCursorTick(self, move):
   391     def MoveCursorTick(self, move):
   388         if self.CursorTick is not None:
   392         if self.CursorTick is not None:
   389             cursor_tick = max(self.Ticks.view[0],
   393             cursor_tick = max(self.Ticks.view[0],
   390                               min(self.CursorTick + move, self.Ticks.view[-1]))
   394                               min(self.CursorTick + move, self.Ticks.view[-1]))
   391             cursor_tick_idx = np.searchsorted(self.Ticks.view, cursor_tick)
   395             cursor_tick_idx = min(np.searchsorted(self.Ticks.view, cursor_tick), self.Ticks.count - 1)
   392             if self.Ticks.view[cursor_tick_idx] == self.CursorTick:
   396             if self.Ticks.view[cursor_tick_idx] == self.CursorTick:
   393                 cursor_tick_idx = max(0,
   397                 cursor_tick_idx = max(0,
   394                                       min(cursor_tick_idx + abs(move) // move,
   398                                       min(cursor_tick_idx + abs(move) // move,
   395                                           self.Ticks.count - 1))
   399                                           self.Ticks.count - 1))
   396             self.CursorTick = self.Ticks.view[cursor_tick_idx]
   400             self.CursorTick = self.Ticks.view[cursor_tick_idx]
   397             self.StartTick = max(
   401             self.StartTick = max(
   398                 self.Ticks.view[np.searchsorted(self.Ticks.view,  self.CursorTick + self.CurrentRange)],
   402                 self.Ticks.view[min(np.searchsorted(self.Ticks.view,  self.CursorTick - self.CurrentRange), self.Ticks.count - 1)],
   399                 min(self.StartTick, self.CursorTick))
   403                 min(self.StartTick, self.CursorTick))
   400             self.RefreshCanvasPosition()
   404             self.RefreshCanvasPosition()
   401             self.UpdateCursorTick()
   405             self.UpdateCursorTick()
   402 
   406 
   403     def ResetCursorTick(self):
   407     def ResetCursorTick(self):
   603         self.ResetVariableNameMask()
   607         self.ResetVariableNameMask()
   604         self.RefreshGraphicsSizer()
   608         self.RefreshGraphicsSizer()
   605 
   609 
   606     def SetCanvasPosition(self, tick):
   610     def SetCanvasPosition(self, tick):
   607         tick = max(self.Ticks.view[0], min(tick, self.Ticks.view[-1] - self.CurrentRange))
   611         tick = max(self.Ticks.view[0], min(tick, self.Ticks.view[-1] - self.CurrentRange))
   608         self.StartTick = self.Ticks.view[np.searchsorted(self.Ticks.view, tick)]
   612         self.StartTick = self.Ticks.view[min(np.searchsorted(self.Ticks.view, tick), self.Ticks.count - 1)]
   609         self.Fixed = True
   613         self.Fixed = True
   610         self.RefreshCanvasPosition()
   614         self.RefreshCanvasPosition()
   611         self.ForceRefresh()
   615         self.ForceRefresh()
   612 
   616 
   613     def RefreshCanvasPosition(self):
   617     def RefreshCanvasPosition(self):
   629             if self.Ticks.count > 0:
   633             if self.Ticks.count > 0:
   630                 if tick is None:
   634                 if tick is None:
   631                     tick = self.StartTick + self.CurrentRange / 2.
   635                     tick = self.StartTick + self.CurrentRange / 2.
   632                 new_start_tick = min(tick - (tick - self.StartTick) * self.CurrentRange / current_range,
   636                 new_start_tick = min(tick - (tick - self.StartTick) * self.CurrentRange / current_range,
   633                                      self.Ticks.view[-1] - self.CurrentRange)
   637                                      self.Ticks.view[-1] - self.CurrentRange)
   634                 self.StartTick = self.Ticks.view[np.searchsorted(self.Ticks.view, - new_start_tick)]
   638                 self.StartTick = self.Ticks.view[min(np.searchsorted(self.Ticks.view, new_start_tick), self.Ticks.count - 1)]
   635                 self.Fixed = new_start_tick < self.Ticks.view[-1] - self.CurrentRange
   639                 self.Fixed = new_start_tick < self.Ticks.view[-1] - self.CurrentRange
   636             self.ForceRefresh()
   640             self.ForceRefresh()
   637 
   641 
   638     def RefreshRange(self):
   642     def RefreshRange(self):
   639         if self.Ticks.count > 0:
   643         if self.Ticks.count > 0: