1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199
|
<?xml version="1.0" encoding="utf-8"?>
<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="aboutdialog.c" xml:lang="sv">
<info>
<title type="text">AboutDialog (C)</title>
<link type="guide" xref="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 its:translate="no">monicakochofar@gmail.com</email>
<years>2012</years>
</credit>
<desc>Visa information om ett program</desc>
<mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
<mal:name>Sebastian Rasmussen</mal:name>
<mal:email>sebras@gmail.com</mal:email>
<mal:years>2019</mal:years>
</mal:credit>
<mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
<mal:name>Anders Jonsson</mal:name>
<mal:email>anders.jonsson@norsjovallen.se</mal:email>
<mal:years>2021</mal:years>
</mal:credit>
</info>
<title>AboutDialog</title>
<media type="image" mime="image/png" src="media/aboutdialog_GMenu.png"/>
<p>Ett AboutDialog-exempel som använder Gtk.ApplicationWindow och Menu</p>
<note><p><em style="bold">Du måste köra Gtk3.4 eller senare för att detta ska fungera</em></p></note>
<code mime="text/x-csrc" style="numbered">
#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;
}
</code>
<p>I detta exempel använde vi följande:</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>
|