# AboutDialog (C)

Monica Kochofar
monicakochofar@gmail.com 2012
Εμφάνιση πληροφοριών για μια εφαρμογή
Δημήτρης Σπίγγος
dmtrs32@gmail.com 2012, 2013

# AboutDialog

Ένα παράδειγμα AboutDialog χρησιμοποιώντας Gtk.ApplicationWindow και μενού

You need to be running Gtk3.4 or later for this to work

#περιλαμβάνει <gtk/gtk.h>

/* Η συνάρτηση επανάκλησης στην οποία αντιδρά το σήμα "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; }

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

GtkApplication

GtkWindow

GtkAboutDialog

GMenu

GActionMap