X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/816be743e86d10387376fa87ddb2fc684eb1efd3..2c8e47380ebbcb5764307d4a8b15e84d8ce74ccf:/samples/newgrid/griddemo.cpp diff --git a/samples/newgrid/griddemo.cpp b/samples/newgrid/griddemo.cpp index b73608eed9..c8d754d620 100644 --- a/samples/newgrid/griddemo.cpp +++ b/samples/newgrid/griddemo.cpp @@ -69,7 +69,8 @@ BEGIN_EVENT_TABLE( GridFrame, wxFrame ) EVT_MENU( ID_TOGGLECOLLABELS, GridFrame::ToggleColLabels ) EVT_MENU( ID_TOGGLEEDIT, GridFrame::ToggleEditing ) EVT_MENU( ID_TOGGLEROWSIZING, GridFrame::ToggleRowSizing ) - EVT_MENU( ID_TOGGLECOLSIZING, GridFrame::ToggleColSizing ) + EVT_MENU( ID_TOGGLECOLSIZING, GridFrame::ToggleColSizing ) + EVT_MENU( ID_TOGGLEGRIDSIZING, GridFrame::ToggleGridSizing ) EVT_MENU( ID_SETLABELCOLOUR, GridFrame::SetLabelColour ) EVT_MENU( ID_SETLABELTEXTCOLOUR, GridFrame::SetLabelTextColour ) EVT_MENU( ID_ROWLABELHORIZALIGN, GridFrame::SetRowLabelHorizAlignment ) @@ -124,6 +125,7 @@ GridFrame::GridFrame() viewMenu->Append( ID_TOGGLEEDIT, "&Editable", "", TRUE ); 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 ); wxMenu *rowLabelMenu = new wxMenu; @@ -182,11 +184,11 @@ GridFrame::GridFrame() wxTE_MULTILINE ); logger = new wxLogTextCtrl( logWin ); - logger->SetActiveTarget( logger ); + m_logOld = logger->SetActiveTarget( logger ); logger->SetTimestamp( NULL ); // this will create a grid and, by default, an associated grid - // table for string gs_dataBugsGrid + // table for strings grid->CreateGrid( 100, 100 ); grid->SetRowSize( 0, 60 ); @@ -229,6 +231,16 @@ GridFrame::GridFrame() grid->SetColSize(4, 120); grid->SetColMinimalWidth(4, 120); + grid->SetColFormatFloat(5); + grid->SetCellValue(0, 5, "3.1415"); + grid->SetCellValue(1, 5, "1415"); + grid->SetCellValue(2, 5, "12345.67890"); + + grid->SetColFormatFloat(6, 6, 2); + grid->SetCellValue(0, 6, "3.1415"); + grid->SetCellValue(1, 6, "1415"); + grid->SetCellValue(2, 6, "12345.67890"); + wxBoxSizer *topSizer = new wxBoxSizer( wxVERTICAL ); topSizer->Add( grid, 1, @@ -251,6 +263,7 @@ GridFrame::GridFrame() GridFrame::~GridFrame() { + delete wxLog::SetActiveTarget(m_logOld); } @@ -261,6 +274,7 @@ void GridFrame::SetDefaults() GetMenuBar()->Check( ID_TOGGLEEDIT, TRUE ); GetMenuBar()->Check( ID_TOGGLEROWSIZING, TRUE ); GetMenuBar()->Check( ID_TOGGLECOLSIZING, TRUE ); + GetMenuBar()->Check( ID_TOGGLEGRIDSIZING, TRUE ); } @@ -299,17 +313,23 @@ void GridFrame::ToggleEditing( wxCommandEvent& WXUNUSED(ev) ) void GridFrame::ToggleRowSizing( wxCommandEvent& WXUNUSED(ev) ) { - grid->EnableDragRowSize( + grid->EnableDragRowSize( GetMenuBar()->IsChecked( ID_TOGGLEROWSIZING ) ); } void GridFrame::ToggleColSizing( wxCommandEvent& WXUNUSED(ev) ) { - grid->EnableDragColSize( + grid->EnableDragColSize( GetMenuBar()->IsChecked( ID_TOGGLECOLSIZING ) ); } +void GridFrame::ToggleGridSizing( wxCommandEvent& WXUNUSED(ev) ) +{ + grid->EnableDragGridSize( + GetMenuBar()->IsChecked( ID_TOGGLEGRIDSIZING ) ); +} + void GridFrame::SetLabelColour( wxCommandEvent& WXUNUSED(ev) ) { @@ -642,11 +662,24 @@ void GridFrame::OnVTable(wxCommandEvent& ) { static long s_sizeGrid = 10000; +#ifdef __WXMOTIF__ + // MB: wxGetNumberFromUser doesn't work properly for wxMotif + wxString s; + s << s_sizeGrid; + 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: ", "wxGridDemo question", s_sizeGrid, 0, 32000, this); +#endif + if ( s_sizeGrid != -1 ) { BigGridFrame* win = new BigGridFrame(s_sizeGrid); @@ -675,22 +708,78 @@ void MyGridCellRenderer::Draw(wxGrid& grid, dc.DrawEllipse(rect); } - // ---------------------------------------------------------------------------- -// BigGridFrame and BigGridTable: Sample of a non-standard table +// MyGridCellAttrProvider // ---------------------------------------------------------------------------- +MyGridCellAttrProvider::MyGridCellAttrProvider() +{ + m_attrForOddRows = new wxGridCellAttr; + m_attrForOddRows->SetBackgroundColour(*wxLIGHT_GREY); +} + +MyGridCellAttrProvider::~MyGridCellAttrProvider() +{ + m_attrForOddRows->DecRef(); +} + +wxGridCellAttr *MyGridCellAttrProvider::GetAttr(int row, int col) const +{ + wxGridCellAttr *attr = wxGridCellAttrProvider::GetAttr(row, col); + + if ( row % 2 ) + { + if ( !attr ) + { + attr = m_attrForOddRows; + attr->IncRef(); + } + else + { + if ( !attr->HasBackgroundColour() ) + { + wxGridCellAttr *attrNew = attr->Clone(); + attr->DecRef(); + attr = attrNew; + attr->SetBackgroundColour(*wxLIGHT_GREY); + } + } + } + + return attr; +} + +// ============================================================================ +// BigGridFrame and BigGridTable: Sample of a non-standard table +// ============================================================================ + BigGridFrame::BigGridFrame(long sizeGrid) : wxFrame(NULL, -1, "Plugin Virtual Table", wxDefaultPosition, wxSize(500, 450)) { m_grid = new wxGrid(this, -1, wxDefaultPosition, wxDefaultSize); m_table = new BigGridTable(sizeGrid); + + // VZ: I don't understand why this slows down the display that much, + // must profile it... + //m_table->SetAttrProvider(new MyGridCellAttrProvider); + m_grid->SetTable(m_table, TRUE); + +#if defined __WXMOTIF__ + // MB: the grid isn't getting a sensible default size under wxMotif + int cw, ch; + GetClientSize( &cw, &ch ); + m_grid->SetSize( cw, ch ); +#endif } -// ---------------------------------------------------------------------------- +// ============================================================================ // BugsGridFrame: a "realistic" table +// ============================================================================ + +// ---------------------------------------------------------------------------- +// bugs table data // ---------------------------------------------------------------------------- enum Columns @@ -726,10 +815,10 @@ static const wxChar* severities[] = static struct BugsGridData { int id; - const wxChar *summary; + wxChar summary[80]; Severity severity; int prio; - const wxChar *platform; + wxChar platform[12]; bool opened; } gs_dataBugsGrid [] = { @@ -749,6 +838,10 @@ static const wxChar *headers[Col_Max] = _T("Opened?"), }; +// ---------------------------------------------------------------------------- +// BugsGridTable +// ---------------------------------------------------------------------------- + wxString BugsGridTable::GetTypeName(int WXUNUSED(row), int col) { switch ( col ) @@ -761,8 +854,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; @@ -844,13 +939,14 @@ void BugsGridTable::SetValue( int row, int col, const wxString& value ) gd.severity = Sev_Normal; } } + break; case Col_Summary: - gd.summary = value; + wxStrncpy(gd.summary, value, WXSIZEOF(gd.summary)); break; case Col_Platform: - gd.platform = value; + wxStrncpy(gd.platform, value, WXSIZEOF(gd.platform)); break; } } @@ -951,16 +1047,37 @@ BugsGridTable::BugsGridTable() { } +// ---------------------------------------------------------------------------- +// BugsGridFrame +// ---------------------------------------------------------------------------- + BugsGridFrame::BugsGridFrame() : wxFrame(NULL, -1, "Bugs table", wxDefaultPosition, wxSize(500, 300)) { wxGrid *grid = new wxGrid(this, -1, wxDefaultPosition); wxGridTableBase *table = new BugsGridTable(); + table->SetAttrProvider(new MyGridCellAttrProvider); grid->SetTable(table, TRUE); - for ( size_t row = 0; row < WXSIZEOF(gs_dataBugsGrid); row++ ) - { - grid->SetReadOnly(row, Col_Id); - } + wxGridCellAttr *attrRO = new wxGridCellAttr, + *attrRangeEditor = new wxGridCellAttr, + *attrCombo = new wxGridCellAttr; + + attrRO->SetReadOnly(); + attrRangeEditor->SetEditor(new wxGridCellNumberEditor(1, 5)); + attrCombo->SetEditor(new wxGridCellChoiceEditor(WXSIZEOF(severities), + severities)); + + grid->SetColAttr(Col_Id, attrRO); + grid->SetColAttr(Col_Priority, attrRangeEditor); + grid->SetColAttr(Col_Severity, attrCombo); + + grid->SetMargins(0, 0); + + grid->Fit(); + wxSize size = grid->GetSize(); + size.x += 10; + size.y += 10; + SetClientSize(size); }