Blame platform-demos/el/switch.js.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="switch.js" xml:lang="el">
Packit 1470ea
  <info>
Packit 1470ea
  <title type="text">Διακόπτης (JavaScript)</title>
Packit 1470ea
    <link type="guide" xref="beginner.js#buttons"/>
Packit 1470ea
    <revision version="0.1" date="2012-06-18" status="draft"/>
Packit 1470ea
Packit 1470ea
    <credit type="author copyright">
Packit 1470ea
      <name>Taryn Fox</name>
Packit 1470ea
      <email its:translate="no">jewelfox@fursona.net</email>
Packit 1470ea
      <years>2012</years>
Packit 1470ea
    </credit>
Packit 1470ea
Packit 1470ea
    <desc>Ένας κινητός διακόπτης που μπορεί να αντιστρέφεται σε ναι και όχι</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>Διακόπτης</title>
Packit 1470ea
  <media type="image" mime="image/png" src="media/switchanimals.png"/>
Packit 1470ea
  

Ένας διακόπτης έχει δύο θέσεις ενεργή/ανενεργή. Αυτό το παράδειγμα εμφανίζει πώς μπορείτε να χρησιμοποιήσετε πολλαπλούς διακόπτες μαζί για να ελέγξετε ποια <link xref="image.js">εικόνα</link> προβάλλεται στο παράθυρο. Οι εικόνες που χρησιμοποιούνται σε αυτό το παράδειγμα <link href="https://live.gnome.org/TarynFox?action=AttachFile&do=get&target=Animal+Photos.zip">μπορούν να φορτωθούν εδώ</link>.

Packit 1470ea
  <note>

Το παράθυρο θα περιέχει ένα εικονίδιο "σπασμένης εικόνας" αντί για μια εικόνα εάν τα αρχεία εικόνας με όνομα <file>redfox.png</file>, <file>muteswan.png</file>, <file>fruitbat.png</file> και <file>gentoopenguin.png</file> δεν είναι στον ίδιο κατάλογο. Μπορείτε να αλλάξετε τον κώδικα και τις εικόνες ολόγυρα όπως θέλετε, αλλά οι φωτογραφίες με άδεια Creative Commons που χρησιμοποιούνται σε αυτό το παράδειγμα πάρθηκαν από τις ακόλουθες πηγές και περικόπηκαν σε 640x425:

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

<link href="http://en.wikipedia.org/wiki/File:Fuzzy_Freddy.jpg">φωτογραφία κόκκινης αλεπούς</link> από τον Rob Lee, με άδεια <link href="http://creativecommons.org/licenses/by/2.0/deed.en">CC-By</link>

</item>
Packit 1470ea
        <item>

<link href="http://en.wikipedia.org/wiki/File:Pygoscelis_papua_-Nagasaki_Penguin_Aquarium_-swimming_underwater-8a.jpg">φωτογραφία πιγκουίνου Gentoo</link> από τον Ken Funakoshi, με άδεια <link href="http://creativecommons.org/licenses/by-sa/2.0/deed.en">CC-By-SA</link>

</item>
Packit 1470ea
        <item>

<link href="http://www.flickr.com/photos/shekgraham/127431519/in/photostream/">φωτογραφία νυχτερίδας φρούτων</link> από τον Shek Graham, licensed <link href="http://creativecommons.org/licenses/by/2.0/deed.en">CC-By</link>

</item>
Packit 1470ea
        <item>

<link href="http://commons.wikimedia.org/wiki/File:Mute_Swan-Mindaugas_Urbonas.jpg">φωτογραφία σιωπηλού κύκνου</link> από Mindaugas Urbonas, με άδεια <link href="http://creativecommons.org/licenses/by-sa/2.5/deed.en">CC-By-SA</link>

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

Μνείες φωτογραφίας και πληροφορίες αδειοδότησης εμφανίζονται στο <link xref="aboutdialog.js">AboutDialog</link>. Να θυμάστε πάντα να μνημονεύετε τον αρχικό καλλιτέχνη όταν χρησιμοποιείτε<link href="http://creativecommons.org">εργασίες με άδεια Creative Commons!</link> της εφαρμογής

</note>
Packit 1470ea
    <links type="section"/>
Packit 1470ea
Packit 1470ea
  <section id="imports">
Packit 1470ea
    <title>Βιβλιοθήκες για εισαγωγή</title>
Packit 1470ea
    
Packit 1470ea
#!/usr/bin/gjs
Packit 1470ea
Packit 1470ea
const Gio = imports.gi.Gio;
Packit 1470ea
const Gtk = imports.gi.Gtk;
Packit 1470ea
const Lang = imports.lang;
Packit 1470ea
Packit 1470ea
    

Αυτές είναι οι βιβλιοθήκες που χρειαζόμαστε να εισάγουμε αυτήν την εφαρμογή για να εκτελεστεί. Να θυμόσαστε ότι η γραμμή που λέει στο GNOME ότι χρησιμοποιούμε Gjs χρειάζεται πάντοτε να πάει στην αρχή.

Packit 1470ea
    </section>
Packit 1470ea
Packit 1470ea
  <section id="applicationwindow">
Packit 1470ea
    <title>Δημιουργία του παραθύρου εφαρμογής</title>
Packit 1470ea
    
Packit 1470ea
const SwitchExample = new Lang.Class({
Packit 1470ea
    Name: 'Switch Example',
Packit 1470ea
Packit 1470ea
    // Δημιουργία της εφαρμογής αυτής καθεαυτής
Packit 1470ea
    _init: function() {
Packit 1470ea
        this.application = new Gtk.Application({
Packit 1470ea
            application_id: 'org.example.jsswitch',
Packit 1470ea
            flags: Gio.ApplicationFlags.FLAGS_NONE
Packit 1470ea
        });
Packit 1470ea
Packit 1470ea
    // Σύνδεση των σημάτων 'activate' και 'startup' με τις συναρτήσεις επανάκλησης
Packit 1470ea
    this.application.connect('activate', Lang.bind(this, this._onActivate));
Packit 1470ea
    this.application.connect('startup', Lang.bind(this, this._onStartup));
Packit 1470ea
    },
Packit 1470ea
Packit 1470ea
    // Η συνάρτηση επανάκλησης για το σήμα 'activate' παρουσιάζει ένα παράθυρο όταν είναι ενεργή
Packit 1470ea
    _onActivate: function() {
Packit 1470ea
        this._window.present();
Packit 1470ea
    },
Packit 1470ea
Packit 1470ea
    // Η συνάρτηση επανάκλησης για το σήμα 'startup'δημιουργεί το μενού και δομεί τη διεπαφή χρήστη
Packit 1470ea
    _onStartup: function() {
Packit 1470ea
        this._initMenus();
Packit 1470ea
        this._buildUI ();
Packit 1470ea
    },
Packit 1470ea
Packit 1470ea
    

Όλος ο κώδικας για αυτό το παράδειγμα πηγαίνει στην κλάση SwitchExample. Ο παραπάνω κώδικας δημιουργεί μια <link href="http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Application.html">Gtk.Application</link> για να μπουν μέσα τα γραφικά στοιχεία μας και τα παράθυρα.

Packit 1470ea
    <note>

Πριν καλέσουμε _buildUI για δημιουργία του παραθύρου και των γραφικών στοιχείων μέσα του, χρειαζόμαστε να καλέσουμε _initMenus, που λέει στο GNOME να δημιουργήσει το μενού. Μπορούμε να βάλουμε τον ενεργό κώδικα για _initMenus μετά τον κώδικα για _buildUI, αφού δεν πειράζει η σειρά που τα βάλαμε όσο το _initMenus καλείται πρώτο στο _onStartup.

</note>
Packit 1470ea
    
Packit 1470ea
    // Δόμηση της διεπαφής χρήστη της εφαρμογής
Packit 1470ea
    _buildUI: function() {
Packit 1470ea
Packit 1470ea
        // Δημιουργία του παραθύρου της εφαρμογής
Packit 1470ea
        this._window = new Gtk.ApplicationWindow({
Packit 1470ea
            application: this.application,
Packit 1470ea
            window_position: Gtk.WindowPosition.CENTER,
Packit 1470ea
            border_width: 20,
Packit 1470ea
            title: "Animal Creator"});
Packit 1470ea
Packit 1470ea
    

Η συνάρτηση _buildUI είναι εκεί που βάζουμε όλον τον κώδικα για να δημιουργήσουμε τη διεπαφή χρήστη της εφαρμογής. Το πρώτο βήμα δημιουργεί ένα νέο <link xref="GtkApplicationWindow.js">Gtk.ApplicationWindow</link> για να βάλουμε μέσα τα γραφικά στοιχεία μας.

Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="button">
Packit 1470ea
    <title>Δημιουργία των διακοπτών</title>
Packit 1470ea
    
Packit 1470ea
        // Δημιουργία του γραφικού της εικόνας και ορισμός της προεπιλεγμένης της εικόνας
Packit 1470ea
        this._image = new Gtk.Image ({file: "redfox.png"});
Packit 1470ea
Packit 1470ea
Packit 1470ea
    

Δημιουργούμε πρώτα την <link xref="image.js">εικόνα</link> που οι διακόπτες θα ελέγχουν. Να θυμάστε ότι ένα αρχείο με όνομα <file>redfox.png</file> χρειάζεται να είναι στον ίδιο κατάλογο όπως αυτή η εφαρμογή.

Packit 1470ea
Packit 1470ea
    
Packit 1470ea
        // Δημιουργία μιας ετικέτας για τον πρώτο διακόπτη
Packit 1470ea
        this._flyLabel = new Gtk.Label ({
Packit 1470ea
            label: "Make it fly",
Packit 1470ea
            margin_right: 30});
Packit 1470ea
Packit 1470ea
        // Δημιουργία του πρώτου διακόπτη και ορισμός της προεπιλεγμένης του θέσης
Packit 1470ea
        this._flySwitch = new Gtk.Switch ({active: false});
Packit 1470ea
        this._flySwitch.connect ('notify::active', Lang.bind (this, this._switchFlip));
Packit 1470ea
Packit 1470ea
        // Δημιουργία μιας ετικέτας για τον δεύτερο διακόπτη
Packit 1470ea
        this._birdLabel = new Gtk.Label ({
Packit 1470ea
            label: "Make it a bird",
Packit 1470ea
            margin_right: 30});
Packit 1470ea
Packit 1470ea
        // Δημιουργία του δεύτερου διακόπτη
Packit 1470ea
        this._birdSwitch = new Gtk.Switch ({active: false});
Packit 1470ea
        this._birdSwitch.connect ('notify::active', Lang.bind (this, this._switchFlip));
Packit 1470ea
Packit 1470ea
Packit 1470ea
    

Χρησιμοποιούμε μια <link xref="label.js">ετικέτα</link> για να σημειώσουμε κάθε διακόπτη και να τους δώσουμε λίγο περιθώριο στα δεξιά έτσι ώστε να μην στριμώχνονται ακριβώς δίπλα στους διακόπτες. Μετά δημιουργούμε τους διακόπτες και τους ορίζουμε ανενεργούς από προεπιλογή.

Packit 1470ea
    

Το σήμα που ένας διακόπτης στέλνει όταν αντιστρέφεται ενεργά/ανενεργά λέγεται notify::active. Μετά τη δημιουργία κάθε διακόπτη, συνδέουμε το σήμα του notify::active σε μια συνάρτηση που λέγεται _switchFlip. Εάν έχετε πολλούς διακόπτες που ο καθένας τους κάνει κάτι διαφορετικό, ίσως θελήσετε να τους συνδέσετε σε διαφορετικές συναρτήσεις, αλλά εδώ και οι δυο χρησιμοποιούνται για το ίδιο πράγμα: τον έλεγχο της εμφανιζόμενης εικόνας από το _image.

Packit 1470ea
Packit 1470ea
    
Packit 1470ea
        // Δημιουργία πλέγματος για τις ετικέτες και τους διακόπτες κάτω από την εικόνα
Packit 1470ea
        this._UIGrid = new Gtk.Grid ({
Packit 1470ea
            halign: Gtk.Align.CENTER,
Packit 1470ea
            valign: Gtk.Align.CENTER,
Packit 1470ea
            margin_top: 20});
Packit 1470ea
Packit 1470ea
        // Προσάρτηση των ετικετών και διακοπτών σε αυτό το πλέγμα
Packit 1470ea
        this._UIGrid.attach (this._flyLabel, 0, 0, 1, 1);
Packit 1470ea
        this._UIGrid.attach (this._flySwitch, 1, 0, 1, 1);
Packit 1470ea
        this._UIGrid.attach (this._birdLabel, 0, 1, 1, 1);
Packit 1470ea
        this._UIGrid.attach (this._birdSwitch, 1, 1, 1, 1);
Packit 1470ea
Packit 1470ea
        // Δημιουργία ενός κύριου πλέγματος για να τοποθετηθούν μέσα η γραφική διεπαφή και η εικόνα
Packit 1470ea
        this._mainGrid = new Gtk.Grid ({
Packit 1470ea
            halign: Gtk.Align.CENTER,
Packit 1470ea
            valign: Gtk.Align.CENTER });
Packit 1470ea
Packit 1470ea
        // Προσάρτηση του πλέγματος εικόνας και διεπαφής χρήστη στο κύριο πλέγμα
Packit 1470ea
        this._mainGrid.attach (this._image, 0, 0, 1, 1);
Packit 1470ea
        this._mainGrid.attach (this._UIGrid, 0, 1, 1, 1);
Packit 1470ea
Packit 1470ea
    

Δημιουργούμε ένα <link xref="grid.js">πλέγμα</link> για τις ετικέτες και τους διακόπτες πρώτα, έτσι ώστε να μπορούμε να τις οργανώσουμε σε μια διάταξη 2x2 με ένα περιθώριο μεταξύ του και της εικόνας. Έπειτα βάζουμε αυτό το πλέγμα σε ένα μεγαλύτερο πλέγμα 2x1 που έχει την εικόνα στην κορυφή και το πλέγμα με τις ετικέτες και τους διακόπτες στο τέλος.

Packit 1470ea
    
Packit 1470ea
        // Προσθήκη του κύριου πλέγματος στο παράθυρο
Packit 1470ea
        this._window.add (this._mainGrid);
Packit 1470ea
Packit 1470ea
        // Εμφάνιση του παραθύρου και όλων των θυγατρικών γραφικών στοιχείων
Packit 1470ea
        this._window.show_all();
Packit 1470ea
    },
Packit 1470ea
Packit 1470ea
    

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

Packit 1470ea
    </section>
Packit 1470ea
Packit 1470ea
    <section id="switch-handler">
Packit 1470ea
    <title>Η συνάρτηση που χειρίζεται τους διακόπτες που αντιστράφηκαν</title>
Packit 1470ea
Packit 1470ea
    
Packit 1470ea
    _switchFlip: function() {
Packit 1470ea
Packit 1470ea
        // Αλλαγή της εικόνας ανάλογα με το ποιοι διακόπτες αντιστρέφονται
Packit 1470ea
        if (this._flySwitch.get_active()) {
Packit 1470ea
Packit 1470ea
            if (this._birdSwitch.get_active()) this._image.set_from_file ("muteswan.png");
Packit 1470ea
Packit 1470ea
            else this._image.set_from_file ("fruitbat.png");
Packit 1470ea
        }
Packit 1470ea
Packit 1470ea
        else {
Packit 1470ea
Packit 1470ea
            if (this._birdSwitch.get_active()) this._image.set_from_file ("gentoopenguin.png");
Packit 1470ea
Packit 1470ea
            else this._image.set_from_file ("redfox.png");
Packit 1470ea
Packit 1470ea
        }
Packit 1470ea
Packit 1470ea
    },
Packit 1470ea
Packit 1470ea
    

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

Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="about">
Packit 1470ea
    <title>Δημιουργία του AboutDialog</title>
Packit 1470ea
    
Packit 1470ea
    _initMenus: function() {
Packit 1470ea
Packit 1470ea
        // Δόμηση του μενού της εφαρμογής, έτσι ώστε να μπορούμε να έχουμε ένα πλήκτρο "About"
Packit 1470ea
        let menu = new Gio.Menu();
Packit 1470ea
        menu.append("About", 'app.about');
Packit 1470ea
        menu.append("Quit",'app.quit');
Packit 1470ea
        this.application.set_app_menu(menu);
Packit 1470ea
Packit 1470ea
        // ΣΑύνδεση του πλήκτρου "About" με τη συνάρτηση _showAbout() 
Packit 1470ea
        let aboutAction = new Gio.SimpleAction ({ name: 'about' });
Packit 1470ea
        aboutAction.connect('activate', Lang.bind(this,
Packit 1470ea
            function() {
Packit 1470ea
                this._showAbout();
Packit 1470ea
            }));
Packit 1470ea
        this.application.add_action(aboutAction);
Packit 1470ea
Packit 1470ea
        // Σύνδεση του πλήκτρου "Quit"με τη συνάρτηση που κλείνει το παράθυρο
Packit 1470ea
        let quitAction = new Gio.SimpleAction ({ name: 'quit' });
Packit 1470ea
        quitAction.connect('activate', Lang.bind(this,
Packit 1470ea
            function() {
Packit 1470ea
                this._window.destroy();
Packit 1470ea
            }));
Packit 1470ea
        this.application.add_action(quitAction);
Packit 1470ea
    },
Packit 1470ea
Packit 1470ea
    

Το πρώτο βήμα είναι η δόμηση του <link xref="gmenu.js">GMenu</link> στο οποίο το κουμπί "About" μπαίνει. Αυτό είναι το μενού που εμφανίζεται όταν πατάς το όνομα της εφαρμογής στην πάνω αριστερή γωνία της οθόνης, δίπλα στο μενού ενέργειες. Το μενού μας έχει μόνο δύο επιλογές: περί και κλείσιμο.

Packit 1470ea
Packit 1470ea
    
Packit 1470ea
    _showAbout: function () {
Packit 1470ea
Packit 1470ea
        // Πίνακες συμβολοσειρών των ονομάτων των ατόμων που εμπλέκονται στο έργο
Packit 1470ea
        var artists = ['Rob Lee http://en.wikipedia.org/wiki/File:Fuzzy_Freddy.jpg', 'Ken Funakoshi http://en.wikipedia.org/wiki/File:Pygoscelis_papua_-Nagasaki_Penguin_Aquarium_-swimming_underwater-8a.jpg', 'Shek Graham http://www.flickr.com/photos/shekgraham/127431519/in/photostream/', 'Mindaugas Urbonas http://commons.wikimedia.org/wiki/File:Mute_Swan-Mindaugas_Urbonas.jpg'];
Packit 1470ea
        var authors = ["GNOME Documentation Team"];
Packit 1470ea
        var documenters = ["GNOME Documentation Team"];
Packit 1470ea
Packit 1470ea
        // Δημιουργία του διαλόγου Περί
Packit 1470ea
        let aboutDialog = new Gtk.AboutDialog({
Packit 1470ea
            title: "AboutDialog Example",
Packit 1470ea
            program_name: "Animal Creator",
Packit 1470ea
            copyright: "Copyright \xa9 2012 GNOME Documentation Team\n\nRed fox photo licensed CC-By by Rob Lee\nGentoo penguin photo licensed CC-By-SA by Ken Funakoshi\nFruit bat photo licensed CC-By by Shek Graham\nMute swan photo licensed CC-By-SA by Mindaugas Urbonas\nLinks to the originals are available under Credits.\n\nHave you hugged a penguin today?",
Packit 1470ea
            artists: artists,
Packit 1470ea
            authors: authors,
Packit 1470ea
            documenters: documenters,
Packit 1470ea
            website: "http://developer.gnome.org",
Packit 1470ea
            website_label: "GNOME Developer Website" });
Packit 1470ea
Packit 1470ea
        // Προσάρτηση του διαλόγου Περί στο παράθυρο
Packit 1470ea
        aboutDialog.modal = true;
Packit 1470ea
        aboutDialog.transient_for = this._window;
Packit 1470ea
Packit 1470ea
        // Εμφάνιση του διαλόγου Περί
Packit 1470ea
        aboutDialog.show();
Packit 1470ea
Packit 1470ea
        // Σύνδεση του πλήκτρου Κλείσιμο με το σήμα καταστροφής του διαλόγου
Packit 1470ea
        aboutDialog.connect('response', function() {
Packit 1470ea
            aboutDialog.destroy();
Packit 1470ea
        });
Packit 1470ea
    }
Packit 1470ea
Packit 1470ea
});
Packit 1470ea
Packit 1470ea
    

Ένας <link xref="aboutdialog.js">AboutDialog</link> έχει πολλά διαφορετικά πράγματα που μπορείτε να ορίσετε, για να μνημονεύσετε οποιονδήποτε δούλεψε στην εφαρμογή και να αφήσετε μια σημείωση σε οποιονδήποτε το διαβάζει. Σε αυτήν την περίπτωση, η ενότητα πνευματικών δικαιωμάτων περιέχει τη σημείωση μας και μνείες των αρχικών φωτογράφων, ενώ η ενότητα των καλλιτεχνών σας εμφανίζει μια λίστα των φωτογράφων με συνδέσμους στις αρχικές φωτογραφίες όταν πατάτε το κουμπί με τις μνείες. Τα URLs του ιστού μετά τα ονόματα τους στον πίνακα κάνουν τα ονόματα τους επιλέξιμους συνδέσμους στην ενότητα με τις μνείες.

Packit 1470ea
Packit 1470ea
    
Packit 1470ea
// Εκτέλεση της εφαρμογής
Packit 1470ea
let app = new SwitchExample ();
Packit 1470ea
app.application.run (ARGV);
Packit 1470ea
Packit 1470ea
    

Τελικά, δημιουργούμε ένα νέο παράδειγμα της ολοκληρωμένης κλάσης SwitchExample και εκτελούμε την εφαρμογή.

Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="complete">
Packit 1470ea
    <title>Δείγμα πλήρους κώδικα</title>
Packit 1470ea
#!/usr/bin/gjs
Packit 1470ea
Packit 1470ea
imports.gi.versions.Gtk = '3.0';
Packit 1470ea
Packit 1470ea
const Gio = imports.gi.Gio;
Packit 1470ea
const Gtk = imports.gi.Gtk;
Packit 1470ea
Packit 1470ea
class SwitchExample {
Packit 1470ea
Packit 1470ea
    // Create the application itself
Packit 1470ea
    constructor() {
Packit 1470ea
        this.application = new Gtk.Application({
Packit 1470ea
            application_id: 'org.example.jsswitch'
Packit 1470ea
        });
Packit 1470ea
Packit 1470ea
        // Connect 'activate' and 'startup' signals to the callback functions
Packit 1470ea
        this.application.connect('activate', this._onActivate.bind(this));
Packit 1470ea
        this.application.connect('startup', this._onStartup.bind(this));
Packit 1470ea
    }
Packit 1470ea
Packit 1470ea
    // Callback function for 'activate' signal presents window when active
Packit 1470ea
    _onActivate() {
Packit 1470ea
        this._window.present();
Packit 1470ea
    }
Packit 1470ea
Packit 1470ea
    // Callback function for 'startup' signal creates the menu and builds the UI
Packit 1470ea
    _onStartup() {
Packit 1470ea
        this._initMenus();
Packit 1470ea
        this._buildUI();
Packit 1470ea
    }
Packit 1470ea
Packit 1470ea
    // Build the application's UI
Packit 1470ea
    _buildUI() {
Packit 1470ea
Packit 1470ea
        // Create the application window
Packit 1470ea
        this._window = new Gtk.ApplicationWindow({
Packit 1470ea
            application: this.application,
Packit 1470ea
            window_position: Gtk.WindowPosition.CENTER,
Packit 1470ea
            border_width: 20,
Packit 1470ea
            title: "Animal Creator"});
Packit 1470ea
Packit 1470ea
        // Create the image widget and set its default picture
Packit 1470ea
        this._image = new Gtk.Image ({file: "redfox.png"});
Packit 1470ea
Packit 1470ea
        // Create a label for the first switch
Packit 1470ea
        this._flyLabel = new Gtk.Label ({
Packit 1470ea
            label: "Make it fly",
Packit 1470ea
            margin_right: 30});
Packit 1470ea
Packit 1470ea
        // Create the first switch and set its default position
Packit 1470ea
        this._flySwitch = new Gtk.Switch ({active: false});
Packit 1470ea
        this._flySwitch.connect ('notify::active', this._switchFlip.bind(this));
Packit 1470ea
Packit 1470ea
        // Create a label for the second switch
Packit 1470ea
        this._birdLabel = new Gtk.Label ({
Packit 1470ea
            label: "Make it a bird",
Packit 1470ea
            margin_right: 30});
Packit 1470ea
Packit 1470ea
        // Create the second switch
Packit 1470ea
        this._birdSwitch = new Gtk.Switch ({active: false});
Packit 1470ea
        this._birdSwitch.connect ('notify::active', this._switchFlip.bind(this));
Packit 1470ea
Packit 1470ea
        // Create a grid for the labels and switches beneath the picture
Packit 1470ea
        this._UIGrid = new Gtk.Grid ({
Packit 1470ea
            halign: Gtk.Align.CENTER,
Packit 1470ea
            valign: Gtk.Align.CENTER,
Packit 1470ea
            margin_top: 20});
Packit 1470ea
Packit 1470ea
        // Attach the labels and switches to that grid
Packit 1470ea
        this._UIGrid.attach (this._flyLabel, 0, 0, 1, 1);
Packit 1470ea
        this._UIGrid.attach (this._flySwitch, 1, 0, 1, 1);
Packit 1470ea
        this._UIGrid.attach (this._birdLabel, 0, 1, 1, 1);
Packit 1470ea
        this._UIGrid.attach (this._birdSwitch, 1, 1, 1, 1);
Packit 1470ea
Packit 1470ea
        // Create a master grid to put both the UI and the picture into
Packit 1470ea
        this._mainGrid = new Gtk.Grid ({
Packit 1470ea
            halign: Gtk.Align.CENTER,
Packit 1470ea
            valign: Gtk.Align.CENTER });
Packit 1470ea
Packit 1470ea
        // Attach the picture and the UI grid to the master grid
Packit 1470ea
        this._mainGrid.attach (this._image, 0, 0, 1, 1);
Packit 1470ea
        this._mainGrid.attach (this._UIGrid, 0, 1, 1, 1);
Packit 1470ea
Packit 1470ea
        // Add the master grid to the window
Packit 1470ea
        this._window.add (this._mainGrid);
Packit 1470ea
Packit 1470ea
        // Show the window and all child widgets
Packit 1470ea
        this._window.show_all();
Packit 1470ea
    }
Packit 1470ea
Packit 1470ea
    _switchFlip() {
Packit 1470ea
Packit 1470ea
        // Change the picture depending on which switches are flipped
Packit 1470ea
        if (this._flySwitch.get_active()) {
Packit 1470ea
Packit 1470ea
            if (this._birdSwitch.get_active())
Packit 1470ea
                this._image.set_from_file ("muteswan.png");
Packit 1470ea
            else
Packit 1470ea
                this._image.set_from_file ("fruitbat.png");
Packit 1470ea
        } else {
Packit 1470ea
Packit 1470ea
            if (this._birdSwitch.get_active())
Packit 1470ea
                this._image.set_from_file ("gentoopenguin.png");
Packit 1470ea
            else
Packit 1470ea
                this._image.set_from_file ("redfox.png");
Packit 1470ea
        }
Packit 1470ea
    }
Packit 1470ea
Packit 1470ea
    _initMenus() {
Packit 1470ea
Packit 1470ea
        // Build the application's menu so we can have an "About" button
Packit 1470ea
        let menu = new Gio.Menu();
Packit 1470ea
        menu.append("About", 'app.about');
Packit 1470ea
        menu.append("Quit",'app.quit');
Packit 1470ea
        this.application.set_app_menu(menu);
Packit 1470ea
Packit 1470ea
        // Bind the "About" button to the _showAbout() function
Packit 1470ea
        let aboutAction = new Gio.SimpleAction ({ name: 'about' });
Packit 1470ea
        aboutAction.connect('activate', () => { this._showAbout(); });
Packit 1470ea
        this.application.add_action(aboutAction);
Packit 1470ea
Packit 1470ea
        // Bind the "Quit" button to the function that closes the window
Packit 1470ea
        let quitAction = new Gio.SimpleAction ({ name: 'quit' });
Packit 1470ea
        quitAction.connect('activate', () => { this._window.destroy(); });
Packit 1470ea
        this.application.add_action(quitAction);
Packit 1470ea
    }
Packit 1470ea
Packit 1470ea
    _showAbout() {
Packit 1470ea
Packit 1470ea
        // String arrays of the names of the people involved in the project
Packit 1470ea
        var artists = ['Rob Lee http://en.wikipedia.org/wiki/File:Fuzzy_Freddy.png', 'Ken Funakoshi http://en.wikipedia.org/wiki/File:Pygoscelis_papua_-Nagasaki_Penguin_Aquarium_-swimming_underwater-8a.png', 'Shek Graham http://www.flickr.com/photos/shekgraham/127431519/in/photostream/', 'Mindaugas Urbonas http://commons.wikimedia.org/wiki/File:Mute_Swan-Mindaugas_Urbonas.png'];
Packit 1470ea
        var authors = ["GNOME Documentation Team"];
Packit 1470ea
        var documenters = ["GNOME Documentation Team"];
Packit 1470ea
Packit 1470ea
        // Create the About dialog
Packit 1470ea
        let aboutDialog = new Gtk.AboutDialog({
Packit 1470ea
            title: "AboutDialog Example",
Packit 1470ea
            program_name: "Animal Creator",
Packit 1470ea
            copyright: "Copyright \xa9 2012 GNOME Documentation Team\n\nRed fox photo licensed CC-By by Rob Lee\nGentoo penguin photo licensed CC-By-SA by Ken Funakoshi\nFruit bat photo licensed CC-By by Shek Graham\nMute swan photo licensed CC-By-SA by Mindaugas Urbonas\nLinks to the originals are available under Credits.\n\nHave you hugged a penguin today?",
Packit 1470ea
            artists: artists,
Packit 1470ea
            authors: authors,
Packit 1470ea
            documenters: documenters,
Packit 1470ea
            website: "http://developer.gnome.org",
Packit 1470ea
            website_label: "GNOME Developer Website" });
Packit 1470ea
Packit 1470ea
        // Attach the About dialog to the window
Packit 1470ea
        aboutDialog.modal = true;
Packit 1470ea
        aboutDialog.transient_for = this._window;
Packit 1470ea
Packit 1470ea
        // Show the About dialog
Packit 1470ea
        aboutDialog.show();
Packit 1470ea
Packit 1470ea
        // Connect the Close button to the destroy signal for the dialog
Packit 1470ea
        aboutDialog.connect('response', function() {
Packit 1470ea
            aboutDialog.destroy();
Packit 1470ea
        });
Packit 1470ea
    }
Packit 1470ea
};
Packit 1470ea
Packit 1470ea
// Run the application
Packit 1470ea
let app = new SwitchExample ();
Packit 1470ea
app.application.run (ARGV);
Packit 1470ea
Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="in-depth">
Packit 1470ea
    <title>Τεκμηρίωση σε βάθος</title>
Packit 1470ea
<list>
Packit 1470ea
  <item>

<link href="http://developer.gnome.org/gio/unstable/GMenu.html">GMenu</link>

</item>
Packit 1470ea
  <item>

<link href="http://developer.gnome.org/gio/stable/GSimpleAction.html">GSimpleAction</link>

</item>
Packit 1470ea
  <item>

<link href="http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Application.html">Gtk.Application</link>

</item>
Packit 1470ea
  <item>

<link href="http://developer.gnome.org/gtk3/stable/GtkApplicationWindow.html">Gtk.ApplicationWindow</link>

</item>
Packit 1470ea
  <item>

<link href="http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Grid.html">Gtk.Grid</link>

</item>
Packit 1470ea
  <item>

<link href="http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Image.html">Gtk.Image</link>

</item>
Packit 1470ea
  <item>

<link href="http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Label.html">Gtk.Label</link>

</item>
Packit 1470ea
  <item>

<link href="http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Switch.html">Gtk.Switch</link>

</item>
Packit 1470ea
</list>
Packit 1470ea
  </section>
Packit 1470ea
</page>