2 * GTK - The GIMP Toolkit
3 * Copyright (C) 1999 Red Hat, Inc.
4 * Copyright (C) 2002 Anders Carlsson <andersca@gnu.org>
5 * Copyright (C) 2003 Matthias Clasen <mclasen@redhat.com>
6 * Copyright (C) 2005 Carlos Garnacho Parro <carlosg@gnome.org>
10 * This library is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU Lesser General Public
12 * License as published by the Free Software Foundation; either
13 * version 2 of the License, or (at your option) any later version.
15 * This library is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 * Lesser General Public License for more details.
20 * You should have received a copy of the GNU Lesser General Public
21 * License along with this library; if not, write to the
22 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
23 * Boston, MA 02111-1307, USA.
29 get_test_page (const gchar *text)
31 return gtk_label_new (text);
35 cancel_callback (GtkWidget *widget)
39 gtk_widget_hide (widget);
43 close_callback (GtkWidget *widget)
47 gtk_widget_hide (widget);
51 apply_callback (GtkWidget *widget)
57 progress_timeout (GtkWidget *assistant)
59 GtkWidget *page, *progress;
63 current_page = gtk_assistant_get_current_page (GTK_ASSISTANT (assistant));
64 page = gtk_assistant_get_nth_page (GTK_ASSISTANT (assistant), current_page);
65 progress = GTK_BIN (page)->child;
67 value = gtk_progress_bar_get_fraction (GTK_PROGRESS_BAR (progress));
69 gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progress), value);
73 gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, TRUE);
81 prepare_callback (GtkWidget *widget, GtkWidget *page)
83 if (GTK_IS_LABEL (page))
84 g_print ("prepare: %s\n", gtk_label_get_text (GTK_LABEL (page)));
85 else if (gtk_assistant_get_page_type (GTK_ASSISTANT (widget), page) == GTK_ASSISTANT_PAGE_PROGRESS)
89 progress = GTK_BIN (page)->child;
90 gtk_assistant_set_page_complete (GTK_ASSISTANT (widget), page, FALSE);
91 gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progress), 0.0);
92 g_timeout_add (300, (GSourceFunc) progress_timeout, widget);
95 g_print ("prepare: %d\n", gtk_assistant_get_current_page (GTK_ASSISTANT (widget)));
99 create_simple_assistant (GtkWidget *widget)
101 static GtkWidget *assistant = NULL;
107 assistant = gtk_assistant_new ();
108 gtk_window_set_default_size (GTK_WINDOW (assistant), 400, 300);
110 g_signal_connect (G_OBJECT (assistant), "cancel",
111 G_CALLBACK (cancel_callback), NULL);
112 g_signal_connect (G_OBJECT (assistant), "close",
113 G_CALLBACK (close_callback), NULL);
114 g_signal_connect (G_OBJECT (assistant), "apply",
115 G_CALLBACK (apply_callback), NULL);
116 g_signal_connect (G_OBJECT (assistant), "prepare",
117 G_CALLBACK (prepare_callback), NULL);
119 page = get_test_page ("Page 1");
120 gtk_widget_show (page);
121 gtk_assistant_append_page (GTK_ASSISTANT (assistant), page);
122 gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "Page 1");
123 gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, TRUE);
125 page = get_test_page ("Page 2");
126 gtk_widget_show (page);
127 gtk_assistant_append_page (GTK_ASSISTANT (assistant), page);
128 gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "Page 2");
129 gtk_assistant_set_page_type (GTK_ASSISTANT (assistant), page, GTK_ASSISTANT_PAGE_CONFIRM);
130 gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, TRUE);
133 if (!GTK_WIDGET_VISIBLE (assistant))
134 gtk_widget_show (assistant);
137 gtk_widget_destroy (assistant);
143 create_generous_assistant (GtkWidget *widget)
145 static GtkWidget *assistant = NULL;
151 assistant = gtk_assistant_new ();
152 gtk_window_set_default_size (GTK_WINDOW (assistant), 400, 300);
154 g_signal_connect (G_OBJECT (assistant), "cancel",
155 G_CALLBACK (cancel_callback), NULL);
156 g_signal_connect (G_OBJECT (assistant), "close",
157 G_CALLBACK (close_callback), NULL);
158 g_signal_connect (G_OBJECT (assistant), "apply",
159 G_CALLBACK (apply_callback), NULL);
160 g_signal_connect (G_OBJECT (assistant), "prepare",
161 G_CALLBACK (prepare_callback), NULL);
163 page = get_test_page ("Introduction");
164 gtk_widget_show (page);
165 gtk_assistant_append_page (GTK_ASSISTANT (assistant), page);
166 gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "Introduction");
167 gtk_assistant_set_page_type (GTK_ASSISTANT (assistant), page, GTK_ASSISTANT_PAGE_INTRO);
168 gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, TRUE);
170 page = get_test_page ("Content");
171 gtk_widget_show (page);
172 gtk_assistant_append_page (GTK_ASSISTANT (assistant), page);
173 gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "Content");
174 gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, TRUE);
176 page = get_test_page ("More content");
177 gtk_widget_show (page);
178 gtk_assistant_append_page (GTK_ASSISTANT (assistant), page);
179 gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "More content");
180 gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, TRUE);
182 page = get_test_page ("Confirmation");
183 gtk_widget_show (page);
184 gtk_assistant_append_page (GTK_ASSISTANT (assistant), page);
185 gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "Confirmation");
186 gtk_assistant_set_page_type (GTK_ASSISTANT (assistant), page, GTK_ASSISTANT_PAGE_CONFIRM);
187 gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, TRUE);
189 page = gtk_alignment_new (0.5, 0.5, 0.9, 0.0);
190 gtk_container_add (GTK_CONTAINER (page), gtk_progress_bar_new ());
191 gtk_widget_show_all (page);
192 gtk_assistant_append_page (GTK_ASSISTANT (assistant), page);
193 gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "Progress");
194 gtk_assistant_set_page_type (GTK_ASSISTANT (assistant), page, GTK_ASSISTANT_PAGE_PROGRESS);
196 page = get_test_page ("Summary");
197 gtk_widget_show (page);
198 gtk_assistant_append_page (GTK_ASSISTANT (assistant), page);
199 gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "Summary");
200 gtk_assistant_set_page_type (GTK_ASSISTANT (assistant), page, GTK_ASSISTANT_PAGE_SUMMARY);
201 gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, TRUE);
204 if (!GTK_WIDGET_VISIBLE (assistant))
205 gtk_widget_show (assistant);
208 gtk_widget_destroy (assistant);
213 static gchar selected_branch = 'A';
216 select_branch (GtkWidget *widget, gchar branch)
218 selected_branch = branch;
222 nonlinear_assistant_forward_page (gint current_page, gpointer data)
224 switch (current_page)
227 if (selected_branch == 'A')
240 create_nonlinear_assistant (GtkWidget *widget)
242 static GtkWidget *assistant = NULL;
246 GtkWidget *page, *button;
248 assistant = gtk_assistant_new ();
249 gtk_window_set_default_size (GTK_WINDOW (assistant), 400, 300);
251 g_signal_connect (G_OBJECT (assistant), "cancel",
252 G_CALLBACK (cancel_callback), NULL);
253 g_signal_connect (G_OBJECT (assistant), "close",
254 G_CALLBACK (close_callback), NULL);
255 g_signal_connect (G_OBJECT (assistant), "apply",
256 G_CALLBACK (apply_callback), NULL);
257 g_signal_connect (G_OBJECT (assistant), "prepare",
258 G_CALLBACK (prepare_callback), NULL);
260 gtk_assistant_set_forward_page_func (GTK_ASSISTANT (assistant),
261 nonlinear_assistant_forward_page,
264 page = gtk_vbox_new (FALSE, 6);
266 button = gtk_radio_button_new_with_label (NULL, "branch A");
267 gtk_box_pack_start (GTK_BOX (page), button, FALSE, FALSE, 0);
268 g_signal_connect (G_OBJECT (button), "toggled", G_CALLBACK (select_branch), GINT_TO_POINTER ('A'));
269 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
271 button = gtk_radio_button_new_with_label (gtk_radio_button_get_group (GTK_RADIO_BUTTON (button)),
273 gtk_box_pack_start (GTK_BOX (page), button, FALSE, FALSE, 0);
274 g_signal_connect (G_OBJECT (button), "toggled", G_CALLBACK (select_branch), GINT_TO_POINTER ('B'));
276 gtk_widget_show_all (page);
277 gtk_assistant_append_page (GTK_ASSISTANT (assistant), page);
278 gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "Page 1");
279 gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, TRUE);
281 page = get_test_page ("Page 2A");
282 gtk_widget_show (page);
283 gtk_assistant_append_page (GTK_ASSISTANT (assistant), page);
284 gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "Page 2A");
285 gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, TRUE);
287 page = get_test_page ("Page 2B");
288 gtk_widget_show (page);
289 gtk_assistant_append_page (GTK_ASSISTANT (assistant), page);
290 gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "Page 2B");
291 gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, TRUE);
293 page = get_test_page ("Confirmation");
294 gtk_widget_show (page);
295 gtk_assistant_append_page (GTK_ASSISTANT (assistant), page);
296 gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "Confirmation");
297 gtk_assistant_set_page_type (GTK_ASSISTANT (assistant), page, GTK_ASSISTANT_PAGE_CONFIRM);
298 gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, TRUE);
301 if (!GTK_WIDGET_VISIBLE (assistant))
302 gtk_widget_show (assistant);
305 gtk_widget_destroy (assistant);
311 looping_assistant_forward_page (gint current_page, gpointer data)
313 switch (current_page)
323 GtkAssistant *assistant;
326 assistant = (GtkAssistant*) data;
327 page = gtk_assistant_get_nth_page (assistant, current_page);
329 if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (page)))
341 create_looping_assistant (GtkWidget *widget)
343 static GtkWidget *assistant = NULL;
349 assistant = gtk_assistant_new ();
350 gtk_window_set_default_size (GTK_WINDOW (assistant), 400, 300);
352 g_signal_connect (G_OBJECT (assistant), "cancel",
353 G_CALLBACK (cancel_callback), NULL);
354 g_signal_connect (G_OBJECT (assistant), "close",
355 G_CALLBACK (close_callback), NULL);
356 g_signal_connect (G_OBJECT (assistant), "apply",
357 G_CALLBACK (apply_callback), NULL);
358 g_signal_connect (G_OBJECT (assistant), "prepare",
359 G_CALLBACK (prepare_callback), NULL);
361 gtk_assistant_set_forward_page_func (GTK_ASSISTANT (assistant),
362 looping_assistant_forward_page,
365 page = get_test_page ("Introduction");
366 gtk_widget_show (page);
367 gtk_assistant_append_page (GTK_ASSISTANT (assistant), page);
368 gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "Introduction");
369 gtk_assistant_set_page_type (GTK_ASSISTANT (assistant), page, GTK_ASSISTANT_PAGE_INTRO);
370 gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, TRUE);
372 page = get_test_page ("Content");
373 gtk_widget_show (page);
374 gtk_assistant_append_page (GTK_ASSISTANT (assistant), page);
375 gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "Content");
376 gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, TRUE);
378 page = get_test_page ("More content");
379 gtk_widget_show (page);
380 gtk_assistant_append_page (GTK_ASSISTANT (assistant), page);
381 gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "More content");
382 gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, TRUE);
384 page = gtk_check_button_new_with_label ("Loop?");
385 gtk_widget_show (page);
386 gtk_assistant_append_page (GTK_ASSISTANT (assistant), page);
387 gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "Loop?");
388 gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, TRUE);
390 page = get_test_page ("Confirmation");
391 gtk_widget_show (page);
392 gtk_assistant_append_page (GTK_ASSISTANT (assistant), page);
393 gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "Confirmation");
394 gtk_assistant_set_page_type (GTK_ASSISTANT (assistant), page, GTK_ASSISTANT_PAGE_CONFIRM);
395 gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, TRUE);
398 if (!GTK_WIDGET_VISIBLE (assistant))
399 gtk_widget_show (assistant);
402 gtk_widget_destroy (assistant);
409 void (*func) (GtkWidget *widget);
412 { "simple assistant", create_simple_assistant },
413 { "generous assistant", create_generous_assistant },
414 { "nonlinear assistant", create_nonlinear_assistant },
415 { "looping assistant", create_looping_assistant },
419 main (int argc, gchar *argv[])
421 GtkWidget *window, *box, *button;
424 gtk_init (&argc, &argv);
426 if (g_getenv ("RTL"))
427 gtk_widget_set_default_direction (GTK_TEXT_DIR_RTL);
429 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
431 g_signal_connect (G_OBJECT (window), "destroy",
432 G_CALLBACK (gtk_main_quit), NULL);
433 g_signal_connect (G_OBJECT (window), "delete-event",
434 G_CALLBACK (gtk_false), NULL);
436 box = gtk_vbox_new (FALSE, 6);
437 gtk_container_add (GTK_CONTAINER (window), box);
439 for (i = 0; i < G_N_ELEMENTS (buttons); i++)
441 button = gtk_button_new_with_label (buttons[i].text);
444 g_signal_connect (G_OBJECT (button), "clicked",
445 G_CALLBACK (buttons[i].func), NULL);
447 gtk_box_pack_start (GTK_BOX (box), button, TRUE, TRUE, 0);
450 gtk_widget_show_all (window);