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: |