PLCOpenEditor.py
changeset 577 9dbb79722fbc
parent 575 a7c706b9492e
child 586 9aa96a36cf33
--- a/PLCOpenEditor.py	Wed Oct 12 23:47:48 2011 +0200
+++ b/PLCOpenEditor.py	Fri Oct 14 19:26:29 2011 +0200
@@ -115,6 +115,7 @@
 from PLCControler import *
 from VariablePanel import VariablePanel
 from SearchResultPanel import SearchResultPanel
+from controls import CustomGrid
 
 # Define PLCOpenEditor controls id
 [ID_PLCOPENEDITOR, ID_PLCOPENEDITORLEFTNOTEBOOK, 
@@ -181,10 +182,10 @@
              (True, FREEDRAWING_MODE|DRIVENDRAWING_MODE, 
               ID_PLCOPENEDITORTOOLBARCONNECTION, "OnConnectionTool", 
               "add_connection.png", _("Create a new connection"))],
-    "LD"  : [((True, FREEDRAWING_MODE|DRIVENDRAWING_MODE,
+    "LD"  : [(True, FREEDRAWING_MODE|DRIVENDRAWING_MODE,
               ID_PLCOPENEDITORTOOLBARMOTION, "OnMotionTool",
               "move.png", _("Move the view")),
-             True, FREEDRAWING_MODE, 
+             (True, FREEDRAWING_MODE, 
               ID_PLCOPENEDITORTOOLBARCOMMENT, "OnCommentTool", 
               "add_comment.png", _("Create a new comment")),
              (True, FREEDRAWING_MODE, 
@@ -4192,7 +4193,7 @@
               name='DebugVariablePanel', parent=prnt, pos=wx.Point(0, 0),
               size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL)
 
-        self.VariablesGrid = wx.grid.Grid(id=ID_DEBUGVARIABLEPANELVARIABLESGRID,
+        self.VariablesGrid = CustomGrid(id=ID_DEBUGVARIABLEPANELVARIABLESGRID,
               name='VariablesGrid', parent=self, pos=wx.Point(0, 0), 
               size=wx.Size(0, 150), style=wx.VSCROLL)
         self.VariablesGrid.SetFont(wx.Font(12, 77, wx.NORMAL, wx.NORMAL, False,
@@ -4203,26 +4204,21 @@
         self.VariablesGrid.SetSelectionForeground(wx.BLACK)
         self.VariablesGrid.SetDropTarget(DebugVariableDropTarget(self))
         if wx.VERSION >= (2, 6, 0):
-            self.VariablesGrid.Bind(wx.grid.EVT_GRID_SELECT_CELL, self.OnVariablesGridCellSelect)
             self.VariablesGrid.Bind(wx.grid.EVT_GRID_CELL_RIGHT_CLICK, self.OnVariablesGridCellRightClick)
         else:
-            wx.grid.EVT_GRID_SELECT_CELL(self.VariablesGrid, self.OnVariablesGridCellSelect)
             wx.grid.EVT_GRID_CELL_RIGHT_CLICK(self.VariablesGrid, self.OnVariablesGridCellRightClick)
         
         self.UpButton = wx.Button(id=ID_DEBUGVARIABLEPANELUPBUTTON, label='^',
               name='UpButton', parent=self, pos=wx.Point(0, 0),
               size=wx.Size(32, 32), style=0)
-        self.Bind(wx.EVT_BUTTON, self.OnUpButton, id=ID_DEBUGVARIABLEPANELUPBUTTON)
         
         self.DownButton = wx.Button(id=ID_DEBUGVARIABLEPANELDOWNBUTTON, label='v',
               name='DownButton', parent=self, pos=wx.Point(0, 0),
               size=wx.Size(32, 32), style=0)
-        self.Bind(wx.EVT_BUTTON, self.OnDownButton, id=ID_DEBUGVARIABLEPANELDOWNBUTTON)
         
         self.DeleteButton = wx.Button(id=ID_DEBUGVARIABLEPANELDELETEBUTTON, label=_('Delete'),
               name='DeleteButton', parent=self, pos=wx.Point(0, 0),
               size=wx.DefaultSize, style=0)
-        self.Bind(wx.EVT_BUTTON, self.OnDeleteButton, id=ID_DEBUGVARIABLEPANELDELETEBUTTON)
         
         self._init_sizers()
     
@@ -4233,6 +4229,29 @@
         
         self.Table = DebugVariableTable(self, [], GetDebugVariablesTableColnames())
         self.VariablesGrid.SetTable(self.Table)
+        self.VariablesGrid.SetButtons({"Delete": self.DeleteButton,
+                                       "Up": self.UpButton,
+                                       "Down": self.DownButton})
+        
+        def _AddVariable(new_row):
+            return self.VariablesGrid.GetGridCursorRow()
+        setattr(self.VariablesGrid, "_AddRow", _AddVariable)
+        
+        def _DeleteVariable(row):
+            item = self.Table.GetItem(row)
+            self.RemoveDataConsumer(item)
+            self.Table.RemoveItem(row)
+            self.RefreshGrid()
+        setattr(self.VariablesGrid, "_DeleteRow", _DeleteVariable)
+        
+        def _MoveVariable(row, move):
+            new_row = max(0, min(row + move, self.Table.GetNumberRows() - 1))
+            if new_row != row:
+                self.Table.MoveItem(row, new_row)
+                self.RefreshGrid()
+            return new_row
+        setattr(self.VariablesGrid, "_MoveRow", _MoveVariable)
+        
         self.VariablesGrid.SetRowLabelSize(0)
         
         for col in range(self.Table.GetNumberCols()):
@@ -4242,7 +4261,7 @@
             self.VariablesGrid.SetColSize(col, 100)
         
         self.Table.ResetView(self.VariablesGrid)
-        self.RefreshButtons()
+        self.VariablesGrid.RefreshButtons()
     
     def RefreshNewData(self):
         if self.HasNewData:
@@ -4253,6 +4272,7 @@
     def RefreshGrid(self):
         self.Freeze()
         self.Table.ResetView(self.VariablesGrid)
+        self.VariablesGrid.RefreshButtons()
         self.Thaw()
     
     def ResetGrid(self):
@@ -4260,6 +4280,7 @@
         self.Table.Empty()
         self.Freeze()
         self.Table.ResetView(self.VariablesGrid)
+        self.VariablesGrid.RefreshButtons()
         self.Thaw()
     
     def GetForceVariableMenuFunction(self, iec_path, item):
@@ -4276,10 +4297,6 @@
             self.ReleaseDataValue(iec_path)
         return ReleaseVariableFunction
     
-    def OnVariablesGridCellSelect(self, event):
-        wx.CallAfter(self.RefreshButtons)
-        event.Skip()
-    
     def OnVariablesGridCellRightClick(self, event):
         row, col = event.GetRow(), event.GetCol()
         if self.Table.GetColLabelValue(col, False) == "Value":
@@ -4299,34 +4316,6 @@
             self.PopupMenu(menu)
         event.Skip()
     
-    def RefreshButtons(self):
-        if getattr(self, "Table", None):
-            table_length = len(self.Table.data)
-            row = 0
-            if table_length > 0:
-                row = self.VariablesGrid.GetGridCursorRow()
-            self.DeleteButton.Enable(table_length > 0)
-            self.UpButton.Enable(table_length > 0 and row > 0)
-            self.DownButton.Enable(table_length > 0 and row < table_length - 1)
-    
-    def OnDeleteButton(self, event):
-        idx = self.VariablesGrid.GetGridCursorRow()
-        if idx >= 0:
-            item = self.Table.GetItem(idx)
-            self.RemoveDataConsumer(item)
-            self.Table.RemoveItem(idx)
-            self.RefreshGrid()
-            self.RefreshButtons()
-        event.Skip()
-
-    def OnUpButton(self, event):
-        self.MoveValue(self.VariablesGrid.GetGridCursorRow(), -1)
-        event.Skip()
-
-    def OnDownButton(self, event):
-        self.MoveValue(self.VariablesGrid.GetGridCursorRow(), 1)
-        event.Skip()
-
     def InsertValue(self, iec_path, idx = None):
         if idx is None:
             idx = self.Table.GetNumberRows()
@@ -4338,16 +4327,8 @@
         if result is not None:
             self.Table.InsertItem(idx, item)
             self.RefreshGrid()
-            self.RefreshButtons()
-
-    def MoveValue(self, idx, move):
-        new_idx = max(0, min(idx + move, self.Table.GetNumberRows() - 1))
-        if new_idx != idx:
-            self.Table.MoveItem(idx, new_idx)
-            self.RefreshGrid()
-            self.VariablesGrid.SetGridCursor(new_idx, self.VariablesGrid.GetGridCursorCol())
-            self.RefreshButtons()
-            
+
+        
 #-------------------------------------------------------------------------------
 #                               Viewer Printout
 #-------------------------------------------------------------------------------