-
la Mémorisation GTK
Bonjour
j'ai un programme GTK ou il faut que j'appui sur un bouton image (un pion) puis que j'appui sur un autre bouton jouer carte pour que mon pion avance; Mais je ne sais pas comment faire pour mémoriser le pion séléctionné et qu ainsi mon pion selectionné avance
Merci d'avance
-
Alors pour mémoriser tes widgets, t'as 3 solutions :
- Les mettre en variable globales.
La solution la plus facile, mais aussi la moins rigoureuse.
Si t'as un très gros programme, ça peut vite devenir bordélique.
- La structure. (Ou la liste chainée)
Tu mets toutes tes variables dans une structure ou une liste que tu passes en argument à toutes tes fonctions.
C'est une solution beaucoup plus rigoureuse que la première, bien qu'elle ait ses limites elle aussi.
- Les noms.
Une méthode que j'ai découverte récemment en regardant la doc que GtkWidget.
Elle s'utilise en complément d'une des 2 premières.
Nomme tes Widgets grâce à la fonction gtk_widget_set_name et retrouve-les grâce à la fonction gtk_widget_get_name.
C'est de loin la solution la plus propre, mais aussi la plus coûteuse en temps de calcul (ce qui n'est vraiment important que si tu gères un très très grand nombre de widgets), car retrouver une chaine de caractères est évidement plus long que d'aller chercher l'indirection d'un pointeur.
Les noms sont surtout utiles dans l'identification et donc à la récupération de Widgets.
Imaginons :
Tu as ta structure s et 2 widgets* v et w.
Tu crées le widgets s->v qui va pointer sur l'adresse x.
puis tu fermes la fenêtre contenant v;
Ensuite tu crées le widgets s->w qui va pointer sur la première zone mémoire disponible, à l'adresse x (qui aura été libérée après la destruction de v).
puis tu fais une fonction dans laquelle tu veux savoir, parmi tous les widgets de ta structure, lequel est passé en argument.
sauf qu'à ce moment là, s->w et s->v pointeront tous les 2 vers x (car detruire un Widget ne met pas les pointeur à NULL !), et bonjour les bugs...
-