243 for text, value in TIME_RANGE_VALUES: |
243 for text, value in TIME_RANGE_VALUES: |
244 self.CanvasRange.Append(text) |
244 self.CanvasRange.Append(text) |
245 self.CanvasRange.SetStringSelection(TIME_RANGE_VALUES[0][0]) |
245 self.CanvasRange.SetStringSelection(TIME_RANGE_VALUES[0][0]) |
246 self.CurrentRange = TIME_RANGE_VALUES[0][1] / self.Ticktime |
246 self.CurrentRange = TIME_RANGE_VALUES[0][1] / self.Ticktime |
247 |
247 |
248 def RefreshView(self, force=True): |
248 def RefreshView(self, force=False): |
249 self.Freeze() |
249 self.Freeze() |
250 if force or not self.Fixed or (len(self.Datas) > 0 and self.StartTick + self.CurrentRange > self.Datas[-1][0]): |
250 if force or not self.Fixed or (len(self.Datas) > 0 and self.StartTick + self.CurrentRange > self.Datas[-1][0]): |
251 if (self.MinValue is not None and |
251 if (self.MinValue is not None and |
252 self.MaxValue is not None and |
252 self.MaxValue is not None and |
253 self.MinValue != self.MaxValue): |
253 self.MinValue != self.MaxValue): |
254 Yrange = float(self.MaxValue - self.MinValue) / self.CurrentZoom |
254 Yrange = float(self.MaxValue - self.MinValue) / self.CurrentZoom |
255 else: |
255 else: |
256 Yrange = 2. / self.CurrentZoom |
256 Yrange = 2. / self.CurrentZoom |
257 |
257 |
258 if not self.Fixed and len(self.Datas) > 0: |
258 if not force and not self.Fixed and len(self.Datas) > 0: |
259 self.YCenter = max(self.Datas[-1][1] - Yrange / 2, |
259 self.YCenter = max(self.Datas[-1][1] - Yrange / 2, |
260 min(self.YCenter, |
260 min(self.YCenter, |
261 self.Datas[-1][1] + Yrange / 2)) |
261 self.Datas[-1][1] + Yrange / 2)) |
262 |
262 |
263 var_name = self.InstancePath.split(".")[-1] |
263 var_name = self.InstancePath.split(".")[-1] |
266 self.VariableGraphic = plot.PolyLine(self.Datas[self.StartIdx:self.EndIdx + 1], |
266 self.VariableGraphic = plot.PolyLine(self.Datas[self.StartIdx:self.EndIdx + 1], |
267 legend=var_name, colour=colours[0]) |
267 legend=var_name, colour=colours[0]) |
268 self.GraphicsObject = plot.PlotGraphics([self.VariableGraphic], _("%s Graphics") % var_name, _("Tick"), _("Values")) |
268 self.GraphicsObject = plot.PlotGraphics([self.VariableGraphic], _("%s Graphics") % var_name, _("Tick"), _("Values")) |
269 self.Canvas.Draw(self.GraphicsObject, |
269 self.Canvas.Draw(self.GraphicsObject, |
270 xAxis=(self.StartTick, self.StartTick + self.CurrentRange), |
270 xAxis=(self.StartTick, self.StartTick + self.CurrentRange), |
271 yAxis=(self.YCenter - Yrange * 1.1 / 2, self.YCenter + Yrange * 1.1 / 2)) |
271 yAxis=(self.YCenter - Yrange * 1.1 / 2., self.YCenter + Yrange * 1.1 / 2.)) |
272 |
272 |
273 # Reset and draw cursor |
273 # Reset and draw cursor |
274 self.ResetLastCursor() |
274 self.ResetLastCursor() |
275 self.RefreshCursor() |
275 self.RefreshCursor() |
276 |
276 |
319 self.ResetBounds() |
319 self.ResetBounds() |
320 if self.Fixed: |
320 if self.Fixed: |
321 self.StartTick = min(self.StartTick, self.Datas[-1][0] - self.CurrentRange) |
321 self.StartTick = min(self.StartTick, self.Datas[-1][0] - self.CurrentRange) |
322 else: |
322 else: |
323 self.StartTick = max(self.Datas[0][0], self.Datas[-1][0] - self.CurrentRange) |
323 self.StartTick = max(self.Datas[0][0], self.Datas[-1][0] - self.CurrentRange) |
324 self.NewDataAvailable(True) |
324 self.RefreshView(True) |
325 |
325 |
326 def OnRangeChanged(self, event): |
326 def OnRangeChanged(self, event): |
327 try: |
327 try: |
328 if self.Ticktime == 0: |
328 if self.Ticktime == 0: |
329 self.CurrentRange = self.RangeValues[self.CanvasRange.GetSelection()][1] |
329 self.CurrentRange = self.RangeValues[self.CanvasRange.GetSelection()][1] |
334 wx.CallAfter(self.RefreshRange) |
334 wx.CallAfter(self.RefreshRange) |
335 event.Skip() |
335 event.Skip() |
336 |
336 |
337 def OnZoomChanged(self, event): |
337 def OnZoomChanged(self, event): |
338 self.CurrentZoom = ZOOM_VALUES[self.CanvasZoom.GetSelection()][1] |
338 self.CurrentZoom = ZOOM_VALUES[self.CanvasZoom.GetSelection()][1] |
339 wx.CallAfter(self.NewDataAvailable, True) |
339 wx.CallAfter(self.RefreshView, True) |
340 event.Skip() |
340 event.Skip() |
341 |
341 |
342 def OnPositionChanging(self, event): |
342 def OnPositionChanging(self, event): |
343 self.ResetBounds() |
343 self.ResetBounds() |
344 self.StartTick = self.Datas[0][0] + event.GetPosition() |
344 self.StartTick = self.Datas[0][0] + event.GetPosition() |
420 self.CurrentRange = self.RangeValues[new][1] / self.Ticktime |
420 self.CurrentRange = self.RangeValues[new][1] / self.Ticktime |
421 self.CanvasRange.SetStringSelection(self.RangeValues[new][0]) |
421 self.CanvasRange.SetStringSelection(self.RangeValues[new][0]) |
422 wx.CallAfter(self.RefreshRange) |
422 wx.CallAfter(self.RefreshRange) |
423 else: |
423 else: |
424 current = self.CanvasZoom.GetSelection() |
424 current = self.CanvasZoom.GetSelection() |
425 new = max(0, min(current - rotation, len(ZOOM_VALUES) - 1)) |
425 new = max(0, min(current + rotation, len(ZOOM_VALUES) - 1)) |
426 if new != current: |
426 if new != current: |
427 self.CurrentZoom = ZOOM_VALUES[new][1] |
427 self.CurrentZoom = ZOOM_VALUES[new][1] |
428 self.CanvasZoom.SetStringSelection(ZOOM_VALUES[new][0]) |
428 self.CanvasZoom.SetStringSelection(ZOOM_VALUES[new][0]) |
429 wx.CallAfter(self.NewDataAvailable, True) |
429 wx.CallAfter(self.RefreshView, True) |
430 event.Skip() |
430 event.Skip() |
431 |
431 |
432 def OnCanvasResize(self, event): |
432 def OnCanvasResize(self, event): |
433 self.ResetLastCursor() |
433 self.ResetLastCursor() |
434 wx.CallAfter(self.RefreshCursor) |
434 wx.CallAfter(self.RefreshCursor) |