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