3 * Demonstrates a sample multistep assistant. Assistants are used to divide
4 * an operation into several simpler sequential steps, and to guide the user
9 #include "demo-common.h"
11 static GtkWidget *assistant = NULL;
14 on_assistant_apply (GtkWidget *widget, gpointer data)
16 /* Apply here changes, this is a fictional
17 example, so we just do nothing here */
21 on_assistant_close_cancel (GtkWidget *widget, gpointer data)
23 GtkWidget **assistant = (GtkWidget **) data;
25 gtk_widget_destroy (*assistant);
30 on_assistant_prepare (GtkWidget *widget, GtkWidget *page, gpointer data)
32 gint current_page, n_pages;
35 current_page = gtk_assistant_get_current_page (GTK_ASSISTANT (widget));
36 n_pages = gtk_assistant_get_n_pages (GTK_ASSISTANT (widget));
38 title = g_strdup_printf ("Sample assistant (%d of %d)", current_page + 1, n_pages);
39 gtk_window_set_title (GTK_WINDOW (widget), title);
44 on_entry_changed (GtkWidget *widget, gpointer data)
46 GtkAssistant *assistant = GTK_ASSISTANT (data);
47 GtkWidget *current_page;
51 page_number = gtk_assistant_get_current_page (assistant);
52 current_page = gtk_assistant_get_nth_page (assistant, page_number);
53 text = gtk_entry_get_text (GTK_ENTRY (widget));
56 gtk_assistant_set_page_complete (assistant, current_page, TRUE);
58 gtk_assistant_set_page_complete (assistant, current_page, FALSE);
62 create_page1 (GtkWidget *assistant)
64 GtkWidget *box, *label, *entry;
67 box = gtk_hbox_new (FALSE, 12);
68 gtk_container_set_border_width (GTK_CONTAINER (box), 12);
70 label = gtk_label_new ("You must fill out this entry to continue:");
71 gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 0);
73 entry = gtk_entry_new ();
74 gtk_box_pack_start (GTK_BOX (box), entry, TRUE, TRUE, 0);
75 g_signal_connect (G_OBJECT (entry), "changed",
76 G_CALLBACK (on_entry_changed), assistant);
78 gtk_widget_show_all (box);
79 gtk_assistant_append_page (GTK_ASSISTANT (assistant), box);
80 gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), box, "Page 1");
81 gtk_assistant_set_page_type (GTK_ASSISTANT (assistant), box, GTK_ASSISTANT_PAGE_INTRO);
83 pixbuf = gtk_widget_render_icon (assistant, GTK_STOCK_DIALOG_INFO, GTK_ICON_SIZE_DIALOG, NULL);
84 gtk_assistant_set_page_header_image (GTK_ASSISTANT (assistant), box, pixbuf);
85 g_object_unref (pixbuf);
89 create_page2 (GtkWidget *assistant)
91 GtkWidget *box, *checkbutton;
94 box = gtk_vbox_new (12, FALSE);
95 gtk_container_set_border_width (GTK_CONTAINER (box), 12);
97 checkbutton = gtk_check_button_new_with_label ("This is optional data, you may continue "
98 "even if you do not check this");
99 gtk_box_pack_start (GTK_BOX (box), checkbutton, FALSE, FALSE, 0);
101 gtk_widget_show_all (box);
102 gtk_assistant_append_page (GTK_ASSISTANT (assistant), box);
103 gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), box, TRUE);
104 gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), box, "Page 2");
106 pixbuf = gtk_widget_render_icon (assistant, GTK_STOCK_DIALOG_INFO, GTK_ICON_SIZE_DIALOG, NULL);
107 gtk_assistant_set_page_header_image (GTK_ASSISTANT (assistant), box, pixbuf);
108 g_object_unref (pixbuf);
112 create_page3 (GtkWidget *assistant)
117 label = gtk_label_new ("This is a confirmation page, press 'Apply' to apply changes");
119 gtk_widget_show (label);
120 gtk_assistant_append_page (GTK_ASSISTANT (assistant), label);
121 gtk_assistant_set_page_type (GTK_ASSISTANT (assistant), label, GTK_ASSISTANT_PAGE_CONFIRM);
122 gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), label, TRUE);
123 gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), label, "Confirmation");
125 pixbuf = gtk_widget_render_icon (assistant, GTK_STOCK_DIALOG_INFO, GTK_ICON_SIZE_DIALOG, NULL);
126 gtk_assistant_set_page_header_image (GTK_ASSISTANT (assistant), label, pixbuf);
127 g_object_unref (pixbuf);
131 do_assistant (GtkWidget *do_widget)
135 assistant = gtk_assistant_new ();
137 gtk_window_set_default_size (GTK_WINDOW (assistant), -1, 300);
139 gtk_window_set_screen (GTK_WINDOW (assistant),
140 gtk_widget_get_screen (do_widget));
142 create_page1 (assistant);
143 create_page2 (assistant);
144 create_page3 (assistant);
146 g_signal_connect (G_OBJECT (assistant), "cancel",
147 G_CALLBACK (on_assistant_close_cancel), &assistant);
148 g_signal_connect (G_OBJECT (assistant), "close",
149 G_CALLBACK (on_assistant_close_cancel), &assistant);
150 g_signal_connect (G_OBJECT (assistant), "apply",
151 G_CALLBACK (on_assistant_apply), NULL);
152 g_signal_connect (G_OBJECT (assistant), "prepare",
153 G_CALLBACK (on_assistant_prepare), NULL);
156 if (!GTK_WIDGET_VISIBLE (assistant))
157 gtk_widget_show (assistant);
160 gtk_widget_destroy (assistant);