Objekty Adjustment zevnitř
Bezva, řeknete že je to pěkné, ale co když si chcete vytvořit vlastní obsluhu, abyste reagovali na uživatelovy změny hodnoty ve widgetu Range nebo SpinButton. Pro přístup k hondote z Gtk::Adjustment můžete použít metody get_value() a set_value():
Jak již byl zmíněno, Gtk::Adjustment může vysílat signály. To je samozřejmě ta finta, jak se automaticky dějí aktualizace, když sdílíte objekt Adjustment mezi widgetem Scrollbar a jiným přizpůsobitelným widgetem. Všechny přizpůsobitelné widgety mohou napojit obsluhy signálů na svůj signál value_changed, stejně jako to může váš program.
Takže, když například máte widget Scale a chcete změnit otočení obrázku, kdykoliv se změní jeho hodnota, vytvořili byste obsluhu signálu nějak takto:
void cb_rotate_picture (MyPicture* picture) { picture->set_rotation(adj->get_value()); …
a napojili byste jej na přizpůsobení widgetu Scale nějak takto:
adj->signal_value_changed().connect(sigc::bind<MyPicture*>(sigc::mem_fun(*this, &cb_rotate_picture), picture));
Co když widget změní nastavení polí upper nebo lower ve svém objektu Adjustment, třeba když uživatel přidá další text do textového widgetu? V tomto případě vyšle signál changed.
Widgety Range typicky napojují obsluhu na tento signál, který mění jejich vzhled s ohledem na změny – například velikost táhla v posuvníku roste, nebo se zmenšuje, v opačném poměru k rozdílu mezi hodnotami lower a upper jeho objektu Adjustment.
Pravděpodobně nebudete muset pokaždé napojit obsluhu k tomuto signálu, vyjma případů, kdy používáte nový typ widgetu Range.
adjustment->signal_changed();