]> git.saurik.com Git - wxWidgets.git/blame - wxPython/demo/GridSimple.py
always return a non NULL font from wxLoadFont
[wxWidgets.git] / wxPython / demo / GridSimple.py
CommitLineData
f6bcfd97
BP
1from wxPython.wx import *
2from wxPython.grid import *
3
4#---------------------------------------------------------------------------
5
6class SimpleGrid(wxGrid):
7 def __init__(self, parent, log):
8 wxGrid.__init__(self, parent, -1)
9 self.log = log
c368d904
RD
10 self.moveTo = None
11
12 EVT_IDLE(self, self.OnIdle)
f6bcfd97
BP
13
14 self.CreateGrid(25, 25)
15
16 # simple cell formatting
17 self.SetColSize(3, 200)
18 self.SetRowSize(4, 45)
19 self.SetCellValue(0, 0, "First cell")
20 self.SetCellValue(1, 1, "Another cell")
21 self.SetCellValue(2, 2, "Yet another cell")
9416aa89 22 self.SetCellValue(3, 3, "This cell is read-only")
f6bcfd97
BP
23 self.SetCellFont(0, 0, wxFont(12, wxROMAN, wxITALIC, wxNORMAL))
24 self.SetCellTextColour(1, 1, wxRED)
25 self.SetCellBackgroundColour(2, 2, wxCYAN)
9416aa89
RD
26 self.SetReadOnly(3, 3, true)
27
f6bcfd97
BP
28
29 # attribute objects let you keep a set of formatting values
30 # in one spot, and reuse them if needed
31 attr = wxGridCellAttr()
32 attr.SetTextColour(wxBLACK)
33 attr.SetBackgroundColour(wxRED)
34 attr.SetFont(wxFont(10, wxSWISS, wxNORMAL, wxBOLD))
35
36 # you can set cell attributes for the whole row (or column)
37 self.SetRowAttr(5, attr)
38
3ca6a5f0
BP
39 self.SetColLabelValue(0, "Custom")
40 self.SetColLabelValue(1, "column")
41 self.SetColLabelValue(2, "labels")
f6bcfd97 42
f3d9dc1d
RD
43 self.SetColLabelAlignment(wxALIGN_LEFT, wxALIGN_BOTTOM)
44
f6bcfd97
BP
45 # test all the events
46 EVT_GRID_CELL_LEFT_CLICK(self, self.OnCellLeftClick)
47 EVT_GRID_CELL_RIGHT_CLICK(self, self.OnCellRightClick)
48 EVT_GRID_CELL_LEFT_DCLICK(self, self.OnCellLeftDClick)
49 EVT_GRID_CELL_RIGHT_DCLICK(self, self.OnCellRightDClick)
50
51 EVT_GRID_LABEL_LEFT_CLICK(self, self.OnLabelLeftClick)
52 EVT_GRID_LABEL_RIGHT_CLICK(self, self.OnLabelRightClick)
53 EVT_GRID_LABEL_LEFT_DCLICK(self, self.OnLabelLeftDClick)
54 EVT_GRID_LABEL_RIGHT_DCLICK(self, self.OnLabelRightDClick)
55
56 EVT_GRID_ROW_SIZE(self, self.OnRowSize)
57 EVT_GRID_COL_SIZE(self, self.OnColSize)
58
59 EVT_GRID_RANGE_SELECT(self, self.OnRangeSelect)
60 EVT_GRID_CELL_CHANGE(self, self.OnCellChange)
61 EVT_GRID_SELECT_CELL(self, self.OnSelectCell)
62
63 EVT_GRID_EDITOR_SHOWN(self, self.OnEditorShown)
64 EVT_GRID_EDITOR_HIDDEN(self, self.OnEditorHidden)
65
66
67 def OnCellLeftClick(self, evt):
68 self.log.write("OnCellLeftClick: (%d,%d) %s\n" %
69 (evt.GetRow(), evt.GetCol(), evt.GetPosition()))
70 evt.Skip()
71
72 def OnCellRightClick(self, evt):
73 self.log.write("OnCellRightClick: (%d,%d) %s\n" %
74 (evt.GetRow(), evt.GetCol(), evt.GetPosition()))
75 evt.Skip()
76
77 def OnCellLeftDClick(self, evt):
78 self.log.write("OnCellLeftDClick: (%d,%d) %s\n" %
79 (evt.GetRow(), evt.GetCol(), evt.GetPosition()))
80 evt.Skip()
81
82 def OnCellRightDClick(self, evt):
83 self.log.write("OnCellRightDClick: (%d,%d) %s\n" %
84 (evt.GetRow(), evt.GetCol(), evt.GetPosition()))
85 evt.Skip()
86
87 def OnLabelLeftClick(self, evt):
88 self.log.write("OnLabelLeftClick: (%d,%d) %s\n" %
89 (evt.GetRow(), evt.GetCol(), evt.GetPosition()))
90 evt.Skip()
91
92 def OnLabelRightClick(self, evt):
93 self.log.write("OnLabelRightClick: (%d,%d) %s\n" %
94 (evt.GetRow(), evt.GetCol(), evt.GetPosition()))
95 evt.Skip()
96
97 def OnLabelLeftDClick(self, evt):
98 self.log.write("OnLabelLeftDClick: (%d,%d) %s\n" %
99 (evt.GetRow(), evt.GetCol(), evt.GetPosition()))
100 evt.Skip()
101
102 def OnLabelRightDClick(self, evt):
103 self.log.write("OnLabelRightDClick: (%d,%d) %s\n" %
104 (evt.GetRow(), evt.GetCol(), evt.GetPosition()))
105 evt.Skip()
106
107
108 def OnRowSize(self, evt):
109 self.log.write("OnRowSize: row %d, %s\n" %
110 (evt.GetRowOrCol(), evt.GetPosition()))
111 evt.Skip()
112
113 def OnColSize(self, evt):
114 self.log.write("OnColSize: col %d, %s\n" %
115 (evt.GetRowOrCol(), evt.GetPosition()))
116 evt.Skip()
117
118 def OnRangeSelect(self, evt):
119 if evt.Selecting():
120 self.log.write("OnRangeSelect: top-left %s, bottom-right %s\n" %
121 (evt.GetTopLeftCoords(), evt.GetBottomRightCoords()))
122 evt.Skip()
123
c368d904 124
f6bcfd97
BP
125 def OnCellChange(self, evt):
126 self.log.write("OnCellChange: (%d,%d) %s\n" %
127 (evt.GetRow(), evt.GetCol(), evt.GetPosition()))
c368d904
RD
128
129 # Show how to stay in a cell that has bad data. We can't just
130 # call SetGridCursor here since we are nested inside one so it
131 # won't have any effect. Instead, set coordinants to move to in
132 # idle time.
133 value = self.GetCellValue(evt.GetRow(), evt.GetCol())
134 if value == 'no good':
135 self.moveTo = evt.GetRow(), evt.GetCol()
136
137 def OnIdle(self, evt):
138 if self.moveTo != None:
139 self.SetGridCursor(self.moveTo[0], self.moveTo[1])
140 self.moveTo = None
141
142
f6bcfd97
BP
143
144 def OnSelectCell(self, evt):
145 self.log.write("OnSelectCell: (%d,%d) %s\n" %
146 (evt.GetRow(), evt.GetCol(), evt.GetPosition()))
c368d904
RD
147
148 # Another way to stay in a cell that has a bad value...
149 row = self.GetGridCursorRow()
150 col = self.GetGridCursorCol()
151 if self.IsCellEditControlEnabled():
152 self.HideCellEditControl()
153 self.DisableCellEditControl()
154 value = self.GetCellValue(row, col)
155 if value == 'no good 2':
156 return # cancels the cell selection
157 else:
158 evt.Skip()
159
160
f6bcfd97
BP
161
162 def OnEditorShown(self, evt):
163 self.log.write("OnEditorShown: (%d,%d) %s\n" %
164 (evt.GetRow(), evt.GetCol(), evt.GetPosition()))
165 evt.Skip()
166
167 def OnEditorHidden(self, evt):
168 self.log.write("OnEditorHidden: (%d,%d) %s\n" %
169 (evt.GetRow(), evt.GetCol(), evt.GetPosition()))
170 evt.Skip()
171
172
173#---------------------------------------------------------------------------
174
175class TestFrame(wxFrame):
176 def __init__(self, parent, log):
177 wxFrame.__init__(self, parent, -1, "Simple Grid Demo", size=(640,480))
178 grid = SimpleGrid(self, log)
179
180
181
182#---------------------------------------------------------------------------
183
184if __name__ == '__main__':
185 import sys
186 app = wxPySimpleApp()
187 frame = TestFrame(None, sys.stdout)
188 frame.Show(true)
189 app.MainLoop()
190
191
192#---------------------------------------------------------------------------
c368d904
RD
193
194