219 self.VariableNameMask = [] |
219 self.VariableNameMask = [] |
220 |
220 |
221 self.GraphicPanels = [] |
221 self.GraphicPanels = [] |
222 |
222 |
223 graphics_button_sizer = wx.BoxSizer(wx.HORIZONTAL) |
223 graphics_button_sizer = wx.BoxSizer(wx.HORIZONTAL) |
224 main_sizer.AddSizer(graphics_button_sizer, border=5, flag=wx.GROW | wx.ALL) |
224 main_sizer.Add(graphics_button_sizer, border=5, flag=wx.GROW | wx.ALL) |
225 |
225 |
226 range_label = wx.StaticText(self, label=_('Range:')) |
226 range_label = wx.StaticText(self, label=_('Range:')) |
227 graphics_button_sizer.AddWindow(range_label, flag=wx.ALIGN_CENTER_VERTICAL) |
227 graphics_button_sizer.Add(range_label, flag=wx.ALIGN_CENTER_VERTICAL) |
228 |
228 |
229 self.CanvasRange = wx.ComboBox(self, style=wx.CB_READONLY) |
229 self.CanvasRange = wx.ComboBox(self, style=wx.CB_READONLY) |
230 self.Bind(wx.EVT_COMBOBOX, self.OnRangeChanged, self.CanvasRange) |
230 self.Bind(wx.EVT_COMBOBOX, self.OnRangeChanged, self.CanvasRange) |
231 graphics_button_sizer.AddWindow(self.CanvasRange, 1, |
231 graphics_button_sizer.Add(self.CanvasRange, 1, |
232 border=5, |
232 border=5, |
233 flag=wx.LEFT | wx.ALIGN_CENTER_VERTICAL) |
233 flag=wx.LEFT | wx.ALIGN_CENTER_VERTICAL) |
234 |
234 |
235 self.CanvasRange.Clear() |
235 self.CanvasRange.Clear() |
236 default_range_idx = 0 |
236 default_range_idx = 0 |
244 ("CurrentButton", "current", _("Go to current value")), |
244 ("CurrentButton", "current", _("Go to current value")), |
245 ("ExportGraphButton", "export_graph", _("Export graph values to clipboard"))]: |
245 ("ExportGraphButton", "export_graph", _("Export graph values to clipboard"))]: |
246 button = wx.lib.buttons.GenBitmapButton( |
246 button = wx.lib.buttons.GenBitmapButton( |
247 self, bitmap=GetBitmap(bitmap), |
247 self, bitmap=GetBitmap(bitmap), |
248 size=wx.Size(28, 28), style=wx.NO_BORDER) |
248 size=wx.Size(28, 28), style=wx.NO_BORDER) |
249 button.SetToolTipString(help) |
249 button.SetToolTip(help) |
250 setattr(self, name, button) |
250 setattr(self, name, button) |
251 self.Bind(wx.EVT_BUTTON, getattr(self, "On" + name), button) |
251 self.Bind(wx.EVT_BUTTON, getattr(self, "On" + name), button) |
252 graphics_button_sizer.AddWindow(button, border=5, flag=wx.LEFT) |
252 graphics_button_sizer.Add(button, border=5, flag=wx.LEFT) |
253 |
253 |
254 self.CanvasPosition = wx.ScrollBar( |
254 self.CanvasPosition = wx.ScrollBar( |
255 self, size=wx.Size(0, 16), style=wx.SB_HORIZONTAL) |
255 self, size=wx.Size(0, 16), style=wx.SB_HORIZONTAL) |
256 self.CanvasPosition.Bind(wx.EVT_SCROLL_THUMBTRACK, |
256 self.CanvasPosition.Bind(wx.EVT_SCROLL_THUMBTRACK, |
257 self.OnPositionChanging, self.CanvasPosition) |
257 self.OnPositionChanging, self.CanvasPosition) |
261 self.OnPositionChanging, self.CanvasPosition) |
261 self.OnPositionChanging, self.CanvasPosition) |
262 self.CanvasPosition.Bind(wx.EVT_SCROLL_PAGEUP, |
262 self.CanvasPosition.Bind(wx.EVT_SCROLL_PAGEUP, |
263 self.OnPositionChanging, self.CanvasPosition) |
263 self.OnPositionChanging, self.CanvasPosition) |
264 self.CanvasPosition.Bind(wx.EVT_SCROLL_PAGEDOWN, |
264 self.CanvasPosition.Bind(wx.EVT_SCROLL_PAGEDOWN, |
265 self.OnPositionChanging, self.CanvasPosition) |
265 self.OnPositionChanging, self.CanvasPosition) |
266 main_sizer.AddWindow(self.CanvasPosition, border=5, flag=wx.GROW | wx.LEFT | wx.RIGHT | wx.BOTTOM) |
266 main_sizer.Add(self.CanvasPosition, border=5, flag=wx.GROW | wx.LEFT | wx.RIGHT | wx.BOTTOM) |
267 |
267 |
268 self.TickSizer = wx.BoxSizer(wx.HORIZONTAL) |
268 self.TickSizer = wx.BoxSizer(wx.HORIZONTAL) |
269 main_sizer.AddSizer(self.TickSizer, border=5, flag=wx.ALL | wx.GROW) |
269 main_sizer.Add(self.TickSizer, border=5, flag=wx.ALL | wx.GROW) |
270 |
270 |
271 self.TickLabel = wx.StaticText(self) |
271 self.TickLabel = wx.StaticText(self) |
272 self.TickSizer.AddWindow(self.TickLabel, border=5, flag=wx.RIGHT) |
272 self.TickSizer.Add(self.TickLabel, border=5, flag=wx.RIGHT) |
273 |
273 |
274 self.MaskLabel = wx.TextCtrl(self, style=wx.TE_READONLY | wx.TE_CENTER | wx.NO_BORDER) |
274 self.MaskLabel = wx.TextCtrl(self, style=wx.TE_READONLY | wx.TE_CENTER | wx.NO_BORDER) |
275 self.TickSizer.AddWindow(self.MaskLabel, 1, border=5, flag=wx.RIGHT | wx.GROW) |
275 self.TickSizer.Add(self.MaskLabel, 1, border=5, flag=wx.RIGHT | wx.GROW) |
276 |
276 |
277 self.TickTimeLabel = wx.StaticText(self) |
277 self.TickTimeLabel = wx.StaticText(self) |
278 self.TickSizer.AddWindow(self.TickTimeLabel) |
278 self.TickSizer.Add(self.TickTimeLabel) |
279 |
279 |
280 self.GraphicsWindow = wx.ScrolledWindow(self, style=wx.HSCROLL | wx.VSCROLL) |
280 self.GraphicsWindow = wx.ScrolledWindow(self, style=wx.HSCROLL | wx.VSCROLL) |
281 self.GraphicsWindow.SetBackgroundColour(wx.WHITE) |
281 self.GraphicsWindow.SetBackgroundColour(wx.WHITE) |
282 self.GraphicsWindow.SetDropTarget(DebugVariableDropTarget(self)) |
282 self.GraphicsWindow.SetDropTarget(DebugVariableDropTarget(self)) |
283 self.GraphicsWindow.Bind(wx.EVT_PAINT, self.OnGraphicsWindowPaint) |
283 self.GraphicsWindow.Bind(wx.EVT_PAINT, self.OnGraphicsWindowPaint) |
284 self.GraphicsWindow.Bind(wx.EVT_SIZE, self.OnGraphicsWindowResize) |
284 self.GraphicsWindow.Bind(wx.EVT_SIZE, self.OnGraphicsWindowResize) |
285 self.GraphicsWindow.Bind(wx.EVT_MOUSEWHEEL, self.OnGraphicsWindowMouseWheel) |
285 self.GraphicsWindow.Bind(wx.EVT_MOUSEWHEEL, self.OnGraphicsWindowMouseWheel) |
286 |
286 |
287 main_sizer.AddWindow(self.GraphicsWindow, 1, flag=wx.GROW) |
287 main_sizer.Add(self.GraphicsWindow, 1, flag=wx.GROW) |
288 |
288 |
289 self.GraphicsSizer = wx.BoxSizer(wx.VERTICAL) |
289 self.GraphicsSizer = wx.BoxSizer(wx.VERTICAL) |
290 self.GraphicsWindow.SetSizer(self.GraphicsSizer) |
290 self.GraphicsWindow.SetSizer(self.GraphicsSizer) |
291 |
291 |
292 DebugViewer.__init__(self, producer, True) |
292 DebugViewer.__init__(self, producer, True) |
439 def RefreshHighlight(self, x_mouse, y_mouse): |
439 def RefreshHighlight(self, x_mouse, y_mouse): |
440 for idx, panel in enumerate(self.GraphicPanels): |
440 for idx, panel in enumerate(self.GraphicPanels): |
441 x, y = panel.GetPosition() |
441 x, y = panel.GetPosition() |
442 width, height = panel.GetSize() |
442 width, height = panel.GetSize() |
443 rect = wx.Rect(x, y, width, height) |
443 rect = wx.Rect(x, y, width, height) |
444 if rect.InsideXY(x_mouse, y_mouse) or \ |
444 if rect.Contains(x_mouse, y_mouse) or \ |
445 idx == 0 and y_mouse < 0 or \ |
445 idx == 0 and y_mouse < 0 or \ |
446 idx == len(self.GraphicPanels) - 1 and y_mouse > panel.GetPosition()[1]: |
446 idx == len(self.GraphicPanels) - 1 and y_mouse > panel.GetPosition()[1]: |
447 panel.RefreshHighlight(x_mouse - x, y_mouse - y) |
447 panel.RefreshHighlight(x_mouse - x, y_mouse - y) |
448 else: |
448 else: |
449 panel.SetHighlight(HIGHLIGHT_NONE) |
449 panel.SetHighlight(HIGHLIGHT_NONE) |
486 for idx, panel in enumerate(self.GraphicPanels): |
486 for idx, panel in enumerate(self.GraphicPanels): |
487 panel.SetHighlight(HIGHLIGHT_NONE) |
487 panel.SetHighlight(HIGHLIGHT_NONE) |
488 xw, yw = panel.GetPosition() |
488 xw, yw = panel.GetPosition() |
489 width, height = panel.GetSize() |
489 width, height = panel.GetSize() |
490 bbox = wx.Rect(xw, yw, width, height) |
490 bbox = wx.Rect(xw, yw, width, height) |
491 if bbox.InsideXY(x_mouse, y_mouse): |
491 if bbox.Contains(x_mouse, y_mouse): |
492 panel.ShowButtons(True) |
492 panel.ShowButtons(True) |
493 merge_type = GRAPH_PARALLEL |
493 merge_type = GRAPH_PARALLEL |
494 if isinstance(panel, DebugVariableTextViewer) or panel.Is3DCanvas(): |
494 if isinstance(panel, DebugVariableTextViewer) or panel.Is3DCanvas(): |
495 if y_mouse > yw + height // 2: |
495 if y_mouse > yw + height // 2: |
496 idx += 1 |
496 idx += 1 |
497 wx.CallAfter(self.MoveValue, variable, idx, True) |
497 wx.CallAfter(self.MoveValue, variable, idx, True) |
498 else: |
498 else: |
499 rect = panel.GetAxesBoundingBox(True) |
499 rect = panel.GetAxesBoundingBox(True) |
500 if rect.InsideXY(x_mouse, y_mouse): |
500 if rect.Contains(x_mouse, y_mouse): |
501 merge_rect = wx.Rect(rect.x, rect.y, rect.width // 2, rect.height) |
501 merge_rect = wx.Rect(rect.x, rect.y, rect.width // 2, rect.height) |
502 if merge_rect.InsideXY(x_mouse, y_mouse): |
502 if merge_rect.Contains(x_mouse, y_mouse): |
503 merge_type = GRAPH_ORTHOGONAL |
503 merge_type = GRAPH_ORTHOGONAL |
504 wx.CallAfter(self.MergeGraphs, variable, idx, merge_type, force=True) |
504 wx.CallAfter(self.MergeGraphs, variable, idx, merge_type, force=True) |
505 else: |
505 else: |
506 if y_mouse > yw + height // 2: |
506 if y_mouse > yw + height // 2: |
507 idx += 1 |
507 idx += 1 |
508 wx.CallAfter(self.MoveValue, variable, idx, True) |
508 wx.CallAfter(self.MoveValue, variable, idx, True) |
509 self.ForceRefresh() |
509 self.ForceRefresh() |
510 return |
510 return |
511 width, height = self.GraphicsWindow.GetVirtualSize() |
511 width, height = self.GraphicsWindow.GetVirtualSize() |
512 rect = wx.Rect(0, 0, width, height) |
512 rect = wx.Rect(0, 0, width, height) |
513 if rect.InsideXY(x_mouse, y_mouse): |
513 if rect.Contains(x_mouse, y_mouse): |
514 wx.CallAfter(self.MoveValue, variable, len(self.GraphicPanels), True) |
514 wx.CallAfter(self.MoveValue, variable, len(self.GraphicPanels), True) |
515 self.ForceRefresh() |
515 self.ForceRefresh() |
516 |
516 |
517 def RefreshGraphicsSizer(self): |
517 def RefreshGraphicsSizer(self): |
518 self.GraphicsSizer.Clear() |
518 self.GraphicsSizer.Clear() |
519 |
519 |
520 for panel in self.GraphicPanels: |
520 for panel in self.GraphicPanels: |
521 self.GraphicsSizer.AddWindow(panel, flag=wx.GROW) |
521 self.GraphicsSizer.Add(panel, flag=wx.GROW) |
522 |
522 |
523 self.GraphicsSizer.Layout() |
523 self.GraphicsSizer.Layout() |
524 self.RefreshGraphicsWindowScrollbars() |
524 self.RefreshGraphicsWindowScrollbars() |
525 |
525 |
526 def RefreshView(self): |
526 def RefreshView(self): |