Interioridades del ajuste

Hasta aquí está todo bien, pero ¿y si quiere crear sus propios gestores 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 gestores 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 gestor de señales de esta forma:

void cb_rotate_picture (MyPicture* picture)
{
  picture->set_rotation(adj->get_value());
...

y conectarlo al ajuste del widget de escala así:

adj->signal_value_changed().connect(sigc::bind<MyPicture*>(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 gestor 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 gestor a esta señal, a menos que esté escribiendo un nuevo tipo de widget de rango.

adjustment->signal_changed();