1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: Grid control wxWindows sample
4 // Author: Michael Bedward
7 // Copyright: (c) Michael Bedward, Julian Smart
8 // Licence: wxWindows license
9 /////////////////////////////////////////////////////////////////////////////
12 #pragma implementation
16 // For compilers that support precompilation, includes "wx/wx.h".
17 #include "wx/wxprec.h"
27 #include "wx/colordlg.h"
33 IMPLEMENT_APP( GridApp
)
37 bool GridApp::OnInit()
39 GridFrame
*frame
= new GridFrame
;
47 BEGIN_EVENT_TABLE( GridFrame
, wxFrame
)
48 EVT_MENU( ID_TOGGLEROWLABELS
, GridFrame::ToggleRowLabels
)
49 EVT_MENU( ID_TOGGLECOLLABELS
, GridFrame::ToggleColLabels
)
50 EVT_MENU( ID_TOGGLECONTROLPANEL
, GridFrame::ToggleControlPanel
)
51 EVT_MENU( ID_TOGGLECELLEDIT
, GridFrame::ToggleCellEdit
)
52 EVT_MENU( ID_SETLABELCOLOUR
, GridFrame::SetLabelColour
)
53 EVT_MENU( ID_SETLABELTEXTCOLOUR
, GridFrame::SetLabelTextColour
)
54 EVT_MENU( ID_ROWLABELHORIZALIGN
, GridFrame::SetRowLabelHorizAlignment
)
55 EVT_MENU( ID_ROWLABELVERTALIGN
, GridFrame::SetRowLabelVertAlignment
)
56 EVT_MENU( ID_COLLABELHORIZALIGN
, GridFrame::SetColLabelHorizAlignment
)
57 EVT_MENU( ID_COLLABELVERTALIGN
, GridFrame::SetColLabelVertAlignment
)
58 EVT_MENU( ID_GRIDLINECOLOUR
, GridFrame::SetGridLineColour
)
59 EVT_MENU( ID_INSERTROW
, GridFrame::InsertRow
)
60 EVT_MENU( ID_INSERTCOL
, GridFrame::InsertCol
)
61 EVT_MENU( ID_DELETEROW
, GridFrame::DeleteRow
)
62 EVT_MENU( ID_DELETECOL
, GridFrame::DeleteCol
)
63 EVT_MENU( ID_CLEARGRID
, GridFrame::ClearGrid
)
64 EVT_MENU( ID_ABOUT
, GridFrame::About
)
65 EVT_MENU( wxID_EXIT
, GridFrame::OnQuit
)
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
)
77 GridFrame::GridFrame()
78 : wxFrame( (wxFrame
*)NULL
, -1, "wxWindows grid class demo",
82 int gridW
= 600, gridH
= 300;
83 int logW
= gridW
, logH
= 80;
85 wxMenu
*fileMenu
= new wxMenu
;
86 fileMenu
->Append( wxID_EXIT
, "E&xit" );
88 wxMenu
*viewMenu
= new wxMenu
;
89 viewMenu
->Append( ID_TOGGLEROWLABELS
, "&Row labels", "", TRUE
);
90 viewMenu
->Append( ID_TOGGLECOLLABELS
, "&Col labels", "", TRUE
);
91 viewMenu
->Append( ID_TOGGLECONTROLPANEL
, "To&p controls", "", TRUE
);
92 viewMenu
->Append( ID_TOGGLECELLEDIT
, "&In-place editing", "", TRUE
);
93 viewMenu
->Append( ID_SETLABELCOLOUR
, "Set &label colour" );
94 viewMenu
->Append( ID_SETLABELTEXTCOLOUR
, "Set label &text colour" );
96 wxMenu
*rowLabelMenu
= new wxMenu
;
98 viewMenu
->Append( ID_ROWLABELALIGN
, "R&ow label alignment",
100 "Change alignment of row labels" );
102 rowLabelMenu
->Append( ID_ROWLABELHORIZALIGN
, "&Horizontal" );
103 rowLabelMenu
->Append( ID_ROWLABELVERTALIGN
, "&Vertical" );
105 wxMenu
*colLabelMenu
= new wxMenu
;
107 viewMenu
->Append( ID_COLLABELALIGN
, "Col l&abel alignment",
109 "Change alignment of col labels" );
111 colLabelMenu
->Append( ID_COLLABELHORIZALIGN
, "&Horizontal" );
112 colLabelMenu
->Append( ID_COLLABELVERTALIGN
, "&Vertical" );
114 viewMenu
->Append( ID_GRIDLINECOLOUR
, "&Grid line colour" );
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 ro&w" );
120 editMenu
->Append( ID_DELETECOL
, "Delete co&l" );
121 editMenu
->Append( ID_CLEARGRID
, "Cl&ear grid cell contents" );
123 wxMenu
*helpMenu
= new wxMenu
;
124 helpMenu
->Append( ID_ABOUT
, "&About wxGrid demo" );
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" );
132 SetMenuBar( menuBar
);
134 grid
= new wxGrid( this,
137 wxSize( 400, 300 ) );
139 logWin
= new wxTextCtrl( this,
142 wxPoint( 0, gridH
+ 20 ),
143 wxSize( logW
, logH
),
146 logger
= new wxLogTextCtrl( logWin
);
147 logger
->SetActiveTarget( logger
);
148 logger
->SetTimestamp( NULL
);
150 // this will create a grid and, by default, an associated grid
151 // table for string data
153 grid
->CreateGrid( 100, 100 );
155 grid
->EnableTopEditControl( TRUE
);
157 grid
->SetRowSize( 0, 60 );
158 grid
->SetCellValue( 0, 0, "Ctrl+Home\nwill go to\nthis cell" );
160 grid
->SetCellValue( 0, 1, "Blah" );
161 grid
->SetCellValue( 0, 2, "Blah" );
163 grid
->SetCellValue( 0, 5, "Press\nCtrl+arrow\nto skip over\ncells" );
165 grid
->SetRowSize( 99, 60 );
166 grid
->SetCellValue( 99, 99, "Ctrl+End\nwill go to\nthis cell" );
168 wxBoxSizer
*topSizer
= new wxBoxSizer( wxVERTICAL
);
173 topSizer
->Add( logWin
,
177 SetAutoLayout( TRUE
);
178 SetSizer( topSizer
);
180 topSizer
->Fit( this );
181 topSizer
->SetSizeHints( this );
188 GridFrame::~GridFrame()
192 void GridFrame::SetDefaults()
194 GetMenuBar()->Check( ID_TOGGLEROWLABELS
, TRUE
);
195 GetMenuBar()->Check( ID_TOGGLECOLLABELS
, TRUE
);
196 GetMenuBar()->Check( ID_TOGGLECONTROLPANEL
, TRUE
);
197 GetMenuBar()->Check( ID_TOGGLECELLEDIT
, TRUE
);
201 void GridFrame::ToggleRowLabels( wxCommandEvent
& WXUNUSED(ev
) )
203 if ( GetMenuBar()->IsChecked( ID_TOGGLEROWLABELS
) )
205 grid
->SetRowLabelSize( grid
->GetDefaultRowLabelSize() );
209 grid
->SetRowLabelSize( 0 );
214 void GridFrame::ToggleColLabels( wxCommandEvent
& WXUNUSED(ev
) )
216 if ( GetMenuBar()->IsChecked( ID_TOGGLECOLLABELS
) )
218 grid
->SetColLabelSize( grid
->GetDefaultColLabelSize() );
222 grid
->SetColLabelSize( 0 );
227 void GridFrame::ToggleControlPanel( wxCommandEvent
& WXUNUSED(ev
) )
229 grid
->EnableTopEditControl(GetMenuBar()->IsChecked(ID_TOGGLECONTROLPANEL
));
233 void GridFrame::ToggleCellEdit( wxCommandEvent
& WXUNUSED(ev
) )
235 grid
->EnableCellEditControl(
236 GetMenuBar()->IsChecked( ID_TOGGLECELLEDIT
) );
240 void GridFrame::SetLabelColour( wxCommandEvent
& WXUNUSED(ev
) )
242 wxColourDialog
dlg( NULL
);
243 if ( dlg
.ShowModal() == wxID_OK
)
245 wxColourData retData
;
246 retData
= dlg
.GetColourData();
247 wxColour colour
= retData
.GetColour();
249 grid
->SetLabelBackgroundColour( colour
);
254 void GridFrame::SetLabelTextColour( wxCommandEvent
& WXUNUSED(ev
) )
256 wxColourDialog
dlg( NULL
);
257 if ( dlg
.ShowModal() == wxID_OK
)
259 wxColourData retData
;
260 retData
= dlg
.GetColourData();
261 wxColour colour
= retData
.GetColour();
263 grid
->SetLabelTextColour( colour
);
268 void GridFrame::SetRowLabelHorizAlignment( wxCommandEvent
& WXUNUSED(ev
) )
271 grid
->GetRowLabelAlignment( &horiz
, &vert
);
288 grid
->SetRowLabelAlignment( horiz
, -1 );
291 void GridFrame::SetRowLabelVertAlignment( wxCommandEvent
& WXUNUSED(ev
) )
294 grid
->GetRowLabelAlignment( &horiz
, &vert
);
311 grid
->SetRowLabelAlignment( -1, vert
);
315 void GridFrame::SetColLabelHorizAlignment( wxCommandEvent
& WXUNUSED(ev
) )
318 grid
->GetColLabelAlignment( &horiz
, &vert
);
335 grid
->SetColLabelAlignment( horiz
, -1 );
339 void GridFrame::SetColLabelVertAlignment( wxCommandEvent
& WXUNUSED(ev
) )
342 grid
->GetColLabelAlignment( &horiz
, &vert
);
359 grid
->SetColLabelAlignment( -1, vert
);
363 void GridFrame::SetGridLineColour( wxCommandEvent
& WXUNUSED(ev
) )
365 wxColourDialog
dlg( NULL
);
366 if ( dlg
.ShowModal() == wxID_OK
)
368 wxColourData retData
;
369 retData
= dlg
.GetColourData();
370 wxColour colour
= retData
.GetColour();
372 grid
->SetGridLineColour( colour
);
377 void GridFrame::InsertRow( wxCommandEvent
& WXUNUSED(ev
) )
379 grid
->InsertRows( 0, 1 );
383 void GridFrame::InsertCol( wxCommandEvent
& WXUNUSED(ev
) )
385 grid
->InsertCols( 0, 1 );
389 void GridFrame::DeleteRow( wxCommandEvent
& WXUNUSED(ev
) )
391 grid
->DeleteRows( 0, 1 );
395 void GridFrame::DeleteCol( wxCommandEvent
& WXUNUSED(ev
) )
397 grid
->DeleteCols( 0, 1 );
401 void GridFrame::ClearGrid( wxCommandEvent
& WXUNUSED(ev
) )
407 void GridFrame::About( wxCommandEvent
& WXUNUSED(ev
) )
409 (void)wxMessageBox( "\n\nwxGrid demo \n\n"
411 "mbedward@ozemail.com.au \n\n",
417 void GridFrame::OnSize( wxSizeEvent
& WXUNUSED(ev
) )
419 if ( grid
&& logWin
)
422 GetClientSize( &cw
, &ch
);
431 grid
->SetSize( 0, 0, cw
, gridH
);
432 logWin
->SetSize( 0, gridH
+ 10, cw
, logH
);
436 void GridFrame::OnQuit( wxCommandEvent
& WXUNUSED(ev
) )
442 void GridFrame::OnLabelLeftClick( wxGridEvent
& ev
)
445 if ( ev
.GetRow() != -1 )
447 logBuf
<< "Left click on row label " << ev
.GetRow();
449 else if ( ev
.GetCol() != -1 )
451 logBuf
<< "Left click on col label " << ev
.GetCol();
455 logBuf
<< "Left click on corner label";
458 if ( ev
.ShiftDown() ) logBuf
<< " (shift down)";
459 wxLogMessage( "%s", logBuf
.c_str() );
461 // you must call event skip if you want default grid processing
467 void GridFrame::OnCellLeftClick( wxGridEvent
& ev
)
470 logBuf
<< "Left click at row " << ev
.GetRow()
471 << " col " << ev
.GetCol();
472 wxLogMessage( "%s", logBuf
.c_str() );
474 // you must call event skip if you want default grid processing
475 // (cell highlighting etc.)
481 void GridFrame::OnRowSize( wxGridSizeEvent
& ev
)
484 logBuf
<< "Resized row " << ev
.GetRowOrCol();
485 wxLogMessage( "%s", logBuf
.c_str() );
491 void GridFrame::OnColSize( wxGridSizeEvent
& ev
)
494 logBuf
<< "Resized col " << ev
.GetRowOrCol();
495 wxLogMessage( "%s", logBuf
.c_str() );
501 void GridFrame::OnSelectCell( wxGridEvent
& ev
)
504 logBuf
<< "Selected cell at row " << ev
.GetRow()
505 << " col " << ev
.GetCol();
506 wxLogMessage( "%s", logBuf
.c_str() );
508 // you must call Skip() if you want the default processing
509 // to occur in wxGrid
513 void GridFrame::OnRangeSelected( wxGridRangeSelectEvent
& ev
)
516 logBuf
<< "Selected cells from row " << ev
.GetTopRow()
517 << " col " << ev
.GetLeftCol()
518 << " to row " << ev
.GetBottomRow()
519 << " col " << ev
.GetRightCol();
521 wxLogMessage( "%s", logBuf
.c_str() );
526 void GridFrame::OnCellValueChanged( wxGridEvent
& ev
)
529 logBuf
<< "Value changed for cell at"
530 << " row " << ev
.GetRow()
531 << " col " << ev
.GetCol();
533 wxLogMessage( "%s", logBuf
.c_str() );