X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/cab472ecf938770967782384cb68a1cfbbcb228a..34bbbc276dc470014c8d200cfbbf7f588076aeaf:/samples/newgrid/griddemo.cpp diff --git a/samples/newgrid/griddemo.cpp b/samples/newgrid/griddemo.cpp index e961046b0b..c8d022ef55 100644 --- a/samples/newgrid/griddemo.cpp +++ b/samples/newgrid/griddemo.cpp @@ -35,6 +35,7 @@ #include "wx/colordlg.h" #include "wx/grid.h" +#include "wx/generic/gridctrl.h" #include "griddemo.h" @@ -71,6 +72,8 @@ BEGIN_EVENT_TABLE( GridFrame, wxFrame ) EVT_MENU( ID_TOGGLEROWSIZING, GridFrame::ToggleRowSizing ) EVT_MENU( ID_TOGGLECOLSIZING, GridFrame::ToggleColSizing ) EVT_MENU( ID_TOGGLEGRIDSIZING, GridFrame::ToggleGridSizing ) + EVT_MENU( ID_TOGGLEGRIDLINES, GridFrame::ToggleGridLines ) + EVT_MENU( ID_AUTOSIZECOLS, GridFrame::AutoSizeCols ) EVT_MENU( ID_SETLABELCOLOUR, GridFrame::SetLabelColour ) EVT_MENU( ID_SETLABELTEXTCOLOUR, GridFrame::SetLabelTextColour ) EVT_MENU( ID_ROWLABELHORIZALIGN, GridFrame::SetRowLabelHorizAlignment ) @@ -83,6 +86,9 @@ BEGIN_EVENT_TABLE( GridFrame, wxFrame ) EVT_MENU( ID_DELETEROW, GridFrame::DeleteSelectedRows ) EVT_MENU( ID_DELETECOL, GridFrame::DeleteSelectedCols ) EVT_MENU( ID_CLEARGRID, GridFrame::ClearGrid ) + EVT_MENU( ID_SELCELLS, GridFrame::SelectCells ) + EVT_MENU( ID_SELROWS, GridFrame::SelectRows ) + EVT_MENU( ID_SELCOLS, GridFrame::SelectCols ) EVT_MENU( ID_SET_CELL_FG_COLOUR, GridFrame::SetCellFgColour ) EVT_MENU( ID_SET_CELL_BG_COLOUR, GridFrame::SetCellBgColour ) @@ -92,6 +98,19 @@ BEGIN_EVENT_TABLE( GridFrame, wxFrame ) EVT_MENU( ID_VTABLE, GridFrame::OnVTable) EVT_MENU( ID_BUGS_TABLE, GridFrame::OnBugsTable) + EVT_MENU( ID_DESELECT_CELL, GridFrame::DeselectCell) + EVT_MENU( ID_DESELECT_COL, GridFrame::DeselectCol) + EVT_MENU( ID_DESELECT_ROW, GridFrame::DeselectRow) + EVT_MENU( ID_DESELECT_ALL, GridFrame::DeselectAll) + EVT_MENU( ID_SELECT_CELL, GridFrame::SelectCell) + EVT_MENU( ID_SELECT_COL, GridFrame::SelectCol) + EVT_MENU( ID_SELECT_ROW, GridFrame::SelectRow) + EVT_MENU( ID_SELECT_ALL, GridFrame::SelectAll) + EVT_MENU( ID_SELECT_UNSELECT, GridFrame::OnAddToSelectToggle) + + EVT_MENU( ID_SET_HIGHLIGHT_WIDTH, GridFrame::OnSetHighlightWidth) + EVT_MENU( ID_SET_RO_HIGHLIGHT_WIDTH, GridFrame::OnSetROHighlightWidth) + EVT_GRID_LABEL_LEFT_CLICK( GridFrame::OnLabelLeftClick ) EVT_GRID_CELL_LEFT_CLICK( GridFrame::OnCellLeftClick ) EVT_GRID_ROW_SIZE( GridFrame::OnRowSize ) @@ -126,6 +145,10 @@ GridFrame::GridFrame() viewMenu->Append( ID_TOGGLEROWSIZING, "Ro&w drag-resize", "", TRUE ); viewMenu->Append( ID_TOGGLECOLSIZING, "C&ol drag-resize", "", TRUE ); viewMenu->Append( ID_TOGGLEGRIDSIZING, "&Grid drag-resize", "", TRUE ); + viewMenu->Append( ID_TOGGLEGRIDLINES, "&Grid Lines", "", TRUE ); + viewMenu->Append( ID_SET_HIGHLIGHT_WIDTH, "&Set Cell Highlight Width...", "" ); + viewMenu->Append( ID_SET_RO_HIGHLIGHT_WIDTH, "&Set Cell RO Highlight Width...", "" ); + viewMenu->Append( ID_AUTOSIZECOLS, "&Auto-size cols" ); wxMenu *rowLabelMenu = new wxMenu; @@ -159,6 +182,28 @@ GridFrame::GridFrame() editMenu->Append( ID_DELETECOL, "Delete selected co&ls" ); editMenu->Append( ID_CLEARGRID, "Cl&ear grid cell contents" ); + wxMenu *selectMenu = new wxMenu; + selectMenu->Append( ID_SELECT_UNSELECT, "Add new cells to the selection", + "When off, old selection is deselected before " + "selecting the new cells", TRUE ); + selectMenu->Append( ID_SELECT_ALL, "Select all"); + selectMenu->Append( ID_SELECT_ROW, "Select row 2"); + selectMenu->Append( ID_SELECT_COL, "Select col 2"); + selectMenu->Append( ID_SELECT_CELL, "Select cell (3, 1)"); + selectMenu->Append( ID_DESELECT_ALL, "Deselect all"); + selectMenu->Append( ID_DESELECT_ROW, "Deselect row 2"); + selectMenu->Append( ID_DESELECT_COL, "Deselect col 2"); + selectMenu->Append( ID_DESELECT_CELL, "Deselect cell (3, 1)"); + wxMenu *selectionMenu = new wxMenu; + selectMenu->Append( ID_CHANGESEL, "Change &selection mode", + selectionMenu, + "Change selection mode" ); + + selectionMenu->Append( ID_SELCELLS, "Select &Cells" ); + selectionMenu->Append( ID_SELROWS, "Select &Rows" ); + selectionMenu->Append( ID_SELCOLS, "Select C&ols" ); + + wxMenu *helpMenu = new wxMenu; helpMenu->Append( ID_ABOUT, "&About wxGrid demo" ); @@ -167,10 +212,13 @@ GridFrame::GridFrame() menuBar->Append( viewMenu, "&View" ); menuBar->Append( colMenu, "&Colours" ); menuBar->Append( editMenu, "&Edit" ); + menuBar->Append( selectMenu, "&Select" ); menuBar->Append( helpMenu, "&Help" ); SetMenuBar( menuBar ); + m_addToSel = FALSE; + grid = new wxGrid( this, -1, wxPoint( 0, 0 ), @@ -194,7 +242,10 @@ GridFrame::GridFrame() grid->SetRowSize( 0, 60 ); grid->SetCellValue( 0, 0, "Ctrl+Home\nwill go to\nthis cell" ); - grid->SetCellValue( 0, 1, "Blah" ); + grid->SetCellValue( 0, 1, "A long piece of text to demonstrate wrapping." ); + grid->SetCellRenderer(0 , 1, new wxGridCellAutoWrapStringRenderer); + grid->SetCellEditor( 0, 1 , new wxGridCellAutoWrapStringEditor); + grid->SetCellValue( 0, 2, "Blah" ); grid->SetCellValue( 0, 3, "Read only" ); grid->SetReadOnly( 0, 3 ); @@ -212,10 +263,10 @@ GridFrame::GridFrame() grid->SetCellBackgroundColour(3, 3, *wxLIGHT_GREY); grid->SetCellValue(4, 4, "a weird looking cell"); - grid->SetCellAlignment(4, 4, wxCENTRE, wxCENTRE); + grid->SetCellAlignment(4, 4, wxALIGN_CENTRE, wxALIGN_CENTRE); grid->SetCellRenderer(4, 4, new MyGridCellRenderer); - grid->SetCellValue(3, 0, "1"); + grid->SetCellValue(3, 0, "0"); grid->SetCellRenderer(3, 0, new wxGridCellBoolRenderer); grid->SetCellEditor(3, 0, new wxGridCellBoolEditor); @@ -224,13 +275,27 @@ GridFrame::GridFrame() attr->SetTextColour(*wxBLUE); grid->SetColAttr(5, attr); attr = new wxGridCellAttr; - attr->SetBackgroundColour(*wxBLUE); + attr->SetBackgroundColour(*wxRED); grid->SetRowAttr(5, attr); grid->SetCellValue(2, 4, "a wider column"); grid->SetColSize(4, 120); grid->SetColMinimalWidth(4, 120); + grid->SetCellTextColour(5, 8, *wxGREEN); + grid->SetCellValue(5, 8, "Bg from row attr\nText col from cell attr"); + grid->SetCellValue(5, 5, "Bg from row attr\nText col from col attr"); + + grid->SetColFormatFloat(6); + grid->SetCellValue(0, 6, "3.1415"); + grid->SetCellValue(1, 6, "1415"); + grid->SetCellValue(2, 6, "12345.67890"); + + grid->SetColFormatFloat(7, 6, 2); + grid->SetCellValue(0, 7, "3.1415"); + grid->SetCellValue(1, 7, "1415"); + grid->SetCellValue(2, 7, "12345.67890"); + wxBoxSizer *topSizer = new wxBoxSizer( wxVERTICAL ); topSizer->Add( grid, 1, @@ -265,6 +330,7 @@ void GridFrame::SetDefaults() GetMenuBar()->Check( ID_TOGGLEROWSIZING, TRUE ); GetMenuBar()->Check( ID_TOGGLECOLSIZING, TRUE ); GetMenuBar()->Check( ID_TOGGLEGRIDSIZING, TRUE ); + GetMenuBar()->Check( ID_TOGGLEGRIDLINES, TRUE ); } @@ -321,6 +387,49 @@ void GridFrame::ToggleGridSizing( wxCommandEvent& WXUNUSED(ev) ) } +void GridFrame::ToggleGridLines( wxCommandEvent& WXUNUSED(ev) ) +{ + grid->EnableGridLines( + GetMenuBar()->IsChecked( ID_TOGGLEGRIDLINES ) ); +} + +void GridFrame::OnSetHighlightWidth( wxCommandEvent& WXUNUSED(ev) ) +{ + wxString choices[] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10"}; + + wxSingleChoiceDialog dlg(this, "Choose the thickness of the highlight pen:", + "Pen Width", 11, choices); + + int current = grid->GetCellHighlightPenWidth(); + dlg.SetSelection(current); + if (dlg.ShowModal() == wxID_OK) { + grid->SetCellHighlightPenWidth(dlg.GetSelection()); + } +} + +void GridFrame::OnSetROHighlightWidth( wxCommandEvent& WXUNUSED(ev) ) +{ + wxString choices[] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10"}; + + wxSingleChoiceDialog dlg(this, "Choose the thickness of the highlight pen:", + "Pen Width", 11, choices); + + int current = grid->GetCellHighlightROPenWidth(); + dlg.SetSelection(current); + if (dlg.ShowModal() == wxID_OK) { + grid->SetCellHighlightROPenWidth(dlg.GetSelection()); + } +} + + + +void GridFrame::AutoSizeCols( wxCommandEvent& WXUNUSED(ev) ) +{ + grid->AutoSizeColumns(); + grid->Refresh(); +} + + void GridFrame::SetLabelColour( wxCommandEvent& WXUNUSED(ev) ) { wxColourDialog dlg( NULL ); @@ -356,16 +465,16 @@ void GridFrame::SetRowLabelHorizAlignment( wxCommandEvent& WXUNUSED(ev) ) switch ( horiz ) { - case wxLEFT: - horiz = wxCENTRE; + case wxALIGN_LEFT: + horiz = wxALIGN_CENTRE; break; - case wxCENTRE: - horiz = wxRIGHT; + case wxALIGN_CENTRE: + horiz = wxALIGN_RIGHT; break; - case wxRIGHT: - horiz = wxLEFT; + case wxALIGN_RIGHT: + horiz = wxALIGN_LEFT; break; } @@ -379,16 +488,16 @@ void GridFrame::SetRowLabelVertAlignment( wxCommandEvent& WXUNUSED(ev) ) switch ( vert ) { - case wxTOP: - vert = wxCENTRE; + case wxALIGN_TOP: + vert = wxALIGN_CENTRE; break; - case wxCENTRE: - vert = wxBOTTOM; + case wxALIGN_CENTRE: + vert = wxALIGN_BOTTOM; break; - case wxBOTTOM: - vert = wxTOP; + case wxALIGN_BOTTOM: + vert = wxALIGN_TOP; break; } @@ -403,16 +512,16 @@ void GridFrame::SetColLabelHorizAlignment( wxCommandEvent& WXUNUSED(ev) ) switch ( horiz ) { - case wxLEFT: - horiz = wxCENTRE; + case wxALIGN_LEFT: + horiz = wxALIGN_CENTRE; break; - case wxCENTRE: - horiz = wxRIGHT; + case wxALIGN_CENTRE: + horiz = wxALIGN_RIGHT; break; - case wxRIGHT: - horiz = wxLEFT; + case wxALIGN_RIGHT: + horiz = wxALIGN_LEFT; break; } @@ -427,16 +536,16 @@ void GridFrame::SetColLabelVertAlignment( wxCommandEvent& WXUNUSED(ev) ) switch ( vert ) { - case wxTOP: - vert = wxCENTRE; + case wxALIGN_TOP: + vert = wxALIGN_CENTRE; break; - case wxCENTRE: - vert = wxBOTTOM; + case wxALIGN_CENTRE: + vert = wxALIGN_BOTTOM; break; - case wxBOTTOM: - vert = wxTOP; + case wxALIGN_BOTTOM: + vert = wxALIGN_TOP; break; } @@ -474,9 +583,13 @@ void GridFrame::DeleteSelectedRows( wxCommandEvent& WXUNUSED(ev) ) { if ( grid->IsSelection() ) { - int topRow, bottomRow, leftCol, rightCol; - grid->GetSelection( &topRow, &leftCol, &bottomRow, &rightCol ); - grid->DeleteRows( topRow, bottomRow - topRow + 1 ); + grid->BeginBatch(); + for ( int n = 0; n < grid->GetNumberRows(); ) + if ( grid->IsInSelection( n , 0 ) ) + grid->DeleteRows( n, 1 ); + else + n++; + grid->EndBatch(); } } @@ -485,9 +598,13 @@ void GridFrame::DeleteSelectedCols( wxCommandEvent& WXUNUSED(ev) ) { if ( grid->IsSelection() ) { - int topRow, bottomRow, leftCol, rightCol; - grid->GetSelection( &topRow, &leftCol, &bottomRow, &rightCol ); - grid->DeleteCols( leftCol, rightCol - leftCol + 1 ); + grid->BeginBatch(); + for ( int n = 0; n < grid->GetNumberCols(); ) + if ( grid->IsInSelection( 0 , n ) ) + grid->DeleteCols( n, 1 ); + else + n++; + grid->EndBatch(); } } @@ -497,6 +614,21 @@ void GridFrame::ClearGrid( wxCommandEvent& WXUNUSED(ev) ) grid->ClearGrid(); } +void GridFrame::SelectCells( wxCommandEvent& WXUNUSED(ev) ) +{ + grid->SetSelectionMode( wxGrid::wxGridSelectCells ); +} + +void GridFrame::SelectRows( wxCommandEvent& WXUNUSED(ev) ) +{ + grid->SetSelectionMode( wxGrid::wxGridSelectRows ); +} + +void GridFrame::SelectCols( wxCommandEvent& WXUNUSED(ev) ) +{ + grid->SetSelectionMode( wxGrid::wxGridSelectColumns ); +} + void GridFrame::SetCellFgColour( wxCommandEvent& WXUNUSED(ev) ) { wxColour col = wxGetColourFromUser(this); @@ -517,6 +649,51 @@ void GridFrame::SetCellBgColour( wxCommandEvent& WXUNUSED(ev) ) } } +void GridFrame::DeselectCell(wxCommandEvent& WXUNUSED(event)) +{ + grid->DeselectCell(3, 1); +} + +void GridFrame::DeselectCol(wxCommandEvent& WXUNUSED(event)) +{ + grid->DeselectCol(2); +} + +void GridFrame::DeselectRow(wxCommandEvent& WXUNUSED(event)) +{ + grid->DeselectRow(2); +} + +void GridFrame::DeselectAll(wxCommandEvent& WXUNUSED(event)) +{ + grid->ClearSelection(); +} + +void GridFrame::SelectCell(wxCommandEvent& WXUNUSED(event)) +{ + grid->SelectBlock(3, 1, 3, 1, m_addToSel); +} + +void GridFrame::SelectCol(wxCommandEvent& WXUNUSED(event)) +{ + grid->SelectCol(2, m_addToSel); +} + +void GridFrame::SelectRow(wxCommandEvent& WXUNUSED(event)) +{ + grid->SelectRow(2, m_addToSel); +} + +void GridFrame::SelectAll(wxCommandEvent& WXUNUSED(event)) +{ + grid->SelectAll(); +} + +void GridFrame::OnAddToSelectToggle(wxCommandEvent& event) +{ + m_addToSel = event.IsChecked(); +} + void GridFrame::OnLabelLeftClick( wxGridEvent& ev ) { logBuf = ""; @@ -534,6 +711,7 @@ void GridFrame::OnLabelLeftClick( wxGridEvent& ev ) } if ( ev.ShiftDown() ) logBuf << " (shift down)"; + if ( ev.ControlDown() ) logBuf << " (control down)"; wxLogMessage( "%s", logBuf.c_str() ); // you must call event skip if you want default grid processing @@ -579,8 +757,16 @@ void GridFrame::OnColSize( wxGridSizeEvent& ev ) void GridFrame::OnSelectCell( wxGridEvent& ev ) { logBuf = ""; - logBuf << "Selected cell at row " << ev.GetRow() - << " col " << ev.GetCol(); + if ( ev.Selecting() ) + logBuf << "Selected "; + else + logBuf << "Deselected "; + logBuf << "cell at row " << ev.GetRow() + << " col " << ev.GetCol() + << " ( ControlDown: "<< (ev.ControlDown() ? 'T':'F') + << ", ShiftDown: "<< (ev.ShiftDown() ? 'T':'F') + << ", AltDown: "<< (ev.AltDown() ? 'T':'F') + << ", MetaDown: "<< (ev.MetaDown() ? 'T':'F') << " )"; wxLogMessage( "%s", logBuf.c_str() ); // you must call Skip() if you want the default processing @@ -591,11 +777,18 @@ void GridFrame::OnSelectCell( wxGridEvent& ev ) void GridFrame::OnRangeSelected( wxGridRangeSelectEvent& ev ) { logBuf = ""; - logBuf << "Selected cells from row " << ev.GetTopRow() - << " col " << ev.GetLeftCol() - << " to row " << ev.GetBottomRow() - << " col " << ev.GetRightCol(); - + if ( ev.Selecting() ) + logBuf << "Selected "; + else + logBuf << "Deselected "; + logBuf << "cells from row " << ev.GetTopRow() + << " col " << ev.GetLeftCol() + << " to row " << ev.GetBottomRow() + << " col " << ev.GetRightCol() + << " ( ControlDown: "<< (ev.ControlDown() ? 'T':'F') + << ", ShiftDown: "<< (ev.ShiftDown() ? 'T':'F') + << ", AltDown: "<< (ev.AltDown() ? 'T':'F') + << ", MetaDown: "<< (ev.MetaDown() ? 'T':'F') << " )"; wxLogMessage( "%s", logBuf.c_str() ); ev.Skip(); @@ -648,6 +841,7 @@ void GridFrame::OnBugsTable(wxCommandEvent& ) frame->Show(TRUE); } + void GridFrame::OnVTable(wxCommandEvent& ) { static long s_sizeGrid = 10000; @@ -659,9 +853,9 @@ void GridFrame::OnVTable(wxCommandEvent& ) s = wxGetTextFromUser( "Size of the table to create", "Size:", s ); - + s.ToLong( &s_sizeGrid ); - + #else s_sizeGrid = wxGetNumberFromUser("Size of the table to create", "Size: ", @@ -669,7 +863,7 @@ void GridFrame::OnVTable(wxCommandEvent& ) s_sizeGrid, 0, 32000, this); #endif - + if ( s_sizeGrid != -1 ) { BigGridFrame* win = new BigGridFrame(s_sizeGrid); @@ -713,9 +907,10 @@ MyGridCellAttrProvider::~MyGridCellAttrProvider() m_attrForOddRows->DecRef(); } -wxGridCellAttr *MyGridCellAttrProvider::GetAttr(int row, int col) const +wxGridCellAttr *MyGridCellAttrProvider::GetAttr(int row, int col, + wxGridCellAttr::wxAttrKind kind /* = wxGridCellAttr::Any */) const { - wxGridCellAttr *attr = wxGridCellAttrProvider::GetAttr(row, col); + wxGridCellAttr *attr = wxGridCellAttrProvider::GetAttr(row, col, kind); if ( row % 2 ) { @@ -793,7 +988,7 @@ enum Severity Sev_Max }; -static const wxChar* severities[] = +static const wxString severities[] = { _T("wishlist"), _T("minor"), @@ -805,28 +1000,12 @@ static const wxChar* severities[] = static struct BugsGridData { int id; - - // Borland can't deal with global wxStrings and will generate a - // compile time error with the initializing the gs_dataGridBugs - // array (below) - // -#ifndef __BORLANDC__ - wxString summary; -#else - wxChar *summary; -#endif - + wxChar summary[80]; Severity severity; int prio; - -#ifndef __BORLANDC__ - wxString platform; -#else - wxChar *platform; -#endif - + wxChar platform[12]; bool opened; -} gs_dataBugsGrid [] = +} gs_dataBugsGrid [] = { { 18, _T("foo doesn't work"), Sev_Major, 1, _T("wxMSW"), TRUE }, { 27, _T("bar crashes"), Sev_Critical, 1, _T("all"), FALSE }, @@ -860,8 +1039,10 @@ wxString BugsGridTable::GetTypeName(int WXUNUSED(row), int col) // fall thorugh (TODO should be a list) case Col_Summary: + return wxString::Format(_T("%s:80"), wxGRID_VALUE_STRING); + case Col_Platform: - return wxGRID_VALUE_STRING; + return wxString::Format(_T("%s:all,MSW,GTK,other"), wxGRID_VALUE_CHOICE); case Col_Opened: return wxGRID_VALUE_BOOL; @@ -872,12 +1053,12 @@ wxString BugsGridTable::GetTypeName(int WXUNUSED(row), int col) return wxEmptyString; } -long BugsGridTable::GetNumberRows() +int BugsGridTable::GetNumberRows() { return WXSIZEOF(gs_dataBugsGrid); } -long BugsGridTable::GetNumberCols() +int BugsGridTable::GetNumberCols() { return Col_Max; } @@ -946,27 +1127,11 @@ void BugsGridTable::SetValue( int row, int col, const wxString& value ) break; case Col_Summary: -#ifndef __BORLANDC__ - gd.summary = value; -#else - // this generates a warning message if you are using the - // memory tracing code but it should be ok :MB - // - delete gd.summary; - gd.summary = copystring( value.c_str() ); -#endif + wxStrncpy(gd.summary, value, WXSIZEOF(gd.summary)); break; case Col_Platform: -#ifndef __BORLANDC__ - gd.platform = value; -#else - // this generates a warning message if you are using the - // memory tracing code but it should be ok :MB - // - delete gd.platform; - gd.platform = copystring( value.c_str() ); -#endif + wxStrncpy(gd.platform, value, WXSIZEOF(gd.platform)); break; } } @@ -1096,5 +1261,7 @@ BugsGridFrame::BugsGridFrame() grid->SetMargins(0, 0); grid->Fit(); - Fit(); + SetClientSize(grid->GetSize()); } + +