<?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.c" xml:lang="el">
  <info>
    <title type="text">AboutDialog (C)</title>
    <link type="guide" xref="beginner.c#windows"/>
    <link type="seealso" xref="dialog.c"/>
    <link type="seealso" xref="messagedialog.c"/>
    <revision version="0.2" date="2012-08-07" status="draft"/>

    <credit type="author copyright">
      <name>Monica Kochofar</name>
      <email>monicakochofar@gmail.com</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>Ένα παράδειγμα AboutDialog χρησιμοποιώντας Gtk.ApplicationWindow και μενού</p>
  <note><p><em style="bold">You need to be running Gtk3.4 or later for this to work</em></p></note>

      <code mime="text/x-csrc" style="numbered">
#περιλαμβάνει &lt;gtk/gtk.h&gt;



/* Η συνάρτηση επανάκλησης στην οποία αντιδρά το σήμα "response" από τον χρήστη
 * στο παράθυρο διαλόγου του μηνύματος.
 * Αυτή η συνάρτηση χρησιμοποιείται για την καταστροφή του παραθύρου διαλόγου.
 */
static void
on_close (GtkDialog *dialog,
          gint       response_id,
          gpointer   user_data)
{
  /*Αυτό θα προκαλέσει την καταστροφή του διαλόγου*/
  gtk_widget_destroy (GTK_WIDGET (dialog));

}



/* Η συνάρτηση επανάκλησης για το σήμα απάντησης "activate" που σχετίζεται με την απλή ενέργεια
 * "about_action".
 * Αυτή η συνάρτηση χρησιμοποιείται για να προκαλέσει την ανάδυση του παραθύρου διαλόγου περί.
 */
static void
about_cb (GSimpleAction *simple,
          GVariant      *parameter,
          gpointer       user_data)
{
   GtkWidget *about_dialog;

   about_dialog = gtk_about_dialog_new ();

   /* Λίστες των συγγραφέων/τεκμηριωτών που θα χρησιμοποιηθούν αργότερα, πρέπει να αρχικοποιηθούν
    * σε έναn πίνακα που τελειώνει σε μηδέν συμβολοσειρές.
    */
   const gchar *authors[] = {"GNOME Documentation Team", NULL};
   const gchar *documenters[] = {"GNOME Documentation Team", NULL};

   /* Συμπλήρωση των πληροφοριών για τον διάλογο περί */
   gtk_about_dialog_set_program_name (GTK_ABOUT_DIALOG (about_dialog), "AboutDialog Example");
   gtk_about_dialog_set_copyright (GTK_ABOUT_DIALOG (about_dialog), "Copyright \xc2\xa9 2012 GNOME Documentation Team");
   gtk_about_dialog_set_authors (GTK_ABOUT_DIALOG (about_dialog), authors);
   gtk_about_dialog_set_documenters (GTK_ABOUT_DIALOG (about_dialog), documenters);
   gtk_about_dialog_set_website_label (GTK_ABOUT_DIALOG (about_dialog), "GNOME Developer Website");
   gtk_about_dialog_set_website (GTK_ABOUT_DIALOG (about_dialog), "http://developer.gnome.org");

  /* Δεν θέλουμε να εμφανίσουμε τον τίτλο, που σε αυτήν την περίπτωση θα είναι 
   * "AboutDialog Example". Πρέπει να επαναφέουμε τον τίτλο του παραθύρου 
   * του μηνύματος διαλόγου μετά τον ορισμό του ονόματος του προγράμματος.
   */
  gtk_window_set_title (GTK_WINDOW (about_dialog), "");

  /* Για το κλείσιμο του διαλόγου περί όταν πατιέται "close", συνδέουμε
   * το σήμα της απάντησης στο on_close
   */
  g_signal_connect (GTK_DIALOG (about_dialog), "response", 
                    G_CALLBACK (on_close), NULL);

  /* Εμφάνιση του διαλόγου περί */
  gtk_widget_show (about_dialog); 
}



static void
activate (GtkApplication *app,
          gpointer        user_data)
{
  GtkWidget *window;

  GSimpleAction *about_action;

  /* Δημιουργία παραθύρου με τίτλο και προεπιλεγμένο μέγεθος */
  window = gtk_application_window_new (app);
  gtk_window_set_title (GTK_WINDOW (window), "AboutDialog Example");
  gtk_window_set_default_size (GTK_WINDOW (window), 200, 200);

  /* Δημιουργία μιας νέας απλής ενέργειας, που της δίνει έναν τύπο παραμέτρου NULL. 
   * Θα είναι πάντα NULL για ενέργειες που καλούνται από ένα μενού. (π.χ.  
   * πατώντας σε ένα κουμπί "ok" ή "cancel")
   */
  about_action = g_simple_action_new ("about", NULL); 

  /* Σύνδεση του σήματος "activate" στην κατάλληλη συνάρτηση επανάκλησης. 
   * Θα δείξει ότι η ενέργεια μόλις ενεργοποιήθηκε.
   */
  g_signal_connect (about_action, "activate", G_CALLBACK (about_cb), 
                    GTK_WINDOW (window));

  /* Προσθέτει την about_action στην συνολική απεικόνηση ενέργειας. Μια απεικόνιση
   * ενέργειας είναι μια διεπαφή που περιέχει έναν αριθμό επώνυμων στιγμιοτύπων
   *  GAction (όπως about_action) 
   */
  g_action_map_add_action (G_ACTION_MAP (window), G_ACTION (about_action));

  gtk_widget_show_all (window);
}



/* Η συνάρτηση επανάκλησης για το σήμα απάντησης "activate" από την ενέργεια "quit" 
 * βρίσκεται στην αμέσως παρακάτω συνάρτηση.
 */ 
static void
quit_cb (GSimpleAction *simple,
         GVariant      *parameter,
         gpointer       user_data)
{
  GApplication *application = user_data;

  g_application_quit (application);
}



/* Η συνάρτηση έναρξης για το μενού που δημιουργούμε σε αυτό το παράδειγμα */
static void
startup (GApplication *app,
         gpointer      user_data)
{
  GMenu *menu;
  GSimpleAction *quit_action;

  /* Αρχικοποίηση του GMenu και προσθήκη ενός στοιχείου μενού με ετικέτα "About" 
   * και ενέργεια "win.about". Επίσης, προσθήκη ενός άλλου στοιχείου μενού 
   * με ετικέτα "Quit" και ενέργεια "app.quit" 
   */
  menu = g_menu_new ();
  g_menu_append (menu, "About", "win.about");
  g_menu_append (menu, "Quit", "app.quit");

  /* Δημιουργία μιας νέας απλής ενέργειας για την εφαρμογή. (Σε αυτήν την περίπτωση 
   * είναι η ενέργεια "quit".
   */
  quit_action = g_simple_action_new ("quit", NULL);

  /* Εξασφαλίστε ότι το μενού που μόλις έχουμε δημιουργήσει ορίζεται για τη συνολική εφαρμογή */
  gtk_application_set_app_menu (GTK_APPLICATION (app), G_MENU_MODEL (menu));

  g_signal_connect (quit_action, 
                    "activate", 
                    G_CALLBACK (quit_cb), 
                    app);

  g_action_map_add_action (G_ACTION_MAP (app), G_ACTION (quit_action));

}



/* Η συνάρτηση έναρξης για την εφαρμογή */
int
main (int argc, char **argv)
{
  GtkApplication *app;
  int status;

  app = gtk_application_new ("org.gtk.example", G_APPLICATION_FLAGS_NONE);
  g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
  g_signal_connect (app, "startup", G_CALLBACK (startup), NULL);
  status = g_application_run (G_APPLICATION (app), argc, argv);
  g_object_unref (app);

  return status;
}
</code>
<p>Σε αυτό το παράδειγμα χρησιμοποιήσαμε τα παρακάτω:</p>
<list>
  <item><p><link href="http://developer.gnome.org/gtk3/3.4/GtkApplication.html">GtkApplication</link></p></item>
  <item><p><link href="http://developer.gnome.org/gtk3/3.4/GtkWindow.html">GtkWindow</link></p></item>
  <item><p><link href="http://developer.gnome.org/gtk3/stable/GtkAboutDialog.html">GtkAboutDialog</link></p></item>
  <item><p><link href="http://developer.gnome.org/gio/stable/GMenu.html">GMenu</link></p></item>
  <item><p><link href="http://developer.gnome.org/gio/stable/GActionMap.html">GActionMap</link></p></item>
</list>
</page>
