GraphicViewer.py
changeset 586 9aa96a36cf33
parent 504 f88e0ebd8fe4
child 632 3ea55a5db68e
equal deleted inserted replaced
585:bd8c7a033b17 586:9aa96a36cf33
    23 #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    23 #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    24 
    24 
    25 import wx
    25 import wx
    26 import wx.lib.plot as plot
    26 import wx.lib.plot as plot
    27 from graphics.GraphicCommons import DebugViewer
    27 from graphics.GraphicCommons import DebugViewer
    28 
    28 from controls import EditorPanel
    29 
    29 
    30 colours = ['blue', 'red', 'green', 'yellow', 'orange', 'purple', 'brown', 'cyan',
    30 colours = ['blue', 'red', 'green', 'yellow', 'orange', 'purple', 'brown', 'cyan',
    31            'pink', 'grey']
    31            'pink', 'grey']
    32 markers = ['circle', 'dot', 'square', 'triangle', 'triangle_down', 'cross', 'plus', 'circle']
    32 markers = ['circle', 'dot', 'square', 'triangle', 'triangle_down', 'cross', 'plus', 'circle']
    33 
    33 
    43  ID_GRAPHICVIEWERCANVASRANGE, ID_GRAPHICVIEWERCANVASPOSITION,
    43  ID_GRAPHICVIEWERCANVASRANGE, ID_GRAPHICVIEWERCANVASPOSITION,
    44  ID_GRAPHICVIEWERRESETBUTTON, ID_GRAPHICVIEWERCURRENTBUTTON, 
    44  ID_GRAPHICVIEWERRESETBUTTON, ID_GRAPHICVIEWERCURRENTBUTTON, 
    45  ID_GRAPHICVIEWERSTATICTEXT1, ID_GRAPHICVIEWERSTATICTEXT2,
    45  ID_GRAPHICVIEWERSTATICTEXT1, ID_GRAPHICVIEWERSTATICTEXT2,
    46 ] = [wx.NewId() for _init_ctrls in range(8)]
    46 ] = [wx.NewId() for _init_ctrls in range(8)]
    47 
    47 
    48 class GraphicViewer(wx.Panel, DebugViewer):
    48 class GraphicViewer(EditorPanel, DebugViewer):
    49 
    49 
    50     def _init_coll_MainGridSizer_Items(self, parent):
    50     def _init_coll_MainGridSizer_Items(self, parent):
    51         # generated method, don't edit
    51         # generated method, don't edit
    52         parent.AddWindow(self.Canvas, 0, border=0, flag=wx.GROW)
    52         parent.AddWindow(self.Canvas, 0, border=0, flag=wx.GROW)
    53         parent.AddSizer(self.RangeSizer, 0, border=0, flag=wx.GROW)
    53         parent.AddSizer(self.RangeSizer, 0, border=0, flag=wx.GROW)
    79         self._init_coll_MainGridSizer_Items(self.MainGridSizer)
    79         self._init_coll_MainGridSizer_Items(self.MainGridSizer)
    80         self._init_coll_MainGridSizer_Growables(self.MainGridSizer)
    80         self._init_coll_MainGridSizer_Growables(self.MainGridSizer)
    81         self._init_coll_RangeSizer_Items(self.RangeSizer)
    81         self._init_coll_RangeSizer_Items(self.RangeSizer)
    82         self._init_coll_RangeSizer_Growables(self.RangeSizer)
    82         self._init_coll_RangeSizer_Growables(self.RangeSizer)
    83         
    83         
    84         self.SetSizer(self.MainGridSizer)
    84         self.Editor.SetSizer(self.MainGridSizer)
    85     
    85     
    86     def _init_ctrls(self, prnt):
    86     def _init_Editor(self, prnt):
    87         wx.Panel.__init__(self, prnt, ID_GRAPHICVIEWER, wx.DefaultPosition, 
    87         self.Editor = wx.Panel(prnt, ID_GRAPHICVIEWER, wx.DefaultPosition, 
    88                  wx.DefaultSize, 0)
    88                  wx.DefaultSize, 0)
    89         
    89         
    90         self.Canvas = plot.PlotCanvas(id=ID_GRAPHICVIEWERCANVAS, 
    90         self.Canvas = plot.PlotCanvas(id=ID_GRAPHICVIEWERCANVAS, 
    91               name='Canvas', parent=self, pos=wx.Point(0, 0),
    91               name='Canvas', parent=self.Editor, pos=wx.Point(0, 0),
    92               size=wx.Size(0, 0), style=0)
    92               size=wx.Size(0, 0), style=0)
    93         def _axisInterval(spec, lower, upper):
    93         def _axisInterval(spec, lower, upper):
    94             if spec == 'border':
    94             if spec == 'border':
    95                 if lower == upper:
    95                 if lower == upper:
    96                     return lower - 0.5, upper + 0.5
    96                     return lower - 0.5, upper + 0.5
   101                 return plot.PlotCanvas._axisInterval(self.Canvas, spec, lower, upper)
   101                 return plot.PlotCanvas._axisInterval(self.Canvas, spec, lower, upper)
   102         self.Canvas._axisInterval = _axisInterval
   102         self.Canvas._axisInterval = _axisInterval
   103         self.Canvas.SetYSpec('border')
   103         self.Canvas.SetYSpec('border')
   104 
   104 
   105         self.staticbox1 = wx.StaticText(id=ID_GRAPHICVIEWERSTATICTEXT1,
   105         self.staticbox1 = wx.StaticText(id=ID_GRAPHICVIEWERSTATICTEXT1,
   106               label=_('Range:'), name='staticText1', parent=self,
   106               label=_('Range:'), name='staticText1', parent=self.Editor,
   107               pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
   107               pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
   108         
   108         
   109         self.CanvasRange = wx.ComboBox(id=ID_GRAPHICVIEWERCANVASRANGE,
   109         self.CanvasRange = wx.ComboBox(id=ID_GRAPHICVIEWERCANVASRANGE,
   110               name='CanvasRange', parent=self, pos=wx.Point(0, 0),
   110               name='CanvasRange', parent=self.Editor, pos=wx.Point(0, 0),
   111               size=wx.Size(100, 28), choices=RANGE_VALUES, style=0)
   111               size=wx.Size(100, 28), choices=RANGE_VALUES, style=0)
   112         self.CanvasRange.SetStringSelection("25")
   112         self.CanvasRange.SetStringSelection("25")
   113         self.Bind(wx.EVT_COMBOBOX, self.OnRangeChanged, id=ID_GRAPHICVIEWERCANVASRANGE)
   113         self.Bind(wx.EVT_COMBOBOX, self.OnRangeChanged, id=ID_GRAPHICVIEWERCANVASRANGE)
   114         self.Bind(wx.EVT_TEXT_ENTER, self.OnRangeChanged, id=ID_GRAPHICVIEWERCANVASRANGE)
   114         self.Bind(wx.EVT_TEXT_ENTER, self.OnRangeChanged, id=ID_GRAPHICVIEWERCANVASRANGE)
   115         
   115         
   116         self.staticText2 = wx.StaticText(id=ID_GRAPHICVIEWERSTATICTEXT2,
   116         self.staticText2 = wx.StaticText(id=ID_GRAPHICVIEWERSTATICTEXT2,
   117               label=_('Position:'), name='staticText2', parent=self,
   117               label=_('Position:'), name='staticText2', parent=self.Editor,
   118               pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
   118               pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
   119 
   119 
   120         self.CanvasPosition = wx.ScrollBar(id=ID_GRAPHICVIEWERCANVASPOSITION,
   120         self.CanvasPosition = wx.ScrollBar(id=ID_GRAPHICVIEWERCANVASPOSITION,
   121               name='Position', parent=self, pos=wx.Point(0, 0),
   121               name='Position', parent=self.Editor, pos=wx.Point(0, 0),
   122               size=wx.Size(0, 16), style=wx.SB_HORIZONTAL)
   122               size=wx.Size(0, 16), style=wx.SB_HORIZONTAL)
   123         self.CanvasPosition.SetScrollbar(0, 10, 100, 10)
   123         self.CanvasPosition.SetScrollbar(0, 10, 100, 10)
   124         self.CanvasPosition.Bind(wx.EVT_SCROLL_THUMBTRACK, self.OnPositionChanging, 
   124         self.CanvasPosition.Bind(wx.EVT_SCROLL_THUMBTRACK, self.OnPositionChanging, 
   125               id = ID_GRAPHICVIEWERCANVASPOSITION)
   125               id = ID_GRAPHICVIEWERCANVASPOSITION)
   126         self.CanvasPosition.Bind(wx.EVT_SCROLL_LINEUP, self.OnPositionChanging, 
   126         self.CanvasPosition.Bind(wx.EVT_SCROLL_LINEUP, self.OnPositionChanging, 
   131               id = ID_GRAPHICVIEWERCANVASPOSITION)
   131               id = ID_GRAPHICVIEWERCANVASPOSITION)
   132         self.CanvasPosition.Bind(wx.EVT_SCROLL_PAGEDOWN, self.OnPositionChanging, 
   132         self.CanvasPosition.Bind(wx.EVT_SCROLL_PAGEDOWN, self.OnPositionChanging, 
   133               id = ID_GRAPHICVIEWERCANVASPOSITION)
   133               id = ID_GRAPHICVIEWERCANVASPOSITION)
   134         
   134         
   135         self.ResetButton = wx.Button(id=ID_GRAPHICVIEWERRESETBUTTON, label='Reset',
   135         self.ResetButton = wx.Button(id=ID_GRAPHICVIEWERRESETBUTTON, label='Reset',
   136               name='ResetButton', parent=self, pos=wx.Point(0, 0),
   136               name='ResetButton', parent=self.Editor, pos=wx.Point(0, 0),
   137               size=wx.Size(72, 24), style=0)
   137               size=wx.Size(72, 24), style=0)
   138         self.Bind(wx.EVT_BUTTON, self.OnResetButton, id=ID_GRAPHICVIEWERRESETBUTTON)
   138         self.Bind(wx.EVT_BUTTON, self.OnResetButton, id=ID_GRAPHICVIEWERRESETBUTTON)
   139         
   139         
   140         self.CurrentButton = wx.Button(id=ID_GRAPHICVIEWERCURRENTBUTTON, label='Current',
   140         self.CurrentButton = wx.Button(id=ID_GRAPHICVIEWERCURRENTBUTTON, label='Current',
   141               name='CurrentButton', parent=self, pos=wx.Point(0, 0),
   141               name='CurrentButton', parent=self.Editor, pos=wx.Point(0, 0),
   142               size=wx.Size(72, 24), style=0)
   142               size=wx.Size(72, 24), style=0)
   143         self.Bind(wx.EVT_BUTTON, self.OnCurrentButton, id=ID_GRAPHICVIEWERCURRENTBUTTON)
   143         self.Bind(wx.EVT_BUTTON, self.OnCurrentButton, id=ID_GRAPHICVIEWERCURRENTBUTTON)
   144         
   144         
   145         self._init_sizers()
   145         self._init_sizers()
   146 
   146 
   147     def __init__(self, parent, window, producer, instancepath = ""):
   147     def __init__(self, parent, window, producer, instancepath = ""):
   148         self._init_ctrls(parent)
   148         EditorPanel.__init__(self, parent, "", window, None)
   149         DebugViewer.__init__(self, producer, True, False)
   149         DebugViewer.__init__(self, producer, True, False)
   150         
   150         
   151         self.ParentWindow = window
       
   152         self.InstancePath = instancepath
   151         self.InstancePath = instancepath
   153 
   152 
   154         self.Datas = []
   153         self.Datas = []
   155         self.CurrentValue = 0
   154         self.CurrentValue = 0
   156         self.CurrentRange = 25
   155         self.CurrentRange = 25
   158         self.AddDataConsumer(self.InstancePath.upper(), self)
   157         self.AddDataConsumer(self.InstancePath.upper(), self)
   159     
   158     
   160     def __del__(self):
   159     def __del__(self):
   161         DebugViewer.__del__(self)
   160         DebugViewer.__del__(self)
   162         self.RemoveDataConsumer(self)
   161         self.RemoveDataConsumer(self)
       
   162     
       
   163     def GetTitle(self):
       
   164         if len(self.InstancePath) > 15:
       
   165             return "..." + self.InstancePath[-12:]
       
   166         return self.InstancePath
   163     
   167     
   164     def ResetView(self):
   168     def ResetView(self):
   165         self.Datas = []
   169         self.Datas = []
   166         self.CurrentValue = 0
   170         self.CurrentValue = 0
   167         self.RefreshView()
   171         self.RefreshView()
   190                 end = 25.
   194                 end = 25.
   191             self.Canvas.Draw(self.GraphicsObject, xAxis=(start, end))
   195             self.Canvas.Draw(self.GraphicsObject, xAxis=(start, end))
   192         self.RefreshScrollBar()
   196         self.RefreshScrollBar()
   193         self.Thaw()
   197         self.Thaw()
   194     
   198     
   195     def SetMode(self, mode):
       
   196         pass
       
   197     
       
   198     def GetTagName(self):
       
   199         return ""
       
   200     
       
   201     def GetInstancePath(self):
   199     def GetInstancePath(self):
   202         return self.InstancePath
   200         return self.InstancePath
   203     
   201     
   204     def IsViewing(self, tagname):
   202     def IsViewing(self, tagname):
   205         return self.InstancePath == tagname
   203         return self.InstancePath == tagname
   206     
       
   207     def ResetBuffer(self):
       
   208         pass
       
   209     
       
   210     def RefreshScaling(self, refresh=True):
       
   211         pass
       
   212     
       
   213     def SelectAll(self):
       
   214         pass
       
   215     
       
   216     def ClearErrors(self):
       
   217         pass
       
   218     
   204     
   219     def NewValue(self, tick, value, forced=False):
   205     def NewValue(self, tick, value, forced=False):
   220         self.Datas.append((float(tick), {True:1., False:0.}.get(value, float(value))))
   206         self.Datas.append((float(tick), {True:1., False:0.}.get(value, float(value))))
   221         if self.CurrentValue + self.CurrentRange == len(self.Datas) - 1:
   207         if self.CurrentValue + self.CurrentRange == len(self.Datas) - 1:
   222             self.CurrentValue += 1
   208             self.CurrentValue += 1