# AboutDialog (C)

Monica Kochofar
monicakochofar@gmail.com 2012
Visa information om ett program
Sebastian Rasmussen
sebras@gmail.com 2019
Anders Jonsson
anders.jonsson@norsjovallen.se 2021

# AboutDialog

Ett AboutDialog-exempel som använder Gtk.ApplicationWindow och Menu

Du måste köra Gtk3.4 eller senare för att detta ska fungera

#include <gtk/gtk.h>

/* Återanropsfunktion vilken reagerar på ”response”-signalen från användaren i * meddelandedialogfönstret. * Denna funktion används för att förstöra dialogfönstret. */ static void on_close (GtkDialog *dialog, gint response_id, gpointer user_data) { /* Detta kommer att förorsaka att dialogen förstörs */ gtk_widget_destroy (GTK_WIDGET (dialog)); }

/* Återanropsfunktion för svarssignalen ”activate” relaterad till SimpleAction * "about_action". * Denna funktion används för att se till att dialogfönstret visas. */ static void about_cb (GSimpleAction *simple, GVariant *parameter, gpointer user_data) { GtkWidget *about_dialog;

about_dialog = gtk_about_dialog_new ();

/* Listor med upphovsmän/dokumentatörer som används senare, måste * initieras som en null-terminerad vektor av strängar. */ const gchar *authors[] = {"GNOME:s dokumentationsgrupp", NULL}; const gchar *documenters[] = {"GNOME:s dokumentationsgrupp", NULL};

/* Vi fyller i informationen för om-dialogen */ gtk_about_dialog_set_program_name (GTK_ABOUT_DIALOG (about_dialog), "AboutDialog-exempel"); gtk_about_dialog_set_copyright (GTK_ABOUT_DIALOG (about_dialog), "Copyright \xc2\xa9 2012 GNOME:s dokumentationsgrupp"); 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:s utvecklarwebbplats"); gtk_about_dialog_set_website (GTK_ABOUT_DIALOG (about_dialog), "http://developer.gnome.org");

/* Vi vill inte visa titeln, vilken i detta fall skulle varit ”AboutDialog-exempel”. * Vi måste återställa titeln för meddelandedialogfönstret efter att ha satt * programnamnet. */ gtk_window_set_title (GTK_WINDOW (about_dialog), "");

/* För att stänga om-dialogen när ”close” klickas på ansluter vi svarssignalen * till on_close */ g_signal_connect (GTK_DIALOG (about_dialog), "response", G_CALLBACK (on_close), NULL);

/* Visa om-dialogen */ gtk_widget_show (about_dialog); }

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

GSimpleAction *about_action;

/* Skapa ett fönster med en titel och en standardstorlek */ window = gtk_application_window_new (app); gtk_window_set_title (GTK_WINDOW (window), "AboutDialog-exempel"); gtk_window_set_default_size (GTK_WINDOW (window), 200, 200);

/* Skapa en ny åtgärd, ge den parametertypen NULL. Den kommer * alltid att vara NULL för åtgärder som anropas från en meny. (t.ex. genom att klicka på * knapparna ”ok” eller ”avbryt”) */ about_action = g_simple_action_new ("about", NULL);

/* Anslut ”activate”-signalen till en lämplig återanropsfunktion. * Den kommer att indikera att åtgärden nyss aktiverats. */ g_signal_connect (about_action, "activate", G_CALLBACK (about_cb), GTK_WINDOW (window));

/* Lägger till about_action till den övergripande åtgärdsmappningen. En åtgärdsmappning * är ett gränssnitt som innehåller ett antal namngivna GAction-instanser * (så som about_action) */ g_action_map_add_action (G_ACTION_MAP (window), G_ACTION (about_action));

gtk_widget_show_all (window); }

/* Återanropsfunktion för svarssignalen ”activate” från ”quit”-åtgärden * hittad i funktionen strax nedanför. */ static void quit_cb (GSimpleAction *simple, GVariant *parameter, gpointer user_data) { GApplication *application = user_data;

g_application_quit (application); }

/* Uppstartsfunktion för menyn vi skapar i detta exempel */ static void startup (GApplication *app, gpointer user_data) { GMenu *menu; GSimpleAction *quit_action;

/* Initiera GMenu, och lägg till ett menyobjekt med etiketten ”Om” och åtgärden * ”win.about”. Lägg också till ett annat menyobjekt med etiketten ”Avsluta” och åtgärden * ”app.quit” */ menu = g_menu_new (); g_menu_append (menu, "Om", "win.about"); g_menu_append (menu, "Avsluta", "app.quit");

/* Skapa en ny enkel åtgärd för programmet. (I detta fall är det * åtgärden ”quit”. */ quit_action = g_simple_action_new ("quit", NULL);

/* Säkerställ att menyn vi nyss skapat är inställd för det övergripande programmet */ 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)); }

/* Uppstartsfunktion för programmet */ 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; }

I detta exempel använde vi följande:

GtkApplication

GtkWindow

GtkAboutDialog

GMenu

GActionMap