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)
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") );
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 );
{
if ( grid->IsSelection() )
{
- grid->BeginBatch();
+ wxGridUpdateLocker locker(grid);
for ( int n = 0; n < grid->GetNumberRows(); )
{
if ( grid->IsInSelection( n , 0 ) )
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 ) )
else
n++;
}
- grid->EndBatch();
}
}
void GridFrame::OnLabelLeftClick( wxGridEvent& ev )
{
- logBuf = wxEmptyString;
+ wxString logBuf;
if ( ev.GetRow() != -1 )
{
logBuf << _T("Left click on row label ") << ev.GetRow();
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
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.)
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();
}
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();
}
void GridFrame::OnSelectCell( wxGridEvent& ev )
{
- logBuf = wxEmptyString;
+ wxString logBuf;
if ( ev.Selecting() )
logBuf << _T("Selected ");
else
void GridFrame::OnRangeSelected( wxGridRangeSelectEvent& ev )
{
- logBuf = wxEmptyString;
+ wxString logBuf;
if ( ev.Selecting() )
logBuf << _T("Selected ");
else
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();
}
// ----------------------------------------------------------------------------
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();
grid->SetColAttr(Col_Priority, attrRangeEditor);
grid->SetColAttr(Col_Severity, attrCombo);
- grid->SetMargins(0, 0);
-
grid->Fit();
SetClientSize(grid->GetSize());
}