X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d10f4bf950c4ad064b982fe8fe07d5ca5e3af7ba..53e46b61bbe4ce72b92c8898907f0a879d5f012b:/src/generic/grid.cpp diff --git a/src/generic/grid.cpp b/src/generic/grid.cpp index 83b2116205..ee52b2ab5d 100644 --- a/src/generic/grid.cpp +++ b/src/generic/grid.cpp @@ -115,6 +115,7 @@ DEFINE_EVENT_TYPE(wxEVT_GRID_CELL_CHANGE) DEFINE_EVENT_TYPE(wxEVT_GRID_SELECT_CELL) DEFINE_EVENT_TYPE(wxEVT_GRID_EDITOR_SHOWN) DEFINE_EVENT_TYPE(wxEVT_GRID_EDITOR_HIDDEN) +DEFINE_EVENT_TYPE(wxEVT_GRID_EDITOR_CREATED) // ---------------------------------------------------------------------------- // private classes @@ -517,6 +518,8 @@ void wxGridCellEditor::StartingClick() { } +#if wxUSE_TEXTCTRL + // ---------------------------------------------------------------------------- // wxGridCellTextEditor // ---------------------------------------------------------------------------- @@ -1143,6 +1146,10 @@ bool wxGridCellFloatEditor::IsAcceptedKey(wxKeyEvent& event) return FALSE; } +#endif // wxUSE_TEXTCTRL + +#if wxUSE_CHECKBOX + // ---------------------------------------------------------------------------- // wxGridCellBoolEditor // ---------------------------------------------------------------------------- @@ -1287,6 +1294,10 @@ bool wxGridCellBoolEditor::IsAcceptedKey(wxKeyEvent& event) return FALSE; } +#endif // wxUSE_CHECKBOX + +#if wxUSE_COMBOBOX + // ---------------------------------------------------------------------------- // wxGridCellChoiceEditor // ---------------------------------------------------------------------------- @@ -1407,6 +1418,8 @@ void wxGridCellChoiceEditor::SetParameters(const wxString& params) } } +#endif // wxUSE_COMBOBOX + // ---------------------------------------------------------------------------- // wxGridCellEditorEvtHandler // ---------------------------------------------------------------------------- @@ -1917,7 +1930,7 @@ void wxGridCellAttr::MergeWith(wxGridCellAttr *mergefrom) // // Maybe add support for merge of Render and Editor? if (!HasRenderer() && mergefrom->HasRenderer() ) - { + { m_renderer = mergefrom->m_renderer; m_renderer->IncRef(); } @@ -2302,18 +2315,18 @@ wxGridCellAttr *wxGridCellAttrProvider::GetAttr(int row, int col, //Also check merge cache, so we don't have to re-merge every time.. wxGridCellAttr *attrcell = (wxGridCellAttr *)NULL, *attrrow = (wxGridCellAttr *)NULL, - *attrcol = (wxGridCellAttr *)NULL; - + *attrcol = (wxGridCellAttr *)NULL; + attrcell = m_data->m_cellAttrs.GetAttr(row, col); attrcol = m_data->m_colAttrs.GetAttr(col); attrrow = m_data->m_rowAttrs.GetAttr(row); - if((attrcell != attrrow) && (attrrow !=attrcol) && (attrcell != attrcol)){ + if((attrcell != attrrow) && (attrrow !=attrcol) && (attrcell != attrcol)){ // Two or move are non NULL attr = new wxGridCellAttr; attr->SetKind(wxGridCellAttr::Merged); - //Order important.. + //Order important.. if(attrcell){ attr->MergeWith(attrcell); attrcell->DecRef(); @@ -2335,7 +2348,7 @@ wxGridCellAttr *wxGridCellAttrProvider::GetAttr(int row, int col, // one or none is non null return it or null. if(attrrow) attr = attrrow; if(attrcol) attr = attrcol; - if(attrcell) attr = attrcell; + if(attrcell) attr = attrcell; } } break; @@ -2455,19 +2468,24 @@ int wxGridTypeRegistry::FindDataType(const wxString& typeName) { // check whether this is one of the standard ones, in which case // register it "on the fly" +#if wxUSE_TEXTCTRL if ( typeName == wxGRID_VALUE_STRING ) { RegisterDataType(wxGRID_VALUE_STRING, new wxGridCellStringRenderer, new wxGridCellTextEditor); - } - else if ( typeName == wxGRID_VALUE_BOOL ) + } else +#endif // wxUSE_TEXTCTRL +#if wxUSE_CHECKBOX + if ( typeName == wxGRID_VALUE_BOOL ) { RegisterDataType(wxGRID_VALUE_BOOL, new wxGridCellBoolRenderer, new wxGridCellBoolEditor); - } - else if ( typeName == wxGRID_VALUE_NUMBER ) + } else +#endif // wxUSE_CHECKBOX +#if wxUSE_TEXTCTRL + if ( typeName == wxGRID_VALUE_NUMBER ) { RegisterDataType(wxGRID_VALUE_NUMBER, new wxGridCellNumberRenderer, @@ -2478,14 +2496,16 @@ int wxGridTypeRegistry::FindDataType(const wxString& typeName) RegisterDataType(wxGRID_VALUE_FLOAT, new wxGridCellFloatRenderer, new wxGridCellFloatEditor); - } - else if ( typeName == wxGRID_VALUE_CHOICE ) + } else +#endif // wxUSE_TEXTCTRL +#if wxUSE_COMBOBOX + if ( typeName == wxGRID_VALUE_CHOICE ) { RegisterDataType(wxGRID_VALUE_CHOICE, new wxGridCellStringRenderer, new wxGridCellChoiceEditor); - } - else + } else +#endif // wxUSE_COMBOBOX { return wxNOT_FOUND; } @@ -3002,7 +3022,7 @@ bool wxGridStringTable::DeleteRows( size_t pos, size_t numRows ) { for ( n = 0; n < numRows; n++ ) { - m_data.Remove( pos ); + m_data.RemoveAt( pos ); } } if ( GetView() ) @@ -3502,6 +3522,8 @@ wxGrid::wxGrid( wxWindow *parent, wxGrid::~wxGrid() { + // Must do this or ~wxScrollHelper will pop the wrong event handler + SetTargetWindow(this); ClearAttrCache(); wxSafeDecRef(m_defaultCellAttr); @@ -3690,7 +3712,7 @@ void wxGrid::Init() m_gridLineColour = wxColour( 128, 128, 255 ); m_gridLinesEnabled = TRUE; m_cellHighlightColour = m_gridLineColour; - m_cellHighlightPenWidth = 3; + m_cellHighlightPenWidth = 2; m_cellHighlightROPenWidth = 1; m_cursorMode = WXGRID_CURSOR_SELECT_CELL; @@ -6667,6 +6689,14 @@ void wxGrid::ShowCellEditControl() { editor->Create(m_gridWin, -1, new wxGridCellEditorEvtHandler(this, editor)); + + wxGridEditorCreatedEvent evt(GetId(), + wxEVT_GRID_EDITOR_CREATED, + this, + row, + col, + editor->GetControl()); + GetEventHandler()->ProcessEvent(evt); } editor->Show( TRUE, attr ); @@ -8669,7 +8699,7 @@ wxRect wxGrid::BlockToDeviceRect( const wxGridCellCoords &topLeft, // ------ Grid event classes // -IMPLEMENT_DYNAMIC_CLASS( wxGridEvent, wxEvent ) +IMPLEMENT_DYNAMIC_CLASS( wxGridEvent, wxNotifyEvent ) wxGridEvent::wxGridEvent( int id, wxEventType type, wxObject* obj, int row, int col, int x, int y, bool sel, @@ -8690,7 +8720,7 @@ wxGridEvent::wxGridEvent( int id, wxEventType type, wxObject* obj, } -IMPLEMENT_DYNAMIC_CLASS( wxGridSizeEvent, wxEvent ) +IMPLEMENT_DYNAMIC_CLASS( wxGridSizeEvent, wxNotifyEvent ) wxGridSizeEvent::wxGridSizeEvent( int id, wxEventType type, wxObject* obj, int rowOrCol, int x, int y, @@ -8709,7 +8739,7 @@ wxGridSizeEvent::wxGridSizeEvent( int id, wxEventType type, wxObject* obj, } -IMPLEMENT_DYNAMIC_CLASS( wxGridRangeSelectEvent, wxEvent ) +IMPLEMENT_DYNAMIC_CLASS( wxGridRangeSelectEvent, wxNotifyEvent ) wxGridRangeSelectEvent::wxGridRangeSelectEvent(int id, wxEventType type, wxObject* obj, const wxGridCellCoords& topLeft, @@ -8730,4 +8760,18 @@ wxGridRangeSelectEvent::wxGridRangeSelectEvent(int id, wxEventType type, wxObjec } +IMPLEMENT_DYNAMIC_CLASS(wxGridEditorCreatedEvent, wxCommandEvent) + +wxGridEditorCreatedEvent::wxGridEditorCreatedEvent(int id, wxEventType type, + wxObject* obj, int row, + int col, wxControl* ctrl) + : wxCommandEvent(type, id) +{ + SetEventObject(obj); + m_row = row; + m_col = col; + m_ctrl = ctrl; +} + + #endif // ifndef wxUSE_NEW_GRID