]> git.saurik.com Git - wxWidgets.git/blob - wxPython/demo/GridSimple.py
Darkened preview background for Mac (else get stripey background)
[wxWidgets.git] / wxPython / demo / GridSimple.py
1 from wxPython.wx import *
2 from wxPython.grid import *
3 from wxPython.lib.mixins.grid import wxGridAutoEditMixin
4
5 #---------------------------------------------------------------------------
6
7 class SimpleGrid(wxGrid): ##, wxGridAutoEditMixin):
8 def __init__(self, parent, log):
9 wxGrid.__init__(self, parent, -1)
10 ##wxGridAutoEditMixin.__init__(self)
11 self.log = log
12 self.moveTo = None
13
14 EVT_IDLE(self, self.OnIdle)
15
16 self.CreateGrid(25, 25) #, wxGrid.wxGridSelectRows)
17 ##self.EnableEditing(False)
18
19 # simple cell formatting
20 self.SetColSize(3, 200)
21 self.SetRowSize(4, 45)
22 self.SetCellValue(0, 0, "First cell")
23 self.SetCellValue(1, 1, "Another cell")
24 self.SetCellValue(2, 2, "Yet another cell")
25 self.SetCellValue(3, 3, "This cell is read-only")
26 self.SetCellFont(0, 0, wxFont(12, wxROMAN, wxITALIC, wxNORMAL))
27 self.SetCellTextColour(1, 1, wxRED)
28 self.SetCellBackgroundColour(2, 2, wxCYAN)
29 self.SetReadOnly(3, 3, True)
30
31 self.SetCellEditor(5, 0, wxGridCellNumberEditor(1,1000))
32 self.SetCellValue(5, 0, "123")
33 self.SetCellEditor(6, 0, wxGridCellFloatEditor())
34 self.SetCellValue(6, 0, "123.34")
35 self.SetCellEditor(7, 0, wxGridCellNumberEditor())
36
37 self.SetCellValue(6, 3, "You can veto editing this cell")
38
39
40 # attribute objects let you keep a set of formatting values
41 # in one spot, and reuse them if needed
42 attr = wxGridCellAttr()
43 attr.SetTextColour(wxBLACK)
44 attr.SetBackgroundColour(wxRED)
45 attr.SetFont(wxFont(10, wxSWISS, wxNORMAL, wxBOLD))
46
47 # you can set cell attributes for the whole row (or column)
48 self.SetRowAttr(5, attr)
49
50 self.SetColLabelValue(0, "Custom")
51 self.SetColLabelValue(1, "column")
52 self.SetColLabelValue(2, "labels")
53
54 self.SetColLabelAlignment(wxALIGN_LEFT, wxALIGN_BOTTOM)
55
56 #self.SetDefaultCellOverflow(False)
57 #r = wxGridCellAutoWrapStringRenderer()
58 #self.SetCellRenderer(9, 1, r)
59
60 # overflow cells
61 self.SetCellValue( 9, 1, "This default cell will overflow into neighboring cells, but not if you turn overflow off.");
62 self.SetCellSize(11, 1, 3, 3);
63 self.SetCellAlignment(11, 1, wxALIGN_CENTRE, wxALIGN_CENTRE);
64 self.SetCellValue(11, 1, "This cell is set to span 3 rows and 3 columns");
65
66
67
68 # test all the events
69 EVT_GRID_CELL_LEFT_CLICK(self, self.OnCellLeftClick)
70 EVT_GRID_CELL_RIGHT_CLICK(self, self.OnCellRightClick)
71 EVT_GRID_CELL_LEFT_DCLICK(self, self.OnCellLeftDClick)
72 EVT_GRID_CELL_RIGHT_DCLICK(self, self.OnCellRightDClick)
73
74 EVT_GRID_LABEL_LEFT_CLICK(self, self.OnLabelLeftClick)
75 EVT_GRID_LABEL_RIGHT_CLICK(self, self.OnLabelRightClick)
76 EVT_GRID_LABEL_LEFT_DCLICK(self, self.OnLabelLeftDClick)
77 EVT_GRID_LABEL_RIGHT_DCLICK(self, self.OnLabelRightDClick)
78
79 EVT_GRID_ROW_SIZE(self, self.OnRowSize)
80 EVT_GRID_COL_SIZE(self, self.OnColSize)
81
82 EVT_GRID_RANGE_SELECT(self, self.OnRangeSelect)
83 EVT_GRID_CELL_CHANGE(self, self.OnCellChange)
84 EVT_GRID_SELECT_CELL(self, self.OnSelectCell)
85
86 EVT_GRID_EDITOR_SHOWN(self, self.OnEditorShown)
87 EVT_GRID_EDITOR_HIDDEN(self, self.OnEditorHidden)
88 EVT_GRID_EDITOR_CREATED(self, self.OnEditorCreated)
89
90
91
92 def OnCellLeftClick(self, evt):
93 self.log.write("OnCellLeftClick: (%d,%d) %s\n" %
94 (evt.GetRow(), evt.GetCol(), evt.GetPosition()))
95 evt.Skip()
96
97 def OnCellRightClick(self, evt):
98 self.log.write("OnCellRightClick: (%d,%d) %s\n" %
99 (evt.GetRow(), evt.GetCol(), evt.GetPosition()))
100 evt.Skip()
101
102 def OnCellLeftDClick(self, evt):
103 self.log.write("OnCellLeftDClick: (%d,%d) %s\n" %
104 (evt.GetRow(), evt.GetCol(), evt.GetPosition()))
105 evt.Skip()
106
107 def OnCellRightDClick(self, evt):
108 self.log.write("OnCellRightDClick: (%d,%d) %s\n" %
109 (evt.GetRow(), evt.GetCol(), evt.GetPosition()))
110 evt.Skip()
111
112 def OnLabelLeftClick(self, evt):
113 self.log.write("OnLabelLeftClick: (%d,%d) %s\n" %
114 (evt.GetRow(), evt.GetCol(), evt.GetPosition()))
115 evt.Skip()
116
117 def OnLabelRightClick(self, evt):
118 self.log.write("OnLabelRightClick: (%d,%d) %s\n" %
119 (evt.GetRow(), evt.GetCol(), evt.GetPosition()))
120 evt.Skip()
121
122 def OnLabelLeftDClick(self, evt):
123 self.log.write("OnLabelLeftDClick: (%d,%d) %s\n" %
124 (evt.GetRow(), evt.GetCol(), evt.GetPosition()))
125 evt.Skip()
126
127 def OnLabelRightDClick(self, evt):
128 self.log.write("OnLabelRightDClick: (%d,%d) %s\n" %
129 (evt.GetRow(), evt.GetCol(), evt.GetPosition()))
130 evt.Skip()
131
132
133 def OnRowSize(self, evt):
134 self.log.write("OnRowSize: row %d, %s\n" %
135 (evt.GetRowOrCol(), evt.GetPosition()))
136 evt.Skip()
137
138 def OnColSize(self, evt):
139 self.log.write("OnColSize: col %d, %s\n" %
140 (evt.GetRowOrCol(), evt.GetPosition()))
141 evt.Skip()
142
143 def OnRangeSelect(self, evt):
144 if evt.Selecting():
145 self.log.write("OnRangeSelect: top-left %s, bottom-right %s\n" %
146 (evt.GetTopLeftCoords(), evt.GetBottomRightCoords()))
147 evt.Skip()
148
149
150 def OnCellChange(self, evt):
151 self.log.write("OnCellChange: (%d,%d) %s\n" %
152 (evt.GetRow(), evt.GetCol(), evt.GetPosition()))
153
154 # Show how to stay in a cell that has bad data. We can't just
155 # call SetGridCursor here since we are nested inside one so it
156 # won't have any effect. Instead, set coordinants to move to in
157 # idle time.
158 value = self.GetCellValue(evt.GetRow(), evt.GetCol())
159 if value == 'no good':
160 self.moveTo = evt.GetRow(), evt.GetCol()
161
162
163 def OnIdle(self, evt):
164 if self.moveTo != None:
165 self.SetGridCursor(self.moveTo[0], self.moveTo[1])
166 self.moveTo = None
167 evt.Skip()
168
169
170 def OnSelectCell(self, evt):
171 self.log.write("OnSelectCell: (%d,%d) %s\n" %
172 (evt.GetRow(), evt.GetCol(), evt.GetPosition()))
173
174 # Another way to stay in a cell that has a bad value...
175 row = self.GetGridCursorRow()
176 col = self.GetGridCursorCol()
177 if self.IsCellEditControlEnabled():
178 self.HideCellEditControl()
179 self.DisableCellEditControl()
180 value = self.GetCellValue(row, col)
181 if value == 'no good 2':
182 return # cancels the cell selection
183 evt.Skip()
184
185
186 def OnEditorShown(self, evt):
187 if evt.GetRow() == 6 and evt.GetCol() == 3 and \
188 wxMessageBox("Are you sure you wish to edit this cell?",
189 "Checking", wxYES_NO) == wxNO:
190 evt.Veto()
191 return
192
193 self.log.write("OnEditorShown: (%d,%d) %s\n" %
194 (evt.GetRow(), evt.GetCol(), evt.GetPosition()))
195 evt.Skip()
196
197
198 def OnEditorHidden(self, evt):
199 if evt.GetRow() == 6 and evt.GetCol() == 3 and \
200 wxMessageBox("Are you sure you wish to finish editing this cell?",
201 "Checking", wxYES_NO) == wxNO:
202 evt.Veto()
203 return
204
205 self.log.write("OnEditorHidden: (%d,%d) %s\n" %
206 (evt.GetRow(), evt.GetCol(), evt.GetPosition()))
207 evt.Skip()
208
209
210 def OnEditorCreated(self, evt):
211 self.log.write("OnEditorCreated: (%d, %d) %s\n" %
212 (evt.GetRow(), evt.GetCol(), evt.GetControl()))
213
214
215
216 #---------------------------------------------------------------------------
217
218 class TestFrame(wxFrame):
219 def __init__(self, parent, log):
220 wxFrame.__init__(self, parent, -1, "Simple Grid Demo", size=(640,480))
221 grid = SimpleGrid(self, log)
222
223
224
225 #---------------------------------------------------------------------------
226
227 if __name__ == '__main__':
228 import sys
229 app = wxPySimpleApp()
230 frame = TestFrame(None, sys.stdout)
231 frame.Show(True)
232 app.MainLoop()
233
234
235 #---------------------------------------------------------------------------
236
237