35 event(self, function) |
35 event(self, function) |
36 |
36 |
37 def __init__(self, *args, **kwargs): |
37 def __init__(self, *args, **kwargs): |
38 wx.grid.Grid.__init__(self, *args, **kwargs) |
38 wx.grid.Grid.__init__(self, *args, **kwargs) |
39 |
39 |
|
40 self.Editable = True |
|
41 |
40 if wx.VERSION >= (2, 6, 0): |
42 if wx.VERSION >= (2, 6, 0): |
41 self.Bind(wx.grid.EVT_GRID_SELECT_CELL, self.OnSelectCell) |
43 self.Bind(wx.grid.EVT_GRID_SELECT_CELL, self.OnSelectCell) |
42 else: |
44 else: |
43 wx.grid.EVT_GRID_SELECT_CELL(self, self.OnSelectCell) |
45 wx.grid.EVT_GRID_SELECT_CELL(self, self.OnSelectCell) |
44 self.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown) |
46 self.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown) |
45 |
47 |
46 def SetDefaultValue(self, default_value): |
48 def SetDefaultValue(self, default_value): |
47 self.DefaultValue = default_value |
49 self.DefaultValue = default_value |
48 |
50 |
|
51 def SetEditable(self, editable=True): |
|
52 self.Editable = editable |
|
53 self.RefreshButtons() |
|
54 |
49 def SetButtons(self, buttons): |
55 def SetButtons(self, buttons): |
50 for name in ["Add", "Delete", "Up", "Down"]: |
56 for name in ["Add", "Delete", "Up", "Down"]: |
51 button = buttons.get(name, None) |
57 button = buttons.get(name, None) |
52 setattr(self, "%sButton" % name, button) |
58 setattr(self, "%sButton" % name, button) |
53 if button is not None: |
59 if button is not None: |
54 button.Bind(wx.EVT_BUTTON, getattr(self, "On%sButton" % name)) |
60 button.Bind(wx.EVT_BUTTON, getattr(self, "On%sButton" % name)) |
55 |
61 |
56 def RefreshButtons(self): |
62 def RefreshButtons(self): |
57 rows = self.Table.GetNumberRows() |
63 rows = self.Table.GetNumberRows() |
58 row = self.GetGridCursorRow() |
64 row = self.GetGridCursorRow() |
|
65 if self.AddButton is not None: |
|
66 self.AddButton.Enable(self.Editable) |
59 if self.DeleteButton is not None: |
67 if self.DeleteButton is not None: |
60 self.DeleteButton.Enable(rows > 0) |
68 self.DeleteButton.Enable(self.Editable and rows > 0) |
61 if self.UpButton is not None: |
69 if self.UpButton is not None: |
62 self.UpButton.Enable(row > 0) |
70 self.UpButton.Enable(self.Editable and row > 0) |
63 if self.DownButton is not None: |
71 if self.DownButton is not None: |
64 self.DownButton.Enable(0 <= row < rows - 1) |
72 self.DownButton.Enable(self.Editable and 0 <= row < rows - 1) |
65 |
73 |
66 def CloseEditControl(self): |
74 def CloseEditControl(self): |
67 self.SetGridCursor(self.GetGridCursorRow(), self.GetGridCursorCol()) |
75 self.SetGridCursor(self.GetGridCursorRow(), self.GetGridCursorCol()) |
68 |
76 |
69 def AddRow(self): |
77 def AddRow(self): |
143 self.Navigate(wx.NavigationKeyEvent.IsBackward) |
151 self.Navigate(wx.NavigationKeyEvent.IsBackward) |
144 key_handled = True |
152 key_handled = True |
145 elif row < 0 or col == self.Table.GetNumberCols() - 1: |
153 elif row < 0 or col == self.Table.GetNumberCols() - 1: |
146 self.Navigate(wx.NavigationKeyEvent.IsForward) |
154 self.Navigate(wx.NavigationKeyEvent.IsForward) |
147 key_handled = True |
155 key_handled = True |
148 elif keycode in (wx.WXK_ADD, wx.WXK_NUMPAD_ADD): |
156 elif keycode in (wx.WXK_ADD, wx.WXK_NUMPAD_ADD) and self.Editable: |
149 self.AddRow() |
157 self.AddRow() |
150 key_handled = True |
158 key_handled = True |
151 elif keycode in (wx.WXK_DELETE, wx.WXK_NUMPAD_DELETE): |
159 elif keycode in (wx.WXK_DELETE, wx.WXK_NUMPAD_DELETE) and self.Editable: |
152 self.DeleteRow() |
160 self.DeleteRow() |
153 key_handled = True |
161 key_handled = True |
154 elif keycode == wx.WXK_UP and event.ShiftDown(): |
162 elif keycode == wx.WXK_UP and event.ShiftDown() and self.Editable: |
155 self.MoveRow(self.GetGridCursorRow(), -1) |
163 self.MoveRow(self.GetGridCursorRow(), -1) |
156 key_handled = True |
164 key_handled = True |
157 elif keycode == wx.WXK_DOWN and event.ShiftDown(): |
165 elif keycode == wx.WXK_DOWN and event.ShiftDown() and self.Editable: |
158 self.MoveRow(self.GetGridCursorRow(), 1) |
166 self.MoveRow(self.GetGridCursorRow(), 1) |
159 key_handled = True |
167 key_handled = True |
160 if not key_handled: |
168 if not key_handled: |
161 event.Skip() |
169 event.Skip() |