]> git.saurik.com Git - wxWidgets.git/blob - samples/grid/test.cpp
* Added source file info in utils/serialize/*
[wxWidgets.git] / samples / grid / test.cpp
1 /*
2 * File: test.cpp
3 * Purpose: wxGrid test
4 * Author: Julian Smart
5 * Created: 1995
6 * Updated:
7 * Copyright: (c) 1995, AIAI, University of Edinburgh
8 */
9
10 static const char sccsid[] = "%W% %G%";
11
12 #ifdef __GNUG__
13 #pragma implementation
14 #pragma interface
15 #endif
16
17 // For compilers that support precompilation, includes "wx/wx.h".
18 #include "wx/wxprec.h"
19
20 #ifdef __BORLANDC__
21 #pragma hdrstop
22 #endif
23
24 #ifndef WX_PRECOMP
25 #include "wx/wx.h"
26 #endif
27
28 #include "wx/grid.h"
29 #include "wx/colordlg.h"
30
31 // Define a new application type
32 class MyApp: public wxApp
33 { public:
34 bool OnInit(void);
35 };
36
37 // Define a new frame type
38 class MyFrame: public wxFrame
39 { public:
40 wxGrid *grid;
41 MyFrame(wxFrame *frame, const wxString& title, const wxPoint& pos, const wxSize& size);
42
43 bool OnClose(void) { return TRUE; }
44
45 void ToggleEditable(wxCommandEvent& event);
46 void ToggleRowLabel(wxCommandEvent& event);
47 void ToggleColLabel(wxCommandEvent& event);
48 void ToggleDividers(wxCommandEvent& event);
49 void LeftCell(wxCommandEvent& event);
50 void CentreCell(wxCommandEvent& event);
51 void RightCell(wxCommandEvent& event);
52 void ColourLabelBackground(wxCommandEvent& event);
53 void ColourLabelText(wxCommandEvent& event);
54 void NormalLabelColouring(wxCommandEvent& event);
55 void ColourCellBackground(wxCommandEvent& event);
56 void ColourCellText(wxCommandEvent& event);
57 void NormalCellColouring(wxCommandEvent& event);
58 void Quit(wxCommandEvent& event);
59
60 void OnActivate(wxActivateEvent& event);
61
62 DECLARE_EVENT_TABLE()
63 };
64
65 wxBitmap *cellBitmap1 = NULL;
66 wxBitmap *cellBitmap2 = NULL;
67
68 // ID for the menu quit command
69 #define GRID_QUIT 1
70 #define GRID_TOGGLE_EDITABLE 2
71 #define GRID_LEFT_CELL 3
72 #define GRID_CENTRE_CELL 4
73 #define GRID_RIGHT_CELL 5
74 #define GRID_TOGGLE_ROW_LABEL 6
75 #define GRID_TOGGLE_COL_LABEL 7
76 #define GRID_COLOUR_LABEL_BACKGROUND 8
77 #define GRID_COLOUR_LABEL_TEXT 9
78 #define GRID_NORMAL_LABEL_COLOURING 10
79 #define GRID_COLOUR_CELL_BACKGROUND 11
80 #define GRID_COLOUR_CELL_TEXT 12
81 #define GRID_NORMAL_CELL_COLOURING 13
82 #define GRID_TOGGLE_DIVIDERS 14
83
84 // Main proc
85
86 IMPLEMENT_APP(MyApp)
87
88 // `Main program' equivalent, creating windows and returning main app frame
89 bool MyApp::OnInit(void)
90 {
91 #ifdef __WXMSW__
92 cellBitmap1 = new wxBitmap("bitmap1");
93 cellBitmap2 = new wxBitmap("bitmap2");
94 #endif
95
96 // Create the main frame window
97 MyFrame *frame = new MyFrame(NULL, "wxGrid Sample", wxPoint(50, 50), wxSize(450, 300));
98
99 // Give it an icon
100 #ifdef __WXMSW__
101 frame->SetIcon(wxIcon("mondrian"));
102 #endif
103 #ifdef __X__
104 frame->SetIcon(wxIcon("aiai.xbm"));
105 #endif
106
107 // Make a menubar
108 wxMenu *file_menu = new wxMenu;
109 file_menu->Append(GRID_QUIT, "E&xit");
110
111 wxMenu *settings_menu = new wxMenu;
112 settings_menu->Append(GRID_TOGGLE_EDITABLE, "&Toggle editable");
113 settings_menu->Append(GRID_TOGGLE_ROW_LABEL, "Toggle ro&w label");
114 settings_menu->Append(GRID_TOGGLE_COL_LABEL, "Toggle co&l label");
115 settings_menu->Append(GRID_TOGGLE_DIVIDERS, "Toggle &dividers");
116 settings_menu->AppendSeparator();
117 settings_menu->Append(GRID_LEFT_CELL, "&Left cell alignment ");
118 settings_menu->Append(GRID_CENTRE_CELL, "&Centre cell alignment ");
119 settings_menu->Append(GRID_RIGHT_CELL, "&Right cell alignment ");
120 settings_menu->AppendSeparator();
121 settings_menu->Append(GRID_COLOUR_LABEL_BACKGROUND, "Choose a label &background colour");
122 settings_menu->Append(GRID_COLOUR_LABEL_TEXT, "Choose a label fore&ground colour");
123 settings_menu->Append(GRID_NORMAL_LABEL_COLOURING, "&Normal label colouring");
124 settings_menu->AppendSeparator();
125 settings_menu->Append(GRID_COLOUR_CELL_BACKGROUND, "Choo&se a cell &background colour");
126 settings_menu->Append(GRID_COLOUR_CELL_TEXT, "Choose &a cell foreground colour");
127 settings_menu->Append(GRID_NORMAL_CELL_COLOURING, "N&ormal cell colouring");
128
129 wxMenuBar *menu_bar = new wxMenuBar;
130 menu_bar->Append(file_menu, "&File");
131 menu_bar->Append(settings_menu, "&Settings");
132 frame->SetMenuBar(menu_bar);
133
134 // Make a grid
135 frame->grid = new wxGrid(frame, 0, 0, 400, 400);
136
137 frame->grid->CreateGrid(10, 8);
138 frame->grid->SetColumnWidth(3, 200);
139 frame->grid->SetRowHeight(4, 45);
140 frame->grid->SetCellValue("First cell", 0, 0);
141 frame->grid->SetCellValue("Another cell", 1, 1);
142 frame->grid->SetCellValue("Yet another cell", 2, 2);
143 frame->grid->SetCellTextFont(wxTheFontList->FindOrCreateFont(10, wxROMAN, wxITALIC, wxNORMAL), 0, 0);
144 frame->grid->SetCellTextColour(*wxRED, 1, 1);
145 frame->grid->SetCellBackgroundColour(*wxCYAN, 2, 2);
146 if (cellBitmap1 && cellBitmap2)
147 {
148 frame->grid->SetCellAlignment(wxCENTRE, 5, 0);
149 frame->grid->SetCellAlignment(wxCENTRE, 6, 0);
150 frame->grid->SetCellBitmap(cellBitmap1, 5, 0);
151 frame->grid->SetCellBitmap(cellBitmap2, 6, 0);
152 }
153
154 frame->grid->UpdateDimensions();
155
156 // Show the frame
157 frame->Show(TRUE);
158
159 SetTopWindow(frame);
160 return TRUE;
161 }
162
163 // My frame constructor
164 MyFrame::MyFrame(wxFrame *frame, const wxString& title, const wxPoint& pos, const wxSize& size):
165 wxFrame(frame, -1, title, pos, size)
166 {
167 grid = NULL;
168 }
169
170 BEGIN_EVENT_TABLE(MyFrame, wxFrame)
171 EVT_MENU(GRID_TOGGLE_EDITABLE, MyFrame::ToggleEditable)
172 EVT_MENU(GRID_TOGGLE_ROW_LABEL, MyFrame::ToggleRowLabel)
173 EVT_MENU(GRID_TOGGLE_COL_LABEL, MyFrame::ToggleColLabel)
174 EVT_MENU(GRID_TOGGLE_DIVIDERS, MyFrame::ToggleDividers)
175 EVT_MENU(GRID_LEFT_CELL, MyFrame::LeftCell)
176 EVT_MENU(GRID_CENTRE_CELL, MyFrame::CentreCell)
177 EVT_MENU(GRID_RIGHT_CELL, MyFrame::RightCell)
178 EVT_MENU(GRID_COLOUR_LABEL_BACKGROUND, MyFrame::ColourLabelBackground)
179 EVT_MENU(GRID_COLOUR_LABEL_TEXT, MyFrame::ColourLabelText)
180 EVT_MENU(GRID_NORMAL_LABEL_COLOURING, MyFrame::NormalLabelColouring)
181 EVT_MENU(GRID_COLOUR_CELL_BACKGROUND, MyFrame::ColourCellBackground)
182 EVT_MENU(GRID_COLOUR_CELL_TEXT, MyFrame::ColourCellText)
183 EVT_MENU(GRID_NORMAL_CELL_COLOURING, MyFrame::NormalCellColouring)
184 EVT_MENU(GRID_QUIT, MyFrame::Quit)
185 END_EVENT_TABLE()
186
187 void MyFrame::ToggleEditable(wxCommandEvent& WXUNUSED(event))
188 {
189 grid->SetEditable(!grid->GetEditable());
190 grid->Refresh();
191 }
192
193 void MyFrame::ToggleRowLabel(wxCommandEvent& WXUNUSED(event))
194 {
195 if (grid->GetLabelSize(wxVERTICAL) > 0)
196 grid->SetLabelSize(wxVERTICAL, 0);
197 else
198 grid->SetLabelSize(wxVERTICAL, 40);
199 grid->Refresh();
200 }
201
202 void MyFrame::ToggleColLabel(wxCommandEvent& WXUNUSED(event))
203 {
204 if (grid->GetLabelSize(wxHORIZONTAL) > 0)
205 grid->SetLabelSize(wxHORIZONTAL, 0);
206 else
207 grid->SetLabelSize(wxHORIZONTAL, 20);
208 grid->Refresh();
209 }
210
211 void MyFrame::ToggleDividers(wxCommandEvent& WXUNUSED(event))
212 {
213 if (!grid->GetDividerPen())
214 grid->SetDividerPen(wxThePenList->FindOrCreatePen("LIGHT GREY", 1, wxSOLID));
215 else
216 grid->SetDividerPen(NULL);
217 grid->Refresh();
218 }
219
220 void MyFrame::LeftCell(wxCommandEvent& WXUNUSED(event))
221 {
222 grid->SetCellAlignment(wxLEFT);
223 grid->Refresh();
224 }
225
226 void MyFrame::CentreCell(wxCommandEvent& WXUNUSED(event))
227 {
228 grid->SetCellAlignment(wxCENTRE);
229 grid->Refresh();
230 }
231
232 void MyFrame::RightCell(wxCommandEvent& WXUNUSED(event))
233 {
234 grid->SetCellAlignment(wxRIGHT);
235 grid->Refresh();
236 }
237
238 void MyFrame::ColourLabelBackground(wxCommandEvent& WXUNUSED(event))
239 {
240 wxColourData data;
241 data.SetChooseFull(TRUE);
242 wxColourDialog dialog(this, &data);
243 if (dialog.ShowModal() != wxID_CANCEL)
244 {
245 wxColourData retData = dialog.GetColourData();
246 wxColour col = retData.GetColour();
247 grid->SetLabelBackgroundColour(col);
248 grid->Refresh();
249 }
250 }
251
252 void MyFrame::ColourLabelText(wxCommandEvent& WXUNUSED(event))
253 {
254 wxColourData data;
255 data.SetChooseFull(TRUE);
256 wxColourDialog dialog(this, &data);
257 if (dialog.ShowModal() != wxID_CANCEL)
258 {
259 wxColourData retData = dialog.GetColourData();
260 wxColour col = retData.GetColour();
261 grid->SetLabelTextColour(col);
262 grid->Refresh();
263 }
264 }
265
266 void MyFrame::NormalLabelColouring(wxCommandEvent& WXUNUSED(event))
267 {
268 grid->SetLabelBackgroundColour(*wxLIGHT_GREY);
269 grid->SetLabelTextColour(*wxBLACK);
270 grid->Refresh();
271 }
272
273 void MyFrame::ColourCellBackground(wxCommandEvent& WXUNUSED(event))
274 {
275 wxColourData data;
276 data.SetChooseFull(TRUE);
277 wxColourDialog dialog(this, &data);
278 if (dialog.ShowModal() != wxID_CANCEL)
279 {
280 wxColourData retData = dialog.GetColourData();
281 wxColour col = retData.GetColour();
282 grid->SetCellBackgroundColour(col);
283 grid->Refresh();
284 }
285 }
286
287 void MyFrame::ColourCellText(wxCommandEvent& WXUNUSED(event))
288 {
289 wxColourData data;
290 data.SetChooseFull(TRUE);
291 wxColourDialog dialog(this, &data);
292 if (dialog.ShowModal() != wxID_CANCEL)
293 {
294 wxColourData retData = dialog.GetColourData();
295 wxColour col = retData.GetColour();
296 grid->SetCellTextColour(col);
297 grid->Refresh();
298 }
299 }
300
301 void MyFrame::NormalCellColouring(wxCommandEvent& WXUNUSED(event))
302 {
303 grid->SetCellBackgroundColour(*wxWHITE);
304 grid->SetCellTextColour(*wxBLACK);
305 grid->Refresh();
306 }
307
308 void MyFrame::Quit(wxCommandEvent& WXUNUSED(event))
309 {
310 this->Close(TRUE);
311 }
312
313 // Ensure that the grid's edit control always has the focus.
314 void MyFrame::OnActivate(wxActivateEvent& event)
315 {
316 if (grid) grid->OnActivate(event.GetActive());
317 }
318