[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]
Re: New list/tree model questions
- From: Archit Baweja <bighead users sourceforge net>
- To: Havoc Pennington <hp redhat com>
- Cc: Maxim Koshelev <max krascoal ru>, gtk-app-devel-list gnome org
- Subject: Re: New list/tree model questions
- Date: 12 Mar 2002 10:19:44 +0530
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Hi
Now thats exactly what I was looking for! Thanks.
Archit Baweja
Havoc Pennington <hp@redhat.com> writes:
> Maxim Koshelev <max@krascoal.ru> writes:
> > gtk_tree_model_get needs a iterator as parameter. So as far as I can
> > understand there is no
> > function to get row by data (like gtk_clist_find_row_from_data) in
> > new tree model.
> > Or I'm wrong?
> >
>
> No you're right about that, I just wasn't sure what you were asking.
>
> Look at how find_row_from_data works:
>
> gint
> gtk_clist_find_row_from_data (GtkCList *clist,
> gpointer data)
> {
> GList *list;
> gint n;
>
> g_return_val_if_fail (GTK_IS_CLIST (clist), -1);
>
> for (n = 0, list = clist->row_list; list; n++, list = list->next)
> if (GTK_CLIST_ROW (list)->data == data)
> return n;
>
> return -1;
> }
>
> You can write exactly the same thing for tree view (this assumes a
> list rather than a tree):
>
> gboolean
> find_row_from_data (GtkTreeModel *model,
> GtkTreeIter *iter,
> int column,
> void *data)
> {
> GtkTreeIter tmp;
> void *this_data;
>
> if (!gtk_tree_model_get_iter_first (model, &tmp))
> return FALSE;
>
> do
> {
> gtk_tree_model_get (model, &tmp, column, &this_data, -1);
> if (this_data == data)
> {
> *iter = tmp;
> return TRUE;
> }
> } while (gtk_tree_model_iter_next (model, &tmp));
>
> return FALSE; /* FALSE return means not found */
> }
>
>
> Note that in both cases, this is a linear search and thus best
> avoided. The tree model case only works for columns that contain
> pointers, clearly, some columns can contain ints or strings or
> whatever. The returned data from gtk_tree_model_get() will need
> to be freed if it's a string or boxed type rather than
> G_TYPE_POINTER.
>
> To handle a tree in addition to a list, you need to recurse into the
> model instead of just walking over it linearly.
>
> Havoc
> _______________________________________________
> gtk-app-devel-list mailing list
> gtk-app-devel-list@gnome.org
> http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.6 (GNU/Linux)
Comment: Processed by Mailcrypt 3.5.6 and Gnu Privacy Guard <http://www.gnupg.org/>
iD8DBQE8jYjo2rWNPKmGjMcRAmBgAKCastoLeh/e4PuTSlrPgGAIpb+r9ACeOwBZ
P7VamuU81cSIYU1jagP2DDY=
=1ZlS
-----END PGP SIGNATURE-----
[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]