// Purpose: Grid control wxWidgets sample
// Author: Michael Bedward
// Modified by: Santiago Palacios
-// RCS-ID: $Id$
// Copyright: (c) Michael Bedward, Julian Smart, Vadim Zeitlin
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
EVT_MENU( ID_COLNATIVEHEADER, GridFrame::SetNativeColHeader )
EVT_MENU( ID_COLDEFAULTHEADER, GridFrame::SetDefaultColHeader )
EVT_MENU( ID_COLCUSTOMHEADER, GridFrame::SetCustomColHeader )
+ EVT_MENU_RANGE( ID_TAB_STOP, ID_TAB_LEAVE, GridFrame::SetTabBehaviour )
+ EVT_MENU( ID_TAB_CUSTOM, GridFrame::SetTabCustomHandler )
EVT_MENU( ID_TOGGLEGRIDLINES, GridFrame::ToggleGridLines )
EVT_MENU( ID_AUTOSIZECOLS, GridFrame::AutoSizeCols )
EVT_MENU( ID_CELLOVERFLOW, GridFrame::CellOverflow )
EVT_MENU( ID_SIZE_LABELS_ROW, GridFrame::AutoSizeLabelsRow )
EVT_MENU( ID_SIZE_GRID, GridFrame::AutoSizeTable )
+ EVT_MENU( ID_HIDECOL, GridFrame::HideCol )
+ EVT_MENU( ID_SHOWCOL, GridFrame::ShowCol )
+ EVT_MENU( ID_HIDEROW, GridFrame::HideRow )
+ EVT_MENU( ID_SHOWROW, GridFrame::ShowRow )
+
EVT_MENU( ID_SET_HIGHLIGHT_WIDTH, GridFrame::OnSetHighlightWidth)
EVT_MENU( ID_SET_RO_HIGHLIGHT_WIDTH, GridFrame::OnSetROHighlightWidth)
EVT_GRID_CELL_LEFT_CLICK( GridFrame::OnCellLeftClick )
EVT_GRID_ROW_SIZE( GridFrame::OnRowSize )
EVT_GRID_COL_SIZE( GridFrame::OnColSize )
+ EVT_GRID_COL_AUTO_SIZE( GridFrame::OnColAutoSize )
EVT_GRID_SELECT_CELL( GridFrame::OnSelectCell )
EVT_GRID_RANGE_SELECT( GridFrame::OnRangeSelected )
EVT_GRID_CELL_CHANGING( GridFrame::OnCellValueChanging )
viewMenu->AppendCheckItem(ID_AUTOSIZECOLS, "&Auto-size cols");
viewMenu->AppendCheckItem(ID_CELLOVERFLOW, "&Overflow cells");
viewMenu->AppendCheckItem(ID_RESIZECELL, "&Resize cell (7,1)");
-
+ viewMenu->Append(ID_HIDECOL, "&Hide column A");
+ viewMenu->Append(ID_SHOWCOL, "&Show column A");
+ viewMenu->Append(ID_HIDEROW, "&Hide row 2");
+ viewMenu->Append(ID_SHOWROW, "&Show row 2");
wxMenu *rowLabelMenu = new wxMenu;
viewMenu->Append( ID_ROWLABELALIGN, wxT("R&ow label alignment"),
colHeaderMenu->AppendRadioItem( ID_COLNATIVEHEADER, wxT("&Native") );
colHeaderMenu->AppendRadioItem( ID_COLCUSTOMHEADER, wxT("&Custom") );
+ wxMenu *tabBehaviourMenu = new wxMenu;
+ tabBehaviourMenu->AppendRadioItem(ID_TAB_STOP, "&Stop at the boundary");
+ tabBehaviourMenu->AppendRadioItem(ID_TAB_WRAP, "&Wrap at the boundary");
+ tabBehaviourMenu->AppendRadioItem(ID_TAB_LEAVE, "&Leave the grid");
+ tabBehaviourMenu->AppendRadioItem(ID_TAB_CUSTOM, "&Custom tab handler");
+ viewMenu->AppendSubMenu(tabBehaviourMenu, "&Tab behaviour");
wxMenu *colMenu = new wxMenu;
colMenu->Append( ID_SETLABELCOLOUR, wxT("Set &label colour...") );
grid->SetCellValue( 0, 4, wxT("Can veto edit this cell") );
+ grid->SetColSize(10, 150);
+ wxString longtext = wxT("abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\n\n");
+ longtext += wxT("With tabs :\n");
+ longtext += wxT("Home,\t\thome\t\t\tagain\n");
+ longtext += wxT("Long word at start :\n");
+ longtext += wxT("ILikeToBeHereWhen I can\n");
+ longtext += wxT("Long word in the middle :\n");
+ longtext += wxT("When IComeHome,ColdAnd tired\n");
+ longtext += wxT("Long last word :\n");
+ longtext += wxT("It's GoodToWarmMyBonesBesideTheFire");
+ grid->SetCellValue( 0, 10, longtext );
+ grid->SetCellRenderer(0 , 10, new wxGridCellAutoWrapStringRenderer);
+ grid->SetCellEditor( 0, 10 , new wxGridCellAutoWrapStringEditor);
+ grid->SetCellValue( 0, 11, wxT("K1 cell editor blocker") );
+
grid->SetCellValue( 0, 5, wxT("Press\nCtrl+arrow\nto skip over\ncells") );
grid->SetRowSize( 99, 60 );
+ grid->SetCellValue(98, 98, "Test background colour setting");
+ grid->SetCellBackgroundColour(98, 99, wxColour(255, 127, 127));
+ grid->SetCellBackgroundColour(99, 98, wxColour(255, 127, 127));
grid->SetCellValue( 99, 99, wxT("Ctrl+End\nwill go to\nthis cell") );
grid->SetCellValue( 1, 0, wxT("This default cell will overflow into neighboring cells, but not if you turn overflow off."));
grid->SetCellRenderer(3, 0, new wxGridCellBoolRenderer);
grid->SetCellEditor(3, 0, new wxGridCellBoolEditor);
+ grid->SetCellBackgroundColour(3, 0, wxColour(255, 127, 127));
wxGridCellAttr *attr;
attr = new wxGridCellAttr;
}
+void GridFrame::OnGridCustomTab(wxGridEvent& event)
+{
+ // just for testing, make the cursor move up and down instead of the usual
+ // left and right
+ if ( event.ShiftDown() )
+ {
+ if ( grid->GetGridCursorRow() > 0 )
+ grid->MoveCursorUp( false );
+ }
+ else
+ {
+ if ( grid->GetGridCursorRow() < grid->GetNumberRows() - 1 )
+ grid->MoveCursorDown( false );
+ }
+}
+
+void GridFrame::SetTabBehaviour(wxCommandEvent& event)
+{
+ // To make any built-in behaviour work, we need to disable the custom TAB
+ // handler, otherwise it would be overriding them.
+ grid->Disconnect(wxEVT_GRID_TABBING,
+ wxGridEventHandler(GridFrame::OnGridCustomTab));
+
+ grid->SetTabBehaviour(
+ static_cast<wxGrid::TabBehaviour>(event.GetId() - ID_TAB_STOP)
+ );
+}
+
+void GridFrame::SetTabCustomHandler(wxCommandEvent&)
+{
+ grid->Connect(wxEVT_GRID_TABBING,
+ wxGridEventHandler(GridFrame::OnGridCustomTab),
+ NULL, this);
+}
+
+
void GridFrame::ToggleGridLines( wxCommandEvent& WXUNUSED(ev) )
{
grid->EnableGridLines(
void GridFrame::AutoSizeTable(wxCommandEvent& WXUNUSED(event))
{
grid->AutoSize();
+ Layout();
}
ev.Skip();
}
+void GridFrame::OnColAutoSize( wxGridSizeEvent &event )
+{
+ // Fit even-numbered columns to their contents while using the default
+ // behaviour for the odd-numbered ones to be able to see the difference.
+ int col = event.GetRowOrCol();
+ if ( col % 2 )
+ {
+ wxLogMessage("Auto-sizing column %d to fit its contents", col);
+ grid->AutoSizeColumn(col);
+ }
+ else
+ {
+ event.Skip();
+ }
+}
void GridFrame::OnSelectCell( wxGridEvent& ev )
{
if ( useLometric )
{
memDc.SetMapMode( wxMM_LOMETRIC );
- wxSize sizePPI = memDc.GetPPI();
sizeRender.x = memDc.DeviceToLogicalXRel( sizeRender.x );
sizeRender.y = memDc.DeviceToLogicalYRel( sizeRender.y );
}
m_gridBitmap.GetHeight(),
&memDc, 0, 0 );
}
+
+void GridFrame::HideCol( wxCommandEvent& WXUNUSED(event) )
+{
+ grid->HideCol(0);
+}
+
+void GridFrame::ShowCol( wxCommandEvent& WXUNUSED(event) )
+{
+ grid->ShowCol(0);
+}
+
+void GridFrame::HideRow( wxCommandEvent& WXUNUSED(event) )
+{
+ grid->HideRow(1);
+}
+
+void GridFrame::ShowRow( wxCommandEvent& WXUNUSED(event) )
+{
+ grid->ShowRow(1);
+}