X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e8f25dbbced23734c716f1c5bda91c30635e894b..b6ccc13c2fd78a1165782fd5b5bdd2950fb8fb2e:/samples/grid/griddemo.cpp diff --git a/samples/grid/griddemo.cpp b/samples/grid/griddemo.cpp index 8ea628b1c5..37d438987e 100644 --- a/samples/grid/griddemo.cpp +++ b/samples/grid/griddemo.cpp @@ -35,9 +35,14 @@ #include "wx/grid.h" #include "wx/headerctrl.h" #include "wx/generic/gridctrl.h" +#include "wx/generic/grideditors.h" #include "griddemo.h" +#ifndef __WXMSW__ + #include "../sample.xpm" +#endif + // ---------------------------------------------------------------------------- // wxWin macros // ---------------------------------------------------------------------------- @@ -133,7 +138,8 @@ BEGIN_EVENT_TABLE( GridFrame, wxFrame ) EVT_GRID_COL_SIZE( GridFrame::OnColSize ) EVT_GRID_SELECT_CELL( GridFrame::OnSelectCell ) EVT_GRID_RANGE_SELECT( GridFrame::OnRangeSelected ) - EVT_GRID_CELL_CHANGE( GridFrame::OnCellValueChanged ) + EVT_GRID_CELL_CHANGING( GridFrame::OnCellValueChanging ) + EVT_GRID_CELL_CHANGED( GridFrame::OnCellValueChanged ) EVT_GRID_CELL_BEGIN_DRAG( GridFrame::OnCellBeginDrag ) EVT_GRID_EDITOR_SHOWN( GridFrame::OnEditorShown ) @@ -146,6 +152,8 @@ GridFrame::GridFrame() wxDefaultPosition, wxDefaultSize ) { + SetIcon(wxICON(sample)); + wxMenu *fileMenu = new wxMenu; fileMenu->Append( ID_VTABLE, _T("&Virtual table test\tCtrl-V")); fileMenu->Append( ID_BUGS_TABLE, _T("&Bugs table test\tCtrl-B")); @@ -369,6 +377,14 @@ GridFrame::GridFrame() grid->SetCellAlignment(7, 1, wxALIGN_CENTRE, wxALIGN_CENTRE); grid->SetCellValue(7, 1, _T("Big box!")); + // create a separator-like row: it's grey and it's non-resizeable + grid->DisableRowResize(10); + grid->SetRowSize(10, 30); + attr = new wxGridCellAttr; + attr->SetBackgroundColour(*wxLIGHT_GREY); + grid->SetRowAttr(10, attr); + grid->SetCellValue(10, 0, "You can't resize this row interactively -- try it"); + // this does exactly nothing except testing that SetAttr() handles NULL // attributes and does reference counting correctly grid->SetAttr(11, 11, NULL); @@ -924,7 +940,10 @@ void GridFrame::OnCellLeftClick( wxGridEvent& ev ) void GridFrame::OnRowSize( wxGridSizeEvent& ev ) { - wxLogMessage(_T("Resized row %d"), ev.GetRowOrCol()); + const int row = ev.GetRowOrCol(); + + wxLogMessage("Resized row %d, new height = %d", + row, grid->GetRowSize(row)); ev.Skip(); } @@ -932,7 +951,10 @@ void GridFrame::OnRowSize( wxGridSizeEvent& ev ) void GridFrame::OnColSize( wxGridSizeEvent& ev ) { - wxLogMessage(_T("Resized col %d"), ev.GetRowOrCol()); + const int col = ev.GetRowOrCol(); + + wxLogMessage("Resized column %d, new width = %d", + col, grid->GetColSize(col)); ev.Skip(); } @@ -1059,13 +1081,36 @@ void GridFrame::OnRangeSelected( wxGridRangeSelectEvent& ev ) ev.Skip(); } +void GridFrame::OnCellValueChanging( wxGridEvent& ev ) +{ + int row = ev.GetRow(), + col = ev.GetCol(); + + wxLogMessage("Value of cell at (%d, %d): about to change " + "from \"%s\" to \"%s\"", + row, col, + grid->GetCellValue(row, col), ev.GetString()); + + // test how vetoing works + if ( ev.GetString() == "42" ) + { + wxLogMessage("Vetoing the change."); + ev.Veto(); + return; + } + + ev.Skip(); +} + void GridFrame::OnCellValueChanged( wxGridEvent& ev ) { int row = ev.GetRow(), col = ev.GetCol(); - wxLogMessage(_T("Value changed for cell at row %d, col %d: now \"%s\""), - row, col, grid->GetCellValue(row, col).c_str()); + wxLogMessage("Value of cell at (%d, %d) changed and is now \"%s\" " + "(was \"%s\")", + row, col, + grid->GetCellValue(row, col), ev.GetString()); ev.Skip(); } @@ -1121,6 +1166,13 @@ void GridFrame::About( wxCommandEvent& WXUNUSED(ev) ) aboutInfo.AddDeveloper(wxT("Julian Smart")); aboutInfo.AddDeveloper(wxT("Vadim Zeitlin")); + // this is just to force the generic version of the about + // dialog under wxMSW so that it's easy to test if the grid + // repaints correctly when it has lost focus and a dialog + // (different from the Windows standard message box -- it doesn't + // work with it for some reason) is moved over it. + aboutInfo.SetWebSite(wxT("http://www.wxwidgets.org")); + wxAboutBox(aboutInfo); } @@ -1746,7 +1798,8 @@ private: int col = m_txtColShowHide->GetCol(); if ( col != -1 ) { - m_grid->SetColSize(col, event.GetId() == wxID_ADD ? -1 : 0); + m_grid->SetColSize(col, + event.GetId() == wxID_ADD ? wxGRID_AUTOSIZE : 0); UpdateOrderAndVisibility(); } @@ -1787,6 +1840,16 @@ private: event.Skip(); } + void OnGridColSize(wxGridSizeEvent& event) + { + // we only catch this event to react to the user showing or hiding this + // column using the header control menu and not because we're + // interested in column resizing + UpdateOrderAndVisibility(); + + event.Skip(); + } + void OnIdle(wxIdleEvent& event) { if ( m_shouldUpdateOrder ) @@ -1798,20 +1861,6 @@ private: event.Skip(); } - void OnColRightClick(wxHeaderCtrlEvent&) - { - int col = m_grid->GetGridColHeader()->ShowColumnsMenu("Columns:"); - if ( col == wxID_NONE ) - return; - - if ( m_grid->IsColShown(col) ) - m_grid->HideCol(col); - else - m_grid->ShowCol(col); - - UpdateOrderAndVisibility(); - } - void UpdateOrderAndVisibility() { wxString s; @@ -1849,7 +1898,7 @@ private: // fla for EVT_IDLE handler bool m_shouldUpdateOrder; - DECLARE_NO_COPY_CLASS(TabularGridFrame) + wxDECLARE_NO_COPY_CLASS(TabularGridFrame); DECLARE_EVENT_TABLE() }; @@ -1873,6 +1922,7 @@ BEGIN_EVENT_TABLE(TabularGridFrame, wxFrame) EVT_GRID_COL_SORT(TabularGridFrame::OnGridColSort) EVT_GRID_COL_MOVE(TabularGridFrame::OnGridColMove) + EVT_GRID_COL_SIZE(TabularGridFrame::OnGridColSize) EVT_IDLE(TabularGridFrame::OnIdle) END_EVENT_TABLE() @@ -1895,14 +1945,6 @@ TabularGridFrame::TabularGridFrame() m_grid->UseNativeColHeader(); m_grid->HideRowLabels(); - m_grid->GetGridColHeader()->Connect - ( - wxEVT_COMMAND_HEADER_RIGHT_CLICK, - wxHeaderCtrlEventHandler(TabularGridFrame::OnColRightClick), - NULL, - this - ); - // add it and the other controls to the frame wxSizer * const sizerTop = new wxBoxSizer(wxVERTICAL); sizerTop->Add(m_grid, wxSizerFlags(1).Expand().Border()); @@ -1979,4 +2021,3 @@ void GridFrame::OnTabularTable(wxCommandEvent&) { new TabularGridFrame; } -