Interioridades del ajuste
Hasta aquí está todo bien, pero ¿y si quiere crear sus propios manejadores para responder cuando el usuario ajusta un widget Range o un SpinButton? Para acceder al valor de un Gtk::Adjustment, puede usar los métodos get_value() y set_value():
Como se mencionó anteriormente, Gtk::Adjustment puede emitir señales. Así es, por supuesto, cómo suceden las actualizaciones automáticamente cuando comparte un objeto Adjustment entre una Scrollbar y otro widget ajustable; todos los widgets ajustables conectan manejadores de señales a la señal value_changed de sus ajustes, como también puede su programa.
Entonces, por ejemplo, si tiene un widget Scale, y quiere cambiar la rotación de una imagen cuando su valor cambia, podría crear un manejador de señales de esta forma:
void cb_rotate_picture (Gtk::Widget *picture) { picture->set_rotation (adj->value); ...
y conectarlo al ajuste del widget de escala así:
adj.value_changed.connect(sigc::bind<Widget*>(sigc::mem_fun(*this, &cb_rotate_picture), picture));
¿Qué pasa si un widget reconfigura los campos upper o lower de su Adjustment, como cuando un usuario le añade más texto a un widget de texto? En este caso, emite la señal changed.
Los widgets Range típicamente conectan un manejador a esta señal, que cambia su apariencia para reflejar el cambio: por ejemplo, el tamaño de un control deslizante en una barra de desplazamiento crecerá o se encogerá de manera inversamente proporcional a la diferencia entre los valores lower y upper de su Adjustment.
Probablemente nunca necesite adjuntarle un manejador a esta señal, a menos que esté escribiendo un nuevo tipo de widget de rango.
adjustment->changed();