Προσαρμογή εσωτερικών

Εντάξει, αυτό είναι ωραίο, αλλά τι θα συμβεί αν θελήσετε να δημιουργήσετε τους δικούς σας χειριστές για να απαντούν όταν ο χρήστης ρυθμίζει ένα γραφικό συστατικό Range ή μια SpinButton. Για να προσπελάσετε την τιμή μιας Gtk::Adjustment, μπορείτε να χρησιμοποιήσετε τις μεθόδους get_value() και set_value():

Όπως αναφέρθηκε νωρίτερα, η Gtk::Adjustment μπορεί να εκπέμπει σήματα. Έτσι, φυσικά, οι ενημερώσεις γίνονται αυτόματα όταν μοιράζεστε ένα αντικείμενο Adjustment μεταξύ μιας Scrollbar και ενός άλλου προσαρμόσιμου γραφικού συστατικού· όλα τα προσαρμόσιμα γραφικά συστατικά συνδέουν χειριστές σήματος με το σήμα value_changed της προσαρμογής τους, όπως μπορεί το πρόγραμμά σας.

Έτσι, για παράδειγμα, αν έχετε ένα γραφικό συστατικό Scale και θέλετε να αλλάξετε την περιστροφή μιας εικόνας όποτε η τιμή του αλλάζει, θα πρέπει να δημιουργήσετε έναν χειριστή σήματος, όπως αυτόν:

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

και να το συνδέσετε στην προσαρμογή του γραφικού συστατικού κλίμακας όπως αυτό:

adj->signal_value_changed().connect(sigc::bind<MyPicture*>(sigc::mem_fun(*this,
    &cb_rotate_picture), picture));

Τι συμβαίνει αν ένα γραφικό συστατικό αναδιαμορφώνει τα πεδία upper ή lower της Adjustment του, όπως όταν ένας χρήστης προσθέτει περισσότερο κείμενο στο γραφικό συστατικό κειμένου; Σε αυτήν την περίπτωση εκπέμπει το σήμα changed.

Τα γραφικά συστατικά Range συνδέουν τυπικά έναν χειριστή με αυτό το σήμα, που αλλάζει την εμφάνισή τους για να απεικονίζει την αλλαγή - για παράδειγμα, το μέγεθος του ολισθητή σε μια γραμμή κύλισης θα αυξήσει ή θα συρρικνώσει αντιστρόφως ανάλογα με τη διαφορά μεταξύ των τιμών lower και upper της Adjustment του.

Δεν θα χρειαστείτε ποτέ να προσαρτήσετε έναν χειριστή σε αυτό το σήμα, εκτός και γράφετε έναν νέο τύπο γραφικού συστατικού περιοχής.

adjustment->signal_changed();