24 |
24 |
25 import wx |
25 import wx |
26 import wx.grid |
26 import wx.grid |
27 |
27 |
28 class CustomGrid(wx.grid.Grid): |
28 class CustomGrid(wx.grid.Grid): |
29 |
29 |
30 def __init__(self, *args, **kwargs): |
30 def __init__(self, *args, **kwargs): |
31 wx.grid.Grid.__init__(self, *args, **kwargs) |
31 wx.grid.Grid.__init__(self, *args, **kwargs) |
32 |
32 |
33 self.Editable = True |
33 self.Editable = True |
34 |
34 |
35 self.AddButton = None |
35 self.AddButton = None |
36 self.DeleteButton = None |
36 self.DeleteButton = None |
37 self.UpButton = None |
37 self.UpButton = None |
38 self.DownButton = None |
38 self.DownButton = None |
39 |
39 |
40 self.SetFont(wx.Font(12, wx.DEFAULT, wx.NORMAL, wx.NORMAL, False, 'Sans')) |
40 self.SetFont(wx.Font(12, wx.DEFAULT, wx.NORMAL, wx.NORMAL, False, 'Sans')) |
41 self.SetLabelFont(wx.Font(10, wx.DEFAULT, wx.NORMAL, wx.NORMAL, False, 'Sans')) |
41 self.SetLabelFont(wx.Font(10, wx.DEFAULT, wx.NORMAL, wx.NORMAL, False, 'Sans')) |
42 self.SetSelectionBackground(wx.WHITE) |
42 self.SetSelectionBackground(wx.WHITE) |
43 self.SetSelectionForeground(wx.BLACK) |
43 self.SetSelectionForeground(wx.BLACK) |
44 self.DisableDragRowSize() |
44 self.DisableDragRowSize() |
45 |
45 |
46 self.Bind(wx.grid.EVT_GRID_SELECT_CELL, self.OnSelectCell) |
46 self.Bind(wx.grid.EVT_GRID_SELECT_CELL, self.OnSelectCell) |
47 self.Bind(wx.grid.EVT_GRID_EDITOR_HIDDEN, self.OnEditorHidden) |
47 self.Bind(wx.grid.EVT_GRID_EDITOR_HIDDEN, self.OnEditorHidden) |
48 self.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown) |
48 self.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown) |
49 |
49 |
50 def SetFocus(self): |
50 def SetFocus(self): |
51 if self: |
51 if self: |
52 wx.grid.Grid.SetFocus(self) |
52 wx.grid.Grid.SetFocus(self) |
53 |
53 |
54 def SetDefaultValue(self, default_value): |
54 def SetDefaultValue(self, default_value): |
55 self.DefaultValue = default_value |
55 self.DefaultValue = default_value |
56 |
56 |
57 def SetEditable(self, editable=True): |
57 def SetEditable(self, editable=True): |
58 self.Editable = editable |
58 self.Editable = editable |
59 self.RefreshButtons() |
59 self.RefreshButtons() |
60 |
60 |
61 def SetButtons(self, buttons): |
61 def SetButtons(self, buttons): |
62 for name in ["Add", "Delete", "Up", "Down"]: |
62 for name in ["Add", "Delete", "Up", "Down"]: |
63 button = buttons.get(name, None) |
63 button = buttons.get(name, None) |
64 setattr(self, "%sButton" % name, button) |
64 setattr(self, "%sButton" % name, button) |
65 if button is not None: |
65 if button is not None: |
66 button.Bind(wx.EVT_BUTTON, getattr(self, "On%sButton" % name)) |
66 button.Bind(wx.EVT_BUTTON, getattr(self, "On%sButton" % name)) |
67 |
67 |
68 def RefreshButtons(self): |
68 def RefreshButtons(self): |
69 if self: |
69 if self: |
70 rows = self.Table.GetNumberRows() |
70 rows = self.Table.GetNumberRows() |
71 row = self.GetGridCursorRow() |
71 row = self.GetGridCursorRow() |
72 if self.AddButton is not None: |
72 if self.AddButton is not None: |
75 self.DeleteButton.Enable(self.Editable and rows > 0) |
75 self.DeleteButton.Enable(self.Editable and rows > 0) |
76 if self.UpButton is not None: |
76 if self.UpButton is not None: |
77 self.UpButton.Enable(self.Editable and row > 0) |
77 self.UpButton.Enable(self.Editable and row > 0) |
78 if self.DownButton is not None: |
78 if self.DownButton is not None: |
79 self.DownButton.Enable(self.Editable and 0 <= row < rows - 1) |
79 self.DownButton.Enable(self.Editable and 0 <= row < rows - 1) |
80 |
80 |
81 def CloseEditControl(self): |
81 def CloseEditControl(self): |
82 row, col = self.GetGridCursorRow(), self.GetGridCursorCol() |
82 row, col = self.GetGridCursorRow(), self.GetGridCursorCol() |
83 if row != -1 and col != -1: |
83 if row != -1 and col != -1: |
84 self.SetGridCursor(row, col) |
84 self.SetGridCursor(row, col) |
85 |
85 |
117 new_row = self.Table.MoveRow(row, move) |
117 new_row = self.Table.MoveRow(row, move) |
118 if new_row != row: |
118 if new_row != row: |
119 self.Table.ResetView(self) |
119 self.Table.ResetView(self) |
120 if new_row != row: |
120 if new_row != row: |
121 self.SetSelectedCell(new_row, col) |
121 self.SetSelectedCell(new_row, col) |
122 |
122 |
123 def SetSelectedCell(self, row, col): |
123 def SetSelectedCell(self, row, col): |
124 self.SetGridCursor(row, col) |
124 self.SetGridCursor(row, col) |
125 self.MakeCellVisible(row, col) |
125 self.MakeCellVisible(row, col) |
126 self.RefreshButtons() |
126 self.RefreshButtons() |
127 |
127 |
128 def OnAddButton(self, event): |
128 def OnAddButton(self, event): |
129 self.AddRow() |
129 self.AddRow() |
130 self.SetFocus() |
130 self.SetFocus() |
131 event.Skip() |
131 event.Skip() |
132 |
132 |
133 def OnDeleteButton(self, event): |
133 def OnDeleteButton(self, event): |
134 self.DeleteRow() |
134 self.DeleteRow() |
135 self.SetFocus() |
135 self.SetFocus() |
136 event.Skip() |
136 event.Skip() |
137 |
137 |
138 def OnUpButton(self, event): |
138 def OnUpButton(self, event): |
139 self.MoveRow(self.GetGridCursorRow(), -1) |
139 self.MoveRow(self.GetGridCursorRow(), -1) |
140 self.SetFocus() |
140 self.SetFocus() |
141 event.Skip() |
141 event.Skip() |
142 |
142 |
143 def OnDownButton(self, event): |
143 def OnDownButton(self, event): |
144 self.MoveRow(self.GetGridCursorRow(), 1) |
144 self.MoveRow(self.GetGridCursorRow(), 1) |
145 self.SetFocus() |
145 self.SetFocus() |
146 event.Skip() |
146 event.Skip() |
147 |
147 |