controls/CustomGrid.py
changeset 600 7db729686416
parent 577 9dbb79722fbc
child 606 d65122c61eaf
--- a/controls/CustomGrid.py	Fri Dec 09 10:22:26 2011 +0100
+++ b/controls/CustomGrid.py	Fri Dec 09 11:26:10 2011 +0100
@@ -37,6 +37,8 @@
     def __init__(self, *args, **kwargs):
         wx.grid.Grid.__init__(self, *args, **kwargs)
         
+        self.Editable = True
+        
         if wx.VERSION >= (2, 6, 0):
             self.Bind(wx.grid.EVT_GRID_SELECT_CELL, self.OnSelectCell)
         else:
@@ -46,6 +48,10 @@
     def SetDefaultValue(self, default_value):
         self.DefaultValue = default_value
     
+    def SetEditable(self, editable=True):
+        self.Editable = editable
+        self.RefreshButtons()
+        
     def SetButtons(self, buttons):
         for name in ["Add", "Delete", "Up", "Down"]:
             button = buttons.get(name, None)
@@ -56,12 +62,14 @@
     def RefreshButtons(self):
         rows = self.Table.GetNumberRows()
         row = self.GetGridCursorRow()
+        if self.AddButton is not None:
+            self.AddButton.Enable(self.Editable)
         if self.DeleteButton is not None:
-            self.DeleteButton.Enable(rows > 0)
+            self.DeleteButton.Enable(self.Editable and rows > 0)
         if self.UpButton is not None:
-            self.UpButton.Enable(row > 0)
+            self.UpButton.Enable(self.Editable and row > 0)
         if self.DownButton is not None:
-            self.DownButton.Enable(0 <= row < rows - 1)
+            self.DownButton.Enable(self.Editable and 0 <= row < rows - 1)
     
     def CloseEditControl(self):
         self.SetGridCursor(self.GetGridCursorRow(), self.GetGridCursorCol())
@@ -145,16 +153,16 @@
             elif row < 0 or col == self.Table.GetNumberCols() - 1:
                 self.Navigate(wx.NavigationKeyEvent.IsForward)
                 key_handled = True
-        elif keycode in (wx.WXK_ADD, wx.WXK_NUMPAD_ADD):
+        elif keycode in (wx.WXK_ADD, wx.WXK_NUMPAD_ADD) and self.Editable:
             self.AddRow()
             key_handled = True
-        elif keycode in (wx.WXK_DELETE, wx.WXK_NUMPAD_DELETE):
+        elif keycode in (wx.WXK_DELETE, wx.WXK_NUMPAD_DELETE) and self.Editable:
             self.DeleteRow()
             key_handled = True
-        elif keycode == wx.WXK_UP and event.ShiftDown():
+        elif keycode == wx.WXK_UP and event.ShiftDown() and self.Editable:
             self.MoveRow(self.GetGridCursorRow(), -1)
             key_handled = True
-        elif keycode == wx.WXK_DOWN and event.ShiftDown():
+        elif keycode == wx.WXK_DOWN and event.ShiftDown() and self.Editable:
             self.MoveRow(self.GetGridCursorRow(), 1)
             key_handled = True
         if not key_handled: