From: Robert Roebling <robert@roebling.de> Date: Fri, 21 May 2010 20:13:49 +0000 (+0000) Subject: Second try to get wxDataViewChoiceByIndex and its name right, hopefully fixes #11970... X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/65887bd0f15e2ed92f130dd7bca91636527e1540 Second try to get wxDataViewChoiceByIndex and its name right, hopefully fixes #11970: wxDataViewChoiceRenderer set/get methods should use the current selection index not a string git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64378 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/dvrenderers.h b/include/wx/dvrenderers.h index 6a1bdc9ad0..5b0ef20910 100644 --- a/include/wx/dvrenderers.h +++ b/include/wx/dvrenderers.h @@ -341,40 +341,27 @@ private: wxString m_data; }; -#endif // generic or Carbon versions - // ---------------------------------------------------------------------------- -// wxDataViewChoiceRendererByIndex +// wxDataViewChoiceByIndexRenderer // ---------------------------------------------------------------------------- -class WXDLLIMPEXP_ADV wxDataViewChoiceRendererByIndex: public wxDataViewChoiceRenderer +class WXDLLIMPEXP_ADV wxDataViewChoiceByIndexRenderer: public wxDataViewChoiceRenderer { public: - wxDataViewChoiceRendererByIndex( const wxArrayString &choices, + wxDataViewChoiceByIndexRenderer( const wxArrayString &choices, wxDataViewCellMode mode = wxDATAVIEW_CELL_EDITABLE, - int alignment = wxDVR_DEFAULT_ALIGNMENT ) : - wxDataViewChoiceRenderer( choices, mode, alignment ) - { - } + int alignment = wxDVR_DEFAULT_ALIGNMENT ); - virtual bool SetValue( const wxVariant &value ) - { - wxVariant string_value = GetChoice( value.GetLong() ); - return wxDataViewChoiceRenderer::SetValue( string_value ); - } + virtual wxControl* CreateEditorCtrl( wxWindow *parent, wxRect labelRect, const wxVariant &value ); + virtual bool GetValueFromEditorCtrl( wxControl* editor, wxVariant &value ); - virtual bool GetValue( wxVariant &value ) const - { - wxVariant string_value; - if (!wxDataViewChoiceRenderer::GetValue( string_value )) - return false; - - value = (long) GetChoices().Index( string_value.GetString() ); - return true; - } + virtual bool SetValue( const wxVariant &value ); + virtual bool GetValue( wxVariant &value ) const; }; +#endif // generic or Carbon versions + // this class is obsolete, its functionality was merged in // wxDataViewTextRenderer itself now, don't use it any more #define wxDataViewTextRendererAttr wxDataViewTextRenderer diff --git a/include/wx/gtk/dvrenderer.h b/include/wx/gtk/dvrenderer.h index 58209e3100..5918f229f2 100644 --- a/include/wx/gtk/dvrenderer.h +++ b/include/wx/gtk/dvrenderer.h @@ -48,7 +48,7 @@ public: // // it validates the new value and notifies the model about the change by // calling GtkOnCellChanged() if it was accepted - void GtkOnTextEdited(const gchar *itempath, const wxString& value); + virtual void GtkOnTextEdited(const gchar *itempath, const wxString& value); GtkCellRenderer* GetGtkHandle() { return m_renderer; } void GtkInitHandlers(); diff --git a/include/wx/gtk/dvrenderers.h b/include/wx/gtk/dvrenderers.h index 3aa7029144..2d51e6bd33 100644 --- a/include/wx/gtk/dvrenderers.h +++ b/include/wx/gtk/dvrenderers.h @@ -276,5 +276,25 @@ private: wxString m_data; }; +// ---------------------------------------------------------------------------- +// wxDataViewChoiceByIndexRenderer +// ---------------------------------------------------------------------------- + +class WXDLLIMPEXP_ADV wxDataViewChoiceByIndexRenderer: public wxDataViewChoiceRenderer +{ +public: + wxDataViewChoiceByIndexRenderer( const wxArrayString &choices, + wxDataViewCellMode mode = wxDATAVIEW_CELL_EDITABLE, + int alignment = wxDVR_DEFAULT_ALIGNMENT ); + + virtual bool SetValue( const wxVariant &value ); + virtual bool GetValue( wxVariant &value ) const; + +private: + virtual void GtkOnTextEdited(const gchar *itempath, const wxString& str); +}; + + + #endif // _WX_GTK_DVRENDERERS_H_ diff --git a/src/common/datavcmn.cpp b/src/common/datavcmn.cpp index dca9eaab7d..1b2d20cdce 100644 --- a/src/common/datavcmn.cpp +++ b/src/common/datavcmn.cpp @@ -1433,6 +1433,49 @@ bool wxDataViewChoiceRenderer::GetValue( wxVariant &value ) const return true; } +// ---------------------------------------------------------------------------- +// wxDataViewChoiceByIndexRenderer +// ---------------------------------------------------------------------------- + +wxDataViewChoiceByIndexRenderer::wxDataViewChoiceByIndexRenderer( const wxArrayString &choices, + wxDataViewCellMode mode, int alignment ) : + wxDataViewChoiceRenderer( choices, mode, alignment ) +{ +} + +wxControl* wxDataViewChoiceByIndexRenderer::CreateEditorCtrl( wxWindow *parent, wxRect labelRect, const wxVariant &value ) +{ + wxVariant string_value = GetChoice( value.GetLong() ); + + return wxDataViewChoiceRenderer::CreateEditorCtrl( parent, labelRect, string_value ); +} + +bool wxDataViewChoiceByIndexRenderer::GetValueFromEditorCtrl( wxControl* editor, wxVariant &value ) +{ + wxVariant string_value; + if (!wxDataViewChoiceRenderer::GetValueFromEditorCtrl( editor, string_value )) + return false; + + value = (long) GetChoices().Index( string_value.GetString() ); + return true; +} + +bool wxDataViewChoiceByIndexRenderer::SetValue( const wxVariant &value ) +{ + wxVariant string_value = GetChoice( value.GetLong() ); + return wxDataViewChoiceRenderer::SetValue( string_value ); +} + +bool wxDataViewChoiceByIndexRenderer::GetValue( wxVariant &value ) const +{ + wxVariant string_value; + if (!wxDataViewChoiceRenderer::GetValue( string_value )) + return false; + + value = (long) GetChoices().Index( string_value.GetString() ); + return true; +} + #endif //----------------------------------------------------------------------------- diff --git a/src/gtk/dataview.cpp b/src/gtk/dataview.cpp index d52cef435d..49202a8553 100644 --- a/src/gtk/dataview.cpp +++ b/src/gtk/dataview.cpp @@ -2407,7 +2407,7 @@ bool wxDataViewChoiceRenderer::SetValue( const wxVariant &value ) { GValue gvalue = { 0, }; g_value_init( &gvalue, G_TYPE_STRING ); - g_value_set_string( &gvalue, wxGTK_CONV_FONT( value.GetString(), GetOwner()->GetOwner()->GetFont() ) ); + g_value_set_string( &gvalue, wxGTK_CONV( value.GetString() ) ); g_object_set_property( G_OBJECT(m_renderer), "text", &gvalue ); g_value_unset( &gvalue ); } @@ -2426,8 +2426,7 @@ bool wxDataViewChoiceRenderer::GetValue( wxVariant &value ) const GValue gvalue = { 0, }; g_value_init( &gvalue, G_TYPE_STRING ); g_object_get_property( G_OBJECT(m_renderer), "text", &gvalue ); - wxString temp = wxGTK_CONV_BACK_FONT( g_value_get_string( &gvalue ), - const_cast<wxDataViewChoiceRenderer*>(this)->GetOwner()->GetOwner()->GetFont() ); + wxString temp = wxGTK_CONV_BACK( g_value_get_string( &gvalue ) ); g_value_unset( &gvalue ); value = temp; @@ -2462,6 +2461,48 @@ void wxDataViewChoiceRenderer::SetAlignment( int align ) g_value_unset( &gvalue ); } +// ---------------------------------------------------------------------------- +// wxDataViewChoiceByIndexRenderer +// ---------------------------------------------------------------------------- + +wxDataViewChoiceByIndexRenderer::wxDataViewChoiceByIndexRenderer( const wxArrayString &choices, + wxDataViewCellMode mode, int alignment ) : + wxDataViewChoiceRenderer( choices, mode, alignment ) +{ +} + +void wxDataViewChoiceByIndexRenderer::GtkOnTextEdited(const gchar *itempath, const wxString& str) +{ + wxVariant value( (long) GetChoices().Index( str ) ); + + if (!Validate( value )) + return; + + GtkTreePath *path = gtk_tree_path_new_from_string( itempath ); + GtkTreeIter iter; + GetOwner()->GetOwner()->GtkGetInternal()->get_iter( &iter, path ); + wxDataViewItem item( (void*) iter.user_data );; + gtk_tree_path_free( path ); + + GtkOnCellChanged(value, item, GetOwner()->GetModelColumn()); +} + +bool wxDataViewChoiceByIndexRenderer::SetValue( const wxVariant &value ) +{ + wxVariant string_value = GetChoice( value.GetLong() ); + return wxDataViewChoiceRenderer::SetValue( string_value ); +} + +bool wxDataViewChoiceByIndexRenderer::GetValue( wxVariant &value ) const +{ + wxVariant string_value; + if (!wxDataViewChoiceRenderer::GetValue( string_value )) + return false; + + value = (long) GetChoices().Index( string_value.GetString() ); + return true; +} + // --------------------------------------------------------- // wxDataViewDateRenderer // ---------------------------------------------------------