if (listbox->IsSelected(sel))
{
GtkTreeEntry* entry = listbox->GtkGetEntry(sel);
-
+
if (entry)
{
event.SetInt(sel);
event.SetClientObject( (wxClientData*) gtk_tree_entry_get_userdata(entry) );
else if ( listbox->HasClientUntypedData() )
event.SetClientData( gtk_tree_entry_get_userdata(entry) );
-
+
g_object_unref (entry);
}
else
gtk_listitem_changed_callback( GtkTreeSelection* selection, wxListBox *listbox )
{
if (g_blockEventsOnDrag) return;
-
+
if (listbox->m_blockEvent) return;
-
+
wxCommandEvent event(wxEVT_COMMAND_LISTBOX_SELECTED, listbox->GetId() );
event.SetEventObject( listbox );
{
wxArrayInt selections;
listbox->GetSelections( selections );
-
+
if (selections.GetCount() == 0)
{
// indicate that this is a deselection
event.SetExtraLong( 0 );
event.SetInt( -1 );
-
+
listbox->GetEventHandler()->ProcessEvent( event );
-
+
return;
}
else
// indicate that this is a selection
event.SetExtraLong( 1 );
event.SetInt( selections[0] );
-
+
listbox->GetEventHandler()->ProcessEvent( event );
}
}
// indicate that this is a deselection
event.SetExtraLong( 0 );
event.SetInt( -1 );
-
+
listbox->GetEventHandler()->ProcessEvent( event );
-
+
return;
}
else
GtkTreeSelection* selection = gtk_tree_view_get_selection( m_treeview );
-
+
g_signal_connect_after (selection, "changed",
G_CALLBACK (gtk_listitem_changed_callback), this);
wxString label = items[i];
GtkTreeEntry* entry = gtk_tree_entry_new();
- gtk_tree_entry_set_label(entry, wxConvUTF8.cWX2MB(label));
+ gtk_tree_entry_set_label(entry, wxGTK_CONV(label));
gtk_tree_entry_set_destroy_func(entry,
(GtkTreeEntryDestroy)gtk_tree_entry_destroy_cb,
this);
int wxListBox::DoAppend( const wxString& item )
{
- // Call DoInsertItems
- unsigned int nWhere = wxListBox::GetCount();
- wxArrayString aItems;
- aItems.Add(item);
- wxListBox::DoInsertItems(aItems, nWhere);
- return nWhere;
+ wxCHECK_MSG( m_treeview != NULL, -1, wxT("invalid listbox") );
+
+ InvalidateBestSize();
+
+ 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);
+
+ 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,