controls/DebugVariablePanel/DebugVariablePanel.py
branchwxPython4
changeset 3303 0ffb41625592
parent 2742 5f7445b582d4
child 3659 278dc1144059
equal deleted inserted replaced
3302:c89fc366bebd 3303:0ffb41625592
   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):