controls/DebugVariablePanel/DebugVariablePanel.py
changeset 1768 691083b5682a
parent 1766 c1e5b9f19483
child 1770 449fd504a711
equal deleted inserted replaced
1767:c74815729afd 1768:691083b5682a
   228         graphics_button_sizer.AddWindow(range_label, flag=wx.ALIGN_CENTER_VERTICAL)
   228         graphics_button_sizer.AddWindow(range_label, flag=wx.ALIGN_CENTER_VERTICAL)
   229 
   229 
   230         self.CanvasRange = wx.ComboBox(self, style=wx.CB_READONLY)
   230         self.CanvasRange = wx.ComboBox(self, style=wx.CB_READONLY)
   231         self.Bind(wx.EVT_COMBOBOX, self.OnRangeChanged, self.CanvasRange)
   231         self.Bind(wx.EVT_COMBOBOX, self.OnRangeChanged, self.CanvasRange)
   232         graphics_button_sizer.AddWindow(self.CanvasRange, 1,
   232         graphics_button_sizer.AddWindow(self.CanvasRange, 1,
   233               border=5, flag=wx.LEFT | wx.ALIGN_CENTER_VERTICAL)
   233                                         border=5,
       
   234                                         flag=wx.LEFT | wx.ALIGN_CENTER_VERTICAL)
   234 
   235 
   235         self.CanvasRange.Clear()
   236         self.CanvasRange.Clear()
   236         default_range_idx = 0
   237         default_range_idx = 0
   237         for idx, (text, value) in enumerate(RANGE_VALUES):
   238         for idx, (text, value) in enumerate(RANGE_VALUES):
   238             self.CanvasRange.Append(text)
   239             self.CanvasRange.Append(text)
   241         self.CanvasRange.SetSelection(default_range_idx)
   242         self.CanvasRange.SetSelection(default_range_idx)
   242 
   243 
   243         for name, bitmap, help in [
   244         for name, bitmap, help in [
   244                 ("CurrentButton",     "current",      _("Go to current value")),
   245                 ("CurrentButton",     "current",      _("Go to current value")),
   245                 ("ExportGraphButton", "export_graph", _("Export graph values to clipboard"))]:
   246                 ("ExportGraphButton", "export_graph", _("Export graph values to clipboard"))]:
   246             button = wx.lib.buttons.GenBitmapButton(self,
   247             button = wx.lib.buttons.GenBitmapButton(
   247                   bitmap=GetBitmap(bitmap),
   248                 self, bitmap=GetBitmap(bitmap),
   248                   size=wx.Size(28, 28), style=wx.NO_BORDER)
   249                 size=wx.Size(28, 28), style=wx.NO_BORDER)
   249             button.SetToolTipString(help)
   250             button.SetToolTipString(help)
   250             setattr(self, name, button)
   251             setattr(self, name, button)
   251             self.Bind(wx.EVT_BUTTON, getattr(self, "On" + name), button)
   252             self.Bind(wx.EVT_BUTTON, getattr(self, "On" + name), button)
   252             graphics_button_sizer.AddWindow(button, border=5, flag=wx.LEFT)
   253             graphics_button_sizer.AddWindow(button, border=5, flag=wx.LEFT)
   253 
   254 
   254         self.CanvasPosition = wx.ScrollBar(self,
   255         self.CanvasPosition = wx.ScrollBar(
   255               size=wx.Size(0, 16), style=wx.SB_HORIZONTAL)
   256             self, size=wx.Size(0, 16), style=wx.SB_HORIZONTAL)
   256         self.CanvasPosition.Bind(wx.EVT_SCROLL_THUMBTRACK,
   257         self.CanvasPosition.Bind(wx.EVT_SCROLL_THUMBTRACK,
   257               self.OnPositionChanging, self.CanvasPosition)
   258                                  self.OnPositionChanging, self.CanvasPosition)
   258         self.CanvasPosition.Bind(wx.EVT_SCROLL_LINEUP,
   259         self.CanvasPosition.Bind(wx.EVT_SCROLL_LINEUP,
   259               self.OnPositionChanging, self.CanvasPosition)
   260                                  self.OnPositionChanging, self.CanvasPosition)
   260         self.CanvasPosition.Bind(wx.EVT_SCROLL_LINEDOWN,
   261         self.CanvasPosition.Bind(wx.EVT_SCROLL_LINEDOWN,
   261               self.OnPositionChanging, self.CanvasPosition)
   262                                  self.OnPositionChanging, self.CanvasPosition)
   262         self.CanvasPosition.Bind(wx.EVT_SCROLL_PAGEUP,
   263         self.CanvasPosition.Bind(wx.EVT_SCROLL_PAGEUP,
   263               self.OnPositionChanging, self.CanvasPosition)
   264                                  self.OnPositionChanging, self.CanvasPosition)
   264         self.CanvasPosition.Bind(wx.EVT_SCROLL_PAGEDOWN,
   265         self.CanvasPosition.Bind(wx.EVT_SCROLL_PAGEDOWN,
   265               self.OnPositionChanging, self.CanvasPosition)
   266                                  self.OnPositionChanging, self.CanvasPosition)
   266         main_sizer.AddWindow(self.CanvasPosition, border=5, flag=wx.GROW | wx.LEFT | wx.RIGHT | wx.BOTTOM)
   267         main_sizer.AddWindow(self.CanvasPosition, border=5, flag=wx.GROW | wx.LEFT | wx.RIGHT | wx.BOTTOM)
   267 
   268 
   268         self.TickSizer = wx.BoxSizer(wx.HORIZONTAL)
   269         self.TickSizer = wx.BoxSizer(wx.HORIZONTAL)
   269         main_sizer.AddSizer(self.TickSizer, border=5, flag=wx.ALL | wx.GROW)
   270         main_sizer.AddSizer(self.TickSizer, border=5, flag=wx.ALL | wx.GROW)
   270 
   271 
   386         self.UpdateCursorTick()
   387         self.UpdateCursorTick()
   387 
   388 
   388     def MoveCursorTick(self, move):
   389     def MoveCursorTick(self, move):
   389         if self.CursorTick is not None:
   390         if self.CursorTick is not None:
   390             cursor_tick = max(self.Ticks[0],
   391             cursor_tick = max(self.Ticks[0],
   391                           min(self.CursorTick + move,
   392                               min(self.CursorTick + move, self.Ticks[-1]))
   392                               self.Ticks[-1]))
       
   393             cursor_tick_idx = numpy.argmin(numpy.abs(self.Ticks - cursor_tick))
   393             cursor_tick_idx = numpy.argmin(numpy.abs(self.Ticks - cursor_tick))
   394             if self.Ticks[cursor_tick_idx] == self.CursorTick:
   394             if self.Ticks[cursor_tick_idx] == self.CursorTick:
   395                 cursor_tick_idx = max(0,
   395                 cursor_tick_idx = max(0,
   396                                   min(cursor_tick_idx + abs(move) / move,
   396                                       min(cursor_tick_idx + abs(move) / move,
   397                                       len(self.Ticks) - 1))
   397                                           len(self.Ticks) - 1))
   398             self.CursorTick = self.Ticks[cursor_tick_idx]
   398             self.CursorTick = self.Ticks[cursor_tick_idx]
   399             self.StartTick = max(self.Ticks[
   399             self.StartTick = max(
   400                                 numpy.argmin(numpy.abs(self.Ticks -
   400                 self.Ticks[numpy.argmin(
   401                                         self.CursorTick + self.CurrentRange))],
   401                     numpy.abs(self.Ticks - self.CursorTick + self.CurrentRange))],
   402                              min(self.StartTick, self.CursorTick))
   402                 min(self.StartTick, self.CursorTick))
   403             self.RefreshCanvasPosition()
   403             self.RefreshCanvasPosition()
   404             self.UpdateCursorTick()
   404             self.UpdateCursorTick()
   405 
   405 
   406     def ResetCursorTick(self):
   406     def ResetCursorTick(self):
   407         self.CursorTick = None
   407         self.CursorTick = None
   735     def ResetVariableNameMask(self):
   735     def ResetVariableNameMask(self):
   736         items = []
   736         items = []
   737         for panel in self.GraphicPanels:
   737         for panel in self.GraphicPanels:
   738             items.extend(panel.GetItems())
   738             items.extend(panel.GetItems())
   739         if len(items) > 1:
   739         if len(items) > 1:
   740             self.VariableNameMask = reduce(compute_mask,
   740             self.VariableNameMask = reduce(
   741                 [item.GetVariable().split('.') for item in items])
   741                 compute_mask, [item.GetVariable().split('.') for item in items])
   742         elif len(items) > 0:
   742         elif len(items) > 0:
   743             self.VariableNameMask = items[0].GetVariable().split('.')[:-1] + ['*']
   743             self.VariableNameMask = items[0].GetVariable().split('.')[:-1] + ['*']
   744         else:
   744         else:
   745             self.VariableNameMask = []
   745             self.VariableNameMask = []
   746         self.MaskLabel.ChangeValue(".".join(self.VariableNameMask))
   746         self.MaskLabel.ChangeValue(".".join(self.VariableNameMask))
   932         vwidth, vheight = self.GraphicsSizer.GetMinSize()
   932         vwidth, vheight = self.GraphicsSizer.GetMinSize()
   933         posx = max(0, min(xstart, (vwidth - window_size[0]) / SCROLLBAR_UNIT))
   933         posx = max(0, min(xstart, (vwidth - window_size[0]) / SCROLLBAR_UNIT))
   934         posy = max(0, min(ystart, (vheight - window_size[1]) / SCROLLBAR_UNIT))
   934         posy = max(0, min(ystart, (vheight - window_size[1]) / SCROLLBAR_UNIT))
   935         self.GraphicsWindow.Scroll(posx, posy)
   935         self.GraphicsWindow.Scroll(posx, posy)
   936         self.GraphicsWindow.SetScrollbars(SCROLLBAR_UNIT, SCROLLBAR_UNIT,
   936         self.GraphicsWindow.SetScrollbars(SCROLLBAR_UNIT, SCROLLBAR_UNIT,
   937                 vwidth / SCROLLBAR_UNIT, vheight / SCROLLBAR_UNIT, posx, posy)
   937                                           vwidth / SCROLLBAR_UNIT, vheight / SCROLLBAR_UNIT,
       
   938                                           posx, posy)
   938 
   939 
   939     def OnGraphicsWindowEraseBackground(self, event):
   940     def OnGraphicsWindowEraseBackground(self, event):
   940         pass
   941         pass
   941 
   942 
   942     def OnGraphicsWindowPaint(self, event):
   943     def OnGraphicsWindowPaint(self, event):