À l'intérieur des ajustements
Oui, dites-vous, c'est bien beau, mais que faire si je souhaite créer mes propres gestionnaires pour répondre à la modification par l'utilisateur d'un élément graphique Range ou SpinButton. Pour avoir accès à la valeur du paramètre value d'un Gtk::Adjustment, utilisez les fonctions membres get_value() et set_value().
Comme mentionné plus haut, Gtk::Adjustment peut émettre des signaux. C'est pourquoi, bien entendu, les mises à jour se font automatiquement quand vous partagez un objet ajustement entre un Scrollbar et un autre élément graphique ajustable ; tous les éléments graphiques ajustables connectent leurs gestionnaires de signaux au signal value_changed de l'ajustement, comme pourrait le faire le programme.
Ainsi, par exemple, avec un élément graphique Scale, si vous voulez modifier la rotation d'une image chaque fois que value change, vous créez une fonction de rappel du type :
void cb_rotate_picture (Gtk::Widget *picture) { picture->set_rotation (adj->value); ...
et la connectez à l'ajustement de l'élément graphique Scale ainsi :
adj.value_changed.connect(sigc::bind<Widget*>(sigc::mem_fun(*this, &cb_rotate_picture), picture));
Que se passe-t-il quand un élément graphique reconfigure les champs upper ou lower de son Adjustment, ou bien, quand un utilisateur ajoute du texte dans un élément graphique texte ? Dans ce cas, l'élément graphique émet le signal changed.
Les éléments graphiques Range connectent habituellement à ce signal un gestionnaire qui modifie leur apparence pour refléter le changement — par exemple, la taille du curseur dans une barre de défilement va croître ou diminuer en proportion inverse de la différence entre les valeurs lower et upper de son Adjustment.
Vous n'aurez probablement pas besoin d'attacher un gestionnaire à ce signal, sauf si vous écrivez un nouveau type d'élément graphique à plage de réglage.
adjustment->changed();