116 Function called when mouse is released in Drop Target |
116 Function called when mouse is released in Drop Target |
117 @param x: X coordinate of mouse pointer |
117 @param x: X coordinate of mouse pointer |
118 @param y: Y coordinate of mouse pointer |
118 @param y: Y coordinate of mouse pointer |
119 @param data: Text associated to drag'n drop |
119 @param data: Text associated to drag'n drop |
120 """ |
120 """ |
|
121 # Signal Debug Variable Panel to reset highlight |
|
122 self.ParentWindow.ResetHighlight() |
|
123 |
121 message = None |
124 message = None |
122 |
125 |
123 # Check that data is valid regarding DebugVariablePanel |
126 # Check that data is valid regarding DebugVariablePanel |
124 try: |
127 try: |
125 values = eval(data) |
128 values = eval(data) |
202 self.Ticks = numpy.array([]) # List of tick received |
205 self.Ticks = numpy.array([]) # List of tick received |
203 self.StartTick = 0 # Tick starting range of data displayed |
206 self.StartTick = 0 # Tick starting range of data displayed |
204 self.Fixed = False # Flag that range of data is fixed |
207 self.Fixed = False # Flag that range of data is fixed |
205 self.CursorTick = None # Tick of cursor for displaying values |
208 self.CursorTick = None # Tick of cursor for displaying values |
206 |
209 |
207 # |
|
208 self.DraggingAxesPanel = None |
210 self.DraggingAxesPanel = None |
209 self.DraggingAxesBoundingBox = None |
211 self.DraggingAxesBoundingBox = None |
210 self.DraggingAxesMousePos = None |
212 self.DraggingAxesMousePos = None |
211 self.VetoScrollEvent = False |
213 self.VetoScrollEvent = False |
212 |
214 |
359 """ |
361 """ |
360 Called to force refresh of graphs |
362 Called to force refresh of graphs |
361 """ |
363 """ |
362 self.Force = True |
364 self.Force = True |
363 wx.CallAfter(self.NewDataAvailable, None, True) |
365 wx.CallAfter(self.NewDataAvailable, None, True) |
364 |
|
365 def RefreshGraphicsSizer(self): |
|
366 self.GraphicsSizer.Clear() |
|
367 |
|
368 for panel in self.GraphicPanels: |
|
369 self.GraphicsSizer.AddWindow(panel, flag=wx.GROW) |
|
370 |
|
371 self.GraphicsSizer.Layout() |
|
372 self.RefreshGraphicsWindowScrollbars() |
|
373 |
|
374 def SetCanvasPosition(self, tick): |
|
375 tick = max(self.Ticks[0], min(tick, self.Ticks[-1] - self.CurrentRange)) |
|
376 self.StartTick = self.Ticks[numpy.argmin(numpy.abs(self.Ticks - tick))] |
|
377 self.Fixed = True |
|
378 self.RefreshCanvasPosition() |
|
379 self.ForceRefresh() |
|
380 |
366 |
381 def SetCursorTick(self, cursor_tick): |
367 def SetCursorTick(self, cursor_tick): |
382 self.CursorTick = cursor_tick |
368 self.CursorTick = cursor_tick |
383 self.Fixed = cursor_tick is not None |
369 self.Fixed = cursor_tick is not None |
384 self.UpdateCursorTick() |
370 self.UpdateCursorTick() |
508 rect = wx.Rect(0, 0, width, height) |
494 rect = wx.Rect(0, 0, width, height) |
509 if rect.InsideXY(x_mouse, y_mouse): |
495 if rect.InsideXY(x_mouse, y_mouse): |
510 wx.CallAfter(self.MoveValue, variable, len(self.GraphicPanels), True) |
496 wx.CallAfter(self.MoveValue, variable, len(self.GraphicPanels), True) |
511 self.ForceRefresh() |
497 self.ForceRefresh() |
512 |
498 |
|
499 def RefreshGraphicsSizer(self): |
|
500 self.GraphicsSizer.Clear() |
|
501 |
|
502 for panel in self.GraphicPanels: |
|
503 self.GraphicsSizer.AddWindow(panel, flag=wx.GROW) |
|
504 |
|
505 self.GraphicsSizer.Layout() |
|
506 self.RefreshGraphicsWindowScrollbars() |
|
507 |
513 def RefreshView(self): |
508 def RefreshView(self): |
514 self.RefreshCanvasPosition() |
509 self.RefreshCanvasPosition() |
515 |
510 |
516 width, height = self.GraphicsWindow.GetVirtualSize() |
511 width, height = self.GraphicsWindow.GetVirtualSize() |
517 bitmap = wx.EmptyBitmap(width, height) |
512 bitmap = wx.EmptyBitmap(width, height) |
598 for panel in self.GraphicPanels: |
593 for panel in self.GraphicPanels: |
599 panel.Destroy() |
594 panel.Destroy() |
600 self.GraphicPanels = [] |
595 self.GraphicPanels = [] |
601 self.ResetVariableNameMask() |
596 self.ResetVariableNameMask() |
602 self.RefreshGraphicsSizer() |
597 self.RefreshGraphicsSizer() |
|
598 |
|
599 def SetCanvasPosition(self, tick): |
|
600 tick = max(self.Ticks[0], min(tick, self.Ticks[-1] - self.CurrentRange)) |
|
601 self.StartTick = self.Ticks[numpy.argmin(numpy.abs(self.Ticks - tick))] |
|
602 self.Fixed = True |
|
603 self.RefreshCanvasPosition() |
|
604 self.ForceRefresh() |
603 |
605 |
604 def RefreshCanvasPosition(self): |
606 def RefreshCanvasPosition(self): |
605 if len(self.Ticks) > 0: |
607 if len(self.Ticks) > 0: |
606 pos = int(self.StartTick - self.Ticks[0]) |
608 pos = int(self.StartTick - self.Ticks[0]) |
607 range = int(self.Ticks[-1] - self.Ticks[0]) |
609 range = int(self.Ticks[-1] - self.Ticks[0]) |
768 source_panel = panel |
770 source_panel = panel |
769 break |
771 break |
770 if source_panel is not None: |
772 if source_panel is not None: |
771 source_panel_idx = self.GraphicPanels.index(source_panel) |
773 source_panel_idx = self.GraphicPanels.index(source_panel) |
772 |
774 |
773 if (len(panel.GetItems()) == 1): |
775 if (len(source_panel.GetItems()) == 1): |
774 |
776 |
775 self.GraphicPanels.insert(idx, source_panel) |
777 if source_panel_idx < idx: |
776 self.GraphicPanels.pop(source_panel_idx) |
778 self.GraphicPanels.insert(idx, source_panel) |
|
779 self.GraphicPanels.pop(source_panel_idx) |
|
780 elif source_panel_idx > idx: |
|
781 self.GraphicPanels.pop(source_panel_idx) |
|
782 self.GraphicPanels.insert(idx, source_panel) |
|
783 else: |
|
784 return |
777 |
785 |
778 else: |
786 else: |
779 source_panel.RemoveItem(item) |
787 source_panel.RemoveItem(item) |
780 source_size = source_panel.GetSize() |
788 source_size = source_panel.GetSize() |
781 if item.IsNumVariable() and graph: |
789 if item.IsNumVariable() and graph: |