# Η εργαλειοθήκη δημιουργήθηκε χρησιμοποιώντας Glade (Vala)

Tiffany Antopolski
tiffany.antopolski@gmail.com 2012
Γραμμή κουμπιών
Ελληνική μεταφραστική ομάδα GNOME
team@gnome.gr 2012-2015
Δημήτρης Σπίγγος
dmtrs32@gmail.com 2012, 2013
Μαρία Θουκιδίδου
marablack3@gmail.com 2014
Θάνος Τρυφωνίδης
tomtryf@gmail.com 2014, 2015

# Η γραμμή εργαλείων δημιουργήθηκε χρησιμοποιώντας Glade

Αυτό το παράδειγμα είναι παρόμοιο με , εκτός από τη χρήση Glade για δημιουργία της γραμμής εργαλείων σε ένα αρχείο XML ui.

Για δημιουργία της γραμμής εργαλείων χρησιμοποιώντας το σχεδιαστή διεπαφής Glade:

Άνοιγμα του Glade και αποθήκευση του αρχείου ως toolbar_builder.ui

Στιγμιότυπο διεπαφής του Glade

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

Στιγμιότυπο του εικονιδίου εργαλειοθήκης στο Glade ui

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

Στιγμιότυπο της καρτέλας Γενικά

Στην καρτέλα κοινά, ορίστε οριζόντια επέκταση σε ναι.

Στιγμιότυπο της καρτέλας Κοινά

Δεξί κλικ στη γραμμή εργαλείων στα πάνω δεξιά και επιλέξτε επεξεργασία. Το παράθυρο επεξεργαστής γραμμής εργαλείων θα εμφανιστεί.

Στιγμιότυπο πού να δεξιοπατήσετε για να επεξεργαστείτε την εργαλειοθήκη.

Θέλουμε να προσθέσουμε 5 κουμπιά εργαλείων: νέο, άνοιγμα, αναίρεση, πλήρης οθόνη και εγκατάλειψη πλήρους οθόνης. Πρώτα, θα προσθέσουμε το νέο ToolButton.

Στην καρτέλα ιεραρχία, πατήστε προσθήκη.

Αλλαγή του ονόματος του στοιχείου εργαλείου σε new_button.

Κύλιση προς τα κάτω και ρύθμιση του είναι σημαντικό σε ναι. Αυτό θα προκαλέσει την ετικέτα του ToolButton να εμφανιστεί, όταν προβάλετε τη γραμμή εργαλείων.

Εισάγετε το όνομα ενέργειας: app.new.

Αλλαγή του ετικέτα σε New.

Επιλογή του νέου αναγνωριστικού παρακαταθήκης από το πτυσσόμενο μενού, ή πληκτρολογήστε gtk-new.

Επανάληψη των παραπάνω βημάτων για τα υπολειπόμενα κουμπιά εργαλείων (ToolButtons), με τις παρακάτω ιδιότητες:

Όνομα | Είναι σημαντικό | Όνομα ενέργειας | Ετικέτα | Αναγνωριστικό παρακαταθήκης
--- | --- | --- | --- | ---
open_button | Ναι | app.open | Open | gtk-open
undo_button | Ναι | win.undo | Αναίρεση | gtk-undo
fullscreen_button | Ναι | win.fullscreen | Πλήρης οθόνη | gtk-fullscreen
leave_fullscreen_button | Ναι | win.fullscreen | Έξοδος από πλήρη οθόνη | gtk-leave-fullscreen

Κλείσιμο του επεξεργαστή γραμμής εργαλείων.

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

Ορισμός της ιδιότητας ορατό σε Όχι

Αποθήκευση της εργασίας σας και κλείσιμο του Glade.

Το δημιουργημένο αρχείο XML από το Glade εμφανίζεται παρακάτω. Αυτή είναι η περιγραφή της εργαλειοθήκης. Τη στιγμή της εγγραφής, η επιλογή προσθήκης στην κλάση Gtk.STYLE_CLASS_PRIMARY_TOOLBAR στην διεπαφή Glade δεν υπάρχει. Μπορούμε χειροκίνητα να το προσθέσουμε στο αρχείο XML. Για να το κάνουμε, προσθέστε τον παρακάτω κώδικα XML στη γραμμή 9 του toolbar_builder.ui:

<style> <class name="primary-toolbar"/> </style>

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

<?xml version="1.0" encoding="UTF-8"?> <interface> <!-- interface-requires gtk+ 3.0 --> <object class="GtkToolbar" id="toolbar"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="hexpand">True</property> <property name="show_arrow">False</property> <child> <object class="GtkToolButton" id="new_button"> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">False</property> <property name="use_action_appearance">False</property> <property name="is_important">True</property> <property name="action_name">app.new</property> <property name="label" translatable="yes">New</property> <property name="use_underline">True</property> <property name="stock_id">gtk-new</property> </object> <packing> <property name="expand">False</property> <property name="homogeneous">True</property> </packing> </child> <child> <object class="GtkToolButton" id="open_button"> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">False</property> <property name="use_action_appearance">False</property> <property name="is_important">True</property> <property name="action_name">app.open</property> <property name="label" translatable="yes">Open</property> <property name="use_underline">True</property> <property name="stock_id">gtk-open</property> </object> <packing> <property name="expand">False</property> <property name="homogeneous">True</property> </packing> </child> <child> <object class="GtkToolButton" id="undo_button"> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">False</property> <property name="use_action_appearance">False</property> <property name="is_important">True</property> <property name="action_name">win.undo</property> <property name="label" translatable="yes">Undo</property> <property name="use_underline">True</property> <property name="stock_id">gtk-undo</property> </object> <packing> <property name="expand">False</property> <property name="homogeneous">True</property> </packing> </child> <child> <object class="GtkToolButton" id="fullscreen_button"> <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">False</property> <property name="use_action_appearance">False</property> <property name="is_important">True</property> <property name="action_name">win.fullscreen</property> <property name="label" translatable="yes">Fullscreen</property> <property name="use_underline">True</property> <property name="stock_id">gtk-fullscreen</property> </object> <packing> <property name="expand">False</property> <property name="homogeneous">True</property> </packing> </child> <child> <object class="GtkToolButton" id="leave_fullscreen_button"> <property name="use_action_appearance">False</property> <property name="can_focus">False</property> <property name="use_action_appearance">False</property> <property name="is_important">True</property> <property name="action_name">win.fullscreen</property> <property name="label" translatable="yes">Leave Fullscreen</property> <property name="use_underline">True</property> <property name="stock_id">gtk-leave-fullscreen</property> </object> <packing> <property name="expand">False</property> <property name="homogeneous">True</property> </packing> </child> </object> </interface>

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

/* This is the Window */ class MyWindow : Gtk.ApplicationWindow {

/* Declare these two ToolButtons, as we will get them * from the ui file (see lines 32 and 33), so we can * hide() and show() them as needed.*/ Gtk.ToolButton fullscreen_button; Gtk.ToolButton leave_fullscreen_button;

/* Constructor */ internal MyWindow (MyApplication app) { Object (application: app, title: "Toolbar Example");

this.set_default_size (400, 200); var grid = new Gtk.Grid (); this.add (grid); grid.show ();

/* add the toolbar from the ui file */ var builder = new Gtk.Builder (); try { builder.add_from_file ("toolbar_builder.ui"); } /* Handle the exception */ catch (Error e) { error ("Unable to load file: %s", e.message); }

grid.attach (builder.get_object ("toolbar") as Gtk.Toolbar, 0, 0, 1, 1);

/* get these objects from the ui file so we can toggle between them */ fullscreen_button = builder.get_object ("fullscreen_button") as Gtk.ToolButton; leave_fullscreen_button = builder.get_object ("leave_fullscreen_button") as Gtk.ToolButton;

/* create the "undo" window action action */ var undo_action = new SimpleAction ("undo", null); undo_action.activate.connect (undo_callback); this.add_action (undo_action);

/* create the "fullscreen" window action */ var fullscreen_action = new SimpleAction ("fullscreen", null); fullscreen_action.activate.connect (fullscreen_callback); this.add_action (fullscreen_action); }

void undo_callback (SimpleAction simple, Variant? parameter) { print ("You clicked \"Undo\".\n"); }

void fullscreen_callback (SimpleAction simple, Variant? parameter) { if ((this.get_window ().get_state () & Gdk.WindowState.FULLSCREEN) != 0) { this.unfullscreen (); leave_fullscreen_button.hide (); fullscreen_button.show (); } else { this.fullscreen (); fullscreen_button.hide (); leave_fullscreen_button.show (); } } }

/* This is the application */ class MyApplication : Gtk.Application { protected override void activate () { new MyWindow (this).show (); }

protected override void startup () { base.startup ();

/* Create the "new" action and add it to the app*/ var new_action = new SimpleAction ("new", null); new_action.activate.connect (new_callback); this.add_action (new_action);

/* Create the "open" action, and add it to the app */ var open_action = new SimpleAction ("open", null); open_action.activate.connect (open_callback); this.add_action (open_action);

/* You could also add the action to the app menu * if you wanted to. */ //var menu = new Menu (); //menu.append ("New", "app.new"); //this.app_menu = menu; }

void new_callback (SimpleAction action, Variant? parameter) { print ("You clicked \"New\".\n"); }

void open_callback (SimpleAction action, Variant? parameter) { print ("You clicked \"Open\".\n"); } }

/* The main function creates the application and runs it. */ int main (string[] args) { return new MyApplication ().run (args); }

Σε αυτό το παράδειγμα χρησιμοποιήσαμε τα παρακάτω:

Gtk.Toolbar

Gtk.Toolbutton

Gtk.Stock