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_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
)
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
)
78 GridFrame::GridFrame()
79 : wxFrame( (wxFrame
*)NULL
, -1, "wxWindows grid class demo",
83 int gridW
= 600, gridH
= 300;
84 int logW
= gridW
, logH
= 80;
86 wxMenu
*fileMenu
= new wxMenu
;
87 fileMenu
->Append( wxID_EXIT
, "E&xit\tAlt-X" );
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" );
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 selected ro&ws" );
120 editMenu
->Append( ID_DELETECOL
, "Delete selected co&ls" );
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
->SetRowSize( 0, 60 );
156 grid
->SetCellValue( 0, 0, "Ctrl+Home\nwill go to\nthis cell" );
158 grid
->SetCellValue( 0, 1, "Blah" );
159 grid
->SetCellValue( 0, 2, "Blah" );
161 grid
->SetCellValue( 0, 5, "Press\nCtrl+arrow\nto skip over\ncells" );
163 grid
->SetRowSize( 99, 60 );
164 grid
->SetCellValue( 99, 99, "Ctrl+End\nwill go to\nthis cell" );
166 grid
->SetCellValue(2, 2, "red");
167 grid
->SetCellTextColour(2, 2, *wxRED
);
168 grid
->SetCellValue(3, 3, "green on white");
169 grid
->SetCellTextColour(3, 3, *wxGREEN
);
170 grid
->SetCellBackgroundColour(3, 3, *wxWHITE
);
172 wxBoxSizer
*topSizer
= new wxBoxSizer( wxVERTICAL
);
177 topSizer
->Add( logWin
,
181 SetAutoLayout( TRUE
);
182 SetSizer( topSizer
);
184 topSizer
->Fit( this );
185 topSizer
->SetSizeHints( this );
192 GridFrame::~GridFrame()
197 void GridFrame::SetDefaults()
199 GetMenuBar()->Check( ID_TOGGLEROWLABELS
, TRUE
);
200 GetMenuBar()->Check( ID_TOGGLECOLLABELS
, TRUE
);
201 GetMenuBar()->Check( ID_TOGGLEEDIT
, TRUE
);
205 void GridFrame::ToggleRowLabels( wxCommandEvent
& WXUNUSED(ev
) )
207 if ( GetMenuBar()->IsChecked( ID_TOGGLEROWLABELS
) )
209 grid
->SetRowLabelSize( grid
->GetDefaultRowLabelSize() );
213 grid
->SetRowLabelSize( 0 );
218 void GridFrame::ToggleColLabels( wxCommandEvent
& WXUNUSED(ev
) )
220 if ( GetMenuBar()->IsChecked( ID_TOGGLECOLLABELS
) )
222 grid
->SetColLabelSize( grid
->GetDefaultColLabelSize() );
226 grid
->SetColLabelSize( 0 );
231 void GridFrame::ToggleEditing( wxCommandEvent
& WXUNUSED(ev
) )
234 GetMenuBar()->IsChecked( ID_TOGGLEEDIT
) );
238 void GridFrame::SetLabelColour( wxCommandEvent
& WXUNUSED(ev
) )
240 wxColourDialog
dlg( NULL
);
241 if ( dlg
.ShowModal() == wxID_OK
)
243 wxColourData retData
;
244 retData
= dlg
.GetColourData();
245 wxColour colour
= retData
.GetColour();
247 grid
->SetLabelBackgroundColour( colour
);
252 void GridFrame::SetLabelTextColour( wxCommandEvent
& WXUNUSED(ev
) )
254 wxColourDialog
dlg( NULL
);
255 if ( dlg
.ShowModal() == wxID_OK
)
257 wxColourData retData
;
258 retData
= dlg
.GetColourData();
259 wxColour colour
= retData
.GetColour();
261 grid
->SetLabelTextColour( colour
);
266 void GridFrame::SetRowLabelHorizAlignment( wxCommandEvent
& WXUNUSED(ev
) )
269 grid
->GetRowLabelAlignment( &horiz
, &vert
);
286 grid
->SetRowLabelAlignment( horiz
, -1 );
289 void GridFrame::SetRowLabelVertAlignment( wxCommandEvent
& WXUNUSED(ev
) )
292 grid
->GetRowLabelAlignment( &horiz
, &vert
);
309 grid
->SetRowLabelAlignment( -1, vert
);
313 void GridFrame::SetColLabelHorizAlignment( wxCommandEvent
& WXUNUSED(ev
) )
316 grid
->GetColLabelAlignment( &horiz
, &vert
);
333 grid
->SetColLabelAlignment( horiz
, -1 );
337 void GridFrame::SetColLabelVertAlignment( wxCommandEvent
& WXUNUSED(ev
) )
340 grid
->GetColLabelAlignment( &horiz
, &vert
);
357 grid
->SetColLabelAlignment( -1, vert
);
361 void GridFrame::SetGridLineColour( wxCommandEvent
& WXUNUSED(ev
) )
363 wxColourDialog
dlg( NULL
);
364 if ( dlg
.ShowModal() == wxID_OK
)
366 wxColourData retData
;
367 retData
= dlg
.GetColourData();
368 wxColour colour
= retData
.GetColour();
370 grid
->SetGridLineColour( colour
);
375 void GridFrame::InsertRow( wxCommandEvent
& WXUNUSED(ev
) )
377 grid
->InsertRows( 0, 1 );
381 void GridFrame::InsertCol( wxCommandEvent
& WXUNUSED(ev
) )
383 grid
->InsertCols( 0, 1 );
387 void GridFrame::DeleteSelectedRows( wxCommandEvent
& WXUNUSED(ev
) )
389 if ( grid
->IsSelection() )
391 int topRow
, bottomRow
, leftCol
, rightCol
;
392 grid
->GetSelection( &topRow
, &leftCol
, &bottomRow
, &rightCol
);
393 grid
->DeleteRows( topRow
, bottomRow
- topRow
+ 1 );
398 void GridFrame::DeleteSelectedCols( wxCommandEvent
& WXUNUSED(ev
) )
400 if ( grid
->IsSelection() )
402 int topRow
, bottomRow
, leftCol
, rightCol
;
403 grid
->GetSelection( &topRow
, &leftCol
, &bottomRow
, &rightCol
);
404 grid
->DeleteCols( leftCol
, rightCol
- leftCol
+ 1 );
409 void GridFrame::ClearGrid( wxCommandEvent
& WXUNUSED(ev
) )
415 void GridFrame::OnLabelLeftClick( wxGridEvent
& ev
)
418 if ( ev
.GetRow() != -1 )
420 logBuf
<< "Left click on row label " << ev
.GetRow();
422 else if ( ev
.GetCol() != -1 )
424 logBuf
<< "Left click on col label " << ev
.GetCol();
428 logBuf
<< "Left click on corner label";
431 if ( ev
.ShiftDown() ) logBuf
<< " (shift down)";
432 wxLogMessage( "%s", logBuf
.c_str() );
434 // you must call event skip if you want default grid processing
440 void GridFrame::OnCellLeftClick( wxGridEvent
& ev
)
443 logBuf
<< "Left click at row " << ev
.GetRow()
444 << " col " << ev
.GetCol();
445 wxLogMessage( "%s", logBuf
.c_str() );
447 // you must call event skip if you want default grid processing
448 // (cell highlighting etc.)
454 void GridFrame::OnRowSize( wxGridSizeEvent
& ev
)
457 logBuf
<< "Resized row " << ev
.GetRowOrCol();
458 wxLogMessage( "%s", logBuf
.c_str() );
464 void GridFrame::OnColSize( wxGridSizeEvent
& ev
)
467 logBuf
<< "Resized col " << ev
.GetRowOrCol();
468 wxLogMessage( "%s", logBuf
.c_str() );
474 void GridFrame::OnSelectCell( wxGridEvent
& ev
)
477 logBuf
<< "Selected cell at row " << ev
.GetRow()
478 << " col " << ev
.GetCol();
479 wxLogMessage( "%s", logBuf
.c_str() );
481 // you must call Skip() if you want the default processing
482 // to occur in wxGrid
486 void GridFrame::OnRangeSelected( wxGridRangeSelectEvent
& ev
)
489 logBuf
<< "Selected cells from row " << ev
.GetTopRow()
490 << " col " << ev
.GetLeftCol()
491 << " to row " << ev
.GetBottomRow()
492 << " col " << ev
.GetRightCol();
494 wxLogMessage( "%s", logBuf
.c_str() );
499 void GridFrame::OnCellValueChanged( wxGridEvent
& ev
)
502 logBuf
<< "Value changed for cell at"
503 << " row " << ev
.GetRow()
504 << " col " << ev
.GetCol();
506 wxLogMessage( "%s", logBuf
.c_str() );
512 void GridFrame::About( wxCommandEvent
& WXUNUSED(ev
) )
514 (void)wxMessageBox( "\n\nwxGrid demo \n\n"
516 "mbedward@ozemail.com.au \n\n",
522 void GridFrame::OnQuit( wxCommandEvent
& WXUNUSED(ev
) )