diff --git a/include/wx/gtk/dvrenderer.h b/include/wx/gtk/dvrenderer.h index da5d540e2b..0704b89ff6 100644 --- a/include/wx/gtk/dvrenderer.h +++ b/include/wx/gtk/dvrenderer.h @@ -47,9 +47,10 @@ public: // called when the cell value was edited by user with the new value // - // it validates the new value and notifies the model about the change by - // calling GtkOnCellChanged() if it was accepted - virtual void GtkOnTextEdited(const char *itempath, const wxString& value); + // it uses GtkGetValueFromString() to parse the new value, then validates + // it by calling Validate() and notifies the model about the change if it + // passes validation + void GtkOnTextEdited(const char *itempath, const wxString& value); GtkCellRenderer* GetGtkHandle() { return m_renderer; } void GtkInitHandlers(); @@ -78,14 +79,16 @@ protected: virtual bool IsHighlighted() const wxOVERRIDE; - virtual void GtkOnCellChanged(const wxVariant& value, - const wxDataViewItem& item, - unsigned col); - // Apply our effective alignment (i.e. m_alignment if specified or the // associated column alignment by default) to the given renderer. void GtkApplyAlignment(GtkCellRenderer *renderer); + // This method is used to interpret the string entered by user and by + // default just uses it as is, but can be overridden for classes requiring + // special treatment. + virtual wxVariant GtkGetValueFromString(const wxString& str) const; + + GtkCellRenderer *m_renderer; int m_alignment; diff --git a/include/wx/gtk/dvrenderers.h b/include/wx/gtk/dvrenderers.h index 9169d09761..67d81df79e 100644 --- a/include/wx/gtk/dvrenderers.h +++ b/include/wx/gtk/dvrenderers.h @@ -228,9 +228,7 @@ public: virtual void GtkPackIntoColumn(GtkTreeViewColumn *column) wxOVERRIDE; protected: - virtual void GtkOnCellChanged(const wxVariant& value, - const wxDataViewItem& item, - unsigned col) wxOVERRIDE; + virtual wxVariant GtkGetValueFromString(const wxString& str) const wxOVERRIDE; private: wxDataViewIconText m_value; @@ -281,7 +279,7 @@ public: virtual bool GetValue( wxVariant &value ) const wxOVERRIDE; private: - virtual void GtkOnTextEdited(const char *itempath, const wxString& str) wxOVERRIDE; + virtual wxVariant GtkGetValueFromString(const wxString& str) const; }; diff --git a/src/gtk/dataview.cpp b/src/gtk/dataview.cpp index b677de2b69..d1f55061f6 100644 --- a/src/gtk/dataview.cpp +++ b/src/gtk/dataview.cpp @@ -2155,26 +2155,24 @@ bool wxDataViewRenderer::IsHighlighted() const GetOwner()->GetOwner()->IsSelected(m_itemBeingRendered); } +wxVariant +wxDataViewRenderer::GtkGetValueFromString(const wxString& str) const +{ + return str; +} + void wxDataViewRenderer::GtkOnTextEdited(const char *itempath, const wxString& str) { - wxVariant value(str); + wxVariant value(GtkGetValueFromString(str)); if (!Validate( value )) return; wxDataViewItem item(GetOwner()->GetOwner()->GTKPathToItem(wxGtkTreePath(itempath))); - GtkOnCellChanged(value, item, GetOwner()->GetModelColumn()); -} - -void -wxDataViewRenderer::GtkOnCellChanged(const wxVariant& value, - const wxDataViewItem& item, - unsigned col) -{ wxDataViewModel *model = GetOwner()->GetOwner()->GetModel(); - model->ChangeValue( value, item, col ); + model->ChangeValue( value, item, GetOwner()->GetModelColumn() ); } void wxDataViewRenderer::SetAttr(const wxDataViewItemAttr& WXUNUSED(attr)) @@ -2941,17 +2939,10 @@ wxDataViewChoiceByIndexRenderer::wxDataViewChoiceByIndexRenderer( const wxArrayS m_variantType = wxS("long"); } -void wxDataViewChoiceByIndexRenderer::GtkOnTextEdited(const char *itempath, const wxString& str) +wxVariant +wxDataViewChoiceByIndexRenderer::GtkGetValueFromString(const wxString& str) const { - wxVariant value( (long) GetChoices().Index( str ) ); - - if (!Validate( value )) - return; - - wxDataViewItem - item(GetOwner()->GetOwner()->GTKPathToItem(wxGtkTreePath(itempath))); - - GtkOnCellChanged(value, item, GetOwner()->GetModelColumn()); + return static_cast(GetChoices().Index(str)); } bool wxDataViewChoiceByIndexRenderer::SetValue( const wxVariant &value ) @@ -3024,17 +3015,15 @@ bool wxDataViewIconTextRenderer::GetValue(wxVariant& value) const return true; } -void -wxDataViewIconTextRenderer::GtkOnCellChanged(const wxVariant& value, - const wxDataViewItem& item, - unsigned col) +wxVariant +wxDataViewIconTextRenderer::GtkGetValueFromString(const wxString& str) const { // we receive just the text part of our value as it's the only one which // can be edited, but we need the full wxDataViewIconText value for the // model wxVariant valueIconText; - valueIconText << wxDataViewIconText(value.GetString(), m_value.GetIcon()); - wxDataViewTextRenderer::GtkOnCellChanged(valueIconText, item, col); + valueIconText << wxDataViewIconText(str, m_value.GetIcon()); + return valueIconText; } // ---------------------------------------------------------