Η ενδιάμεση μνήμη

Gtk::TextBuffer είναι ένα πρότυπο που περιέχει τα δεδομένα για την Gtk::TextView, όπως η Gtk::TreeModel χρησιμοποιείται από Gtk::TreeView. Αυτό επιτρέπει δύο ή περισσότερες Gtk::TextViews να μοιραστούν την ίδια TextBuffer και επιτρέπει αυτά τα TextBuffers να εμφανίζονται ελαφρά διαφορετικά. Ή μπορείτε να διατηρήσετε αρκετές Gtk::TextBuffers και να επιλέξετε να εμφανίσετε κάθε μια σε διαφορετικούς χρόνους στο ίδιο γραφικό συστατικό Gtk::TextView.

Η TextView δημιουργεί τη δική της προεπιλογή TextBuffer, που μπορείτε να προσπελάσετε μέσα από τη μέθοδο get_buffer().

Reference

11.1.1. Επαναλήπτες

11.1.2. Ετικέτες και μορφοποίηση

11.1.2.1. Ετικέτες

Για να ορίσετε ότι κάποιο κείμενο στην ενδιάμεση μνήμη πρέπει να έχει ειδική μορφοποίηση, πρέπει να ορίσετε μια ετικέτα που θα κρατήσει αυτήν την πληροφορία μορφοποίησης και έπειτα θα εφαρμόσει αυτήν την ετικέτα στην περιοχή του κειμένου. Για παράδειγμα, για τον ορισμό της ετικέτας και των ιδιοτήτων της:

Glib::RefPtr<Gtk::TextBuffer::Tag> refTagMatch =
    Gtk::TextBuffer::Tag::create();
refTagMatch->property_background() = "orange";

Μπορείτε να ορίσετε ένα όνομα για την Tag, όταν χρησιμοποιείτε τη μέθοδο create(), αλλά δεν είναι απαραίτητο.

Η κλάση Tag έχει πολλές άλλες ιδιότητες.

Reference

11.1.2.2. TagTable

Κάθε Gtk::TextBuffer χρησιμοποιεί μια Gtk::TextBuffer::TagTable, που περιέχει τις Tags για αυτή την ενδιάμεση μνήμη. 2 ή περισσότερες TextBuffers μοιράζονται την ίδια TagTable. Όταν δημιουργείτε Tags θα πρέπει να τις προσθέσετε στη TagTable. Για παράδειγμα:

Glib::RefPtr<Gtk::TextBuffer::TagTable> refTagTable =
    Gtk::TextBuffer::TagTable::create();
refTagTable->add(refTagMatch);
//Ας ελπίσουμε ότι μια μελλοντική έκδοση του gtkmm θα έχει μια μέθοδο set_tag_table(),
//για χρήση μετά τη δημιουργία της ενδιάμεσης μνήμης.
Glib::RefPtr<Gtk::TextBuffer> refBuffer =
    Gtk::TextBuffer::create(refTagTable);

Μπορείτε επίσης να χρησιμοποιήσετε την get_tag_table() για να πάρετε και ίσως να τροποποιήσετε στη TextBuffer, την προεπιλεγμένη TagTable αντί για δημιουργία μιας σαφώς.

Reference

11.1.2.3. Εφαρμογή ετικετών

Αν έχετε δημιουργήσει μια Tag και την προσθέσατε στην TagTable, μπορεί να εφαρμόσετε αυτήν την ετικέτα σε μέρος της TextBuffer έτσι ώστε κάποιο κείμενο να εμφανίζεται με αυτήν τη μορφοποίηση. Ορίζετε την αρχή και το τέλος της περιοχής του κειμένου ορίζοντας Gtk::TextBuffer::iterators. Για παράδειγμα:

refBuffer->apply_tag(refTagMatch, iterRangeStart, iterRangeStop);

Or you could specify the tag when first inserting the text:

refBuffer->insert_with_tag(iter, "Some text", refTagMatch);

Μπορείτε να εφαρμόσετε περισσότερες από μία Tag στο ίδιο κείμενο, χρησιμοποιώντας την apply_tag() περισσότερο από μια φορά, ή χρησιμοποιώντας την insert_with_tags(). Οι Tags μπορεί να ορίζουν διαφορετικές τιμές για τις ίδιες ιδιότητες, αλλά μπορείτε να επιλύσετε αυτές τις συγκρούσεις χρησιμοποιώντας Tag::set_priority().

11.1.3. Σημάδια

Οι επαναλήπτες TextBuffer είναι γενικά άκυροι όταν το κείμενο αλλάζει, αλλά μπορείτε να χρησιμοποιήσετε μια Gtk::TextBuffer::Mark για να θυμάται μια θέση σε αυτές τις καταστάσεις. Για παράδειγμα,

Glib::RefPtr<Gtk::TextBuffer::Mark> refMark =
    refBuffer->create_mark(iter);

Μπορείτε έπειτα να χρησιμοποιήσετε τη μέθοδο get_iter() αργότερα για να δημιουργήσετε έναν επαναλήπτη για τη νέα θέση της Mark.

Υπάρχουν δύο ενσωματωμένες Marks - insert και select_bound, που μπορείτε να προσπελάσετε στην TextBuffer με τις μεθόδους get_insert() και get_selection_bound().

Reference

11.1.4. Η προβολή

Όπως αναφέρθηκε παραπάνω, κάθε TextView έχει μια TextBuffer και μία ή περισσότερες TextView μπορούν να μοιραστούν την ίδια TextBuffer.

Όπως η TreeView, θα πρέπει προφανώς να βάλετε την TextView σας μέσα σε μια ScrolledWindow για να επιτρέψετε στον χρήστη να δει και να μετακινήσει ολόγυρα όλη την περιοχή κειμένου με γραμμές κύλισης.

Reference

11.1.4.1. Προεπιλεγμένη μορφοποίηση

Η TextView έχει ποικίλες μεθόδους που επιτρέπουν την αλλαγή της παρουσίασης της ενδιάμεσης μνήμης για αυτήν τη συγκεκριμένη προβολή. Μερικές από αυτές μπορεί να αντικατασταθούν από τις Gtk::TextTags στην ενδιάμεση μνήμη, αν ορίζουν τα ίδια πράγματα. Για παράδειγμα, set_left_margin(), set_right_margin(), set_indent(), κλπ.

11.1.4.2. Κύλιση

Η Gtk::TextView έχει ποικίλες μεθόδους scroll_to_*(). Αυτές επιτρέπουν να εξασφαλίσετε ότι το συγκεκριμένο μέρος της ενδιάμεσης μνήμης του κειμένου είναι ορατό. Για παράδειγμα, το γνώρισμα εύρεσης της εφαρμογή σας μπορεί να χρησιμοποιήσει την Gtk::TextView::scroll_to_iter() για να εμφανίσει το ευρεθέν κείμενο.