<?xml version="1.0" encoding="utf-8"?>
<page xmlns="http://projectmallard.org/1.0/" xmlns:xi="http://www.w3.org/2001/XInclude" type="guide" style="task" id="aboutdialog.js" xml:lang="el">
  <info>
  <title type="text">AboutDialog (JavaScript)</title>
    <link type="guide" xref="beginner.js#windows"/>
    <revision version="0.1" date="2012-05-30" status="draft"/>

    <credit type="author copyright">
      <name>Taryn Fox</name>
      <email>jewelfox@fursona.net</email>
      <years>2012</years>
    </credit>

    <desc>Εμφάνιση πληροφοριών για μια εφαρμογή</desc>
  
    <mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
      <mal:name>Δημήτρης Σπίγγος</mal:name>
      <mal:email>dmtrs32@gmail.com</mal:email>
      <mal:years>2012, 2013</mal:years>
    </mal:credit>
  </info>

  <title>AboutDialog</title>
  <media type="image" mime="image/png" src="media/aboutdialog_GMenu.png"/>
  <p>Ένα παράθυρο αναγκαστικού διαλόγου που εμφανίζει πληροφορίες για μια εφαρμογή και τους δημιουργούς της. Αυτό εμφανίζεται με κλικ στο "Περί" στο μενού της εφαρμογής, που είναι κανονικά μια καλή θέση για να το βάλετε.</p>

<code mime="application/javascript" style="numbered">#!/usr/bin/gjs

const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib;
const Gtk = imports.gi.Gtk;
const Lang = imports.lang;

const AboutDialogExample = new Lang.Class({
    Name: 'AboutDialog Example',

    // Δημιουργία αυτής καθεαυτής της εφαρμογής
        _init: function() {
            this.application = new Gtk.Application({
                application_id: 'org.example.jsaboutdialog',
                flags: Gio.ApplicationFlags.FLAGS_NONE
            });

    // Σύνδεση των σημάτων 'activate' και 'startup' στις συναρτήσεις επανάκλησης
    this.application.connect('activate', Lang.bind(this, this._onActivate));
    this.application.connect('startup', Lang.bind(this, this._onStartup));
    },

    // Η συνάρτηση επανάκλησης για το σήμα 'activate' παρουσιάζει παράθυρα όταν είναι ενεργή
    _onActivate: function() {
        this._window.present();
    },

    // Η συνάρτηση επανάκλησης για το σήμα 'startup' δημιουργεί το μενού και κατασκευάζει τη διεπαφή χρήστη
    _onStartup: function() {
        this._initMenus();
        this._buildUI();
    },

    // Δόμηση της διεπαφής χρήστη της εφαρμογής
    _buildUI: function(){
        // Δημιουργία του παραθύρου της εφαρμογής
        this._window = new Gtk.ApplicationWindow({ application: this.application,
                                                   window_position: Gtk.WindowPosition.CENTER,
                                                   title: "AboutDialog Example",
                                                   default_height: 250,
                                                   default_width: 350 });

        // Εμφάνιση του παραθύρου κι όλων των θυγατρικών γραφικών συστατικών
        this._window.show_all();
    },

    // Δημιουργία του μενού της εφαρμογής
    _initMenus: function() {
        let menu = new Gio.Menu();
        menu.append("About", 'app.about');
        menu.append("Quit",'app.quit');
        this.application.set_app_menu(menu);

        // Δημιουργία της επιλογής μενού "About" για να καλέσει την _showAbout() function
        let aboutAction = new Gio.SimpleAction({ name: 'about' });
        aboutAction.connect('activate', Lang.bind(this,
            function() {
                this._showAbout();
            }));
        this.application.add_action(aboutAction);

        // Δημιουργία της επιλογής μενού "Quit" που κλείνει το παράθυρο
        let quitAction = new Gio.SimpleAction ({ name: 'quit' });
        quitAction.connect('activate', Lang.bind(this,
            function() {
                this._window.destroy();
            }));
        this.application.add_action(quitAction);
    },

    _showAbout: function() {

        // Πίνακες συμβολοσειρών των ονομάτων των ατόμων που εμπλέκονται στο έργο
        var authors = ["GNOME Documentation Team"];
        var documenters = ["GNOME Documentation Team"];

        // Δημιουργία του διαλόγου περί
        let aboutDialog = new Gtk.AboutDialog({ title: "AboutDialog Example",
                                                program_name: "GtkApplication Example",
                                                copyright: "Copyright \xa9 2012 GNOME Documentation Team",
                                                authors: authors,
                                                documenters: documenters,
                                                website: "http://developer.gnome.org",
                                                website_label: "GNOME Developer Website" });

        // Προσάρτηση του διαλόγου περί στο παράθυρο
        aboutDialog.modal = true;
        aboutDialog.transient_for = this._window;

        // Εμφάνιση του διαλόγου περί
        aboutDialog.show();

        // Σύνδεση του κουμπιού κλεισίματος με το σήμα καταστροφής του διαλόγου
        aboutDialog.connect('response', function() {
            aboutDialog.destroy();
        });
    }
});

// Εκτέλεση της εφαρμογής
let app = new AboutDialogExample();
app.application.run(ARGV);
</code>
<p>Σε αυτό το παράδειγμα χρησιμοποιήσαμε τα παρακάτω:</p>
<list>
  <item><p><link href="http://developer.gnome.org/gio/unstable/GMenu.html">GMenu</link></p></item>
  <item><p><link href="http://developer.gnome.org/gio/stable/GSimpleAction.html">GSimpleAction</link></p></item>
  <item><p><link href="http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.AboutDialog.html">Gtk.AboutDialog</link></p></item>
  <item><p><link href="http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Application.html">Gtk.Application</link></p></item>
  <item><p><link href="http://developer.gnome.org/gtk3/stable/GtkApplicationWindow.html">Gtk.ApplicationWindow</link></p></item>
</list>
</page>
