GraphicViewer.py
changeset 711 5f6a743dcde5
parent 706 9920d8c07e5e
child 714 131ea7f237b9
--- a/GraphicViewer.py	Mon Jun 11 01:30:03 2012 +0200
+++ b/GraphicViewer.py	Thu Jun 14 18:13:32 2012 +0200
@@ -22,10 +22,13 @@
 #License along with this library; if not, write to the Free Software
 #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
+import numpy
+import math
+
 import wx
 import wx.lib.plot as plot
-import numpy
-import math
+import wx.lib.buttons
+
 from graphics.GraphicCommons import DebugViewer, MODE_SELECTION, MODE_MOTION
 from controls import EditorPanel
 
@@ -48,60 +51,16 @@
                     [("%dm" % i, i * MINUTE) for i in (1, 2, 5, 10, 20, 30)] + \
                     [("%dh" % i, i * HOUR) for i in (1, 2, 3, 6, 12, 24)]
 
-[ID_GRAPHICVIEWER, ID_GRAPHICVIEWERCANVAS, 
- ID_GRAPHICVIEWERCANVASRANGE, ID_GRAPHICVIEWERCANVASZOOM, 
- ID_GRAPHICVIEWERCANVASPOSITION, ID_GRAPHICVIEWERRESETBUTTON, 
- ID_GRAPHICVIEWERCURRENTBUTTON, ID_GRAPHICVIEWERSTATICTEXT1, 
- ID_GRAPHICVIEWERSTATICTEXT2, ID_GRAPHICVIEWERSTATICTEXT3, 
-] = [wx.NewId() for _init_ctrls in range(10)]
-
 class GraphicViewer(EditorPanel, DebugViewer):
 
-    def _init_coll_MainGridSizer_Items(self, parent):
-        # generated method, don't edit
-        parent.AddWindow(self.Canvas, 0, border=0, flag=wx.GROW)
-        parent.AddSizer(self.RangeSizer, 0, border=0, flag=wx.GROW)
-    
-    def _init_coll_MainGridSizer_Growables(self, parent):
-        # generated method, don't edit
-        parent.AddGrowableCol(0)
-        parent.AddGrowableRow(0)
-
-    def _init_coll_RangeSizer_Items(self, parent):
-        # generated method, don't edit
-        parent.AddWindow(self.staticbox1, 0, border=5, flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL)
-        parent.AddWindow(self.CanvasRange, 0, border=5, flag=wx.ALL)
-        parent.AddWindow(self.staticbox3, 0, border=5, flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL)
-        parent.AddWindow(self.CanvasZoom, 0, border=5, flag=wx.ALL)
-        parent.AddWindow(self.staticText2, 0, border=5, flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL)
-        parent.AddWindow(self.CanvasPosition, 0, border=5, flag=wx.GROW|wx.ALL)
-        parent.AddWindow(self.ResetButton, 0, border=5, flag=wx.ALL)
-        parent.AddWindow(self.CurrentButton, 0, border=5, flag=wx.ALL)
-        
-    def _init_coll_RangeSizer_Growables(self, parent):
-        # generated method, don't edit
-        parent.AddGrowableCol(5)
-        parent.AddGrowableRow(0)
-        
-    def _init_sizers(self):
-        # generated method, don't edit
-        self.MainGridSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=0)
-        self.RangeSizer = wx.FlexGridSizer(cols=8, hgap=0, rows=1, vgap=0)
-
-        self._init_coll_MainGridSizer_Items(self.MainGridSizer)
-        self._init_coll_MainGridSizer_Growables(self.MainGridSizer)
-        self._init_coll_RangeSizer_Items(self.RangeSizer)
-        self._init_coll_RangeSizer_Growables(self.RangeSizer)
-        
-        self.Editor.SetSizer(self.MainGridSizer)
-    
     def _init_Editor(self, prnt):
-        self.Editor = wx.Panel(prnt, ID_GRAPHICVIEWER, wx.DefaultPosition, 
-                 wx.DefaultSize, 0)
-        
-        self.Canvas = plot.PlotCanvas(id=ID_GRAPHICVIEWERCANVAS, 
-              name='Canvas', parent=self.Editor, pos=wx.Point(0, 0),
-              size=wx.Size(0, 0), style=0)
+        self.Editor = wx.Panel(prnt)
+        
+        main_sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=0)
+        main_sizer.AddGrowableCol(0)
+        main_sizer.AddGrowableRow(0)
+        
+        self.Canvas = plot.PlotCanvas(self.Editor, name='Canvas')
         def _axisInterval(spec, lower, upper):
             if spec == 'border':
                 if lower == upper:
@@ -118,55 +77,63 @@
         self.Canvas.canvas.Bind(wx.EVT_MOTION, self.OnCanvasMotion)
         self.Canvas.canvas.Bind(wx.EVT_MOUSEWHEEL, self.OnCanvasMouseWheel)
         self.Canvas.canvas.Bind(wx.EVT_SIZE, self.OnCanvasResize)
-        
-        self.staticbox1 = wx.StaticText(id=ID_GRAPHICVIEWERSTATICTEXT1,
-              label=_('Range:'), name='staticText1', parent=self.Editor,
-              pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
-        
-        self.CanvasRange = wx.ComboBox(id=ID_GRAPHICVIEWERCANVASRANGE,
-              name='CanvasRange', parent=self.Editor, pos=wx.Point(0, 0),
+        main_sizer.AddWindow(self.Canvas, 0, border=0, flag=wx.GROW)
+        
+        range_sizer = wx.FlexGridSizer(cols=9, hgap=5, rows=1, vgap=0)
+        range_sizer.AddGrowableCol(5)
+        range_sizer.AddGrowableRow(0)
+        main_sizer.AddSizer(range_sizer, 0, border=5, flag=wx.GROW|wx.ALL)
+        
+        range_label = wx.StaticText(self.Editor, label=_('Range:'))
+        range_sizer.AddWindow(range_label, 0, border=0, flag=wx.ALIGN_CENTER_VERTICAL)
+        
+        self.CanvasRange = wx.ComboBox(self.Editor, 
               size=wx.Size(100, 28), style=wx.CB_READONLY)
-        self.Bind(wx.EVT_COMBOBOX, self.OnRangeChanged, id=ID_GRAPHICVIEWERCANVASRANGE)
-        
-        self.staticbox3 = wx.StaticText(id=ID_GRAPHICVIEWERSTATICTEXT3,
-              label=_('Zoom:'), name='staticText3', parent=self.Editor,
-              pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
-        
-        self.CanvasZoom = wx.ComboBox(id=ID_GRAPHICVIEWERCANVASZOOM,
-              name='CanvasZoom', parent=self.Editor, pos=wx.Point(0, 0),
+        self.Bind(wx.EVT_COMBOBOX, self.OnRangeChanged, self.CanvasRange)
+        range_sizer.AddWindow(self.CanvasRange, 0, border=0, flag=0)
+        
+        zoom_label = wx.StaticText(self.Editor, label=_('Zoom:'))
+        range_sizer.AddWindow(zoom_label, 0, border=0, flag=wx.ALIGN_CENTER_VERTICAL)
+        
+        self.CanvasZoom = wx.ComboBox(self.Editor, 
               size=wx.Size(70, 28), style=wx.CB_READONLY)
-        self.Bind(wx.EVT_COMBOBOX, self.OnZoomChanged, id=ID_GRAPHICVIEWERCANVASZOOM)
-        
-        self.staticText2 = wx.StaticText(id=ID_GRAPHICVIEWERSTATICTEXT2,
-              label=_('Position:'), name='staticText2', parent=self.Editor,
-              pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
-
-        self.CanvasPosition = wx.ScrollBar(id=ID_GRAPHICVIEWERCANVASPOSITION,
-              name='Position', parent=self.Editor, pos=wx.Point(0, 0),
+        self.Bind(wx.EVT_COMBOBOX, self.OnZoomChanged, self.CanvasZoom)
+        range_sizer.AddWindow(self.CanvasZoom, 0, border=0, flag=0)
+        
+        position_label = wx.StaticText(self.Editor, label=_('Position:'))
+        range_sizer.AddWindow(position_label, 0, border=0, flag=wx.ALIGN_CENTER_VERTICAL)
+        
+        self.CanvasPosition = wx.ScrollBar(self.Editor, 
               size=wx.Size(0, 16), style=wx.SB_HORIZONTAL)
         self.CanvasPosition.SetScrollbar(0, 10, 100, 10)
-        self.CanvasPosition.Bind(wx.EVT_SCROLL_THUMBTRACK, self.OnPositionChanging, 
-              id = ID_GRAPHICVIEWERCANVASPOSITION)
-        self.CanvasPosition.Bind(wx.EVT_SCROLL_LINEUP, self.OnPositionChanging, 
-              id = ID_GRAPHICVIEWERCANVASPOSITION)
-        self.CanvasPosition.Bind(wx.EVT_SCROLL_LINEDOWN, self.OnPositionChanging, 
-              id = ID_GRAPHICVIEWERCANVASPOSITION)
-        self.CanvasPosition.Bind(wx.EVT_SCROLL_PAGEUP, self.OnPositionChanging, 
-              id = ID_GRAPHICVIEWERCANVASPOSITION)
-        self.CanvasPosition.Bind(wx.EVT_SCROLL_PAGEDOWN, self.OnPositionChanging, 
-              id = ID_GRAPHICVIEWERCANVASPOSITION)
-        
-        self.ResetButton = wx.Button(id=ID_GRAPHICVIEWERRESETBUTTON, label='Reset',
-              name='ResetButton', parent=self.Editor, pos=wx.Point(0, 0),
-              size=wx.Size(72, 24), style=0)
-        self.Bind(wx.EVT_BUTTON, self.OnResetButton, id=ID_GRAPHICVIEWERRESETBUTTON)
-        
-        self.CurrentButton = wx.Button(id=ID_GRAPHICVIEWERCURRENTBUTTON, label='Current',
-              name='CurrentButton', parent=self.Editor, pos=wx.Point(0, 0),
-              size=wx.Size(72, 24), style=0)
-        self.Bind(wx.EVT_BUTTON, self.OnCurrentButton, id=ID_GRAPHICVIEWERCURRENTBUTTON)
-        
-        self._init_sizers()
+        self.CanvasPosition.Bind(wx.EVT_SCROLL_THUMBTRACK, 
+              self.OnPositionChanging, self.CanvasPosition)
+        self.CanvasPosition.Bind(wx.EVT_SCROLL_LINEUP, 
+              self.OnPositionChanging, self.CanvasPosition)
+        self.CanvasPosition.Bind(wx.EVT_SCROLL_LINEDOWN, 
+              self.OnPositionChanging, self.CanvasPosition)
+        self.CanvasPosition.Bind(wx.EVT_SCROLL_PAGEUP, 
+              self.OnPositionChanging, self.CanvasPosition)
+        self.CanvasPosition.Bind(wx.EVT_SCROLL_PAGEDOWN, 
+              self.OnPositionChanging, self.CanvasPosition)
+        range_sizer.AddWindow(self.CanvasPosition, 0, border=5, flag=wx.GROW|wx.ALL)
+        
+        self.ResetButton = wx.Button(self.Editor, label='Reset', size=wx.Size(72, 24))
+        self.Bind(wx.EVT_BUTTON, self.OnResetButton, self.ResetButton)
+        range_sizer.AddWindow(self.ResetButton, 0, border=0, flag=0)
+        
+        self.CurrentButton = wx.Button(self.Editor, label='Current', size=wx.Size(72, 24))
+        self.Bind(wx.EVT_BUTTON, self.OnCurrentButton, self.CurrentButton)
+        range_sizer.AddWindow(self.CurrentButton, 0, border=0, flag=0)
+        
+        self.ExportGraphButton = wx.lib.buttons.GenBitmapButton(self.Editor, 
+              bitmap=self.ParentWindow.GenerateBitmap("export_graph"), 
+              size=wx.Size(28, 28), style=wx.NO_BORDER)
+        self.Bind(wx.EVT_BUTTON, self.OnExportGraphButtonClick, 
+                self.ExportGraphButton)
+        range_sizer.AddWindow(self.ExportGraphButton, 0, border=0, flag=0)
+        
+        self.Editor.SetSizer(main_sizer)
 
     def __init__(self, parent, window, producer, instancepath = ""):
         EditorPanel.__init__(self, parent, "", window, None)
@@ -385,6 +352,14 @@
         self.Fixed = False
         self.NewDataAvailable(True)
         event.Skip()
+    
+    def OnExportGraphButtonClick(self, event):
+        data_copy = self.Datas[:]
+        text = "tick;%s;\n" % self.InstancePath
+        for tick, value in data_copy:
+            text += "%d;%.3f;\n" % (tick, value)
+        self.ParentWindow.SetCopyBuffer(text)
+        event.Skip()
 
     def OnCanvasLeftDown(self, event):
         self.Fixed = True