Blame platform-demos/el/menubar.vala.page

Packit 1470ea
Packit 1470ea
<page xmlns="http://projectmallard.org/1.0/" xmlns:its="http://www.w3.org/2005/11/its" xmlns:xi="http://www.w3.org/2001/XInclude" type="guide" style="task" id="menubar.vala" xml:lang="el">
Packit 1470ea
  <info>
Packit 1470ea
  <title type="text">MenuBar (Vala)</title>
Packit 1470ea
  <link type="guide" xref="beginner.vala#menu-combo-toolbar"/>
Packit 1470ea
  <link type="seealso" xref="aboutdialog.vala"/>
Packit 1470ea
  <link type="seealso" xref="gmenu.vala"/>
Packit 1470ea
    <revision version="0.1" date="2012-05-25" status="draft"/>
Packit 1470ea
Packit 1470ea
    <credit type="author copyright">
Packit 1470ea
      <name>Tiffany Antopolski</name>
Packit 1470ea
      <email its:translate="no">tiffany.antopolski@gmail.com</email>
Packit 1470ea
      <years>2012</years>
Packit 1470ea
    </credit>
Packit 1470ea
Packit 1470ea
    <desc>Ένα γραφικό στοιχείο που κρατά γραφικά στοιχεία GtkMenuItem</desc>
Packit 1470ea
  
Packit 1470ea
    <mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
Packit 1470ea
      <mal:name>Ελληνική μεταφραστική ομάδα GNOME</mal:name>
Packit 1470ea
      <mal:email>team@gnome.gr</mal:email>
Packit 1470ea
      <mal:years>2012-2015</mal:years>
Packit 1470ea
    </mal:credit>
Packit 1470ea
  
Packit 1470ea
    <mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
Packit 1470ea
      <mal:name>Δημήτρης Σπίγγος</mal:name>
Packit 1470ea
      <mal:email>dmtrs32@gmail.com</mal:email>
Packit 1470ea
      <mal:years>2012, 2013</mal:years>
Packit 1470ea
    </mal:credit>
Packit 1470ea
  
Packit 1470ea
    <mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
Packit 1470ea
      <mal:name>Μαρία Θουκιδίδου</mal:name>
Packit 1470ea
      <mal:email>marablack3@gmail.com</mal:email>
Packit 1470ea
      <mal:years>2014</mal:years>
Packit 1470ea
    </mal:credit>
Packit 1470ea
  
Packit 1470ea
    <mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
Packit 1470ea
      <mal:name>Θάνος Τρυφωνίδης</mal:name>
Packit 1470ea
      <mal:email>tomtryf@gmail.com</mal:email>
Packit 1470ea
      <mal:years>2014, 2015</mal:years>
Packit 1470ea
    </mal:credit>
Packit 1470ea
  </info>
Packit 1470ea
Packit 1470ea
  <title>MenuBar</title>
Packit 1470ea
  <media type="image" mime="image/png" src="media/menubar.png"/>
Packit 1470ea
  

Μια γραμμή εργαλείων δημιουργήθηκε χρησιμοποιώντας XML και GtkBuilder.

Packit 1470ea
Packit 1470ea
  <links type="section"/>
Packit 1470ea
Packit 1470ea
  <section id="xml"> <title>Δημιουργήστε μια γραμμή μενού χρησιμοποιώντας XML</title>
Packit 1470ea
   

Για να δημιουργήσετε μια γραμμή μενού χρησιμοποιώντας XML:

Packit 1470ea
   <steps>
Packit 1470ea
     <item>

Δημιουργήστε <file>menubar.ui</file> χρησιμοποιώντας τον αγαπημένο σας επεξεργαστή κειμένου.

</item>
Packit 1470ea
     <item>

Εισάγετε την επόμενη γραμμή στην κορυφή του αρχείου:

Packit 1470ea
           
Packit 1470ea
<?xml version="1.0"? encoding="UTF-8"?>
Packit 1470ea
     </item>
Packit 1470ea
    <item>

Θέλουμε να δημιουργήσουμε τη διεπαφή που θα περιέχει τη γραμμή μενού μας και τα υπομενού της. Η γραμμή μενού μας θα περιέχει τα υπομενού <gui>Αρχείο</gui>, <gui>Επεξεργασία</gui>, <gui>Επιλογές</gui> και <gui>Βοήθεια</gui>. Προσθέτουμε τον ακόλουθο κώδικα XML στο αρχείο:

Packit 1470ea
    <?xml version="1.0" encoding="UTF-8"?>
Packit 1470ea
<interface>
Packit 1470ea
  <menu id="menubar">
Packit 1470ea
    <submenu>
Packit 1470ea
      <attribute name="label">File</attribute>
Packit 1470ea
    </submenu>
Packit 1470ea
    <submenu>
Packit 1470ea
      <attribute name="label">Edit</attribute>
Packit 1470ea
    </submenu>
Packit 1470ea
    <submenu>
Packit 1470ea
      <attribute name="label">Choices</attribute>
Packit 1470ea
    </submenu>
Packit 1470ea
    <submenu>
Packit 1470ea
      <attribute name="label">Help</attribute>
Packit 1470ea
    </submenu>
Packit 1470ea
  </menu>
Packit 1470ea
</interface>
Packit 1470ea
Packit 1470ea
     </item>
Packit 1470ea
     <item>

Τώρα θα δημιουργήσουμε το αρχείο .vala και θα χρησιμοποιήσουμε GtkBuilder για εισαγωγή του <file>menubar.ui</file> που μόλις δημιουργήσαμε.

</item>
Packit 1470ea
   </steps>
Packit 1470ea
   </section>
Packit 1470ea
   <section id="basis"> <title>Προσθέστε τη MenuBar στο παράθυρο χρησιμοποιώντας GtkBuilder</title>
Packit 1470ea
public class MyWindow : Gtk.ApplicationWindow {
Packit 1470ea
	internal MyWindow (MyApplication app) {
Packit 1470ea
		Object (application: app, title: "MenuBar Example");
Packit 1470ea
		this.set_default_size (200, 200);
Packit 1470ea
	}
Packit 1470ea
}
Packit 1470ea
Packit 1470ea
class MyApplication: Gtk.Application {
Packit 1470ea
	protected override void activate () {
Packit 1470ea
		new MyWindow (this).show ();
Packit 1470ea
	}
Packit 1470ea
	protected override void startup () {
Packit 1470ea
		base.startup ();
Packit 1470ea
Packit 1470ea
		/* Setup menubar. */
Packit 1470ea
		/* Get the UI file. */
Packit 1470ea
		var builder = new Gtk.Builder ();
Packit 1470ea
		try {
Packit 1470ea
			builder.add_from_file ("menubar_basis.ui");
Packit 1470ea
		/* Handle the exception. */
Packit 1470ea
		} catch (Error e) {
Packit 1470ea
			error ("Unable to load file: %s", e.message);
Packit 1470ea
		}
Packit 1470ea
Packit 1470ea
		/* Get the menubar from the builder. */
Packit 1470ea
		this.menubar = builder.get_object ("menubar") as MenuModel;
Packit 1470ea
	}
Packit 1470ea
}
Packit 1470ea
Packit 1470ea
/* main creates and runs the application. */
Packit 1470ea
public int main (string[] args) {
Packit 1470ea
	return new MyApplication ().run (args);
Packit 1470ea
}
Packit 1470ea
Packit 1470ea

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

Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
Packit 1470ea
Packit 1470ea
<section id="xml2"> <title>Προσθήκη στοιχείων στα μενού</title>
Packit 1470ea

Ξεκινάμε προσθέτοντας 2 στοιχεία μενού στο μενού <gui>αρχείο</gui>: <gui>νέο</gui> και <gui>κλείσιμο</gui>. Τι κάνουμε αυτό προσθέτοντας μια section στο υπομενού File με αυτά τα στοιχεία. Το <file>menubar.ui</file> πρέπει να φαίνεται σαν αυτό (γραμμές 6 έως 13 συμπεριλαμβανόμενης αποτελούν τη νέα ενότητα που προστέθηκε):

Packit 1470ea
      
Packit 1470ea
<?xml version="1.0" encoding="UTF-8"?>
Packit 1470ea
<interface>
Packit 1470ea
  <menu id="menubar">
Packit 1470ea
    <submenu>
Packit 1470ea
      <attribute name="label">File</attribute>
Packit 1470ea
      <section>
Packit 1470ea
        <item>
Packit 1470ea
          <attribute name="label">New</attribute>
Packit 1470ea
        </item>
Packit 1470ea
        <item>
Packit 1470ea
          <attribute name ="label">Quit</attribute>
Packit 1470ea
        </item>
Packit 1470ea
      </section>
Packit 1470ea
    </submenu>
Packit 1470ea
    <submenu>
Packit 1470ea
      <attribute name="label">Edit</attribute>
Packit 1470ea
    </submenu>
Packit 1470ea
    <submenu>
Packit 1470ea
      <attribute name="label">Choices</attribute>
Packit 1470ea
    </submenu>
Packit 1470ea
    <submenu>
Packit 1470ea
      <attribute name="label">Help</attribute>
Packit 1470ea
    </submenu>
Packit 1470ea
  </menu>
Packit 1470ea
</interface>
Packit 1470ea
Packit 1470ea

Ακολουθώντας αυτό το μοτίβο, μπορείτε τώρα να προσθέσετε ένα στοιχείο Copy and μια Paste στο υπομενού Edit και ένα στοιχείο About στο υπομενού Help. Θα καθυστερήσουμε την προσθήκη στοιχείων στο <link xref="menubar.vala#choices">υπομενού επιλογές</link> μέχρι παραπέρα στο μάθημα.

Packit 1470ea
Packit 1470ea
<note style="tip">

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

</note>
Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="actions"><title>Εγκατάσταση ενεργειών</title>
Packit 1470ea

Αυτή είναι μια διεργασία τριών βημάτων.

Packit 1470ea
<steps>
Packit 1470ea
  <item>

Πρώτα δημιουργούμε τον πίνακα ActionEntry στην κλάση MyApplication. Μια ActionEntry αποτελείται από:

Packit 1470ea
  <list>
Packit 1470ea
    <item>

το "action name" (υποχρεωτικό)

</item>
Packit 1470ea
    <item>

τη συνάρτηση επανάκλησης για να συνδέσετε το σήμα "activate" της ενέργειας (εάν γίνεται)

</item>
Packit 1470ea
    <item>

τον τύπο της παραμέτρου που πρέπει να περαστεί στην ενεργοποιημένη συνάρτηση για την ενέργεια (εάν γίνεται)

</item>
Packit 1470ea
    <item>

την αρχική κατάσταση για αυτήν την ενέργεια (εάν γίνεται)

</item>
Packit 1470ea
    <item>

την επανάκληση σύνδεσης με το σήμα "change-state" (εάν γίνεται)

</item>
Packit 1470ea
  </list>
Packit 1470ea
   
Packit 1470ea
const ActionEntry[] actions = {
Packit 1470ea
    { "new", new_cb }, // {"action name", callback_function}
Packit 1470ea
    { "quit", quit_cb }
Packit 1470ea
Packit 1470ea
Packit 1470ea
  </item>
Packit 1470ea
  <item>

Δεύτερο, δημιουργούμε στις συναρτήσεις επανάκλησης τις ενέργειες που σχετίζονται.

Packit 1470ea
  
Packit 1470ea
void new_cb (SimpleAction action, Variant? parameter) {
Packit 1470ea
    print ("You clicked \"New\"\n");
Packit 1470ea
    //new MyWindow (this).show ();
Packit 1470ea
}
Packit 1470ea
Packit 1470ea
void quit_cb (SimpleAction action, Variant? parameter) {
Packit 1470ea
    print ("You clicked \"Quit\"\n");
Packit 1470ea
    this.quit ();
Packit 1470ea
}
Packit 1470ea
 </item>
Packit 1470ea
  <item>

Και τελευταία, συνδέουμε τα στοιχεία μενού στις ενέργειες στο αρχείο XML προσθέτοντας το γνώρισμα "action":

Packit 1470ea
    
Packit 1470ea
<item>
Packit 1470ea
  <attribute name="label">New</attribute>
Packit 1470ea
  <attribute name="action">app.new</attribute>
Packit 1470ea
</item>
Packit 1470ea
<item>
Packit 1470ea
  <attribute name="label">Quit</attribute>
Packit 1470ea
  <attribute name="action">app.quit</attribute>
Packit 1470ea
</item>
Packit 1470ea
 </item>
Packit 1470ea
</steps>
Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
Packit 1470ea
<section id="choices"><title>Επιλογές υπομενού και στοιχείων με κατάσταση</title>
Packit 1470ea
  <media type="image" mime="image/png" src="media/menubar_choices.png"/>
Packit 1470ea
  

Γραμμές 30 έως 80 συμπεριλαμβανόμενης της εμφάνισης <link xref="menubar.vala#xml-code"/> του χρησιμοποιούμενου κώδικα XML για δημιουργία της UI για το μενού <gui>επιλογές</gui>.

Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="win-app"><title>Ενέργειες: εφαρμογή ή παράθυρο;</title>
Packit 1470ea
  

Πιο πάνω, δημιουργήσαμε τις ενέργειες "new" και "open" ως μέρος της κλάσης MyApplication. Οι ενέργειες που ελέγχουν την ίδια την εφαρμογή, όπως "quit" πρέπει να δημιουργηθούν παρόμοια.

Packit 1470ea
Packit 1470ea
  

Μερικές ενέργειες, όπως "copy" και "paste" αντιμετωπίζουν το παράθυρο, όχι την εφαρμογή. Οι ενέργειες παραθύρου πρέπει να δημιουργηθούν ως μέρος της κλάσης παραθύρου.

Packit 1470ea
Packit 1470ea
  

Τα πλήρη αρχεία παραδείγματος περιέχουν αμφότερες τις ενέργειες εφαρμογής και παραθύρου. Οι ενέργειες παραθύρου είναι αυτές που συνήθως συμπεριλαμβάνονται στο <link xref="gmenu.vala">μενού εφαρμογής</link>. Δεν είναι καλή πρακτική να συμπεριλαμβάνετε ενέργειες παραθύρου στο μενού της εφαρμογής. Για σκοπούς επίδειξης, τα πλήρη αρχεία του παραδείγματος που ακολουθεί περιέχουν XML στο αρχείο UI που δημιουργεί το μενού εφαρμογής που περιλαμβάνει τα στοιχεία "New" και "Open" και αυτά συνδέονται με τις ίδιες ενέργειες όπως τα στοιχεία της γραμμής μενού του ίδιου ονόματος.

Packit 1470ea
Packit 1470ea
Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
  <section id="xml-code"><title>Πλήρες αρχείο UI XML για αυτό το παράδειγμα</title>
Packit 1470ea
<?xml version="1.0" encoding="UTF-8"?>
Packit 1470ea
<interface>
Packit 1470ea
  <menu id="menubar">
Packit 1470ea
    <submenu>
Packit 1470ea
      <attribute name="label">File</attribute>
Packit 1470ea
      <section>
Packit 1470ea
        <item>
Packit 1470ea
          <attribute name="label">New</attribute>
Packit 1470ea
          <attribute name="action">app.new</attribute>
Packit 1470ea
        </item>
Packit 1470ea
        <item>
Packit 1470ea
          <attribute name="label">Quit</attribute>
Packit 1470ea
          <attribute name="action">app.quit</attribute>
Packit 1470ea
        </item>
Packit 1470ea
      </section>
Packit 1470ea
    </submenu>
Packit 1470ea
    <submenu>
Packit 1470ea
      <attribute name="label">Edit</attribute>
Packit 1470ea
      <section>
Packit 1470ea
        <item>
Packit 1470ea
          <attribute name="label">Copy</attribute>
Packit 1470ea
          <attribute name="action">win.copy</attribute>
Packit 1470ea
        </item>
Packit 1470ea
        <item>
Packit 1470ea
          <attribute name="label">Paste</attribute>
Packit 1470ea
          <attribute name="action">win.paste</attribute>
Packit 1470ea
        </item>
Packit 1470ea
      </section>
Packit 1470ea
    </submenu>
Packit 1470ea
    <submenu>
Packit 1470ea
      <attribute name="label">Choices</attribute>
Packit 1470ea
      <submenu>
Packit 1470ea
        <attribute name="label">Shapes</attribute>
Packit 1470ea
          <section>
Packit 1470ea
            <item>
Packit 1470ea
              <attribute name="label">Line</attribute>
Packit 1470ea
              <attribute name="action">win.shape</attribute>
Packit 1470ea
              <attribute name="target">line</attribute>
Packit 1470ea
            </item>
Packit 1470ea
            <item>
Packit 1470ea
              <attribute name="label">Triangle</attribute>
Packit 1470ea
              <attribute name="action">win.shape</attribute>
Packit 1470ea
              <attribute name="target">triangle</attribute>
Packit 1470ea
            </item>
Packit 1470ea
            <item>
Packit 1470ea
              <attribute name="label">Square</attribute>
Packit 1470ea
              <attribute name="action">win.shape</attribute>
Packit 1470ea
              <attribute name="target">square</attribute>
Packit 1470ea
            </item>
Packit 1470ea
            <item>
Packit 1470ea
              <attribute name="label">Polygon</attribute>
Packit 1470ea
              <attribute name="action">win.shape</attribute>
Packit 1470ea
              <attribute name="target">polygon</attribute>
Packit 1470ea
            </item>
Packit 1470ea
            <item>
Packit 1470ea
              <attribute name="label">Circle</attribute>
Packit 1470ea
              <attribute name="action">win.shape</attribute>
Packit 1470ea
              <attribute name="target">circle</attribute>
Packit 1470ea
            </item>
Packit 1470ea
          </section>
Packit 1470ea
      </submenu>
Packit 1470ea
      <section>
Packit 1470ea
        <item>
Packit 1470ea
          <attribute name="label">On</attribute>
Packit 1470ea
          <attribute name="action">app.state</attribute>
Packit 1470ea
          <attribute name="target">on</attribute>
Packit 1470ea
        </item>
Packit 1470ea
        <item>
Packit 1470ea
          <attribute name="label">Off</attribute>
Packit 1470ea
          <attribute name="action">app.state</attribute>
Packit 1470ea
          <attribute name="target">off</attribute>
Packit 1470ea
        </item>
Packit 1470ea
      </section>
Packit 1470ea
      <section>
Packit 1470ea
        <item>
Packit 1470ea
          <attribute name="label">Awesome</attribute>
Packit 1470ea
          <attribute name="action">app.awesome</attribute>
Packit 1470ea
        </item>
Packit 1470ea
      </section>
Packit 1470ea
    </submenu>
Packit 1470ea
    <submenu>
Packit 1470ea
      <attribute name="label">Help</attribute>
Packit 1470ea
      <section>
Packit 1470ea
        <item>
Packit 1470ea
          <attribute name="label">About</attribute>
Packit 1470ea
          <attribute name="action">win.about</attribute>
Packit 1470ea
        </item>
Packit 1470ea
      </section>
Packit 1470ea
    </submenu>
Packit 1470ea
  </menu>
Packit 1470ea
  <menu id="appmenu">
Packit 1470ea
    <section>
Packit 1470ea
      <item>
Packit 1470ea
        <attribute name="label">New</attribute>
Packit 1470ea
        <attribute name="action">app.new</attribute>
Packit 1470ea
      </item>
Packit 1470ea
      <item>
Packit 1470ea
        <attribute name="label">Quit</attribute>
Packit 1470ea
        <attribute name="action">app.quit</attribute>
Packit 1470ea
      </item>
Packit 1470ea
    </section>
Packit 1470ea
  </menu>
Packit 1470ea
</interface>
Packit 1470ea
Packit 1470ea
  </section>
Packit 1470ea
  <section id="vala-code"><title>Πλήρες αρχείο Vala για αυτό το παράδειγμα</title>
Packit 1470ea
public class MyWindow : Gtk.ApplicationWindow {
Packit 1470ea
Packit 1470ea
	/* Callback functions for the window actions. */
Packit 1470ea
	void copy_cb (SimpleAction action, Variant? parameter) {
Packit 1470ea
		print ("\"Copy\" activated\n");
Packit 1470ea
	}
Packit 1470ea
Packit 1470ea
	void paste_cb (SimpleAction action, Variant? parameter) {
Packit 1470ea
		print ("\"Paste\" activated\n");
Packit 1470ea
	}
Packit 1470ea
Packit 1470ea
	void shape_cb (SimpleAction action, Variant? parameter) {
Packit 1470ea
		print ("shape is set to %s\n", parameter.get_string(null));
Packit 1470ea
		action.set_state (parameter);
Packit 1470ea
	}
Packit 1470ea
Packit 1470ea
	/* Create the window actions. */
Packit 1470ea
	const ActionEntry[] actions = {
Packit 1470ea
		/*{ "action name", cb to connect to "activate" signal, parameter type,
Packit 1470ea
		     initial state, cb to connect to "change-state" signal } */
Packit 1470ea
		{ "copy", copy_cb },
Packit 1470ea
		{ "paste", paste_cb },
Packit 1470ea
		{ "shape", shape_cb, "s", "'line'"}
Packit 1470ea
	};
Packit 1470ea
Packit 1470ea
	internal MyWindow (MyApplication app) {
Packit 1470ea
		Object (application: app, title: "MenuBar Example");
Packit 1470ea
		this.set_default_size (200, 200);
Packit 1470ea
Packit 1470ea
		/* Setup window actions. */
Packit 1470ea
		this.add_action_entries (actions, this);
Packit 1470ea
	}
Packit 1470ea
}
Packit 1470ea
Packit 1470ea
class MyApplication: Gtk.Application {
Packit 1470ea
	protected override void activate () {
Packit 1470ea
		new MyWindow (this).show ();
Packit 1470ea
	}
Packit 1470ea
Packit 1470ea
	/* Callback functions for the application actions. */
Packit 1470ea
	void new_cb (SimpleAction action, Variant? parameter) {
Packit 1470ea
		//new MyWindow (this).show ();
Packit 1470ea
		print ("You clicked \"New\"\n");
Packit 1470ea
	}
Packit 1470ea
Packit 1470ea
	void quit_cb (SimpleAction action, Variant? parameter) {
Packit 1470ea
		print ("You clicked \"Quit\"\n");
Packit 1470ea
		this.quit ();
Packit 1470ea
	}
Packit 1470ea
Packit 1470ea
	void awesome_cb (SimpleAction action, Variant? parameter) {
Packit 1470ea
		var active = action.get_state ().get_boolean ();
Packit 1470ea
		action.set_state (new Variant.boolean (!active));
Packit 1470ea
		if (active)
Packit 1470ea
			print ("You unchecked \"Awesome\"\n");
Packit 1470ea
		else
Packit 1470ea
			print ("You checked \"Awesome\"\n");
Packit 1470ea
	}
Packit 1470ea
Packit 1470ea
	void state_cb (SimpleAction action, Variant? parameter) {
Packit 1470ea
		print ("state is set to %s\n", parameter.get_string(null));
Packit 1470ea
		action.set_state (parameter);
Packit 1470ea
	}
Packit 1470ea
Packit 1470ea
	/* Create the application actions. */
Packit 1470ea
	const ActionEntry[] actions = {
Packit 1470ea
		{ "new", new_cb },
Packit 1470ea
		{ "quit", quit_cb },
Packit 1470ea
		{ "awesome", awesome_cb, null, "false" },
Packit 1470ea
		{ "state", state_cb, "s", "'off'" }
Packit 1470ea
	};
Packit 1470ea
Packit 1470ea
	protected override void startup () {
Packit 1470ea
		base.startup ();
Packit 1470ea
Packit 1470ea
		/* Setup application actions. */
Packit 1470ea
		this.add_action_entries (actions, this);
Packit 1470ea
Packit 1470ea
		/* Setup menubar and app_menu. */
Packit 1470ea
		/* Get the UI file. */
Packit 1470ea
		var builder = new Gtk.Builder ();
Packit 1470ea
		try {
Packit 1470ea
			builder.add_from_file ("menubar.ui");
Packit 1470ea
		} catch (Error e) {
Packit 1470ea
			error ("Unable to load file: %s", e.message);
Packit 1470ea
		}
Packit 1470ea
Packit 1470ea
		/* Get the menubar from the builder. */
Packit 1470ea
		this.menubar = builder.get_object ("menubar") as MenuModel;
Packit 1470ea
Packit 1470ea
		/* Get the app_menu from the builder. */
Packit 1470ea
		this.app_menu = builder.get_object ("appmenu") as MenuModel;
Packit 1470ea
	}
Packit 1470ea
}
Packit 1470ea
Packit 1470ea
/* main creates and runs the application. */
Packit 1470ea
public int main (string[] args) {
Packit 1470ea
	return new MyApplication ().run (args);
Packit 1470ea
}
Packit 1470ea
Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="mnemonics"><title>Μνημονικά</title>
Packit 1470ea
    

Οι ετικέτες μπορεί να περιέχουν μνημονικούς κανόνες. Οι μνημονικοί είναι υπογραμμισμένοι χαρακτήρες στην ετικέτα, χρησιμοποιούμενοι για περιήγηση πληκτρολογίου. Οι μνημονικοί δημιουργούνται τοποθετώντας μια υπογράμμιση πριν τον μνημονικό χαρακτήρα. Για παράδειγμα "_File" αντί για απλά "File" στο γνώρισμα ετικέτας menubar.ui.

Packit 1470ea
   

Οι μνημονικοί είναι ορατοί όταν πατάτε το πλήκτρο <key>Alt</key>. Πατώντας <keyseq><key>Alt</key><key>F</key></keyseq> θα ανοίξει το μενού <gui>αρχείο</gui>.

Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="accelerators"><title>Επιταχυντές</title>
Packit 1470ea
    

Οι επιταχυντές μπορούν να προστεθούν ρητά στους ορισμούς UI. Για παράδειγμα, είναι κοινό να μπορείτε να κλείσετε μια εφαρμογή πατώντας <keyseq><key>Ctrl</key><key>Q</key></keyseq> ή να αποθηκεύσετε ένα αρχείο πατώντας <keyseq><key>Ctrl</key><key>S</key></keyseq>. Για την προσθήκη ενός επιταχυντή στον ορισμό της UI, χρειάζεστε απλά να προσθέσετε ένα γνώρισμα "accel" στο στοιχείο.

Packit 1470ea

Το <attribute name="accel">&lt;Primary&gt;q</attribute> θα δημιουργήσει την αλληλουχία <keyseq><key>Ctrl</key><key>Q</key></keyseq> όταν προστίθεται στο στοιχείο ετικέτας 'Εξοδος. Εδώ, το "Primary" αναφέρεται στο πλήκτρο <key>Ctrl</key> σε ένα προσωπικό υπολογιστή ή στο πλήκτρο <key>⌘</key> σε ένα Mac.

Packit 1470ea
Packit 1470ea
  
Packit 1470ea
<item>
Packit 1470ea
  <attribute name="label">_Quit</attribute>
Packit 1470ea
  <attribute name="action">app.quit</attribute>
Packit 1470ea
  <attribute name="accel">&lt;Primary&gt;q</attribute>
Packit 1470ea
</item>
Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="translatable"><title>Μεταφράσιμες συμβολοσειρές</title>
Packit 1470ea
   

Επειδή οι εφαρμογές GNOME μεταφράζονται σε <link href="http://l10n.gnome.org/languages/">πολλές γλώσσες</link>, είναι σημαντικό ότι οι συμβολοσειρές στην εφαρμογή σας είναι μεταφράσιμες. Για να κάνετε μια ετικέτα μεταφράσιμη, απλά βάλτε translatable="yes":

Packit 1470ea
   

<attribute name="label" translatable="yes">Quit</attribute>

Packit 1470ea
  </section>
Packit 1470ea
  <section id="documentation"><title>Σχετική τεκμηρίωση API</title>
Packit 1470ea

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

Packit 1470ea
<list>
Packit 1470ea
  <item>

<link href="http://valadoc.org/gio-2.0/GLib.ActionEntry.html">Glib.ActionEntry</link>

</item>
Packit 1470ea
  <item>

<link href="http://valadoc.org/gio-2.0/Gtk.Builder.html">Gtk.Builder</link>

</item>
Packit 1470ea
</list>
Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
Packit 1470ea
<section id="exercises"><title>Ασκήσεις</title>
Packit 1470ea
  <xi:include href="exercises/menubar.vala.exercises"><xi:fallback/></xi:include>
Packit 1470ea
</section>
Packit 1470ea
</page>