]> git.saurik.com Git - wxWidgets.git/commitdiff
Use gtk_list_store_insert_with_values() to set entry at same time item is inserted.
authorPaul Cornett <paulcor@bullseye.com>
Mon, 1 Jul 2013 05:10:22 +0000 (05:10 +0000)
committerPaul Cornett <paulcor@bullseye.com>
Mon, 1 Jul 2013 05:10:22 +0000 (05:10 +0000)
This should ensure that the entry is always valid, removing the need for r74315.
Also simplify DoInsertItems() by using DoInsertItemsInLoop().

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74317 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/gtk/listbox.h
src/gtk/listbox.cpp
src/gtk/treeentry_gtk.c

index 038a53464b86920e535e933f1a66fabe13f9dd1a..ed73ca33d8167565e30aac87bdce9fb26dcd2af0 100644 (file)
@@ -111,6 +111,7 @@ protected:
     virtual int DoInsertItems(const wxArrayStringsAdapter& items,
                               unsigned int pos,
                               void **clientData, wxClientDataType type);
+    virtual int DoInsertOneItem(const wxString& item, unsigned int pos);
 
     virtual void DoSetFirstItem(int n);
     virtual void DoSetItemClientData(unsigned int n, void* clientData);
index 4f4474631314cb42b853611f3737d0c12a9f01e3..27d7440ae2e107c91ef333569053d694218fd2af 100644 (file)
@@ -454,38 +454,26 @@ int wxListBox::DoInsertItems(const wxArrayStringsAdapter& items,
     wxCHECK_MSG( m_treeview != NULL, wxNOT_FOUND, wxT("invalid listbox") );
 
     InvalidateBestSize();
+    int n = DoInsertItemsInLoop(items, pos, clientData, type);
+    UpdateOldSelections();
+    return n;
+}
 
-    GtkTreeIter* pIter = NULL; // append by default
-    GtkTreeIter iter;
-    if ( pos != GetCount() )
-    {
-        wxCHECK_MSG( GTKGetIteratorFor(pos, &iter), wxNOT_FOUND,
-                     wxT("internal wxListBox error in insertion") );
-
-        pIter = &iter;
-    }
-
-    const unsigned int numItems = items.GetCount();
-    for ( unsigned int i = 0; i < numItems; ++i )
-    {
-        wxGtkObject<GtkTreeEntry> entry(gtk_tree_entry_new());
-        gtk_tree_entry_set_label(entry, wxGTK_CONV(items[i]));
-        gtk_tree_entry_set_destroy_func(entry,
-                (GtkTreeEntryDestroy)gtk_tree_entry_destroy_cb,
-                            this);
-
-        GtkTreeIter itercur;
-        gtk_list_store_insert_before(m_liststore, &itercur, pIter);
-
-        GTKSetItem(itercur, entry);
-
-        if (clientData)
-            AssignNewItemClientData(GTKGetIndexFor(itercur), clientData, i, type);
-    }
+int wxListBox::DoInsertOneItem(const wxString& item, unsigned int pos)
+{
+    GtkTreeEntry* entry = gtk_tree_entry_new();
+    gtk_tree_entry_set_label(entry, wxGTK_CONV(item));
+    gtk_tree_entry_set_destroy_func(entry, (GtkTreeEntryDestroy)gtk_tree_entry_destroy_cb, this);
 
-    UpdateOldSelections();
+#if wxUSE_CHECKLISTBOX
+    int entryCol = int(m_hasCheckBoxes);
+#else
+    int entryCol = 0;
+#endif
+    gtk_list_store_insert_with_values(m_liststore, NULL, pos, entryCol, entry, -1);
+    g_object_unref(entry);
 
-    return pos + numItems - 1;
+    return pos;
 }
 
 // ----------------------------------------------------------------------------
index 1f3bf2b7f4cbda6e81e44ee0306a3448f13be4b5..5b76211109a0244626ba300e669248c1d9a0462d 100644 (file)
@@ -151,10 +151,6 @@ static void gtk_tree_entry_string_transform_func(const GValue *src_value,
     GtkTreeEntry *entry;
     void* src_ptr = g_value_peek_pointer(src_value);
 
-    /* can be NULL if transform is requested before entry is set */
-    if (src_ptr == NULL)
-        return;
-
     /* Make sure src is a treeentry and dest can hold a string */
     g_assert(GTK_IS_TREE_ENTRY(src_ptr));
     g_assert(G_VALUE_HOLDS(dest_value, G_TYPE_STRING));