X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3556d648eb5f1882d6a422049cfbdb02ff665a62..7bad1010c228665dfbebf4fb28839dd255b5072d:/src/gtk/dataview.cpp?ds=inline diff --git a/src/gtk/dataview.cpp b/src/gtk/dataview.cpp index f62853a3db..49202a8553 100644 --- a/src/gtk/dataview.cpp +++ b/src/gtk/dataview.cpp @@ -111,7 +111,7 @@ public: wxDataViewCtrl* GetOwner() { return m_owner; } GtkWxTreeModel* GetGtkModel() { return m_gtk_model; } - // item can be deleted already in the model + // item can be deleted already in the model int GetIndexOf( const wxDataViewItem &parent, const wxDataViewItem &item ); protected: @@ -1419,7 +1419,7 @@ bool wxGtkDataViewModelNotifier::ItemDeleted( const wxDataViewItem &parent, cons int index = m_owner->GtkGetInternal()->GetIndexOf( parent, item ); gtk_tree_path_append_index( path, index ); #endif - + gtk_tree_model_row_deleted( GTK_TREE_MODEL(m_wxgtk_model), path ); gtk_tree_path_free (path); @@ -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(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 // --------------------------------------------------------- @@ -3529,6 +3570,10 @@ GtkTreePath *wxDataViewCtrlInternal::get_path( GtkTreeIter *iter ) if (m_wx_model->IsVirtualListModel()) { + // iter is root, add nothing + if (!iter->user_data) + return retval; + // user_data is just the index +1 int i = ( (wxUIntPtr) iter->user_data ) -1; gtk_tree_path_append_index (retval, i); @@ -3622,7 +3667,7 @@ gboolean wxDataViewCtrlInternal::iter_children( GtkTreeIter *iter, GtkTreeIter * return TRUE; } - + wxDataViewItem item; if (parent) item = wxDataViewItem( (void*) parent->user_data ); @@ -3773,16 +3818,23 @@ gboolean wxDataViewCtrlInternal::iter_parent( GtkTreeIter *iter, GtkTreeIter *ch } } -// item can be deleted already in the model +// item can be deleted already in the model int wxDataViewCtrlInternal::GetIndexOf( const wxDataViewItem &parent, const wxDataViewItem &item ) { - wxGtkTreeModelNode *parent_node = FindNode( parent ); - wxGtkTreeModelChildren &children = parent_node->GetChildren(); - size_t j; - for (j = 0; j < children.GetCount(); j++) + if (m_wx_model->IsVirtualListModel()) + { + return wxPtrToUInt(item.GetID()) - 1; + } + else { - if (children[j] == item.GetID()) - return j; + wxGtkTreeModelNode *parent_node = FindNode( parent ); + wxGtkTreeModelChildren &children = parent_node->GetChildren(); + size_t j; + for (j = 0; j < children.GetCount(); j++) + { + if (children[j] == item.GetID()) + return j; + } } return -1; }