2010-02-06 3 views
2

J'ai un ListStore modélisant une liste de Tag s. Cette liste peut changer en dehors du ListStore. Ce que je voudrais faire est d'écouter l'événement TagRemoved dans ma classe TagList et de retirer le Tag du ListStore lorsque l'événement est déclenché. Cependant, je ne peux pas trouver un moyen de rechercher un ListStore pour la ligne contenant un Tag donné, de sorte que je puisse l'enlever.Dans Gtk, comment rechercher un ListStore pour la ligne contenant une valeur particulière?

Y at-il un moyen de le faire?

Répondre

3

Un GtkListStore implémente l'interface GtkTreeModel, qui contient les opérations de traversée d'arborescence souhaitées. Pour autant que je sache, il n'y a pas d'API de commodité pour rechercher une liste/magasin d'arbres, donc vous devrez rouler les vôtres.

Puisque vous êtes tout simplement itérer sur une GtkListStore, vous pouvez ignorer tous les API traitant des relations enfants/parents, et il suffit d'utiliser gtk_tree_model_iter_first() et gtk_tree_model_iter_next() pour parcourir la liste.

Sinon, si vous connaissez déjà l'index de l'étiquette retirée dans le magasin (par exemple, de votre événement TagRemoved), vous pouvez le transformer en un GtkTreePath et utiliser gtk_tree_model_get_iter() pour récupérer la ligne en question directement, sans la recherche.

0

GtkListStore est implémenté en interne sous la forme linked list. Vous devez donc scanner le modèle par vous-même.

Questions connexes