X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/10434f3c24ae2faf228b6b6c6b6cb6de0c26213d..0a976765870f164048378a054af1b8904f2ecdb1:/samples/newgrid/griddemo.cpp diff --git a/samples/newgrid/griddemo.cpp b/samples/newgrid/griddemo.cpp index 66ccfe5644..768c9c5737 100644 --- a/samples/newgrid/griddemo.cpp +++ b/samples/newgrid/griddemo.cpp @@ -8,9 +8,17 @@ // Licence: wxWindows license ///////////////////////////////////////////////////////////////////////////// +// ============================================================================ +// declarations +// ============================================================================ + +// ---------------------------------------------------------------------------- +// headers +// ---------------------------------------------------------------------------- + #ifdef __GNUG__ -#pragma implementation -#pragma interface + #pragma implementation + #pragma interface #endif // For compilers that support precompilation, includes "wx/wx.h". @@ -30,45 +38,66 @@ #include "griddemo.h" +// ---------------------------------------------------------------------------- +// wxWin macros +// ---------------------------------------------------------------------------- + IMPLEMENT_APP( GridApp ) +// ============================================================================ +// implementation +// ============================================================================ +// ---------------------------------------------------------------------------- +// GridApp +// ---------------------------------------------------------------------------- bool GridApp::OnInit() { GridFrame *frame = new GridFrame; frame->Show( TRUE ); - + return TRUE; } - +// ---------------------------------------------------------------------------- +// GridFrame +// ---------------------------------------------------------------------------- BEGIN_EVENT_TABLE( GridFrame, wxFrame ) EVT_MENU( ID_TOGGLEROWLABELS, GridFrame::ToggleRowLabels ) - EVT_MENU( ID_TOGGLECOLLABELS, GridFrame::ToggleColLabels ) - EVT_MENU( ID_TOGGLECONTROLPANEL, GridFrame::ToggleControlPanel ) - EVT_MENU( ID_TOGGLECELLEDIT, GridFrame::ToggleCellEdit ) - EVT_MENU( ID_SETLABELCOLOUR, GridFrame::SetLabelColour ) - EVT_MENU( ID_SETLABELTEXTCOLOUR, GridFrame::SetLabelTextColour ) - EVT_MENU( ID_ROWLABELHORIZALIGN, GridFrame::SetRowLabelHorizAlignment ) - EVT_MENU( ID_ROWLABELVERTALIGN, GridFrame::SetRowLabelVertAlignment ) - EVT_MENU( ID_COLLABELHORIZALIGN, GridFrame::SetColLabelHorizAlignment ) - EVT_MENU( ID_COLLABELVERTALIGN, GridFrame::SetColLabelVertAlignment ) + EVT_MENU( ID_TOGGLECOLLABELS, GridFrame::ToggleColLabels ) + EVT_MENU( ID_TOGGLEEDIT, GridFrame::ToggleEditing ) + EVT_MENU( ID_SETLABELCOLOUR, GridFrame::SetLabelColour ) + EVT_MENU( ID_SETLABELTEXTCOLOUR, GridFrame::SetLabelTextColour ) + EVT_MENU( ID_ROWLABELHORIZALIGN, GridFrame::SetRowLabelHorizAlignment ) + EVT_MENU( ID_ROWLABELVERTALIGN, GridFrame::SetRowLabelVertAlignment ) + EVT_MENU( ID_COLLABELHORIZALIGN, GridFrame::SetColLabelHorizAlignment ) + EVT_MENU( ID_COLLABELVERTALIGN, GridFrame::SetColLabelVertAlignment ) EVT_MENU( ID_GRIDLINECOLOUR, GridFrame::SetGridLineColour ) + EVT_MENU( ID_INSERTROW, GridFrame::InsertRow ) + EVT_MENU( ID_INSERTCOL, GridFrame::InsertCol ) + EVT_MENU( ID_DELETEROW, GridFrame::DeleteSelectedRows ) + EVT_MENU( ID_DELETECOL, GridFrame::DeleteSelectedCols ) EVT_MENU( ID_CLEARGRID, GridFrame::ClearGrid ) + + EVT_MENU( ID_SET_CELL_FG_COLOUR, GridFrame::SetCellFgColour ) + EVT_MENU( ID_SET_CELL_BG_COLOUR, GridFrame::SetCellBgColour ) + EVT_MENU( ID_ABOUT, GridFrame::About ) EVT_MENU( wxID_EXIT, GridFrame::OnQuit ) - EVT_WXGRID_LABEL_LEFT_CLICK( GridFrame::OnLabelLeftClick ) - EVT_WXGRID_CELL_LEFT_CLICK( GridFrame::OnCellLeftClick ) - EVT_WXGRID_ROW_SIZE( GridFrame::OnRowSize ) - EVT_WXGRID_COL_SIZE( GridFrame::OnColSize ) - EVT_WXGRID_RANGE_SELECT( GridFrame::OnRangeSelected ) - EVT_WXGRID_CELL_CHANGE( GridFrame::OnCellValueChanged ) + EVT_GRID_LABEL_LEFT_CLICK( GridFrame::OnLabelLeftClick ) + EVT_GRID_CELL_LEFT_CLICK( GridFrame::OnCellLeftClick ) + EVT_GRID_ROW_SIZE( GridFrame::OnRowSize ) + EVT_GRID_COL_SIZE( GridFrame::OnColSize ) + EVT_GRID_SELECT_CELL( GridFrame::OnSelectCell ) + EVT_GRID_RANGE_SELECT( GridFrame::OnRangeSelected ) + EVT_GRID_CELL_CHANGE( GridFrame::OnCellValueChanged ) + END_EVENT_TABLE() - + GridFrame::GridFrame() : wxFrame( (wxFrame *)NULL, -1, "wxWindows grid class demo", wxDefaultPosition, @@ -76,18 +105,15 @@ GridFrame::GridFrame() { int gridW = 600, gridH = 300; int logW = gridW, logH = 80; - + wxMenu *fileMenu = new wxMenu; - fileMenu->Append( wxID_EXIT, "E&xit" ); - + fileMenu->Append( wxID_EXIT, "E&xit\tAlt-X" ); + wxMenu *viewMenu = new wxMenu; viewMenu->Append( ID_TOGGLEROWLABELS, "&Row labels", "", TRUE ); viewMenu->Append( ID_TOGGLECOLLABELS, "&Col labels", "", TRUE ); - viewMenu->Append( ID_TOGGLECONTROLPANEL, "To&p controls", "", TRUE ); - viewMenu->Append( ID_TOGGLECELLEDIT, "&In-place editing", "", TRUE ); - viewMenu->Append( ID_SETLABELCOLOUR, "Set &label colour" ); - viewMenu->Append( ID_SETLABELTEXTCOLOUR, "Set label &text colour" ); - + viewMenu->Append( ID_TOGGLEEDIT, "&Editable", "", TRUE ); + wxMenu *rowLabelMenu = new wxMenu; viewMenu->Append( ID_ROWLABELALIGN, "R&ow label alignment", @@ -95,8 +121,8 @@ GridFrame::GridFrame() "Change alignment of row labels" ); rowLabelMenu->Append( ID_ROWLABELHORIZALIGN, "&Horizontal" ); - rowLabelMenu->Append( ID_ROWLABELVERTALIGN, "&Vertical" ); - + rowLabelMenu->Append( ID_ROWLABELVERTALIGN, "&Vertical" ); + wxMenu *colLabelMenu = new wxMenu; viewMenu->Append( ID_COLLABELALIGN, "Col l&abel alignment", @@ -106,15 +132,28 @@ GridFrame::GridFrame() colLabelMenu->Append( ID_COLLABELHORIZALIGN, "&Horizontal" ); colLabelMenu->Append( ID_COLLABELVERTALIGN, "&Vertical" ); - viewMenu->Append( ID_GRIDLINECOLOUR, "&Grid line colour" ); - viewMenu->Append( ID_CLEARGRID, "Cl&ear grid cell contents" ); + wxMenu *colMenu = new wxMenu; + colMenu->Append( ID_SETLABELCOLOUR, "Set &label colour" ); + colMenu->Append( ID_SETLABELTEXTCOLOUR, "Set label &text colour" ); + colMenu->Append( ID_GRIDLINECOLOUR, "&Grid line colour" ); + colMenu->Append( ID_SET_CELL_FG_COLOUR, "Set cell &foreground colour" ); + colMenu->Append( ID_SET_CELL_BG_COLOUR, "Set cell &background colour" ); + + wxMenu *editMenu = new wxMenu; + editMenu->Append( ID_INSERTROW, "Insert &row" ); + editMenu->Append( ID_INSERTCOL, "Insert &column" ); + editMenu->Append( ID_DELETEROW, "Delete selected ro&ws" ); + editMenu->Append( ID_DELETECOL, "Delete selected co&ls" ); + editMenu->Append( ID_CLEARGRID, "Cl&ear grid cell contents" ); wxMenu *helpMenu = new wxMenu; helpMenu->Append( ID_ABOUT, "&About wxGrid demo" ); - + wxMenuBar *menuBar = new wxMenuBar; menuBar->Append( fileMenu, "&File" ); menuBar->Append( viewMenu, "&View" ); + menuBar->Append( colMenu, "&Colours" ); + menuBar->Append( editMenu, "&Edit" ); menuBar->Append( helpMenu, "&Help" ); SetMenuBar( menuBar ); @@ -123,14 +162,14 @@ GridFrame::GridFrame() -1, wxPoint( 0, 0 ), wxSize( 400, 300 ) ); - + logWin = new wxTextCtrl( this, -1, wxEmptyString, wxPoint( 0, gridH + 20 ), wxSize( logW, logH ), wxTE_MULTILINE ); - + logger = new wxLogTextCtrl( logWin ); logger->SetActiveTarget( logger ); logger->SetTimestamp( NULL ); @@ -140,11 +179,9 @@ GridFrame::GridFrame() // grid->CreateGrid( 100, 100 ); - grid->EnableTopEditControl( TRUE ); - grid->SetRowSize( 0, 60 ); grid->SetCellValue( 0, 0, "Ctrl+Home\nwill go to\nthis cell" ); - + grid->SetCellValue( 0, 1, "Blah" ); grid->SetCellValue( 0, 2, "Blah" ); @@ -152,22 +189,33 @@ GridFrame::GridFrame() grid->SetRowSize( 99, 60 ); grid->SetCellValue( 99, 99, "Ctrl+End\nwill go to\nthis cell" ); - + + grid->SetCellValue(2, 2, "red"); + + grid->SetCellTextColour(2, 2, *wxRED); + grid->SetCellValue(3, 3, "green on grey"); + grid->SetCellTextColour(3, 3, *wxGREEN); + grid->SetCellBackgroundColour(3, 3, *wxLIGHT_GREY); + + grid->SetCellValue(4, 4, "a weird looking cell"); + grid->SetCellAlignment(4, 4, wxCENTRE, wxCENTRE); + grid->SetCellRenderer(4, 4, new MyGridCellRenderer); + wxBoxSizer *topSizer = new wxBoxSizer( wxVERTICAL ); topSizer->Add( grid, 1, wxEXPAND ); - + topSizer->Add( logWin, - 0, + 0, wxEXPAND ); - + SetAutoLayout( TRUE ); SetSizer( topSizer ); - + topSizer->Fit( this ); topSizer->SetSizeHints( this ); - + Centre(); SetDefaults(); } @@ -177,12 +225,12 @@ GridFrame::~GridFrame() { } + void GridFrame::SetDefaults() { GetMenuBar()->Check( ID_TOGGLEROWLABELS, TRUE ); GetMenuBar()->Check( ID_TOGGLECOLLABELS, TRUE ); - GetMenuBar()->Check( ID_TOGGLECONTROLPANEL, TRUE ); - GetMenuBar()->Check( ID_TOGGLECELLEDIT, TRUE ); + GetMenuBar()->Check( ID_TOGGLEEDIT, TRUE ); } @@ -212,16 +260,10 @@ void GridFrame::ToggleColLabels( wxCommandEvent& WXUNUSED(ev) ) } -void GridFrame::ToggleControlPanel( wxCommandEvent& WXUNUSED(ev) ) +void GridFrame::ToggleEditing( wxCommandEvent& WXUNUSED(ev) ) { - grid->EnableTopEditControl(GetMenuBar()->IsChecked(ID_TOGGLECONTROLPANEL)); -} - - -void GridFrame::ToggleCellEdit( wxCommandEvent& WXUNUSED(ev) ) -{ - grid->EnableCellEditControl( - GetMenuBar()->IsChecked( ID_TOGGLECELLEDIT ) ); + grid->EnableEditing( + GetMenuBar()->IsChecked( ID_TOGGLEEDIT ) ); } @@ -257,13 +299,13 @@ void GridFrame::SetRowLabelHorizAlignment( wxCommandEvent& WXUNUSED(ev) ) { int horiz, vert; grid->GetRowLabelAlignment( &horiz, &vert ); - + switch ( horiz ) { case wxLEFT: horiz = wxCENTRE; break; - + case wxCENTRE: horiz = wxRIGHT; break; @@ -280,13 +322,13 @@ void GridFrame::SetRowLabelVertAlignment( wxCommandEvent& WXUNUSED(ev) ) { int horiz, vert; grid->GetRowLabelAlignment( &horiz, &vert ); - + switch ( vert ) { case wxTOP: vert = wxCENTRE; break; - + case wxCENTRE: vert = wxBOTTOM; break; @@ -304,13 +346,13 @@ void GridFrame::SetColLabelHorizAlignment( wxCommandEvent& WXUNUSED(ev) ) { int horiz, vert; grid->GetColLabelAlignment( &horiz, &vert ); - + switch ( horiz ) { case wxLEFT: horiz = wxCENTRE; break; - + case wxCENTRE: horiz = wxRIGHT; break; @@ -328,13 +370,13 @@ void GridFrame::SetColLabelVertAlignment( wxCommandEvent& WXUNUSED(ev) ) { int horiz, vert; grid->GetColLabelAlignment( &horiz, &vert ); - + switch ( vert ) { case wxTOP: vert = wxCENTRE; break; - + case wxCENTRE: vert = wxBOTTOM; break; @@ -362,66 +404,80 @@ void GridFrame::SetGridLineColour( wxCommandEvent& WXUNUSED(ev) ) } -void GridFrame::ClearGrid( wxCommandEvent& WXUNUSED(ev) ) +void GridFrame::InsertRow( wxCommandEvent& WXUNUSED(ev) ) { - grid->ClearGrid(); + grid->InsertRows( 0, 1 ); } -void GridFrame::About( wxCommandEvent& WXUNUSED(ev) ) +void GridFrame::InsertCol( wxCommandEvent& WXUNUSED(ev) ) { - (void)wxMessageBox( "\n\nwxGrid demo \n\n" - "Michael Bedward \n" - "mbedward@ozemail.com.au \n\n", - "About", - wxOK ); + grid->InsertCols( 0, 1 ); } -void GridFrame::OnSize( wxSizeEvent& WXUNUSED(ev) ) +void GridFrame::DeleteSelectedRows( wxCommandEvent& WXUNUSED(ev) ) { - if ( grid && logWin ) + if ( grid->IsSelection() ) { - int cw, ch; - GetClientSize( &cw, &ch ); - - int gridH = ch - 90; - int logH = 80; - if ( gridH < 0 ) - { - gridH = ch; - } - - grid->SetSize( 0, 0, cw, gridH ); - logWin->SetSize( 0, gridH + 10, cw, logH ); + int topRow, bottomRow, leftCol, rightCol; + grid->GetSelection( &topRow, &leftCol, &bottomRow, &rightCol ); + grid->DeleteRows( topRow, bottomRow - topRow + 1 ); } } -void GridFrame::OnQuit( wxCommandEvent& WXUNUSED(ev) ) + +void GridFrame::DeleteSelectedCols( wxCommandEvent& WXUNUSED(ev) ) { - Close( TRUE ); + if ( grid->IsSelection() ) + { + int topRow, bottomRow, leftCol, rightCol; + grid->GetSelection( &topRow, &leftCol, &bottomRow, &rightCol ); + grid->DeleteCols( leftCol, rightCol - leftCol + 1 ); + } } +void GridFrame::ClearGrid( wxCommandEvent& WXUNUSED(ev) ) +{ + grid->ClearGrid(); +} + +void GridFrame::SetCellFgColour( wxCommandEvent& WXUNUSED(ev) ) +{ + wxColour col = wxGetColourFromUser(this); + if ( col.Ok() ) + grid->SetDefaultCellTextColour(col); +} + +void GridFrame::SetCellBgColour( wxCommandEvent& WXUNUSED(ev) ) +{ + wxColour col = wxGetColourFromUser(this); + if ( col.Ok() ) + grid->SetDefaultCellBackgroundColour(col); +} + void GridFrame::OnLabelLeftClick( wxGridEvent& ev ) { logBuf = ""; if ( ev.GetRow() != -1 ) { - logBuf << "row label " << ev.GetRow(); + logBuf << "Left click on row label " << ev.GetRow(); } else if ( ev.GetCol() != -1 ) { - logBuf << "col label " << ev.GetCol(); + logBuf << "Left click on col label " << ev.GetCol(); } else { - logBuf << "corner label"; + logBuf << "Left click on corner label"; } if ( ev.ShiftDown() ) logBuf << " (shift down)"; wxLogMessage( "%s", logBuf.c_str() ); - + + // you must call event skip if you want default grid processing + // ev.Skip(); } @@ -429,10 +485,10 @@ void GridFrame::OnLabelLeftClick( wxGridEvent& ev ) void GridFrame::OnCellLeftClick( wxGridEvent& ev ) { logBuf = ""; - logBuf << "Cell at row " << ev.GetRow() + logBuf << "Left click at row " << ev.GetRow() << " col " << ev.GetCol(); wxLogMessage( "%s", logBuf.c_str() ); - + // you must call event skip if you want default grid processing // (cell highlighting etc.) // @@ -445,7 +501,7 @@ void GridFrame::OnRowSize( wxGridSizeEvent& ev ) logBuf = ""; logBuf << "Resized row " << ev.GetRowOrCol(); wxLogMessage( "%s", logBuf.c_str() ); - + ev.Skip(); } @@ -455,7 +511,20 @@ void GridFrame::OnColSize( wxGridSizeEvent& ev ) logBuf = ""; logBuf << "Resized col " << ev.GetRowOrCol(); wxLogMessage( "%s", logBuf.c_str() ); - + + ev.Skip(); +} + + +void GridFrame::OnSelectCell( wxGridEvent& ev ) +{ + logBuf = ""; + logBuf << "Selected cell at row " << ev.GetRow() + << " col " << ev.GetCol(); + wxLogMessage( "%s", logBuf.c_str() ); + + // you must call Skip() if you want the default processing + // to occur in wxGrid ev.Skip(); } @@ -466,9 +535,9 @@ void GridFrame::OnRangeSelected( wxGridRangeSelectEvent& ev ) << " col " << ev.GetLeftCol() << " to row " << ev.GetBottomRow() << " col " << ev.GetRightCol(); - + wxLogMessage( "%s", logBuf.c_str() ); - + ev.Skip(); } @@ -476,12 +545,43 @@ void GridFrame::OnCellValueChanged( wxGridEvent& ev ) { logBuf = ""; logBuf << "Value changed for cell at" - << " row " << ev.GetRow() + << " row " << ev.GetRow() << " col " << ev.GetCol(); - + wxLogMessage( "%s", logBuf.c_str() ); - + ev.Skip(); } +void GridFrame::About( wxCommandEvent& WXUNUSED(ev) ) +{ + (void)wxMessageBox( "\n\nwxGrid demo \n\n" + "Michael Bedward \n" + "mbedward@ozemail.com.au \n\n", + "About", + wxOK ); +} + + +void GridFrame::OnQuit( wxCommandEvent& WXUNUSED(ev) ) +{ + Close( TRUE ); +} + +// ---------------------------------------------------------------------------- +// MyGridCellRenderer +// ---------------------------------------------------------------------------- + +void MyGridCellRenderer::Draw(wxGrid& grid, + wxDC& dc, + const wxRect& rect, + int row, int col, + bool isSelected) +{ + wxGridCellStringRenderer::Draw(grid, dc, rect, row, col, isSelected); + + dc.SetPen(*wxGREEN_PEN); + dc.SetBrush(*wxTRANSPARENT_BRUSH); + dc.DrawEllipse(rect); +}