|
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.c" xml:lang="cs">
|
|
Packit |
1470ea |
<info>
|
|
Packit |
1470ea |
<title type="text">MessageDialog (C)</title>
|
|
Packit |
1470ea |
<link type="guide" xref="c#windows"/>
|
|
Packit |
1470ea |
<link type="seealso" xref="dialog.c"/>
|
|
Packit |
1470ea |
<revision version="0.2" date="2012-08-07" status="draft"/>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<credit type="author copyright">
|
|
Packit |
1470ea |
<name>Monica Kochofar</name>
|
|
Packit |
1470ea |
<email its:translate="no">monicakochofar@gmail.com</email>
|
|
Packit |
1470ea |
<years>2012</years>
|
|
Packit |
1470ea |
</credit>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<desc>Okno se zprávou</desc>
|
|
Packit |
1470ea |
</info>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<title>MessageDialog</title>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<media type="image" mime="image/png" src="media/messagedialog.png"/>
|
|
Packit |
1470ea |
Modální dialogové okno se zprávou, které způsobí, že svět vybuchne.
|
|
Packit |
1470ea |
<note>Když chcete aplikaci otestovat, stačí po jejím spuštění kliknout na nabídku <gui>Message Dialog</gui>, která se objeví v horní liště obrazovky. </note>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
#include <gtk/gtk.h>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
/* Funkce zpětného volání reagující na signál "response" od uživatele
|
|
Packit |
1470ea |
* v dialogovém okně se zprávou
|
|
Packit |
1470ea |
* Tato funkce se používá ke komunikaci s uživatelem v terminálu
|
|
Packit |
1470ea |
*/
|
|
Packit |
1470ea |
static void
|
|
Packit |
1470ea |
on_response (GtkDialog *dialog,
|
|
Packit |
1470ea |
gint response_id,
|
|
Packit |
1470ea |
gpointer user_data)
|
|
Packit |
1470ea |
{
|
|
Packit |
1470ea |
/* Když kliknutí tlačítko odpoví OK (response_id je -5) */
|
|
Packit |
1470ea |
if (response_id == GTK_RESPONSE_OK)
|
|
Packit |
1470ea |
g_print ("*boom*\n");
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
/* Když kliknuté tlačítko odpoví CANCEL (response_id je -6) */
|
|
Packit |
1470ea |
else if (response_id == GTK_RESPONSE_CANCEL)
|
|
Packit |
1470ea |
g_print ("good choice\n");
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
/* Když je dialogové okno zrušeno (například zmáčknutím Esc) */
|
|
Packit |
1470ea |
else if (response_id == GTK_RESPONSE_DELETE_EVENT)
|
|
Packit |
1470ea |
g_print ("dialog closed or cancelled\n");
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
/* Zlikviduje dialogové okno po té, co se uskutečnila jedna z akcí výše */
|
|
Packit |
1470ea |
gtk_widget_destroy (GTK_WIDGET (dialog));
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
}
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
/* Funkce zpětného volání pro signál "activate" náležející widgetu
|
|
Packit |
1470ea |
* SimpleAction message_action
|
|
Packit |
1470ea |
* Tato funkce se použije ke zobrazení dialogového okna se zprávou
|
|
Packit |
1470ea |
*/
|
|
Packit |
1470ea |
static void
|
|
Packit |
1470ea |
message_cb (GSimpleAction *simple,
|
|
Packit |
1470ea |
GVariant *parameter,
|
|
Packit |
1470ea |
gpointer user_data)
|
|
Packit |
1470ea |
{
|
|
Packit |
1470ea |
/* Proměnná parent v tomto případě představuje okno */
|
|
Packit |
1470ea |
GtkWidget *message_dialog;
|
|
Packit |
1470ea |
GtkWindow *parent = user_data;
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
/* Vytvoří nové dialogové okno se zprávou a nastaví jeho parametry následovně:
|
|
Packit |
1470ea |
* příznaky - zajistí modální režim
|
|
Packit |
1470ea |
* (modální okno brání v interakci s ostatními okny aplikace)
|
|
Packit |
1470ea |
* typ zprávy - nekritická varovná zpráva
|
|
Packit |
1470ea |
* typ tlačítek - použije tlačítka OK a Cancel
|
|
Packit |
1470ea |
* zpráva - text, který uživatel v dialogovém okně uvidí
|
|
Packit |
1470ea |
*/
|
|
Packit |
1470ea |
message_dialog = gtk_message_dialog_new (parent, GTK_DIALOG_MODAL,
|
|
Packit |
1470ea |
GTK_MESSAGE_WARNING,
|
|
Packit |
1470ea |
GTK_BUTTONS_OK_CANCEL,
|
|
Packit |
1470ea |
"This action will cause the universe to stop existing.");
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
gtk_widget_show_all (message_dialog);
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
g_signal_connect (GTK_DIALOG (message_dialog), "response",
|
|
Packit |
1470ea |
G_CALLBACK (on_response), NULL);
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
}
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
static void
|
|
Packit |
1470ea |
activate (GtkApplication *app,
|
|
Packit |
1470ea |
gpointer user_data)
|
|
Packit |
1470ea |
{
|
|
Packit |
1470ea |
GtkWidget *window;
|
|
Packit |
1470ea |
GtkWidget *label;
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
GSimpleAction *message_action;
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
/* Vytvoří okno s názvem a výchozí velikostí */
|
|
Packit |
1470ea |
window = gtk_application_window_new (app);
|
|
Packit |
1470ea |
gtk_window_set_title (GTK_WINDOW (window), "GMenu Example");
|
|
Packit |
1470ea |
gtk_window_set_default_size (GTK_WINDOW (window), 400, 200);
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
/* Vytvoří popisek a přidá jej do okna */
|
|
Packit |
1470ea |
label = gtk_label_new ("This application goes boom!");
|
|
Packit |
1470ea |
gtk_container_add (GTK_CONTAINER (window), label);
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
/* Vytvoří novou jednoduchou akci, jako parametr type ji předá NULL. Ten
|
|
Packit |
1470ea |
* bude vždy NULL pro akce vyvolané z nabídky (například kliknutí na tlačítko
|
|
Packit |
1470ea |
* "ok" nebo "cancel")
|
|
Packit |
1470ea |
*/
|
|
Packit |
1470ea |
message_action = g_simple_action_new ("message", NULL);
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
/* Napojí signál "activate" na příslušnou funkci zpětného volání */
|
|
Packit |
1470ea |
g_signal_connect (message_action, "activate", G_CALLBACK (message_cb),
|
|
Packit |
1470ea |
GTK_WINDOW (window));
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
/* Přidá message_action do celkové mapy akcí. Mapa akcí je rozhraní, které
|
|
Packit |
1470ea |
* obsahuje řadu pojmenovaných instancí GAction (jako je message_action)
|
|
Packit |
1470ea |
*/
|
|
Packit |
1470ea |
g_action_map_add_action (G_ACTION_MAP (window), G_ACTION (message_action));
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
gtk_widget_show_all (window);
|
|
Packit |
1470ea |
}
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
/* Funkce zpětného volání pro signál "activate" od akce "quit"
|
|
Packit |
1470ea |
* ve funkci hned za touto
|
|
Packit |
1470ea |
*/
|
|
Packit |
1470ea |
static void
|
|
Packit |
1470ea |
quit_cb (GSimpleAction *simple,
|
|
Packit |
1470ea |
GVariant *parameter,
|
|
Packit |
1470ea |
gpointer user_data)
|
|
Packit |
1470ea |
{
|
|
Packit |
1470ea |
GApplication *application = user_data;
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
g_application_quit (application);
|
|
Packit |
1470ea |
}
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
/* Spouštěcí funkce pro nabídku, kterou vytváříme v této ukázce */
|
|
Packit |
1470ea |
static void
|
|
Packit |
1470ea |
startup (GApplication *app,
|
|
Packit |
1470ea |
gpointer user_data)
|
|
Packit |
1470ea |
{
|
|
Packit |
1470ea |
GMenu *menu;
|
|
Packit |
1470ea |
GSimpleAction *quit_action;
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
/* Inicializuje GMenu a přidá do něj položku s textem "Message" a akcí
|
|
Packit |
1470ea |
* "win.message". Přidá také další položku s textem "Quit" a akcí
|
|
Packit |
1470ea |
* "app.quit"
|
|
Packit |
1470ea |
*/
|
|
Packit |
1470ea |
menu = g_menu_new ();
|
|
Packit |
1470ea |
g_menu_append (menu, "Message", "win.message");
|
|
Packit |
1470ea |
g_menu_append (menu, "Quit", "app.quit");
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
/* Vytvoří novou jednoduchou akci pro aplikaci (v tomto případě do je
|
|
Packit |
1470ea |
* akce "quit"
|
|
Packit |
1470ea |
*/
|
|
Packit |
1470ea |
quit_action = g_simple_action_new ("quit", NULL);
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
/* Zajistí, že právě vytvořená nabídka bude bude pro celou aplikaci */
|
|
Packit |
1470ea |
gtk_application_set_app_menu (GTK_APPLICATION (app), G_MENU_MODEL (menu));
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
g_signal_connect (quit_action,
|
|
Packit |
1470ea |
"activate",
|
|
Packit |
1470ea |
G_CALLBACK (quit_cb),
|
|
Packit |
1470ea |
app);
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
g_action_map_add_action (G_ACTION_MAP (app), G_ACTION (quit_action));
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
}
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
/* Spouštecí funkce aplikace */
|
|
Packit |
1470ea |
int
|
|
Packit |
1470ea |
main (int argc, char **argv)
|
|
Packit |
1470ea |
{
|
|
Packit |
1470ea |
GtkApplication *app;
|
|
Packit |
1470ea |
int status;
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
app = gtk_application_new ("org.gtk.example", G_APPLICATION_FLAGS_NONE);
|
|
Packit |
1470ea |
g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
|
|
Packit |
1470ea |
g_signal_connect (app, "startup", G_CALLBACK (startup), NULL);
|
|
Packit |
1470ea |
status = g_application_run (G_APPLICATION (app), argc, argv);
|
|
Packit |
1470ea |
g_object_unref (app);
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
return status;
|
|
Packit |
1470ea |
}
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
V této ukázce se používá následující:
|
|
Packit |
1470ea |
<list>
|
|
Packit |
1470ea |
<item><link href="http://developer.gnome.org/gtk3/3.4/GtkApplication.html">GtkApplication</link> </item>
|
|
Packit |
1470ea |
<item><link href="http://developer.gnome.org/gio/stable/GApplication.html">GApplication</link> </item>
|
|
Packit |
1470ea |
<item><link href="http://developer.gnome.org/gtk3/3.4/GtkWindow.html">GtkWindow</link> </item>
|
|
Packit |
1470ea |
<item><link href="http://developer.gnome.org/gtk3/stable/GtkMessageDialog.html">GtkMessageDialog</link> </item>
|
|
Packit |
1470ea |
<item><link href="http://developer.gnome.org/gio/stable/GSimpleAction.html#g-simple-action-new">GSimpleAction</link> </item>
|
|
Packit |
1470ea |
<item><link href="http://developer.gnome.org/gio/stable/GActionMap.html">GActionMap</link> </item>
|
|
Packit |
1470ea |
<item><link href="http://developer.gnome.org/gio/stable/GMenu.html">GMenu</link> </item>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
</list>
|
|
Packit |
1470ea |
</page>
|