X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e8375af8ff97a3649361b988a40b991a8cdaab09..29ae3766ccb6076cf5e875f35ce137905ceb6f79:/src/gtk/listbox.cpp diff --git a/src/gtk/listbox.cpp b/src/gtk/listbox.cpp index c244394fcd..ac6c9272e2 100644 --- a/src/gtk/listbox.cpp +++ b/src/gtk/listbox.cpp @@ -62,9 +62,9 @@ extern bool g_blockEventsOnScroll; extern "C" { static void -gtk_listbox_row_activated_callback(GtkTreeView *treeview, +gtk_listbox_row_activated_callback(GtkTreeView * WXUNUSED(treeview), GtkTreePath *path, - GtkTreeViewColumn *col, + GtkTreeViewColumn * WXUNUSED(col), wxListBox *listbox) { if (g_blockEventsOnDrag) return; @@ -114,7 +114,8 @@ gtk_listbox_row_activated_callback(GtkTreeView *treeview, extern "C" { static void -gtk_listitem_changed_callback( GtkTreeSelection* selection, wxListBox *listbox ) +gtk_listitem_changed_callback(GtkTreeSelection * WXUNUSED(selection), + wxListBox *listbox ) { if (g_blockEventsOnDrag) return; @@ -207,7 +208,7 @@ static void gtk_tree_entry_destroy_cb(GtkTreeEntry* entry, //----------------------------------------------------------------------------- extern "C" { -static gint gtk_listbox_sort_callback(GtkTreeModel *model, +static gint gtk_listbox_sort_callback(GtkTreeModel * WXUNUSED(model), GtkTreeIter *a, GtkTreeIter *b, wxListBox *listbox) @@ -228,8 +229,8 @@ static gint gtk_listbox_sort_callback(GtkTreeModel *model, //We compare collate keys here instead of calling g_utf8_collate //as it is rather slow (and even the docs reccommend this) - int ret = strcasecmp(gtk_tree_entry_get_collate_key(entry), - gtk_tree_entry_get_collate_key(entry2)); + int ret = strcmp(gtk_tree_entry_get_collate_key(entry), + gtk_tree_entry_get_collate_key(entry2)); g_object_unref (entry); g_object_unref (entry2); @@ -243,8 +244,8 @@ static gint gtk_listbox_sort_callback(GtkTreeModel *model, //----------------------------------------------------------------------------- extern "C" { -static gboolean gtk_listbox_searchequal_callback(GtkTreeModel* model, - gint column, +static gboolean gtk_listbox_searchequal_callback(GtkTreeModel * WXUNUSED(model), + gint WXUNUSED(column), const gchar* key, GtkTreeIter* iter, wxListBox* listbox) @@ -258,8 +259,8 @@ static gboolean gtk_listbox_searchequal_callback(GtkTreeModel* model, wxCHECK_MSG(entry, 0, wxT("Could not get entry")); wxGtkString keycollatekey(g_utf8_collate_key(key, -1)); - int ret = strcasecmp(keycollatekey, - gtk_tree_entry_get_collate_key(entry)); + int ret = strcmp(keycollatekey, + gtk_tree_entry_get_collate_key(entry)); g_object_unref (entry); @@ -271,7 +272,7 @@ static gboolean gtk_listbox_searchequal_callback(GtkTreeModel* model, // wxListBox //----------------------------------------------------------------------------- -IMPLEMENT_DYNAMIC_CLASS(wxListBox, wxControl) +IMPLEMENT_DYNAMIC_CLASS(wxListBox, wxControlWithItems) // ---------------------------------------------------------------------------- // construction @@ -396,7 +397,7 @@ bool wxListBox::Create( wxWindow *parent, wxWindowID id, gtk_tree_selection_set_mode( selection, mode ); // Handle sortable stuff - if(style & wxLB_SORT) + if(HasFlag(wxLB_SORT)) { // Setup sorting in ascending (wx) order gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(m_liststore), @@ -418,7 +419,7 @@ bool wxListBox::Create( wxWindow *parent, wxWindowID id, gtk_widget_show( GTK_WIDGET(m_treeview) ); m_focusWidget = GTK_WIDGET(m_treeview); - wxListBox::DoInsertItems(wxArrayString(n, choices), 0); // insert initial items + Append(n, choices); // insert initial items // generate dclick events g_signal_connect_after(m_treeview, "row-activated", @@ -443,35 +444,30 @@ wxListBox::~wxListBox() // adding items // ---------------------------------------------------------------------------- -void wxListBox::GtkInsertItems(const wxArrayString& items, - void** clientData, unsigned int pos) +int wxListBox::DoInsertItems(const wxArrayStringsAdapter& items, + unsigned int pos, + void **clientData, + wxClientDataType WXUNUSED(type)) { - wxCHECK_RET( m_treeview != NULL, wxT("invalid listbox") ); + wxCHECK_MSG( m_treeview != NULL, wxNOT_FOUND, wxT("invalid listbox") ); InvalidateBestSize(); - // Create and set column ids and GValues - - unsigned int nNum = items.GetCount(); - unsigned int nCurCount = wxListBox::GetCount(); - wxASSERT_MSG(pos <= nCurCount, wxT("Invalid index passed to wxListBox")); - GtkTreeIter* pIter = NULL; // append by default GtkTreeIter iter; - if (pos != nCurCount) + if ( pos != GetCount() ) { - wxCHECK_RET( GtkGetIteratorFor(pos, &iter), + wxCHECK_MSG( GtkGetIteratorFor(pos, &iter), wxNOT_FOUND, wxT("internal wxListBox error in insertion") ); pIter = &iter; } - for (unsigned int i = 0; i < nNum; ++i) + const unsigned int numItems = items.GetCount(); + for ( unsigned int i = 0; i < numItems; ++i ) { - wxString label = items[i]; - GtkTreeEntry* entry = gtk_tree_entry_new(); - gtk_tree_entry_set_label(entry, wxGTK_CONV(label)); + gtk_tree_entry_set_label(entry, wxGTK_CONV(items[i])); gtk_tree_entry_set_destroy_func(entry, (GtkTreeEntryDestroy)gtk_tree_entry_destroy_cb, this); @@ -486,49 +482,15 @@ void wxListBox::GtkInsertItems(const wxArrayString& items, g_object_unref (entry); } -} - -void wxListBox::DoInsertItems(const wxArrayString& items, unsigned int pos) -{ - wxCHECK_RET( IsValidInsert(pos), wxT("invalid index in wxListBox::InsertItems") ); - - GtkInsertItems(items, NULL, pos); -} - -int wxListBox::DoAppend( const wxString& item ) -{ - 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 ); - GtkSetItem(itercur, entry); - - g_object_unref (entry); - - return GtkGetIndexFor(itercur); -} - -void wxListBox::DoSetItems( const wxArrayString& items, - void **clientData) -{ - Clear(); - GtkInsertItems(items, clientData, 0); + return pos + numItems - 1; } // ---------------------------------------------------------------------------- // deleting items // ---------------------------------------------------------------------------- -void wxListBox::Clear() +void wxListBox::DoClear() { wxCHECK_RET( m_treeview != NULL, wxT("invalid listbox") ); @@ -537,7 +499,7 @@ void wxListBox::Clear() gtk_list_store_clear( m_liststore ); /* well, THAT was easy :) */ } -void wxListBox::Delete(unsigned int n) +void wxListBox::DoDeleteOneItem(unsigned int n) { wxCHECK_RET( m_treeview != NULL, wxT("invalid listbox") ); @@ -632,11 +594,6 @@ void* wxListBox::DoGetItemClientData(unsigned int n) const return userdata; } -wxClientData* wxListBox::DoGetItemClientObject(unsigned int n) const -{ - return (wxClientData*) wxListBox::DoGetItemClientData(n); -} - void wxListBox::DoSetItemClientData(unsigned int n, void* clientData) { wxCHECK_RET( IsValid(n), @@ -649,12 +606,6 @@ void wxListBox::DoSetItemClientData(unsigned int n, void* clientData) g_object_unref (entry); } -void wxListBox::DoSetItemClientObject(unsigned int n, wxClientData* clientData) -{ - // wxItemContainer already deletes data for us - wxListBox::DoSetItemClientData(n, (void*) clientData); -} - // ---------------------------------------------------------------------------- // string list access // ---------------------------------------------------------------------------- @@ -818,6 +769,13 @@ void wxListBox::GtkSetSelection(int n, const bool select, const bool blockEvent) else gtk_tree_selection_unselect_iter(selection, &iter); + GtkTreePath* path = gtk_tree_model_get_path( + GTK_TREE_MODEL(m_liststore), &iter); + + gtk_tree_view_scroll_to_cell(m_treeview, path, NULL, FALSE, 0.0f, 0.0f); + + gtk_tree_path_free(path); + m_blockEvent = false; } @@ -886,10 +844,10 @@ int wxListBox::DoListHitTest(const wxPoint& point) const // ---------------------------------------------------------------------------- #if wxUSE_TOOLTIPS -void wxListBox::ApplyToolTip( GtkTooltips *tips, const wxChar *tip ) +void wxListBox::ApplyToolTip( GtkTooltips *tips, const gchar *tip ) { // RN: Is this needed anymore? - gtk_tooltips_set_tip( tips, GTK_WIDGET( m_treeview ), wxGTK_CONV(tip), (gchar*) NULL ); + gtk_tooltips_set_tip( tips, GTK_WIDGET( m_treeview ), tip, (gchar*) NULL ); } #endif // wxUSE_TOOLTIPS