Blame platform-demos/el/messagedialog.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="messagedialog.js" xml:lang="el">
Packit 1470ea
  <info>
Packit 1470ea
  <title type="text">MessageDialog (JavaScript)</title>
Packit 1470ea
    <link type="guide" xref="beginner.js#windows"/>
Packit 1470ea
    <link type="seealso" xref="GtkApplicationWindow.js"/>
Packit 1470ea
    <link type="seealso" xref="gmenu.js"/>
Packit 1470ea
    <link type="seealso" xref="label.js"/>
Packit 1470ea
    <revision version="0.2" date="2012-06-25" 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>MessageDialog</title>
Packit 1470ea
  <media type="image" mime="image/png" src="media/messagedialog.png"/>
Packit 1470ea
  

Ένας MessageDialog είναι ένας αναγκαστικός διάλογος μηνύματος, που σημαίνει έναν αναδυόμενο στον οποίο πρέπει να απαντήσετε πριν να επιστρέψετε σε ότι κάνατε στο παράθυρο στο οποίο είναι προσαρτημένο. Αυτό μπορεί να προκαλέσει την έκρηξη του κόσμου (ή τουλάχιστον λέει ότι μπορεί). Για να κάνετε το αναδυόμενο να εμφανιστεί όταν εκτελείτε αυτό το δείγμα, πατήστε στο "Message" μέσα στο μενού της εφαρμογής του -- αυτό είναι το μενού που εμφανίζεται όταν πατάτε στο όνομα μιας εφαρμογής στην πάνω αριστερή γωνία της οθόνης, δίπλα στις ενέργειες.

Packit 1470ea
  <note>

Η διαφορά μεταξύ ενός MessageDialog και ενός <link xref="dialog.js">διαλόγου</link> είναι ότι ο διάλογος μπορεί να περιέχει οποιαδήποτε γραφικά στοιχεία και περιεχόμενο θέλετε να βάλετε μέσα, ενώ ένας MessageDialog είναι απλά ένας βολικός τρόπος να κάνετε τα αναδυόμενα να εμφανιστούν με ένα βασικό μήνυμα και κουμπιά.

</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 MessageDialogExample = new Lang.Class ({
Packit 1470ea
    Name: 'MessageDialog Example',
Packit 1470ea
Packit 1470ea
    // Δημιουργία της εφαρμογής αυτής καθεαυτής
Packit 1470ea
    _init: function () {
Packit 1470ea
        this.application = new Gtk.Application ({
Packit 1470ea
            application_id: 'org.example.jsmessagedialog',
Packit 1470ea
            flags: Gio.ApplicationFlags.FLAGS_NONE });
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
    

Όλος ο κώδικας για αυτό το παράδειγμα πηγαίνει στην κλάση MessageDialogExample. Ο παραπάνω κώδικας δημιουργεί μια <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
            title: "Gtk.MessageDialog Example",
Packit 1470ea
            default_height: 200,
Packit 1470ea
            default_width: 400 });
Packit 1470ea
Packit 1470ea
    

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

Packit 1470ea
Packit 1470ea
    
Packit 1470ea
        // Δημιουργία ενός χαζού μηνύματος προειδοποίησης και προσθήκη του στο παράθυρο
Packit 1470ea
        this.warningLabel = new Gtk.Label ({
Packit 1470ea
            label: "This application goes boom! (Not really.)"});
Packit 1470ea
        this._window.add (this.warningLabel);
Packit 1470ea
Packit 1470ea
    

Για αυτό το παράδειγμα, όλο ότι έχουμε στο παράθυρο που εμφανίζεται το αναδυόμενο είναι μια χαζή προειδοποίηση <link xref="label.js">Label</link>.

Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="menu">
Packit 1470ea
    <title>Δημιουργία του μενού της εφαρμογής</title>
Packit 1470ea
    
Packit 1470ea
    // Δημιουργία του μενού της εφαρμογής, συμπεριλαμβανομένου του κουμπιού που καλεί τον διάλογο
Packit 1470ea
    _initMenus: function() {
Packit 1470ea
        let menu = new Gio.Menu();
Packit 1470ea
        menu.append("Message",'app.message');
Packit 1470ea
        menu.append("Quit",'app.quit');
Packit 1470ea
        this.application.set_app_menu(menu);
Packit 1470ea
Packit 1470ea
        // Αυτό αναδύει ένα μήνυμα διαλόγου όταν πατιέται "Message" στο μενού
Packit 1470ea
        let messageAction = new Gio.SimpleAction ({ name: 'message' });
Packit 1470ea
        messageAction.connect('activate', Lang.bind(this,
Packit 1470ea
            function() {
Packit 1470ea
                this._showMessageDialog();
Packit 1470ea
            }));
Packit 1470ea
        this.application.add_action(messageAction);
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> όπου θα βάλουμε το κουμπί "Message" που προκαλεί το αναδυόμενο MessageDialog. Το GMenu είναι το μενού που εμφανίζεται όταν πατάς το όνομα της εφαρμογής στην πάνω αριστερή γωνία της οθόνης, δίπλα στο μενού ενέργειες. Το μενού μας έχει μόνο δύο επιλογές: μήνυμα και κλείσιμο.

Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="messagedialog">
Packit 1470ea
    <title>Δημιουργία του MessageDialog</title>
Packit 1470ea
    
Packit 1470ea
    _showMessageDialog: function () {
Packit 1470ea
Packit 1470ea
        // Δημιουργία αναγκαστικού διαλόγου μηνύματος του οποίου το γονικό είναι στο παράθυρο
Packit 1470ea
        this._messageDialog = new Gtk.MessageDialog ({
Packit 1470ea
            transient_for: this._window,
Packit 1470ea
            modal: true,
Packit 1470ea
            buttons: Gtk.ButtonsType.OK_CANCEL,
Packit 1470ea
            message_type: Gtk.MessageType.WARNING,
Packit 1470ea
            text: "This action will cause the universe to stop existing." });
Packit 1470ea
Packit 1470ea
        this._messageDialog.connect ('response', Lang.bind(this, this._response_cb));
Packit 1470ea
        this._messageDialog.show();
Packit 1470ea
    },
Packit 1470ea
Packit 1470ea
    

Για να κάνετε τον MessageDialog μας ένα προσαρτημένο αναδυόμενο στο κύριο παράθυρο, ορίζουμε την αναγκαστική του ιδιότητα σε αληθή και το ορίζουμε να είναι "transient_for" _window. Μετά από αυτό, μπορούμε να ορίσουμε τι είδους κουμπιά έχει και τι είδους μήνυμα είναι (που καθορίζει τι εικονίδιο εμφανίζεται δίπλα στο μήνυμα) και να γραφτεί το κείμενο μέσα του, πριν τη σύνδεση του σήματος του "response" στη συνάρτηση επανάκλησης που το χειρίζεται.

Packit 1470ea
    <note>

Εδώ υπάρχουν μερικές πηγές για να κάνετε τα δικά σας MessageDialogs:

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

<link href="http://developer.gnome.org/gtk3/stable/GtkMessageDialog.html#GtkButtonsType">List of button types</link>

</item>
Packit 1470ea
        <item>

<link href="http://developer.gnome.org/gtk3/stable/GtkMessageDialog.html#GtkMessageType">List of message types</link>

</item>
Packit 1470ea
      </list>
Packit 1470ea
    </note>
Packit 1470ea
Packit 1470ea
    
Packit 1470ea
    // Η συνάρτηση επανάκλησης (χειριστής σήματος aka) για το σήμα απάντησης
Packit 1470ea
    _response_cb: function (messagedialog, response_id) {
Packit 1470ea
Packit 1470ea
        // Ένας απλός διακόπτης που αλλάζει την ετικέτα του κυρίως παραθύρου
Packit 1470ea
        switch (response_id) {
Packit 1470ea
            case Gtk.ResponseType.OK:
Packit 1470ea
                this.warningLabel.set_label ("*BOOM*\n");
Packit 1470ea
                break;
Packit 1470ea
            case Gtk.ResponseType.CANCEL:
Packit 1470ea
                this.warningLabel.set_label ("Good choice!\n");
Packit 1470ea
                break;
Packit 1470ea
            case Gtk.ResponseType.DELETE_EVENT:
Packit 1470ea
                this.warningLabel.set_label ("Dialog closed or cancelled.\n");
Packit 1470ea
                break;
Packit 1470ea
        }
Packit 1470ea
Packit 1470ea
        this._messageDialog.destroy();
Packit 1470ea
Packit 1470ea
    }
Packit 1470ea
Packit 1470ea
});
Packit 1470ea
Packit 1470ea
    

Αυτή η συνάρτηση παίρνει δύο παραμέτρους, τον MessageDialog και την response_id, και οι δυο τους παρέχονται αυτόματα (δεν χρειάζεται να τις περάσετε αυτόματα σε αυτό για να δουλέψει). Εδώ χρησιμοποιούμε ένα απλό διακόπτη για αλλαγή του κειμένου της "warning label", ανάλογα με το ποια επιλογή διαλέγετε. Η DELETE_EVENT συμβαίνει εάν πατήσετε διαφυγή για να ακυρώσετε τον MessageDialog, αντί να πατήσετε εντάξει ή ακύρωση. Ό,τι και να επιλέξετε, το αναδυόμενο καταστρέφεται κατόπιν.

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

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

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 MessageDialogExample {
Packit 1470ea
Packit 1470ea
    // Create the application itself
Packit 1470ea
    constructor() {
Packit 1470ea
        this.application = new Gtk.Application({
Packit 1470ea
            application_id: 'org.example.jsmessagedialog',
Packit 1470ea
            flags: Gio.ApplicationFlags.FLAGS_NONE
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 windows when active
Packit 1470ea
    _onActivate() {
Packit 1470ea
        this._window.present();
Packit 1470ea
    }
Packit 1470ea
Packit 1470ea
    // Callback function for 'startup' signal initializes menus 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
            title: "Gtk.MessageDialog Example",
Packit 1470ea
            default_height: 200,
Packit 1470ea
            default_width: 400
Packit 1470ea
        });
Packit 1470ea
Packit 1470ea
        // Create a silly warning message and add it to the window
Packit 1470ea
        this.warningLabel = new Gtk.Label({
Packit 1470ea
            label: "This application goes boom! (Not really.)"
Packit 1470ea
        });
Packit 1470ea
        this._window.add (this.warningLabel);
Packit 1470ea
Packit 1470ea
        // Show the window and all child widgets
Packit 1470ea
        this._window.show_all();
Packit 1470ea
    }
Packit 1470ea
Packit 1470ea
    // Build the application menu, including the button that calls the dialog
Packit 1470ea
    _initMenus() {
Packit 1470ea
        let menu = new Gio.Menu();
Packit 1470ea
        menu.append("Message",'app.message');
Packit 1470ea
        menu.append("Quit",'app.quit');
Packit 1470ea
        this.application.set_app_menu(menu);
Packit 1470ea
Packit 1470ea
        // This pops up a MessageDialog when "Message" is clicked in the menu
Packit 1470ea
        let messageAction = new Gio.SimpleAction ({ name: 'message' });
Packit 1470ea
        messageAction.connect('activate', () => { this._showMessageDialog(); });
Packit 1470ea
        this.application.add_action(messageAction);
Packit 1470ea
Packit 1470ea
        // This closes the window when "Quit" is clicked in the menu
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
    _showMessageDialog() {
Packit 1470ea
Packit 1470ea
        // Create a modal MessageDialog whose parent is the window
Packit 1470ea
        this._messageDialog = new Gtk.MessageDialog ({
Packit 1470ea
            transient_for: this._window,
Packit 1470ea
            modal: true,
Packit 1470ea
            buttons: Gtk.ButtonsType.OK_CANCEL,
Packit 1470ea
            message_type: Gtk.MessageType.WARNING,
Packit 1470ea
            text: "This action will cause the universe to stop existing." });
Packit 1470ea
Packit 1470ea
        this._messageDialog.connect ('response', this._response_cb.bind(this));
Packit 1470ea
        this._messageDialog.show();
Packit 1470ea
    }
Packit 1470ea
Packit 1470ea
    // Callback function (aka signal handler) for the response signal
Packit 1470ea
    _response_cb(messagedialog, response_id) {
Packit 1470ea
Packit 1470ea
        // A simple switch that changes the main window's label
Packit 1470ea
        switch (response_id) {
Packit 1470ea
            case Gtk.ResponseType.OK:
Packit 1470ea
                this.warningLabel.set_label ("*BOOM*\n");
Packit 1470ea
                break;
Packit 1470ea
            case Gtk.ResponseType.CANCEL:
Packit 1470ea
                this.warningLabel.set_label ("Good choice!\n");
Packit 1470ea
                break;
Packit 1470ea
            case Gtk.ResponseType.DELETE_EVENT:
Packit 1470ea
                this.warningLabel.set_label ("Dialog closed or cancelled.\n");
Packit 1470ea
                break;
Packit 1470ea
        }
Packit 1470ea
Packit 1470ea
        this._messageDialog.destroy();
Packit 1470ea
Packit 1470ea
    }
Packit 1470ea
};
Packit 1470ea
Packit 1470ea
// Run the application
Packit 1470ea
let app = new MessageDialogExample ();
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

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

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.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.MessageDialog.html">Gtk.MessageDialog</link>

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