Re: GtkListStore: forcing a sort
- From: Owen Taylor <otaylor redhat com>
- To: Mattperry <guy fscked org>
- Cc: gtk-app-devel-list gnome org
- Subject: Re: GtkListStore: forcing a sort
- Date: 14 Apr 2003 00:32:07 -0400
On Sun, 2003-04-13 at 17:46, Mattperry wrote:
Thus spake Owen Taylor (otaylor redhat com):
On Sat, 2003-04-12 at 04:32, Mattperry wrote:
I have looked through the API reference and mailing lists, and I can't
seem to find an answer to this somewhat simple question. I have a
GtkTreeView which uses a GtkListStore model. The list store is
populated with a struct (ie, store = gtk_list_store_new(1, G_TYPE_POINTER);
I add many columns and use gtk_tree_view_column_set_cell_data_func() to
display various records of my structure in the columns in different
ways. Now, this works very well, as I only have one copy of the data,
and any change takes effect immediately. However, I would like to sort
the list after any change has been made to the data.
I have found the automatic sorting features unsatisfactory for two
reasons. First, I need to sort based on 2 columns simultaneously (one
has priority), and it doesn't seem like I can do this. Second, I want
to be able to issue a sort command whenever I want, rather than wait for
the user to click on the title of one of the columns. It seems like
such a sort function would be fairly standard. Where can I find this
functionality?
Note that, if a list store has a sort function, it's _always_ sorted;
there is no concept of sorting it.
gtk_tree_sortable_set_sort_func() and
gtk_tree_sortable_set_default_sort_func() let you sort with whatever
functions you want.
Regards,
Owen
I'm using gtk_tree_sortable_set_default_sort_func(), but I notice my
sort function is never called. My sort function looks like this:
gint list_cmp(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpointer d)
{
struct sound_entry *entry1, *entry2;
gtk_tree_model_get(model, a, DATA_COL, &entry1, -1);
gtk_tree_model_get(model, b, DATA_COL, &entry2, -1);
g_warning("sort");
return sound_cmp(entry1, entry2);
}
"sort" never gets printed, and my list never gets sorted. Also, I don't
see how it's possible that the list store is always sorted if my data
changes independently of my list store. I have a function like this:
gtk_list_store_set(store, iter, DATA_COL, entry, -1);
and then function renderers to render the different columns of this
entry. If I change entry->name, for example, how is the list store to
notice this? How can I tell it that it needs to be sorted?
Well, you have to be able to tell the GtkTreeView that the row
changed so that it gets rerendered and resize-computed. So, this
isn't very different. I think setting your pointer back with the
same value should work.
As it stands, using ..._set_default_sort_func() results in my sort function
never being called (regardles of whether I set the sort_column_id to the
DEFAULT_SORT_COLUMN_ID). Is this a bug?
Yes, almost certainly in your code. If you provide a small standalone
test case, it might be easier to see what's going wrong.
Regards,
Owen
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]