Vala + GTK + 3 και Granite (αποθήκευση τιμών στο dconf)

Προγραμματίζοντας σε Vala και GTK+, όλοι μας έχουμε ποτέ αναρωτηθεί πώς να κάνουμε μια εφαρμογή γραμμένη σε Vala και GTK+ ικανή να αποθηκεύει τις καταστάσεις των παραμέτρων μεγέθους παραθύρου και ούτω καθεξής; Είναι τυπικές περιπτώσεις που χρησιμοποιούμε gschemas για να αποθηκεύσετε αυτές τις τιμές (αυτή η γνωστή εφαρμογή dconf-editor) που διαχειρίζεται γραφικά αυτά τα σχήματα.

Τώρα σας δείχνω πώς να το κάνετε αυτό με απλά βήματα και χωρίς περιπλοκές χρησιμοποιώντας την κλάση Granite.Services.Settings από τη βιβλιοθήκη Granite.

Τι χρειαζόμαστε?

Πρώτα πρέπει να έχουμε εγκαταστήσει τις βιβλιοθήκες GTK+, Granite και Vala για να μεταγλωττίσουμε τον κώδικά μας. Για να το κάνουμε αυτό στο Ubuntu/ElementaryOS χρησιμοποιούμε την εντολή:

sudo apt-get install libgtk-3-dev libgranite-dev granite-demo valac

Και θα χρειαστούμε επίσης οποιοδήποτε πρόγραμμα επεξεργασίας κειμένου που υποστηρίζει Vala/GTK+ και σύνταξη XML, όπως το Scratch Text Editor (προεπιλογή ElementaryOS), το GEdit, το Sublime Text + Plugins κ.λπ.

Ο κώδικας

Παρακάτω είναι τα δείγματα αρχείων. Για καλύτερη κατανόηση αφήνω τον κώδικα στο PASTE με σχόλια σε αυτά:

κύρια.vala
φροντιστήριο.vala
ρυθμίσεις.vala
org.tutorial.gschema.xml

Επεξηγήσεις

Το αρχείο Schema, ναι ή ναι, πρέπει να είναι XML και να ονομάζεται ORG.APLICACIÓN.GSCHEMA.XML. Δηλαδή, τόσο το ORG όσο και το GSCHEMA.XML πρέπει να είναι εκεί για να το αναγνωρίσει το dconf ως σχήμα. Επιπλέον, αυτά τα σχήματα πρέπει να αντιγραφούν στη διαδρομή:

/usr/share/glib-2.0/schemas/

και πρέπει να μεταγλωττιστούν ώστε να τα πάρει το DCONF, για αυτό εκτελούμε την εντολή:

sudo glib-compile-schemas /usr/share/glib-2.0/schemas/

Συγκέντρωση

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

valac --pkg gtk+-3.0 --pkg granite main.vala tutorial.vala settings.vala

Και εκτελέστε το δυαδικό με την εντολή:

./main

Συμπεράσματα

Είναι μια από τις καλύτερες μεθόδους για να αποθηκεύσετε την κατάσταση της εφαρμογής μας στο GSCHEMA χρησιμοποιώντας το GLIB. Οποιαδήποτε ερώτηση θα χαρώ να απαντήσω.

Εδώ αφήνω ένα στιγμιότυπο οθόνης του Ubuntu μου και το Παράδειγμα:

snap-Οδηγός


Αφήστε το σχόλιό σας

Η διεύθυνση email σας δεν θα δημοσιευθεί. Τα υποχρεωτικά πεδία σημειώνονται με *

*

*

  1. Υπεύθυνος για τα δεδομένα: Miguel Ángel Gatón
  2. Σκοπός των δεδομένων: Έλεγχος SPAM, διαχείριση σχολίων.
  3. Νομιμοποίηση: Η συγκατάθεσή σας
  4. Κοινοποίηση των δεδομένων: Τα δεδομένα δεν θα κοινοποιούνται σε τρίτους, εκτός από νομική υποχρέωση.
  5. Αποθήκευση δεδομένων: Βάση δεδομένων που φιλοξενείται από τα δίκτυα Occentus (ΕΕ)
  6. Δικαιώματα: Ανά πάσα στιγμή μπορείτε να περιορίσετε, να ανακτήσετε και να διαγράψετε τις πληροφορίες σας.

  1.   Ραούλ Ρ dijo

    Καλό άρθρο, μερικά μαθήματα GTK σε C++ δεν είναι κακά. Τα πράγματα έχουν αλλάξει πολύ, το επίσημο site της GTK προτείνει βιβλία από το 2002, έκανα το λάθος να το αγοράσω.

    Το DevHelp βοηθά περισσότερο από οποιοδήποτε βιβλίο.

    1.    Ραούλ Ρ dijo

      Συγγνώμη εννοούσα C, όχι C++. Όταν ανοίγω μπλοκ κωδικών, επιλέγω πάντα "Ένα έργο σε C++", αλλά προγραμματίζω σε C.

  2.   απειλή dijo

    Καλό σεμινάριο, θα ήθελα να μάθω και ξέρω ότι είναι άσχετο, αλλά στην πραγματικότητα έχω κάνει πολύ κουράγιο για να μπορέσω να πραγματοποιήσω αυτήν την προσέγγιση, πρέπει να προσαρμόσω το φόντο και την οθόνη σύνδεσης με μια θεσμική εικόνα όπου εργάζομαι στις ομάδες των χρηστών, έχουν μια διανομή στη Βενεζουέλα που ονομάζεται Canaima, βασισμένη στο Debian 7 Wheezy, οι χρήστες ελέγχουν ταυτότητας μέσω LDAP και αρκετοί χρήστες μπορούν να εργαστούν στον ίδιο υπολογιστή, επομένως μπορεί να υπάρχουν πολλές συνεδρίες στην οποία πρέπει να είστε κάτοχος της ταπετσαρίας, οι υπολογιστές προσαρμόζονται από το σενάριο για να διευκολύνεται η εργασία των τεχνικών και, στη συνέχεια, οι πολιτικές εισάγονται από τον διακομιστή puppetmaster.

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

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

    Δεν έχω ιδέα αν κάτι παρόμοιο με αυτό μπορεί να εφαρμοστεί στην περίπτωσή μου.
    Χαιρετισμούς.