GtkTreeModel

GtkTreeModel — Organisation en arbre utilisée par GtkTreeView

Synopsis

#include <gtk/gtk.h>


GtkTreeModel;
GtkTreeIter;
GtkTreePath;
GtkTreeRowReference;
GtkTreeModelIface;
gboolean (*GtkTreeModelForeachFunc) (GtkTreeModel *model,
GtkTreePath *path,
GtkTreeIter *iter,
gpointer data);
enum GtkTreeModelFlags;
GtkTreePath* gtk_tree_path_new (void);
GtkTreePath* gtk_tree_path_new_from_string (const gchar *path);
GtkTreePath* gtk_tree_path_new_from_indices (gint first_index,
...);
gchar* gtk_tree_path_to_string (GtkTreePath *path);
GtkTreePath* gtk_tree_path_new_first (void);
#define gtk_tree_path_new_root ()
void gtk_tree_path_append_index (GtkTreePath *path,
gint index_);
void gtk_tree_path_prepend_index (GtkTreePath *path,
gint index_);
gint gtk_tree_path_get_depth (GtkTreePath *path);
gint* gtk_tree_path_get_indices (GtkTreePath *path);
void gtk_tree_path_free (GtkTreePath *path);
GtkTreePath* gtk_tree_path_copy (const GtkTreePath *path);
gint gtk_tree_path_compare (const GtkTreePath *a,
const GtkTreePath *b);
void gtk_tree_path_next (GtkTreePath *path);
gboolean gtk_tree_path_prev (GtkTreePath *path);
gboolean gtk_tree_path_up (GtkTreePath *path);
void gtk_tree_path_down (GtkTreePath *path);
gboolean gtk_tree_path_is_ancestor (GtkTreePath *path,
GtkTreePath *descendant);
gboolean gtk_tree_path_is_descendant (GtkTreePath *path,
GtkTreePath *ancestor);
GtkTreeRowReference* gtk_tree_row_reference_new (GtkTreeModel *model,
GtkTreePath *path);
GtkTreeRowReference* gtk_tree_row_reference_new_proxy (GObject *proxy,
GtkTreeModel *model,
GtkTreePath *path);
GtkTreeModel* gtk_tree_row_reference_get_model (GtkTreeRowReference *reference);
GtkTreePath* gtk_tree_row_reference_get_path (GtkTreeRowReference *reference);
gboolean gtk_tree_row_reference_valid (GtkTreeRowReference *reference);
void gtk_tree_row_reference_free (GtkTreeRowReference *reference);
GtkTreeRowReference* gtk_tree_row_reference_copy (GtkTreeRowReference *reference);
void gtk_tree_row_reference_inserted (GObject *proxy,
GtkTreePath *path);
void gtk_tree_row_reference_deleted (GObject *proxy,
GtkTreePath *path);
void gtk_tree_row_reference_reordered (GObject *proxy,
GtkTreePath *path,
GtkTreeIter *iter,
gint *new_order);
GtkTreeIter* gtk_tree_iter_copy (GtkTreeIter *iter);
void gtk_tree_iter_free (GtkTreeIter *iter);
GtkTreeModelFlags gtk_tree_model_get_flags (GtkTreeModel *tree_model);
gint gtk_tree_model_get_n_columns (GtkTreeModel *tree_model);
GType gtk_tree_model_get_column_type (GtkTreeModel *tree_model,
gint index_);
gboolean gtk_tree_model_get_iter (GtkTreeModel *tree_model,
GtkTreeIter *iter,
GtkTreePath *path);
gboolean gtk_tree_model_get_iter_from_string (GtkTreeModel *tree_model,
GtkTreeIter *iter,
const gchar *path_string);
gboolean gtk_tree_model_get_iter_first (GtkTreeModel *tree_model,
GtkTreeIter *iter);
#define gtk_tree_model_get_iter_root (tree_model, iter)
GtkTreePath* gtk_tree_model_get_path (GtkTreeModel *tree_model,
GtkTreeIter *iter);
void gtk_tree_model_get_value (GtkTreeModel *tree_model,
GtkTreeIter *iter,
gint column,
GValue *value);
gboolean gtk_tree_model_iter_next (GtkTreeModel *tree_model,
GtkTreeIter *iter);
gboolean gtk_tree_model_iter_children (GtkTreeModel *tree_model,
GtkTreeIter *iter,
GtkTreeIter *parent);
gboolean gtk_tree_model_iter_has_child (GtkTreeModel *tree_model,
GtkTreeIter *iter);
gint gtk_tree_model_iter_n_children (GtkTreeModel *tree_model,
GtkTreeIter *iter);
gboolean gtk_tree_model_iter_nth_child (GtkTreeModel *tree_model,
GtkTreeIter *iter,
GtkTreeIter *parent,
gint n);
gboolean gtk_tree_model_iter_parent (GtkTreeModel *tree_model,
GtkTreeIter *iter,
GtkTreeIter *child);
gchar* gtk_tree_model_get_string_from_iter (GtkTreeModel *tree_model,
GtkTreeIter *iter);
void gtk_tree_model_ref_node (GtkTreeModel *tree_model,
GtkTreeIter *iter);
void gtk_tree_model_unref_node (GtkTreeModel *tree_model,
GtkTreeIter *iter);
void gtk_tree_model_get (GtkTreeModel *tree_model,
GtkTreeIter *iter,
...);
void gtk_tree_model_get_valist (GtkTreeModel *tree_model,
GtkTreeIter *iter,
va_list var_args);
void gtk_tree_model_foreach (GtkTreeModel *model,
GtkTreeModelForeachFunc func,
gpointer user_data);
void gtk_tree_model_row_changed (GtkTreeModel *tree_model,
GtkTreePath *path,
GtkTreeIter *iter);
void gtk_tree_model_row_inserted (GtkTreeModel *tree_model,
GtkTreePath *path,
GtkTreeIter *iter);
void gtk_tree_model_row_has_child_toggled
(GtkTreeModel *tree_model,
GtkTreePath *path,
GtkTreeIter *iter);
void gtk_tree_model_row_deleted (GtkTreeModel *tree_model,
GtkTreePath *path);
void gtk_tree_model_rows_reordered (GtkTreeModel *tree_model,
GtkTreePath *path,
GtkTreeIter *iter,
gint *new_order);

Hiérarchie de l'Objet

  GInterface
+----GtkTreeModel

Nécessaire

GtkTreeModel nécessite GObject.

Known Derived Interfaces

GtkTreeModel est requis par GtkTreeSortable.

Known Implementations

GtkTreeModel implémente GtkTreeModelFilter, GtkTreeModelSort, GtkTreeStore et GtkListStore.

Signals

  "row-changed"                                    : Run Last
"row-deleted" : Run First
"row-has-child-toggled" : Run Last
"row-inserted" : Run First
"rows-reordered" : Run First

Description

L'outils GtkTreeModel est une interface générique associant des données à un arbre, elle est utilisée par le widget GtkTreeView. C'est une interface abstraite,  elle est destinée à être utilisée de façon appropriée  avec toute structure de données. Le développeur doit simplement configurer cette interface pour  visualiser  ses propres types de données  à  l'aide d'un widget GtkTreeView.

Ce magasin (GtkTreeModel) prend la forme d'un arbre  de  données hiérarchisées,  strongly-typed mises en colonnes. En d'autres termes, le magasin peut être visualisé comme un abre où tous les embranchements prennent une valeur  différente pour chaque colonne considérée. Le type de donnée trouvée dans une colonne sera défini  à l'aide du système  GType (par exemple G_TYPE_INT, GTK_TYPE_BUTTON, G_TYPE_POINTER, etc.). Le type est unique dans une colonne pour tous les embranchements. Il est important de noter que cette  interface fournit seulement une méthode pour parcourir le magasin et observer des changements. L'exécution  de chaque magasin individuel  décidera comment et si des modifications peuvent être réalisées.

Pour simplifier le vie des développeurs qui ne veulent pas écrire leur propre modèle spécifique de magasin , deux modèles génériques sont fournis —  GtkTreeStore et  GtkListStore. Pour les utiliser, les développeurs  organisent les données dans ces magasins suivant leurs besoins. Ces magasins fournissent des structures de données appropriées à toutes les interfaces d'arbre. En conséquence il sera aisé  d'appliquer une option "glisser déposer", de faire un tri et de stocker des données. Pour la plupart des arbres et des listes, ces deux magasins sont suffisants.

Les magasins sont  accessibles au niveau embranchement/ colonne de granularity. Ainsi on peut trouver la valeur du magasin pour un certain embranchement et une certaine colonne sur cet embranchement. Deux structures  sont utilisées pour référencer un embranchement particulier dans un magasin.  Ce sont  GtkTreePath et   GtkTreeIter [4] La plupart des outils utilisent la structure GtkTreeIter.

Un chemin (path) est essentiellement un embranchement potentiel. C'est une localisation dans un magasin spécifique qui correspond  ou non  à un embranchement . La structure  GtkTreePath  peut être convertie soit en tableau d'entiers non-signés soit en chaîne. La forme chaîne est une liste de nombres séparés par deux points. Chaque nombre définit l'offset à ce niveau. Ainsi, le chemin "0" définit la racine de l'arbre et le chemin "2:4" définit le cinquième enfant du  troisième embranchement.

En opposition,  GtkTreeIter est la référence d'un embranchement précis dans un magasin spécifique. Elle prend la forme d'une structure générique composée d'un entier et de pointeurs génériques pour l'arbre. Le magasin la remplira de façon appropriée. On peut convertir un chemin en itérateur en appelant  gtk_tree_model_get_iter(). Ces itérateurs forment le mode principal d'accès au magasin et sont semblabes aux itérateurs employés par  GtkTextBuffer. Il sont généralement alloués statiquement sur la pile et sont utilisés uniquement sur une courte période. L'interface du magasin définit un ensemble d'opérations utilisées pour naviguer dans le magasin. 

Le magasin est amené à compléter l'itérateur avec des données privées. Par exemple, le magasin GtkListStore , qui est une simple liste liée, stocke un embranchement de la liste dans un des pointeurs.   GtkTreeModelSortstocke un tableau et un offset dans deux des pointeurs. De plus, la structure de l'itérateur comporte un  champs d'entier. Ce champs contient généralement une marque unique par magasin. Cette marque sert à gérer les erreurs résultantes de l'utilisation d'itérateurs invalides dans le magasin.

Le cycle de vie d'un itérateur peut paraître un peu confus de prime abord. Les itérateurs sont sensés être  valides aussi longtemps que le magasin reste inchangé (et n'émet aucun signal). Le magasin est sensé gérer tous les itérateurs même inactifs (outstanding ?) et l'utilisateur ne doit pas les  libérer . De plus, certains magasins garantissent la validité de l'itérateur aussi longtemps que l'embranchement reste valide (plus particulièrement  GtkTreeStore et GtkListStore).  
Bien que généralement inintéressant,  comme on doit toujours prendre en compte le cas où l'itérateur ne persiste pas au delà d'un signal,  quelques perfectionnements très importants ont été apportés pour les magasin de tri. Ainsi le flag  GTK_TREE_MODEL_ITERS_PERSIST a été ajouté pour configurer ce comportement.

Voici quelques exemples pour présenter les opérations communes  sur le magasin. Le premier exemple montre trois façons d'obtenir l'iteration de l'endroit “3:2:5”. Alors que la première méthode exposée est la plus facile, la seconde est plus commune. En effet, vous rencontrerez le plus souvent un chemin lors de l'utilisation d'un callbacks.

Exemple 15. Acquérir un  GtkTreeIter

/* Façon d'obtenir l'iterateur pointant sur une localisation
*/
{
GtkTreePath *chemin;
GtkTreeIter iter;
GtkTreeIter parent_iter;

/* obtenir l'itérateur à partir d'une chaîne de caractères*/
gtk_tree_model_get_iter_from_string (magasin, &iter, "3:2:5");

/* obtenir un itérateur à partir d'un chemin */
path = gtk_tree_path_new_from_string ("3:2:5");
gtk_tree_model_get_iter (magasin, &iter, chemin);
gtk_tree_path_free (chemin);


/* parcourir l'arbre pour trouver l'itérateur */
gtk_tree_model_iter_nth_child (magasin, &iter, NULL, 3);
parent_iter = iter;
gtk_tree_model_iter_nth_child (magasin, &iter, &parent_iter, 2);
parent_iter = iter;
gtk_tree_model_iter_nth_child (magasin, &iter, &parent_iter, 5);
}

Partie non relue->traduction directe.
Ce second exemple montre une façon rapide de créer une itération dans une liste et d'obtenir une chaîne de caractères et un entier pour chaque rangée. La fonction populate_model  utilisée ci-dessous ne sera pas développée puisqu'elle est spécifique à  GtkListStore. Pour savoir comment écrire une telle fonction, reportez-vous à la documentation de  GtkListStore.

Exemple 16. Lire des données depuis un GtkTreeModel

enum
{
COLONNE_STRING,
COLONNE_INT,
N_COLONNES,
};

{
GtkTreeModel *magasin_liste;
GtkTreeIter iter;
gboolean valide;
gint compteur_ligne = 0;

/* Créer un nouveau magasion_liste */
magasin_liste = gtk_list_store_new (N_COLONNES, G_TYPE_STRING, G_TYPE_INT);

/* Remplir le magasin avec des données */
populate_model (magasin_liste);

/* Obtenir le premier itérateur de la liste */
valide = gtk_tree_model_get_iter_first (magasin_liste, &iter);

while (valide)
{
/* Parcourir le magasin en lisant chaque ligne */
gchar *str_data;
gint int_data;

/* Assurez-vous de bien terminer l'appelle de gtk_tree_model_get()
* par la valeur '-1'
*/
gtk_tree_model_get (magasin-liste, &iter,
COLONNE_STRING, &str_data,
COLONNE_INT, &int_data,
-1);

/* Faire quelque chose des données recueillies */
g_print ("Rangée %d: (%s,%d)\n", compteur_ligne, str_data, int_data);
g_free (str_data);

compteur_ligne ++;
valide = gtk_tree_model_iter_next (magasin_liste, &iter);
}
}

Détails

GtkTreeModel

typedef struct _GtkTreeModel GtkTreeModel;

GtkTreeIter

typedef struct {
gint stamp;
gpointer user_data;
gpointer user_data2;
gpointer user_data3;
} GtkTreeIter;

GtkTreeIter est une structure primaire pour accèder au magasin. Les magasins sont sensés placer un entier unique dans le membre  stamp  et mettre des données spécifiques au m agasins dans les membres  user_data de l'arbre.

gint stamp; Une marque unique pour gérer les itérateurs invalides
gpointer user_data; Données spécifiques au magasin
gpointer user_data2; Données spécifiques au magasin
gpointer user_data3; Données spécifiques au magasin

GtkTreePath

typedef struct _GtkTreePath GtkTreePath;


GtkTreeRowReference

typedef struct _GtkTreeRowReference GtkTreeRowReference;

GtkTreeModelIface


typedef struct {
GTypeInterface g_iface;

/* Signals */
void (* row_changed) (GtkTreeModel *tree_model,
GtkTreePath *path,
GtkTreeIter *iter);
void (* row_inserted) (GtkTreeModel *tree_model,
GtkTreePath *path,
GtkTreeIter *iter);
void (* row_has_child_toggled) (GtkTreeModel *tree_model,
GtkTreePath *path,
GtkTreeIter *iter);
void (* row_deleted) (GtkTreeModel *tree_model,
GtkTreePath *path);
void (* rows_reordered) (GtkTreeModel *tree_model,
GtkTreePath *path,
GtkTreeIter *iter,
gint *new_order);

/* Virtual Table */
GtkTreeModelFlags (* get_flags) (GtkTreeModel *tree_model);

gint (* get_n_columns) (GtkTreeModel *tree_model);
GType (* get_column_type) (GtkTreeModel *tree_model,
gint index_);
gboolean (* get_iter) (GtkTreeModel *tree_model,
GtkTreeIter *iter,
GtkTreePath *path);
GtkTreePath *(* get_path) (GtkTreeModel *tree_model,
GtkTreeIter *iter);
void (* get_value) (GtkTreeModel *tree_model,
GtkTreeIter *iter,
gint column,
GValue *value);
gboolean (* iter_next) (GtkTreeModel *tree_model,
GtkTreeIter *iter);
gboolean (* iter_children) (GtkTreeModel *tree_model,
GtkTreeIter *iter,
GtkTreeIter *parent);
gboolean (* iter_has_child) (GtkTreeModel *tree_model,
GtkTreeIter *iter);
gint (* iter_n_children) (GtkTreeModel *tree_model,
GtkTreeIter *iter);
gboolean (* iter_nth_child) (GtkTreeModel *tree_model,
GtkTreeIter *iter,
GtkTreeIter *parent,
gint n);
gboolean (* iter_parent) (GtkTreeModel *tree_model,
GtkTreeIter *iter,
GtkTreeIter *child);
void (* ref_node) (GtkTreeModel *tree_model,
GtkTreeIter *iter);
void (* unref_node) (GtkTreeModel *tree_model,
GtkTreeIter *iter);
} GtkTreeModelIface;

GtkTreeModelForeachFunc ()

gboolean            (*GtkTreeModelForeachFunc)          (GtkTreeModel *model,
GtkTreePath *path,
GtkTreeIter *iter,
gpointer data);

model :
path :
iter :
data :
Returns :

enum GtkTreeModelFlags


typedef enum
{
GTK_TREE_MODEL_ITERS_PERSIST = 1 << 0,
GTK_TREE_MODEL_LIST_ONLY = 1 << 1
} GtkTreeModelFlags;

Ces flags indiquent des propriétés variées pour  GtkTreeModel. Ils sont retournés par  gtk_tree_model_get_flags(), et doivent être static pendant la durée de vie de l'objet. Une description plus complète de  GTK_TREE_MODEL_ITERS_PERSIST est présentée ci-dessus dans le chapitre "description"  de cette  section.

GTK_TREE_MODEL_ITERS_PERSIST Les itérateurs survivent à tous les signaux émis par l'arbre.
GTK_TREE_MODEL_LIST_ONLY Le magasin est une liste simple et ne posséde aucun enfant.

gtk_tree_path_new ()


GtkTreePath*        gtk_tree_path_new                   (void);

Crée un nouveau GtkTreePath. Cette structure se rapporte à une rangée.

Retourne :  Un GtkTreePath nouvellement créé.

gtk_tree_path_new_from_string ()


GtkTreePath*        gtk_tree_path_new_from_string       (const gchar *path);

Crée un nouveau  GtkTreePath initialisé à  path. pathest une liste de nombres séparés par deux points. Par exemple la chaîne "10:4:0" crééra un chemin de profondeur 3 pointant sur le 11ème enfant de la racine de l'arbre , le 5ème enfant de ce 11ème enfant et le premier enfant de ce 5ème enfant. Si une chaîne de chemin  invalide  est passée, la fonction retournera NULL.

path : Chaîne représentant le chemin.
Retourne : Un  GtkTreePath nouvellement créé, ou NULL

gtk_tree_path_new_from_indices ()


GtkTreePath*        gtk_tree_path_new_from_indices      (gint first_index,
...);

Créé un nouveau chemin avec  first_index et varargs en indices.

first_index : premier entier
... : liste d'entiers terminée par  -1
Retourne : UnGtkTreePath nouvellement  créé.

Depuis 2.2


gtk_tree_path_to_string ()


gchar*              gtk_tree_path_to_string             (GtkTreePath *path);

Génére une chaîne pour réprésenter un chemin. Cette chaîne est une suite de nombres séparés par un ":". Par exemple, "4:10:0:3"est une valeur correcte pour cette chaîne.
path : Un GtkTreePath
Retourne : Une chaîne nouvellement allouée. Elle doit être libérée avec  g_free().

gtk_tree_path_new_first ()


GtkTreePath*        gtk_tree_path_new_first             (void);

Crée un nouveau GtkTreePath. La chaîne représentant ce chemin est  "0"

Retourne : Un nouveau GtkTreePath.

gtk_tree_path_new_root()


#define gtk_tree_path_new_root() gtk_tree_path_new_first()

Attention

gtk_tree_path_new_root est déprécié et ne doit plus être utilisée dans un code nouvellement créé. Utilisez gtk_tree_path_new_first() à la place.

Alternative est gtk_tree_path_new_first() fourni pour des raisons de compatibilité.

Retourne : Un nouveau GtkTreePath.

gtk_tree_path_append_index ()


void                gtk_tree_path_append_index          (GtkTreePath *path,
gint index_);

Ajoute un nouvel index à la fin d'un chemin. Ainsi la profondeur du chemin augmente.

path : Un GtkTreePath.
index_ : L'index

gtk_tree_path_prepend_index ()


void                gtk_tree_path_prepend_index         (GtkTreePath *path,
gint index_);

Ajoute un nouvel  index au début d'un chemin. Ainsi la profondeur du chemin augmente.

path : Un GtkTreePath.
index_ : L'index

gtk_tree_path_get_depth ()


gint                gtk_tree_path_get_depth             (GtkTreePath *path);

Retourne la profondeur courante d'un chemin path.

path : Un GtkTreePath.
Retourne : La profondeur de  path

gtk_tree_path_get_indices ()


gint*               gtk_tree_path_get_indices           (GtkTreePath *path);

Retourne les indices courants du chemin  path. C'est un tableau d'entiers, chaque entier représente un embranchement de l'arbre. Cette valeur ne doit pas être libérée.

path : Un GtkTreePath.
Retourne : Les indices courants ou NULL.

gtk_tree_path_free ()


void                gtk_tree_path_free                  (GtkTreePath *path);

Libére un chemin path.

path : Un GtkTreePath.

gtk_tree_path_copy ()


GtkTreePath*        gtk_tree_path_copy                  (const GtkTreePath *path);

Crée un nouveau  GtkTreePath en copiant le chemin  path.

path : Un GtkTreePath.
Retourne : Un nouveau  GtkTreePath.

gtk_tree_path_compare ()


gint                gtk_tree_path_compare               (const GtkTreePath *a,
const GtkTreePath *b);

Compare deux chemins. Si a apparaît avant  b dans un arbre, alors -1 sera retourné. Si b apparaît avant  a, alors  1 sera retourné. Si les deux embranchements sont égaux, alors 0 sera retourné.

a : Un GtkTreePath.
b : Un GtkTreePath à comparer au premier.
Retourne  Positions relatives de  a et b

gtk_tree_path_next ()


void                gtk_tree_path_next                  (GtkTreePath *path);

Déplace le chemin  path pour qu'il pointe sur l'embranchement suivant à la profondeur courante.

path : Un GtkTreePath.

gtk_tree_path_prev ()


gboolean            gtk_tree_path_prev                  (GtkTreePath *path);

Déplace le chemin  path  pour qu'il pointe sur l'embranchement précédent à la profondeur courante, si il existe.

path : Un GtkTreePath.
Retourne : TRUE si un embranchement précédent existe pour path et que le déplacement a été réalisé.

gtk_tree_path_up ()


gboolean            gtk_tree_path_up                    (GtkTreePath *path);

Déplace le chemin  path pour qu'il pointe sur l'embranchement parent si il a un embranchement parent.

path : Un GtkTreePath.
Retourne : TRUE si un embranchement parent existe   pour path et que le déplacement a été réalisé.

gtk_tree_path_down ()


void                gtk_tree_path_down                  (GtkTreePath *path);

Déplace le chemin  path pour qu'il pointe sur le premier enfant du chemin courant.

path : Un GtkTreePath.

gtk_tree_path_is_ancestor ()


gboolean            gtk_tree_path_is_ancestor           (GtkTreePath *path,
GtkTreePath *descendant);

Retourne TRUE si descendant est un descendant du chemin path.

path : un GtkTreePath
descendant : autre GtkTreePath
Retourne : TRUE si descendant est contenu dans  path

gtk_tree_path_is_descendant ()


gboolean            gtk_tree_path_is_descendant         (GtkTreePath *path,
GtkTreePath *ancestor);

Retourne TRUE si le chemin  path est un descendant de ancestor.

path : un GtkTreePath
ancestor : un autre GtkTreePath
Retourne : TRUE si ancestor contient path quelque part en dessous de lui.

gtk_tree_row_reference_new ()


GtkTreeRowReference* gtk_tree_row_reference_new         (GtkTreeModel *model,
GtkTreePath *path);

Crée une référence de rangée basée sur le chemin  path. Cette référence pointera sur l'embranchement  indiqué par le chemin  path aussi longtemps que cet embranchement existera. Elle sera à lécoute de tous les signaux  émis par le magasin model, et mettra à jour ses chemins de façon appropriée. Si le chemin path n'est pas un chemin valide dans  model, alors  NULL sera retourné.
model : Un GtkTreeModel
path : Un GtkTreePath valide à surveiller.
Retourne : Un GtkTreeRowReference nouvellement alloué, ou NULL

gtk_tree_row_reference_new_proxy ()


GtkTreeRowReference* gtk_tree_row_reference_new_proxy   (GObject *proxy,
GtkTreeModel *model,
GtkTreePath *path);

Vous ne devez pas avoir besoin d'utiliser cette fonction. Elle crée une référence de rangée basée sur le chemin  path. Cette référence pointera sur l'embranchement indiqué par le chemin  path aussi longtemps que cet embranchement existera. Si path n'est pas valide dans me magasin model,alors NULL sera retourné. Cependant, contrairement aux références créées avec  gtk_tree_row_reference_new(), elle ne sera pas à l'écoute des changements du magasin. Le créateur de la référence de rangée doit gérer cela explicitement en utilisant  gtk_tree_row_reference_inserted(), gtk_tree_row_reference_deleted(), gtk_tree_row_reference_reordered().

Ces fonctions doivent être appelées exactement une fois par proxy quand le signal correspondant est émis sur le magasin. Cette appel unique met à jour toutes les références de rangée pour ce proxy. Depuis que GTK+ a intégré des objets comme GtkTreeView qui utilisent déjà ce mécanisme en interne, les utiliser comme des objets intermédiaires (proxy) provoque des résultats imprévisibles. De plus, le passage du même objet comme magasin model et comme proxy  ne fonctionne pour des raisons d'exécution interne.

Ce type de référence de rangée a une signification principalement  pour des structures qui ont besoin  d'être surveillées soigneusement, précisément quand la référence de rangée se met à jour elle même. Elle n'est généralement pas nécessaire à la plupart des applications.

proxy : Un proxy GObject 
model : Un GtkTreeModel
path : Un GtkTreePath  valide à surveiller
Retourne : Un GtkTreeRowReference nouvellement alloué ou NULL

gtk_tree_row_reference_get_model ()


GtkTreeModel*       gtk_tree_row_reference_get_model    (GtkTreeRowReference *reference);

Retourne le magasin que la référence de rangée surveille.

reference : Un GtkTreeRowReference
Retourne : Le magasin

Depuis 2.8


gtk_tree_row_reference_get_path ()


GtkTreePath*        gtk_tree_row_reference_get_path     (GtkTreeRowReference *reference);

Retourne un chemin sur lequel  la référence de rangée pointe ou  NULL si le chemin pointé n'est plus valide.

reference : Un GtkTreeRowReference
Retourne : Le chemin courant ou NULL.

gtk_tree_row_reference_valid ()


gboolean            gtk_tree_row_reference_valid        (GtkTreeRowReference *reference);

Retourne TRUE si la reference n'est pas NULL et fait référence à un chemin valide courant.

reference : Un GtkTreeRowReference, or NULL
Retourne : TRUE si reference pointe sur un chemin valide.

gtk_tree_row_reference_free ()


void                gtk_tree_row_reference_free         (GtkTreeRowReference *reference);

Libére la  reference. reference peu être NULL.

reference : Une GtkTreeRowReference, ou NULL

gtk_tree_row_reference_copy ()


GtkTreeRowReference* gtk_tree_row_reference_copy        (GtkTreeRowReference *reference);

Copie une GtkTreeRowReference.

reference : Une GtkTreeRowReference
Retourne : une copie de  reference.

Depuis 2.2


gtk_tree_row_reference_inserted ()


void                gtk_tree_row_reference_inserted     (GObject *proxy,
GtkTreePath *path);

Imforme un ensemble de références de rangée créé par  gtk_tree_row_reference_new_proxy() que le magasin a émis un signal  "row_inserted".

proxy : Un GObject
path : La position de la ligne qui a été insérée 

gtk_tree_row_reference_deleted ()


void                gtk_tree_row_reference_deleted      (GObject *proxy,
GtkTreePath *path);
Informe un ensemble de références de rangées crée par gtk_tree_row_reference_new_proxy() qu'un magasin a émit un signal "row_deleted".

proxy : Un GObject
path : Position du chemin qui a été supprimé 

gtk_tree_row_reference_reordered ()


void                gtk_tree_row_reference_reordered    (GObject *proxy,
GtkTreePath *path,
GtkTreeIter *iter,
gint *new_order);

Informe un ensemble de références de rangées créé par  gtk_tree_row_reference_new_proxy() que le magasin a émis le signal  "rows_reordered".

proxy : Un GObject
path : Le chemin parent du signal de réorganisation.
iter : iter pointant sur le parent du signal
new_order : Le nouvel ordonnance des rangées

gtk_tree_iter_copy ()


GtkTreeIter*        gtk_tree_iter_copy                  (GtkTreeIter *iter);

Crée un itérateur d'arbre alloué dynamiquement en copiant iter. Cette fonction n'est pas prévue pour être utilisée dans des application parce que vous pouvez copier la structure ainsi (GtkTreeIter new_iter = iter;). Vous devez libérer cet itérateur avec  gtk_tree_iter_free().

iter : Un GtkTreeIter.
Retourne : une copie de iter nouvellement allouée.

gtk_tree_iter_free ()


void                gtk_tree_iter_free                  (GtkTreeIter *iter);

Libére un itérateur qui a été alloué sur le tas. Cette fonction est employée principalement pour des raccourcis de langages. (Pas compris)

iter : Un itérateur d'arbre alloué dynamiquement.

gtk_tree_model_get_flags ()


GtkTreeModelFlags   gtk_tree_model_get_flags            (GtkTreeModel *tree_model);

Retourne un ensemble de flags supporté par cet interface. Les flags sont des combinaisons au niveau des bits  de GtkTreeModelFlags . Les flags supportés de doivent pas être modifiés pendant le temps de vie deu magasin tree_model.

tree_model : Un GtkTreeModel.
Retourne : flags supportés par cet interface.

gtk_tree_model_get_n_columns ()


gint                gtk_tree_model_get_n_columns        (GtkTreeModel *tree_model);

Retourne le nombre de colonnes supportées pas le magasin tree_model.
tree_model : Un GtkTreeModel.
Retourne : Nombre de colonnes .

gtk_tree_model_get_column_type ()


GType               gtk_tree_model_get_column_type      (GtkTreeModel *tree_model,

Retourne le type de la colonne.

tree_model : Un GtkTreeModel.
index_ : Index de la colonne
Retourne Type de la colonne.

gtk_tree_model_get_iter ()


gboolean            gtk_tree_model_get_iter             (GtkTreeModel *tree_model,
GtkTreeIter *iter,
GtkTreePath *path);

Définit iter comme un itérateur valide pointant sur le chemin path.

tree_model : Un GtkTreeModel.
iter : Un GtkTreeIter non initialisé. 
path : Le  GtkTreePath.
Retourne : TRUE, si iter a été défini.

gtk_tree_model_get_iter_from_string ()


gboolean            gtk_tree_model_get_iter_from_string (GtkTreeModel *tree_model,
GtkTreeIter *iter,
const gchar *path_string);

Définit iter à un itérateur valide pointant sur  path_string, si'l existe. Autrement, iter reste invalide et FALSE sera retourné.

tree_model : Un GtkTreeModel.
iter : Un GtkTreeIter non initialisé.
path_string : Chaîne représentant un GtkTreePath.
Retourne : TRUE, si iter a été défini.

gtk_tree_model_get_iter_first ()


gboolean            gtk_tree_model_get_iter_first       (GtkTreeModel *tree_model,
GtkTreeIter *iter);

Initialise  iter avec le premier itérateur de l'arbre (celui du chemin "0") et retourne  TRUE. Retourne  FALSE si l'arbre est vide.
tree_model : un GtkTreeModel.
iter : Le  GtkTreeIter non initialisé.
Retourne : TRUE, si iter a été défini.

gtk_tree_model_get_iter_root()


#define gtk_tree_model_get_iter_root(tree_model, iter) gtk_tree_model_get_iter_first(tree_model, iter)

Attention

gtk_tree_model_get_iter_root est déprécié et ne doit plus être utilisé dans un nouveau code.

Alternative pour gtk_tree_model_get_iter_first()foourni pour des raisons de compatibilité; cette macro sera  désapprouvée dans une prochaine version de GTK+.

tree_model : Un GtkTreeModel.
iter : GtkTreeIter non initialisé.
Retourne : TRUE, si iter a été défini.

gtk_tree_model_get_path ()


GtkTreePath*        gtk_tree_model_get_path             (GtkTreeModel *tree_model,
GtkTreeIter *iter);

Retourne GtkTreePath nouvellement créé et référencé par iter.  Ce chemin doit être libéré avec gtk_tree_path_free().

tree_model : Un GtkTreeModel.
iter : Le GtkTreeIter.
Retourne : Un  GtkTreePath nouvellement créé.

gtk_tree_model_get_value ()


void                gtk_tree_model_get_value            (GtkTreeModel *tree_model,
GtkTreeIter *iter,
gint column,
GValue *value);

Sets initializes and sets value to that at column. (??) Quand vous avez terminé d'utiliser value, il faut appeler g_value_unset()  pour libérer toute la mémoire allouée.

tree_model : Un GtkTreeModel.
iter : Le GtkTreeIter.
column : Colonne où checher la valeur.
value : Une  GValue vide à définir.

gtk_tree_model_iter_next ()


gboolean            gtk_tree_model_iter_next            (GtkTreeModel *tree_model,
GtkTreeIter *iter);

Définit iter pour qu'il pointe sur l'embranchement qui suit celui du niveau courant. S'il n'est pas suivi par un autre iter, FALSE est retourné et iter est défini comme étant invalide.

tree_model : Un GtkTreeModel.
iter : Le GtkTreeIter.
Retourne : TRUE si  iter a été remplacé par celui de l'embranchement suivant.

gtk_tree_model_iter_children ()


gboolean            gtk_tree_model_iter_children        (GtkTreeModel *tree_model,
GtkTreeIter *iter,
GtkTreeIter *parent);

Définit  iter pour qu'il pointe sur le premier enfant de  parent. Si  parent n'a pas d'enfant, FALSE est retourné et  iter est défini comme invalide. parent sera toujours un embranchement valide après l'appelle de cette fonction.

Si  parent est NULL le premier embranchement sera définit, cette fonction est équivalente dans ce cas à  gtk_tree_model_get_iter_first (tree_model, iter);

tree_model : Un GtkTreeModel.
iter : Le nouveau GtkTreeIter définit pour l'enfant.
parent : GtkTreeIter ou  NULL
Retourne : TRUE, si child a été définit pour le premier enfant.

gtk_tree_model_iter_has_child ()


gboolean            gtk_tree_model_iter_has_child       (GtkTreeModel *tree_model,
GtkTreeIter *iter);

Retourne  TRUE si iter a un ou des enfants, FALSE autrement.

tree_model : Un GtkTreeModel.
iter : GtkTreeIter que l'on va tester pour trouver des enfants.
Retourne : TRUE si  iter a un ou des enfants.

gtk_tree_model_iter_n_children ()


gint                gtk_tree_model_iter_n_children      (GtkTreeModel *tree_model,
GtkTreeIter *iter);

Retourne le nombre d'enfants que iter  a. Cas particulier, si  iter est NULL, alors le nombre de niveaux supérieurs sera retourne.

tree_model : Un GtkTreeModel.
iter :  GtkTreeIter ou NULL.
Retourne : Me nombre d'enfants de iter.

gtk_tree_model_iter_nth_child ()


gboolean            gtk_tree_model_iter_nth_child       (GtkTreeModel *tree_model,
GtkTreeIter *iter,
GtkTreeIter *parent,
gint n);

Définit  iter pour qu'il soit l'enfant de  parent,  en utilisant un index donné. Le premier index est 0. Si  n est trop grand, ou si  parent n'a pas d'enfant, iter sera définit comme itérateur invalide et FALSE sera retourné. parent  reste un embranchement valide après que la fonction ait été appelée. Cas particulier, si  parent est NULL alors le  nième embranchement sera définit.

tree_model : Un GtkTreeModel.
iter :  GtkTreeIter à définir comme nième enfant
parent :  GtkTreeIter dont on va définir l'enfant ou NULL.
n : Index de l'enfant recherché.
Retourne : TRUE, si parent a un  nième enfant.

gtk_tree_model_iter_parent ()


gboolean            gtk_tree_model_iter_parent          (GtkTreeModel *tree_model,
GtkTreeIter *iter,
GtkTreeIter *child);

Définit  iter pour qu'il soit le parent de l'enfant child. Si child est au niveau supérieur et qu'il n'a pas de parent alors  iter sera définit comme itérateur invalide et  FALSE sera retourné. child restera un embranchement valide après l'appelle de la fonction.

tree_model : Un GtkTreeModel
iter : Le nouveau GtkTreeIter définit comme parent.
child :  GtkTreeIter.
Retourne : TRUE, si iter iest défini comme parent de  child.

gtk_tree_model_get_string_from_iter ()


gchar*              gtk_tree_model_get_string_from_iter (GtkTreeModel *tree_model,
GtkTreeIter *iter);

Génère une chaîne de caractères représentant l'itérateur. cette chaîne est une liste de nombres séparés par ":". Par exemple  "4:10:0:3" serait une valeur correcte pour ce genre de chaîne.

tree_model : Un GtkTreeModel.
iter : Un GtkTreeIter.
Retourne : Une chaîne nouvellement allouée. Elle doit être libérée avec  g_free().

Depuis 2.2


gtk_tree_model_ref_node ()


void                gtk_tree_model_ref_node             (GtkTreeModel *tree_model,
GtkTreeIter *iter);

L'arbre va référencer l'embranchement. C'est une méthode facultative pour la mise en application des magasins. Les magasins peuvent ignorer cet appel (si son existance est antérieure) ??, ceci pour des questions d'exécution.

Le rôle principal de cette fonction est de donner aux visualiseurs  la possibilité de permettre au model caché de savoir quand l'embranchement est affiché (et par conséquent, si  oui ou non il faut cacher cet embranchement.) Par exemple, un systèle de fichiers basé sur un magasin ne conserve pas la hiérarchie entière des fichiers en mémoire, il lui suffit de mémoriser simplement les sections qui sont affichées par toutes les vues courantes.

Un magasin devrait être prévu pour pouvoir obtenir un  iter indépendant de son état de référence.

tree_model : Un GtkTreeModel.
iter : Le GtkTreeIter.

gtk_tree_model_unref_node ()


void                gtk_tree_model_unref_node           (GtkTreeModel *tree_model,
GtkTreeIter *iter);

L'arbre supprime la référence de l'embranchement. C'est une méthode optionnelle à appliquer. Pour être plus précis, les magasins peuvent ignorer cet appel  (si son existance est antérieure) ?? pour des raisons liées à l'exécution.

Pour plus d'informations à ce sujet, voir gtk_tree_model_ref_node(). Notez que les embranchements supprimés non sont pas déréférencés.

tree_model : Un GtkTreeModel.
iter : Le GtkTreeIter.

gtk_tree_model_get ()


void                gtk_tree_model_get                  (GtkTreeModel *tree_model,
GtkTreeIter *iter,
...);

Donne la valeur d'une ou plusieures cellules de la rangée référencée par  iter. La liste  à nombre variable d'arguments doit contenir l'entier remprésentant le numéro descolonnes, chaque numéro de colonne est suivi par une place où stocker les valeurs trouvées. Cette liste se termine par  -1. Par exemple, pour trouver la valeur de la colonne 0 qui a le type  G_TYPE_STRING, vous écririez : gtk_tree_model_get (magasin, iter, 0, &mettez_chaine_ici, -1), où mettez_chaine_ici est un  gchar* contenant la chaîne. Si cela est approprié, les valeurs retournées doivent être libées ou déréférencées.

tree_model : un GtkTreeModel
iter : une rangée dans  tree_model
... : paires formées par un numéro de colonne et un endroit pour stocker la valeur retournée, terminé par -1.

gtk_tree_model_get_valist ()


void                gtk_tree_model_get_valist           (GtkTreeModel *tree_model,
GtkTreeIter *iter,
va_list var_args);

Voir gtk_tree_model_get(), cette version prend un  va_list (comme raccourci de langage à utiliser) ?for language bindings to use.

tree_model : un GtkTreeModel
iter : une rangée dans tree_model
var_args : va_list de colonne/localisation de la paire retournée.

gtk_tree_model_foreach ()


void                gtk_tree_model_foreach              (GtkTreeModel *model,
GtkTreeModelForeachFunc func,
gpointer user_data);

Appelle une fonction pour chaque embranchement d'un magasin en mode  depth-first. Si func retourne TRUE, alors l'arbre cesse de fonctionner, et gtk_tree_model_foreach() retourne.

model : Un GtkTreeModel
func : A function to be called on each row
user_data : User data to passed to func.

gtk_tree_model_row_changed ()


void                gtk_tree_model_row_changed          (GtkTreeModel *tree_model,
GtkTreePath *path,
GtkTreeIter *iter);

Emet le signal  "row_changed" sur tree_model.

tree_model : Un GtkTreeModel
path : Un GtkTreePath pointant sur la rangée changée. 
iter : Un GtkTreeIter vamide pointant vers la rangée changée

gtk_tree_model_row_inserted ()


void                gtk_tree_model_row_inserted         (GtkTreeModel *tree_model,
GtkTreePath *path,
GtkTreeIter *iter);

Emet le signal "row_inserted" sur tree_model

tree_model : Un GtkTreeModel
path : Un GtkTreePath pointant sur la rangée inserrée 
iter : Un GtkTreeIter valide pointants sur la rangée inserrée.

gtk_tree_model_row_has_child_toggled ()


void                gtk_tree_model_row_has_child_toggled
(GtkTreeModel *tree_model,
GtkTreePath *path,
GtkTreeIter *iter);

Emet le signal "row_has_child_toggled" sur tree_model. Elle doit être appelée par les magasins après que l'état de l'enfant de l'embranchement ait changé.

tree_model : Un GtkTreeModel
path : Un GtkTreePath pointant sur la rangée changée.
iter : Un GtkTreeIter valide pointant sur la rangé changée.

gtk_tree_model_row_deleted ()


void                gtk_tree_model_row_deleted          (GtkTreeModel *tree_model,
GtkTreePath *path);

Emet le signal  "row_deleted" sur tree_model. Elle doit être appelée par les magasins après qu'une rangée ait été supprimée. L'endroit sur lequel pointe le chemin  path doit être l'endroit où la rangée était avant sa suppression. Ce ne sera jamais une localisation valide.

tree_model : Un GtkTreeModel
path : Un GtkTreePath pointant sur la localisation préalable de la rangée supprimée.

gtk_tree_model_rows_reordered ()


void                gtk_tree_model_rows_reordered       (GtkTreeModel *tree_model,
GtkTreePath *path,
GtkTreeIter *iter,
gint *new_order);

Emet le signal  "rows_reordered" sur tree_model. Elle doit être appelée par les magasins quand leurs rangées ont été réorganisée.

tree_model : Un GtkTreeModel
path : Un GtkTreePath pointant sur l'embranchement de l'arbre dont les enfants ont été (ré-)ordonnés.
iter : Un  GtkTreeIter  valide pointant sur l'embranchement dont les enfants ont été ordonnés, ou  NULL si la profondeur du chemin path est 0.
new_order : un tableau d'entiers décrivant la position courante de chaque enfant par rapport à son ancienne position avant la réorganisation, par exemple,  new_order[newpos] = oldpos.

Détails des signaux

Le signal  "row-changed" 


void                user_function                      (GtkTreeModel *tree_model,
GtkTreePath *path,
GtkTreeIter *iter,
gpointer user_data) : Run Last

Ce signal est émis quand la rangée du magasin a changé.

tree_model : le GtkTreeModel sur lequel le signal est émis.
path : un GtkTreePath identifiant le rangée changée.
iter : un GtkTreeIter valide pointant sur la rangée changée.
user_data : données utilisateur définie quand le gestionnaire de signal a été connecté.

Le signal "row-deleted" 


void                user_function                      (GtkTreeModel *tree_model,
GtkTreePath *path,
gpointer user_data) : Run First

Ce signal est émis quand la rangée a été supprimée.

Notez qu'aucun itérateur n'est passé au gestionnaire de signal puisque la rangée est supprimée.

Les applications de  GtkTreeModel doivent émettre  row-deleted avantde supprimer l'embranchement de leurs structures de données internes. En effet les magasins et les visualisateurs qui accèdent et gèrent ce magasin doivent  posséder une référence de l'embranchement qui devra être libéré dans le gestionnaire de  row-deleted.

tree_model : Le GtkTreeModel sur lequel le signal est émis
path : un GtkTreePath identifiant la rangée
user_data : données utilisateur définit quand le gestionnaire de signal a été connecté.

Le signal "row-has-child-toggled"


void                user_function                      (GtkTreeModel *tree_model,
GtkTreePath *path,
GtkTreeIter *iter,
gpointer user_data) : Run Last

Ce signal est émis quand la rangée est devenu la première rangée  enfant ou a perdu  sa dernière rangée enfant.

tree_model : Le GtkTreeModel sur lequel le signal est émis
path : un GtkTreePath identifiant la rangée
iter : un GtkTreeIter valide pointant sur la rangée
user_data : données utilisateur définit quand le gestionnaire de signal a été connecté.

Le signal "row-inserted" 


void                user_function                      (GtkTreeModel *tree_model,
GtkTreePath *path,
GtkTreeIter *iter,
gpointer user_data) : Run First

Ce signal est émis quand la nouvelle rangée a été inserrée dans le magasin.

Notez que cette rangée peut être vide à ce moment, puisque que l'insertion d'une rangée vide est une méthode commune,elle sera remplie avec les valeurs désirées en deuxième lieu.

tree_model :  GtkTreeModel  sur lequel le signal est émis.
path :  GtkTreePath identifiant la nouvelle rangée.
iter :  GtkTreeIter valide pointant sur la nouvelle rangée.
user_data : données utilisateur définit quand le gestionnaire de signal a été connecté.

Le signal  "rows-reordered" 


void                user_function                      (GtkTreeModel *tree_model,
GtkTreePath *path,
GtkTreeIter *iter,
gpointer arg3,
gpointer user_data) : Run First

Ce signal est émis quand les enfants de l'embranchement dans  GtkTreeModel ont été réordonnées.

Notez que ce signal n'est pas émis quand les rangées sont réordonnées par DND puisque cela se fait en supprimant puis en réinserrant la rangée.

tree_model :  GtkTreeModel sur lequel le signal a été émis.
path :  GtkTreePath identifiant l'embranchement de l'arbre dont les enfnats ont été réordonnés.
iter : GtkTreeIter  valide pointant sur l'embranchement dont les enfants ont été réordonnés.
user_data : données utilisateur définit quand le gestionnaire de signal a été connecté.

Voir Aussi

GtkTreeView, GtkTreeStore, GtkListStore, GtkTreeDnd, GtkTreeSortable



[4] Ici, iter est l'abréviation d' “iterateur”.