Fix wxGTK wxListBox::Append() to return correct
index (also for sorted list). Use wxControlWithItems::Insert(..) methods from wxListBox (can probably be removed). git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@44467 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -45,11 +45,11 @@ public:
|
|||||||
// all generic methods are in wxControlWithItems, except for the following
|
// all generic methods are in wxControlWithItems, except for the following
|
||||||
// ones which are not yet implemented by wxChoice/wxComboBox
|
// ones which are not yet implemented by wxChoice/wxComboBox
|
||||||
void Insert(const wxString& item, unsigned int pos)
|
void Insert(const wxString& item, unsigned int pos)
|
||||||
{ DoInsert(item, pos); }
|
{ /* return*/ wxControlWithItems::Insert(item,pos); }
|
||||||
void Insert(const wxString& item, unsigned int pos, void *clientData)
|
void Insert(const wxString& item, unsigned int pos, void *clientData)
|
||||||
{ DoInsert(item, pos); SetClientData(pos, clientData); }
|
{ /* return*/ wxControlWithItems::Insert(item,pos,clientData); }
|
||||||
void Insert(const wxString& item, unsigned int pos, wxClientData *clientData)
|
void Insert(const wxString& item, unsigned int pos, wxClientData *clientData)
|
||||||
{ DoInsert(item, pos); SetClientObject(pos, clientData); }
|
{ /* return*/ wxControlWithItems::Insert(item,pos,clientData); }
|
||||||
|
|
||||||
void InsertItems(unsigned int nItems, const wxString *items, unsigned int pos);
|
void InsertItems(unsigned int nItems, const wxString *items, unsigned int pos);
|
||||||
void InsertItems(const wxArrayString& items, unsigned int pos)
|
void InsertItems(const wxArrayString& items, unsigned int pos)
|
||||||
|
@@ -552,12 +552,50 @@ void wxListBox::DoInsertItems(const wxArrayString& items, unsigned int pos)
|
|||||||
|
|
||||||
int wxListBox::DoAppend( const wxString& item )
|
int wxListBox::DoAppend( const wxString& item )
|
||||||
{
|
{
|
||||||
// Call DoInsertItems
|
wxCHECK_MSG( m_treeview != NULL, -1, wxT("invalid listbox") );
|
||||||
unsigned int nWhere = wxListBox::GetCount();
|
|
||||||
wxArrayString aItems;
|
InvalidateBestSize();
|
||||||
aItems.Add(item);
|
|
||||||
wxListBox::DoInsertItems(aItems, nWhere);
|
GtkTreeEntry* entry = gtk_tree_entry_new();
|
||||||
return nWhere;
|
gtk_tree_entry_set_label( entry, wxGTK_CONV(item) );
|
||||||
|
gtk_tree_entry_set_destroy_func(entry,
|
||||||
|
(GtkTreeEntryDestroy)gtk_tree_entry_destroy_cb,
|
||||||
|
this);
|
||||||
|
|
||||||
|
GtkTreeIter itercur;
|
||||||
|
gtk_list_store_insert_before( m_liststore, &itercur, NULL );
|
||||||
|
|
||||||
|
#if wxUSE_CHECKLISTBOX
|
||||||
|
if (m_hasCheckBoxes)
|
||||||
|
{
|
||||||
|
gtk_list_store_set( m_liststore, &itercur,
|
||||||
|
0, FALSE, //FALSE == not toggled
|
||||||
|
1, entry, -1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
gtk_list_store_set(m_liststore, &itercur,
|
||||||
|
0, entry, -1);
|
||||||
|
|
||||||
|
g_object_unref (entry); //liststore always refs :)
|
||||||
|
|
||||||
|
GtkTreePath* path = gtk_tree_model_get_path(
|
||||||
|
GTK_TREE_MODEL(m_liststore),
|
||||||
|
&itercur);
|
||||||
|
|
||||||
|
gint* pIntPath = gtk_tree_path_get_indices(path);
|
||||||
|
|
||||||
|
if (pIntPath == NULL)
|
||||||
|
{
|
||||||
|
wxLogSysError(wxT("internal wxListBox error in insertion"));
|
||||||
|
return wxNOT_FOUND;
|
||||||
|
}
|
||||||
|
|
||||||
|
int index = pIntPath[0];
|
||||||
|
|
||||||
|
gtk_tree_path_free( path );
|
||||||
|
|
||||||
|
return index;
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxListBox::DoSetItems( const wxArrayString& items,
|
void wxListBox::DoSetItems( const wxArrayString& items,
|
||||||
|
Reference in New Issue
Block a user