]> git.saurik.com Git - wxWidgets.git/blob - samples/newgrid/griddemo.cpp
1. wxTimer change - now generates EVT_TIMER()
[wxWidgets.git] / samples / newgrid / griddemo.cpp
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: griddemo.cpp
3 // Purpose: Grid control wxWindows sample
4 // Author: Michael Bedward
5 // Modified by:
6 // RCS-ID: $Id$
7 // Copyright: (c) Michael Bedward, Julian Smart
8 // Licence: wxWindows license
9 /////////////////////////////////////////////////////////////////////////////
10
11 #ifdef __GNUG__
12 #pragma implementation
13 #pragma interface
14 #endif
15
16 // For compilers that support precompilation, includes "wx/wx.h".
17 #include "wx/wxprec.h"
18
19 #ifdef __BORLANDC__
20 #pragma hdrstop
21 #endif
22
23 #ifndef WX_PRECOMP
24 #include "wx/wx.h"
25 #endif
26
27 #include "wx/colordlg.h"
28
29 #include "wx/grid.h"
30
31 #include "griddemo.h"
32
33 IMPLEMENT_APP( GridApp )
34
35
36
37 bool GridApp::OnInit()
38 {
39 GridFrame *frame = new GridFrame;
40 frame->Show( TRUE );
41
42 return TRUE;
43 }
44
45
46
47 BEGIN_EVENT_TABLE( GridFrame, wxFrame )
48 EVT_MENU( ID_TOGGLEROWLABELS, GridFrame::ToggleRowLabels )
49 EVT_MENU( ID_TOGGLECOLLABELS, GridFrame::ToggleColLabels )
50 EVT_MENU( ID_TOGGLEEDIT, GridFrame::ToggleEditing )
51 EVT_MENU( ID_SETLABELCOLOUR, GridFrame::SetLabelColour )
52 EVT_MENU( ID_SETLABELTEXTCOLOUR, GridFrame::SetLabelTextColour )
53 EVT_MENU( ID_ROWLABELHORIZALIGN, GridFrame::SetRowLabelHorizAlignment )
54 EVT_MENU( ID_ROWLABELVERTALIGN, GridFrame::SetRowLabelVertAlignment )
55 EVT_MENU( ID_COLLABELHORIZALIGN, GridFrame::SetColLabelHorizAlignment )
56 EVT_MENU( ID_COLLABELVERTALIGN, GridFrame::SetColLabelVertAlignment )
57 EVT_MENU( ID_GRIDLINECOLOUR, GridFrame::SetGridLineColour )
58 EVT_MENU( ID_INSERTROW, GridFrame::InsertRow )
59 EVT_MENU( ID_INSERTCOL, GridFrame::InsertCol )
60 EVT_MENU( ID_DELETEROW, GridFrame::DeleteSelectedRows )
61 EVT_MENU( ID_DELETECOL, GridFrame::DeleteSelectedCols )
62 EVT_MENU( ID_CLEARGRID, GridFrame::ClearGrid )
63
64 EVT_MENU( ID_ABOUT, GridFrame::About )
65 EVT_MENU( wxID_EXIT, GridFrame::OnQuit )
66
67 EVT_GRID_LABEL_LEFT_CLICK( GridFrame::OnLabelLeftClick )
68 EVT_GRID_CELL_LEFT_CLICK( GridFrame::OnCellLeftClick )
69 EVT_GRID_ROW_SIZE( GridFrame::OnRowSize )
70 EVT_GRID_COL_SIZE( GridFrame::OnColSize )
71 EVT_GRID_SELECT_CELL( GridFrame::OnSelectCell )
72 EVT_GRID_RANGE_SELECT( GridFrame::OnRangeSelected )
73 EVT_GRID_CELL_CHANGE( GridFrame::OnCellValueChanged )
74
75 END_EVENT_TABLE()
76
77
78 GridFrame::GridFrame()
79 : wxFrame( (wxFrame *)NULL, -1, "wxWindows grid class demo",
80 wxDefaultPosition,
81 wxDefaultSize )
82 {
83 int gridW = 600, gridH = 300;
84 int logW = gridW, logH = 80;
85
86 wxMenu *fileMenu = new wxMenu;
87 fileMenu->Append( wxID_EXIT, "E&xit\tAlt-X" );
88
89 wxMenu *viewMenu = new wxMenu;
90 viewMenu->Append( ID_TOGGLEROWLABELS, "&Row labels", "", TRUE );
91 viewMenu->Append( ID_TOGGLECOLLABELS, "&Col labels", "", TRUE );
92 viewMenu->Append( ID_TOGGLEEDIT, "&Editable", "", TRUE );
93 viewMenu->Append( ID_SETLABELCOLOUR, "Set &label colour" );
94 viewMenu->Append( ID_SETLABELTEXTCOLOUR, "Set label &text colour" );
95
96 wxMenu *rowLabelMenu = new wxMenu;
97
98 viewMenu->Append( ID_ROWLABELALIGN, "R&ow label alignment",
99 rowLabelMenu,
100 "Change alignment of row labels" );
101
102 rowLabelMenu->Append( ID_ROWLABELHORIZALIGN, "&Horizontal" );
103 rowLabelMenu->Append( ID_ROWLABELVERTALIGN, "&Vertical" );
104
105 wxMenu *colLabelMenu = new wxMenu;
106
107 viewMenu->Append( ID_COLLABELALIGN, "Col l&abel alignment",
108 colLabelMenu,
109 "Change alignment of col labels" );
110
111 colLabelMenu->Append( ID_COLLABELHORIZALIGN, "&Horizontal" );
112 colLabelMenu->Append( ID_COLLABELVERTALIGN, "&Vertical" );
113
114 viewMenu->Append( ID_GRIDLINECOLOUR, "&Grid line colour" );
115
116 wxMenu *editMenu = new wxMenu;
117 editMenu->Append( ID_INSERTROW, "Insert &row" );
118 editMenu->Append( ID_INSERTCOL, "Insert &column" );
119 editMenu->Append( ID_DELETEROW, "Delete selected ro&ws" );
120 editMenu->Append( ID_DELETECOL, "Delete selected co&ls" );
121 editMenu->Append( ID_CLEARGRID, "Cl&ear grid cell contents" );
122
123 wxMenu *helpMenu = new wxMenu;
124 helpMenu->Append( ID_ABOUT, "&About wxGrid demo" );
125
126 wxMenuBar *menuBar = new wxMenuBar;
127 menuBar->Append( fileMenu, "&File" );
128 menuBar->Append( viewMenu, "&View" );
129 menuBar->Append( editMenu, "&Edit" );
130 menuBar->Append( helpMenu, "&Help" );
131
132 SetMenuBar( menuBar );
133
134 grid = new wxGrid( this,
135 -1,
136 wxPoint( 0, 0 ),
137 wxSize( 400, 300 ) );
138
139 logWin = new wxTextCtrl( this,
140 -1,
141 wxEmptyString,
142 wxPoint( 0, gridH + 20 ),
143 wxSize( logW, logH ),
144 wxTE_MULTILINE );
145
146 logger = new wxLogTextCtrl( logWin );
147 logger->SetActiveTarget( logger );
148 logger->SetTimestamp( NULL );
149
150 // this will create a grid and, by default, an associated grid
151 // table for string data
152 //
153 grid->CreateGrid( 100, 100 );
154
155 grid->SetRowSize( 0, 60 );
156 grid->SetCellValue( 0, 0, "Ctrl+Home\nwill go to\nthis cell" );
157
158 grid->SetCellValue( 0, 1, "Blah" );
159 grid->SetCellValue( 0, 2, "Blah" );
160
161 grid->SetCellValue( 0, 5, "Press\nCtrl+arrow\nto skip over\ncells" );
162
163 grid->SetRowSize( 99, 60 );
164 grid->SetCellValue( 99, 99, "Ctrl+End\nwill go to\nthis cell" );
165
166 wxBoxSizer *topSizer = new wxBoxSizer( wxVERTICAL );
167 topSizer->Add( grid,
168 1,
169 wxEXPAND );
170
171 topSizer->Add( logWin,
172 0,
173 wxEXPAND );
174
175 SetAutoLayout( TRUE );
176 SetSizer( topSizer );
177
178 topSizer->Fit( this );
179 topSizer->SetSizeHints( this );
180
181 Centre();
182 SetDefaults();
183 }
184
185
186 GridFrame::~GridFrame()
187 {
188 }
189
190
191 void GridFrame::SetDefaults()
192 {
193 GetMenuBar()->Check( ID_TOGGLEROWLABELS, TRUE );
194 GetMenuBar()->Check( ID_TOGGLECOLLABELS, TRUE );
195 GetMenuBar()->Check( ID_TOGGLEEDIT, TRUE );
196 }
197
198
199 void GridFrame::ToggleRowLabels( wxCommandEvent& WXUNUSED(ev) )
200 {
201 if ( GetMenuBar()->IsChecked( ID_TOGGLEROWLABELS ) )
202 {
203 grid->SetRowLabelSize( grid->GetDefaultRowLabelSize() );
204 }
205 else
206 {
207 grid->SetRowLabelSize( 0 );
208 }
209 }
210
211
212 void GridFrame::ToggleColLabels( wxCommandEvent& WXUNUSED(ev) )
213 {
214 if ( GetMenuBar()->IsChecked( ID_TOGGLECOLLABELS ) )
215 {
216 grid->SetColLabelSize( grid->GetDefaultColLabelSize() );
217 }
218 else
219 {
220 grid->SetColLabelSize( 0 );
221 }
222 }
223
224
225 void GridFrame::ToggleEditing( wxCommandEvent& WXUNUSED(ev) )
226 {
227 grid->EnableEditing(
228 GetMenuBar()->IsChecked( ID_TOGGLEEDIT ) );
229 }
230
231
232 void GridFrame::SetLabelColour( wxCommandEvent& WXUNUSED(ev) )
233 {
234 wxColourDialog dlg( NULL );
235 if ( dlg.ShowModal() == wxID_OK )
236 {
237 wxColourData retData;
238 retData = dlg.GetColourData();
239 wxColour colour = retData.GetColour();
240
241 grid->SetLabelBackgroundColour( colour );
242 }
243 }
244
245
246 void GridFrame::SetLabelTextColour( wxCommandEvent& WXUNUSED(ev) )
247 {
248 wxColourDialog dlg( NULL );
249 if ( dlg.ShowModal() == wxID_OK )
250 {
251 wxColourData retData;
252 retData = dlg.GetColourData();
253 wxColour colour = retData.GetColour();
254
255 grid->SetLabelTextColour( colour );
256 }
257 }
258
259
260 void GridFrame::SetRowLabelHorizAlignment( wxCommandEvent& WXUNUSED(ev) )
261 {
262 int horiz, vert;
263 grid->GetRowLabelAlignment( &horiz, &vert );
264
265 switch ( horiz )
266 {
267 case wxLEFT:
268 horiz = wxCENTRE;
269 break;
270
271 case wxCENTRE:
272 horiz = wxRIGHT;
273 break;
274
275 case wxRIGHT:
276 horiz = wxLEFT;
277 break;
278 }
279
280 grid->SetRowLabelAlignment( horiz, -1 );
281 }
282
283 void GridFrame::SetRowLabelVertAlignment( wxCommandEvent& WXUNUSED(ev) )
284 {
285 int horiz, vert;
286 grid->GetRowLabelAlignment( &horiz, &vert );
287
288 switch ( vert )
289 {
290 case wxTOP:
291 vert = wxCENTRE;
292 break;
293
294 case wxCENTRE:
295 vert = wxBOTTOM;
296 break;
297
298 case wxBOTTOM:
299 vert = wxTOP;
300 break;
301 }
302
303 grid->SetRowLabelAlignment( -1, vert );
304 }
305
306
307 void GridFrame::SetColLabelHorizAlignment( wxCommandEvent& WXUNUSED(ev) )
308 {
309 int horiz, vert;
310 grid->GetColLabelAlignment( &horiz, &vert );
311
312 switch ( horiz )
313 {
314 case wxLEFT:
315 horiz = wxCENTRE;
316 break;
317
318 case wxCENTRE:
319 horiz = wxRIGHT;
320 break;
321
322 case wxRIGHT:
323 horiz = wxLEFT;
324 break;
325 }
326
327 grid->SetColLabelAlignment( horiz, -1 );
328 }
329
330
331 void GridFrame::SetColLabelVertAlignment( wxCommandEvent& WXUNUSED(ev) )
332 {
333 int horiz, vert;
334 grid->GetColLabelAlignment( &horiz, &vert );
335
336 switch ( vert )
337 {
338 case wxTOP:
339 vert = wxCENTRE;
340 break;
341
342 case wxCENTRE:
343 vert = wxBOTTOM;
344 break;
345
346 case wxBOTTOM:
347 vert = wxTOP;
348 break;
349 }
350
351 grid->SetColLabelAlignment( -1, vert );
352 }
353
354
355 void GridFrame::SetGridLineColour( wxCommandEvent& WXUNUSED(ev) )
356 {
357 wxColourDialog dlg( NULL );
358 if ( dlg.ShowModal() == wxID_OK )
359 {
360 wxColourData retData;
361 retData = dlg.GetColourData();
362 wxColour colour = retData.GetColour();
363
364 grid->SetGridLineColour( colour );
365 }
366 }
367
368
369 void GridFrame::InsertRow( wxCommandEvent& WXUNUSED(ev) )
370 {
371 grid->InsertRows( 0, 1 );
372 }
373
374
375 void GridFrame::InsertCol( wxCommandEvent& WXUNUSED(ev) )
376 {
377 grid->InsertCols( 0, 1 );
378 }
379
380
381 void GridFrame::DeleteSelectedRows( wxCommandEvent& WXUNUSED(ev) )
382 {
383 if ( grid->IsSelection() )
384 {
385 int topRow, bottomRow, leftCol, rightCol;
386 grid->GetSelection( &topRow, &leftCol, &bottomRow, &rightCol );
387 grid->DeleteRows( topRow, bottomRow - topRow + 1 );
388 }
389 }
390
391
392 void GridFrame::DeleteSelectedCols( wxCommandEvent& WXUNUSED(ev) )
393 {
394 if ( grid->IsSelection() )
395 {
396 int topRow, bottomRow, leftCol, rightCol;
397 grid->GetSelection( &topRow, &leftCol, &bottomRow, &rightCol );
398 grid->DeleteCols( leftCol, rightCol - leftCol + 1 );
399 }
400 }
401
402
403 void GridFrame::ClearGrid( wxCommandEvent& WXUNUSED(ev) )
404 {
405 grid->ClearGrid();
406 }
407
408
409 void GridFrame::OnLabelLeftClick( wxGridEvent& ev )
410 {
411 logBuf = "";
412 if ( ev.GetRow() != -1 )
413 {
414 logBuf << "Left click on row label " << ev.GetRow();
415 }
416 else if ( ev.GetCol() != -1 )
417 {
418 logBuf << "Left click on col label " << ev.GetCol();
419 }
420 else
421 {
422 logBuf << "Left click on corner label";
423 }
424
425 if ( ev.ShiftDown() ) logBuf << " (shift down)";
426 wxLogMessage( "%s", logBuf.c_str() );
427
428 // you must call event skip if you want default grid processing
429 //
430 ev.Skip();
431 }
432
433
434 void GridFrame::OnCellLeftClick( wxGridEvent& ev )
435 {
436 logBuf = "";
437 logBuf << "Left click at row " << ev.GetRow()
438 << " col " << ev.GetCol();
439 wxLogMessage( "%s", logBuf.c_str() );
440
441 // you must call event skip if you want default grid processing
442 // (cell highlighting etc.)
443 //
444 ev.Skip();
445 }
446
447
448 void GridFrame::OnRowSize( wxGridSizeEvent& ev )
449 {
450 logBuf = "";
451 logBuf << "Resized row " << ev.GetRowOrCol();
452 wxLogMessage( "%s", logBuf.c_str() );
453
454 ev.Skip();
455 }
456
457
458 void GridFrame::OnColSize( wxGridSizeEvent& ev )
459 {
460 logBuf = "";
461 logBuf << "Resized col " << ev.GetRowOrCol();
462 wxLogMessage( "%s", logBuf.c_str() );
463
464 ev.Skip();
465 }
466
467
468 void GridFrame::OnSelectCell( wxGridEvent& ev )
469 {
470 logBuf = "";
471 logBuf << "Selected cell at row " << ev.GetRow()
472 << " col " << ev.GetCol();
473 wxLogMessage( "%s", logBuf.c_str() );
474
475 // you must call Skip() if you want the default processing
476 // to occur in wxGrid
477 ev.Skip();
478 }
479
480 void GridFrame::OnRangeSelected( wxGridRangeSelectEvent& ev )
481 {
482 logBuf = "";
483 logBuf << "Selected cells from row " << ev.GetTopRow()
484 << " col " << ev.GetLeftCol()
485 << " to row " << ev.GetBottomRow()
486 << " col " << ev.GetRightCol();
487
488 wxLogMessage( "%s", logBuf.c_str() );
489
490 ev.Skip();
491 }
492
493 void GridFrame::OnCellValueChanged( wxGridEvent& ev )
494 {
495 logBuf = "";
496 logBuf << "Value changed for cell at"
497 << " row " << ev.GetRow()
498 << " col " << ev.GetCol();
499
500 wxLogMessage( "%s", logBuf.c_str() );
501
502 ev.Skip();
503 }
504
505
506 void GridFrame::About( wxCommandEvent& WXUNUSED(ev) )
507 {
508 (void)wxMessageBox( "\n\nwxGrid demo \n\n"
509 "Michael Bedward \n"
510 "mbedward@ozemail.com.au \n\n",
511 "About",
512 wxOK );
513 }
514
515
516 void GridFrame::OnQuit( wxCommandEvent& WXUNUSED(ev) )
517 {
518 Close( TRUE );
519 }
520