X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1ecf2613d063f6d600ae817cc44d85cec189af13..da7d0696d138988ff5d2253eb39e5a73de02aa11:/samples/grid/griddemo.cpp diff --git a/samples/grid/griddemo.cpp b/samples/grid/griddemo.cpp index b7d6c0aaa7..d6ceb21e3b 100644 --- a/samples/grid/griddemo.cpp +++ b/samples/grid/griddemo.cpp @@ -2,7 +2,7 @@ // Name: griddemo.cpp // Purpose: Grid control wxWidgets sample // Author: Michael Bedward -// Modified by: +// Modified by: Santiago Palacios // RCS-ID: $Id$ // Copyright: (c) Michael Bedward, Julian Smart, Vadim Zeitlin // Licence: wxWindows license @@ -68,6 +68,7 @@ BEGIN_EVENT_TABLE( GridFrame, wxFrame ) EVT_MENU( ID_TOGGLEEDIT, GridFrame::ToggleEditing ) EVT_MENU( ID_TOGGLEROWSIZING, GridFrame::ToggleRowSizing ) EVT_MENU( ID_TOGGLECOLSIZING, GridFrame::ToggleColSizing ) + EVT_MENU( ID_TOGGLECOLMOVING, GridFrame::ToggleColMoving ) EVT_MENU( ID_TOGGLEGRIDSIZING, GridFrame::ToggleGridSizing ) EVT_MENU( ID_TOGGLEGRIDDRAGCELL, GridFrame::ToggleGridDragCell ) EVT_MENU( ID_TOGGLEGRIDLINES, GridFrame::ToggleGridLines ) @@ -111,6 +112,14 @@ BEGIN_EVENT_TABLE( GridFrame, wxFrame ) EVT_MENU( ID_SELECT_UNSELECT, GridFrame::OnAddToSelectToggle) EVT_MENU( ID_SHOW_SELECTION, GridFrame::OnShowSelection) + EVT_MENU( ID_SIZE_ROW, GridFrame::AutoSizeRow ) + EVT_MENU( ID_SIZE_COL, GridFrame::AutoSizeCol ) + EVT_MENU( ID_SIZE_ROW_LABEL, GridFrame::AutoSizeRowLabel ) + EVT_MENU( ID_SIZE_COL_LABEL, GridFrame::AutoSizeColLabel ) + EVT_MENU( ID_SIZE_LABELS_COL, GridFrame::AutoSizeLabelsCol ) + EVT_MENU( ID_SIZE_LABELS_ROW, GridFrame::AutoSizeLabelsRow ) + EVT_MENU( ID_SIZE_GRID, GridFrame::AutoSizeTable ) + EVT_MENU( ID_SET_HIGHLIGHT_WIDTH, GridFrame::OnSetHighlightWidth) EVT_MENU( ID_SET_RO_HIGHLIGHT_WIDTH, GridFrame::OnSetROHighlightWidth) @@ -146,6 +155,7 @@ GridFrame::GridFrame() viewMenu->Append( ID_TOGGLEEDIT, _T("&Editable"), wxEmptyString, wxITEM_CHECK ); viewMenu->Append( ID_TOGGLEROWSIZING, _T("Ro&w drag-resize"), wxEmptyString, wxITEM_CHECK ); viewMenu->Append( ID_TOGGLECOLSIZING, _T("C&ol drag-resize"), wxEmptyString, wxITEM_CHECK ); + viewMenu->Append( ID_TOGGLECOLMOVING, _T("Col drag-&move"), wxEmptyString, wxITEM_CHECK ); viewMenu->Append( ID_TOGGLEGRIDSIZING, _T("&Grid drag-resize"), wxEmptyString, wxITEM_CHECK ); viewMenu->Append( ID_TOGGLEGRIDDRAGCELL, _T("&Grid drag-cell"), wxEmptyString, wxITEM_CHECK ); viewMenu->Append( ID_TOGGLEGRIDLINES, _T("&Grid Lines"), wxEmptyString, wxITEM_CHECK ); @@ -213,6 +223,14 @@ GridFrame::GridFrame() selectionMenu->Append( ID_SELROWS, _T("Select &Rows") ); selectionMenu->Append( ID_SELCOLS, _T("Select C&ols") ); + wxMenu *autosizeMenu = new wxMenu; + autosizeMenu->Append( ID_SIZE_ROW, _T("Selected &row data") ); + autosizeMenu->Append( ID_SIZE_COL, _T("Selected &column data") ); + autosizeMenu->Append( ID_SIZE_ROW_LABEL, _T("Selected row la&bel") ); + autosizeMenu->Append( ID_SIZE_COL_LABEL, _T("Selected column &label") ); + autosizeMenu->Append( ID_SIZE_LABELS_COL, _T("Column la&bels") ); + autosizeMenu->Append( ID_SIZE_LABELS_ROW, _T("Row label&s") ); + autosizeMenu->Append( ID_SIZE_GRID, _T("Entire &grid") ); wxMenu *helpMenu = new wxMenu; helpMenu->Append( wxID_ABOUT, _T("&About wxGrid demo") ); @@ -223,6 +241,7 @@ GridFrame::GridFrame() menuBar->Append( colMenu, _T("&Colours") ); menuBar->Append( editMenu, _T("&Edit") ); menuBar->Append( selectMenu, _T("&Select") ); + menuBar->Append( autosizeMenu, _T("&Autosize") ); menuBar->Append( helpMenu, _T("&Help") ); SetMenuBar( menuBar ); @@ -376,6 +395,7 @@ void GridFrame::SetDefaults() GetMenuBar()->Check( ID_TOGGLEEDIT, true ); GetMenuBar()->Check( ID_TOGGLEROWSIZING, true ); GetMenuBar()->Check( ID_TOGGLECOLSIZING, true ); + GetMenuBar()->Check( ID_TOGGLECOLMOVING, false ); GetMenuBar()->Check( ID_TOGGLEGRIDSIZING, true ); GetMenuBar()->Check( ID_TOGGLEGRIDDRAGCELL, false ); GetMenuBar()->Check( ID_TOGGLEGRIDLINES, true ); @@ -429,6 +449,12 @@ void GridFrame::ToggleColSizing( wxCommandEvent& WXUNUSED(ev) ) GetMenuBar()->IsChecked( ID_TOGGLECOLSIZING ) ); } +void GridFrame::ToggleColMoving( wxCommandEvent& WXUNUSED(ev) ) +{ + grid->EnableDragColMove( + GetMenuBar()->IsChecked( ID_TOGGLECOLMOVING ) ); +} + void GridFrame::ToggleGridSizing( wxCommandEvent& WXUNUSED(ev) ) { grid->EnableDragGridSize( @@ -659,7 +685,7 @@ void GridFrame::DeleteSelectedRows( wxCommandEvent& WXUNUSED(ev) ) { if ( grid->IsSelection() ) { - grid->BeginBatch(); + wxGridUpdateLocker locker(grid); for ( int n = 0; n < grid->GetNumberRows(); ) { if ( grid->IsInSelection( n , 0 ) ) @@ -667,16 +693,71 @@ void GridFrame::DeleteSelectedRows( wxCommandEvent& WXUNUSED(ev) ) else n++; } - grid->EndBatch(); } } +void GridFrame::AutoSizeRow(wxCommandEvent& WXUNUSED(event)) +{ + wxGridUpdateLocker locker(grid); + const wxArrayInt sels = grid->GetSelectedRows(); + for ( size_t n = 0, count = sels.size(); n < count; n++ ) + { + grid->AutoSizeRow( sels[n], false ); + } +} + +void GridFrame::AutoSizeCol(wxCommandEvent& WXUNUSED(event)) +{ + wxGridUpdateLocker locker(grid); + const wxArrayInt sels = grid->GetSelectedCols(); + for ( size_t n = 0, count = sels.size(); n < count; n++ ) + { + grid->AutoSizeColumn( sels[n], false ); + } +} + +void GridFrame::AutoSizeRowLabel(wxCommandEvent& WXUNUSED(event)) +{ + wxGridUpdateLocker locker(grid); + const wxArrayInt sels = grid->GetSelectedRows(); + for ( size_t n = 0, count = sels.size(); n < count; n++ ) + { + grid->AutoSizeRowLabelSize( sels[n] ); + } +} + +void GridFrame::AutoSizeColLabel(wxCommandEvent& WXUNUSED(event)) +{ + wxGridUpdateLocker locker(grid); + const wxArrayInt sels = grid->GetSelectedCols(); + for ( size_t n = 0, count = sels.size(); n < count; n++ ) + { + grid->AutoSizeColLabelSize( sels[n] ); + } +} + +void GridFrame::AutoSizeLabelsCol(wxCommandEvent& WXUNUSED(event)) +{ + grid->SetColLabelSize( wxGRID_AUTOSIZE ); +} + +void GridFrame::AutoSizeLabelsRow(wxCommandEvent& WXUNUSED(event)) +{ + grid->SetRowLabelSize( wxGRID_AUTOSIZE ); +} + +void GridFrame::AutoSizeTable(wxCommandEvent& WXUNUSED(event)) +{ + grid->AutoSize(); +} + + void GridFrame::DeleteSelectedCols( wxCommandEvent& WXUNUSED(ev) ) { if ( grid->IsSelection() ) { - grid->BeginBatch(); + wxGridUpdateLocker locker(grid); for ( int n = 0; n < grid->GetNumberCols(); ) { if ( grid->IsInSelection( 0 , n ) ) @@ -684,7 +765,6 @@ void GridFrame::DeleteSelectedCols( wxCommandEvent& WXUNUSED(ev) ) else n++; } - grid->EndBatch(); } } @@ -780,7 +860,7 @@ void GridFrame::OnAddToSelectToggle(wxCommandEvent& event) void GridFrame::OnLabelLeftClick( wxGridEvent& ev ) { - logBuf = wxEmptyString; + wxString logBuf; if ( ev.GetRow() != -1 ) { logBuf << _T("Left click on row label ") << ev.GetRow(); @@ -794,8 +874,10 @@ void GridFrame::OnLabelLeftClick( wxGridEvent& ev ) logBuf << _T("Left click on corner label"); } - if ( ev.ShiftDown() ) logBuf << _T(" (shift down)"); - if ( ev.ControlDown() ) logBuf << _T(" (control down)"); + if ( ev.ShiftDown() ) + logBuf << _T(" (shift down)"); + if ( ev.ControlDown() ) + logBuf << _T(" (control down)"); wxLogMessage( wxT("%s"), logBuf.c_str() ); // you must call event skip if you want default grid processing @@ -806,10 +888,7 @@ void GridFrame::OnLabelLeftClick( wxGridEvent& ev ) void GridFrame::OnCellLeftClick( wxGridEvent& ev ) { - logBuf = wxEmptyString; - logBuf << _T("Left click at row ") << ev.GetRow() - << _T(" col ") << ev.GetCol(); - wxLogMessage( wxT("%s"), logBuf.c_str() ); + wxLogMessage(_T("Left click at row %d, col %d"), ev.GetRow(), ev.GetCol()); // you must call event skip if you want default grid processing // (cell highlighting etc.) @@ -820,9 +899,7 @@ void GridFrame::OnCellLeftClick( wxGridEvent& ev ) void GridFrame::OnRowSize( wxGridSizeEvent& ev ) { - logBuf = wxEmptyString; - logBuf << _T("Resized row ") << ev.GetRowOrCol(); - wxLogMessage( wxT("%s"), logBuf.c_str() ); + wxLogMessage(_T("Resized row %d"), ev.GetRowOrCol()); ev.Skip(); } @@ -830,9 +907,7 @@ void GridFrame::OnRowSize( wxGridSizeEvent& ev ) void GridFrame::OnColSize( wxGridSizeEvent& ev ) { - logBuf = wxEmptyString; - logBuf << _T("Resized col ") << ev.GetRowOrCol(); - wxLogMessage( wxT("%s"), logBuf.c_str() ); + wxLogMessage(_T("Resized col %d"), ev.GetRowOrCol()); ev.Skip(); } @@ -916,7 +991,7 @@ void GridFrame::OnShowSelection(wxCommandEvent& WXUNUSED(event)) void GridFrame::OnSelectCell( wxGridEvent& ev ) { - logBuf = wxEmptyString; + wxString logBuf; if ( ev.Selecting() ) logBuf << _T("Selected "); else @@ -927,6 +1002,11 @@ void GridFrame::OnSelectCell( wxGridEvent& ev ) << _T(", ShiftDown: ")<< (ev.ShiftDown() ? 'T':'F') << _T(", AltDown: ")<< (ev.AltDown() ? 'T':'F') << _T(", MetaDown: ")<< (ev.MetaDown() ? 'T':'F') << _T(" )"); + + //Indicate whether this column was moved + if ( ((wxGrid *)ev.GetEventObject())->GetColPos( ev.GetCol() ) != ev.GetCol() ) + logBuf << _T(" *** Column moved, current position: ") << ((wxGrid *)ev.GetEventObject())->GetColPos( ev.GetCol() ); + wxLogMessage( wxT("%s"), logBuf.c_str() ); // you must call Skip() if you want the default processing @@ -936,7 +1016,7 @@ void GridFrame::OnSelectCell( wxGridEvent& ev ) void GridFrame::OnRangeSelected( wxGridRangeSelectEvent& ev ) { - logBuf = wxEmptyString; + wxString logBuf; if ( ev.Selecting() ) logBuf << _T("Selected "); else @@ -956,24 +1036,19 @@ void GridFrame::OnRangeSelected( wxGridRangeSelectEvent& ev ) void GridFrame::OnCellValueChanged( wxGridEvent& ev ) { - logBuf = wxEmptyString; - logBuf << _T("Value changed for cell at") - << _T(" row ") << ev.GetRow() - << _T(" col ") << ev.GetCol(); + int row = ev.GetRow(), + col = ev.GetCol(); - wxLogMessage( wxT("%s"), logBuf.c_str() ); + wxLogMessage(_T("Value changed for cell at row %d, col %d: now \"%s\""), + row, col, grid->GetCellValue(row, col).c_str()); ev.Skip(); } void GridFrame::OnCellBeginDrag( wxGridEvent& ev ) { - logBuf = wxEmptyString; - logBuf << _T("Got request to drag cell at") - << _T(" row ") << ev.GetRow() - << _T(" col ") << ev.GetCol(); - - wxLogMessage( wxT("%s"), logBuf.c_str() ); + wxLogMessage(_T("Got request to drag cell at row %d, col %d"), + ev.GetRow(), ev.GetCol()); ev.Skip(); } @@ -1440,8 +1515,7 @@ wxString BugsGridTable::GetColLabelValue( int col ) // ---------------------------------------------------------------------------- BugsGridFrame::BugsGridFrame() - : wxFrame(NULL, wxID_ANY, _T("Bugs table"), - wxDefaultPosition, wxSize(500, 300)) + : wxFrame(NULL, wxID_ANY, _T("Bugs table")) { wxGrid *grid = new wxGrid(this, wxID_ANY, wxDefaultPosition); wxGridTableBase *table = new BugsGridTable(); @@ -1461,8 +1535,6 @@ BugsGridFrame::BugsGridFrame() grid->SetColAttr(Col_Priority, attrRangeEditor); grid->SetColAttr(Col_Severity, attrCombo); - grid->SetMargins(0, 0); - grid->Fit(); SetClientSize(grid->GetSize()); }