1 /* GTK - The GIMP Toolkit
2 * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the
16 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17 * Boston, MA 02111-1307, USA.
21 * Modified by the GTK+ Team and others 1997-2000. See the AUTHORS
22 * file for a list of people on the GTK+ Team. See the ChangeLog
23 * files for a list of changes. These files are distributed with
24 * GTK+ at ftp://ftp.gtk.org/pub/gtk/.
41 #define GTK_ENABLE_BROKEN
44 #include "gdk/gdkkeysyms.h"
47 #define sleep(n) _sleep(n)
50 #include "prop-editor.h"
52 #include "circles.xbm"
56 file_exists (const char *filename)
60 return stat (filename, &statbuf) == 0;
64 shape_create_icon (char *xpm_file,
72 build_option_menu (gchar *items[],
75 void (*func)(GtkWidget *widget, gpointer data),
78 /* macro, structure and variables used by tree window demos */
79 #define DEFAULT_NUMBER_OF_ITEM 3
80 #define DEFAULT_RECURSION_LEVEL 3
83 GSList* selection_mode_group;
84 GtkWidget* single_button;
85 GtkWidget* browse_button;
86 GtkWidget* multiple_button;
87 GtkWidget* draw_line_button;
88 GtkWidget* view_line_button;
89 GtkWidget* no_root_item_button;
90 GtkWidget* nb_item_spinner;
91 GtkWidget* recursion_spinner;
92 } sTreeSampleSelection;
94 typedef struct sTreeButtons {
96 GtkWidget* add_button;
97 GtkWidget* remove_button;
98 GtkWidget* subtree_button;
100 /* end of tree section */
103 build_option_menu (gchar *items[],
106 void (*func)(GtkWidget *widget, gpointer data),
111 GtkWidget *menu_item;
115 omenu = gtk_option_menu_new ();
116 gtk_signal_connect (GTK_OBJECT (omenu), "changed",
117 GTK_SIGNAL_FUNC (func), data);
119 menu = gtk_menu_new ();
122 for (i = 0; i < num_items; i++)
124 menu_item = gtk_radio_menu_item_new_with_label (group, items[i]);
125 group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menu_item));
126 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
128 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_item), TRUE);
129 gtk_widget_show (menu_item);
132 gtk_option_menu_set_menu (GTK_OPTION_MENU (omenu), menu);
133 gtk_option_menu_set_history (GTK_OPTION_MENU (omenu), history);
139 destroy_tooltips (GtkWidget *widget, GtkWindow **window)
141 GtkTooltips *tt = gtk_object_get_data (GTK_OBJECT (*window), "tooltips");
142 gtk_object_unref (GTK_OBJECT (tt));
151 button_window (GtkWidget *widget,
154 if (!GTK_WIDGET_VISIBLE (button))
155 gtk_widget_show (button);
157 gtk_widget_hide (button);
161 create_buttons (void)
163 static GtkWidget *window = NULL;
167 GtkWidget *button[10];
168 GtkWidget *separator;
172 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
174 gtk_signal_connect (GTK_OBJECT (window), "destroy",
175 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
178 gtk_window_set_title (GTK_WINDOW (window), "GtkButton");
179 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
181 box1 = gtk_vbox_new (FALSE, 0);
182 gtk_container_add (GTK_CONTAINER (window), box1);
184 table = gtk_table_new (3, 3, FALSE);
185 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
186 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
187 gtk_container_set_border_width (GTK_CONTAINER (table), 10);
188 gtk_box_pack_start (GTK_BOX (box1), table, TRUE, TRUE, 0);
190 button[0] = gtk_button_new_with_label ("button1");
191 button[1] = gtk_button_new_with_mnemonic ("_button2");
192 button[2] = gtk_button_new_with_mnemonic ("_button3");
193 button[3] = gtk_button_new_from_stock (GTK_STOCK_OK);
194 button[4] = gtk_button_new_with_label ("button5");
195 button[5] = gtk_button_new_with_label ("button6");
196 button[6] = gtk_button_new_with_label ("button7");
197 button[7] = gtk_button_new_from_stock (GTK_STOCK_CLOSE);
198 button[8] = gtk_button_new_with_label ("button9");
200 gtk_signal_connect (GTK_OBJECT (button[0]), "clicked",
201 GTK_SIGNAL_FUNC(button_window),
204 gtk_table_attach (GTK_TABLE (table), button[0], 0, 1, 0, 1,
205 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
207 gtk_signal_connect (GTK_OBJECT (button[1]), "clicked",
208 GTK_SIGNAL_FUNC(button_window),
211 gtk_table_attach (GTK_TABLE (table), button[1], 1, 2, 1, 2,
212 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
214 gtk_signal_connect (GTK_OBJECT (button[2]), "clicked",
215 GTK_SIGNAL_FUNC(button_window),
217 gtk_table_attach (GTK_TABLE (table), button[2], 2, 3, 2, 3,
218 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
220 gtk_signal_connect (GTK_OBJECT (button[3]), "clicked",
221 GTK_SIGNAL_FUNC(button_window),
223 gtk_table_attach (GTK_TABLE (table), button[3], 0, 1, 2, 3,
224 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
226 gtk_signal_connect (GTK_OBJECT (button[4]), "clicked",
227 GTK_SIGNAL_FUNC(button_window),
229 gtk_table_attach (GTK_TABLE (table), button[4], 2, 3, 0, 1,
230 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
232 gtk_signal_connect (GTK_OBJECT (button[5]), "clicked",
233 GTK_SIGNAL_FUNC(button_window),
235 gtk_table_attach (GTK_TABLE (table), button[5], 1, 2, 2, 3,
236 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
238 gtk_signal_connect (GTK_OBJECT (button[6]), "clicked",
239 GTK_SIGNAL_FUNC(button_window),
241 gtk_table_attach (GTK_TABLE (table), button[6], 1, 2, 0, 1,
242 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
244 gtk_signal_connect (GTK_OBJECT (button[7]), "clicked",
245 GTK_SIGNAL_FUNC(button_window),
247 gtk_table_attach (GTK_TABLE (table), button[7], 2, 3, 1, 2,
248 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
250 gtk_signal_connect (GTK_OBJECT (button[8]), "clicked",
251 GTK_SIGNAL_FUNC(button_window),
253 gtk_table_attach (GTK_TABLE (table), button[8], 0, 1, 1, 2,
254 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
256 separator = gtk_hseparator_new ();
257 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
259 box2 = gtk_vbox_new (FALSE, 10);
260 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
261 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
263 button[9] = gtk_button_new_with_label ("close");
264 gtk_signal_connect_object (GTK_OBJECT (button[9]), "clicked",
265 GTK_SIGNAL_FUNC(gtk_widget_destroy),
266 GTK_OBJECT (window));
267 gtk_box_pack_start (GTK_BOX (box2), button[9], TRUE, TRUE, 0);
268 GTK_WIDGET_SET_FLAGS (button[9], GTK_CAN_DEFAULT);
269 gtk_widget_grab_default (button[9]);
272 if (!GTK_WIDGET_VISIBLE (window))
273 gtk_widget_show_all (window);
275 gtk_widget_destroy (window);
283 create_toggle_buttons (void)
285 static GtkWidget *window = NULL;
289 GtkWidget *separator;
293 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
295 gtk_signal_connect (GTK_OBJECT (window), "destroy",
296 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
299 gtk_window_set_title (GTK_WINDOW (window), "GtkToggleButton");
300 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
302 box1 = gtk_vbox_new (FALSE, 0);
303 gtk_container_add (GTK_CONTAINER (window), box1);
305 box2 = gtk_vbox_new (FALSE, 10);
306 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
307 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
309 button = gtk_toggle_button_new_with_label ("button1");
310 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
312 button = gtk_toggle_button_new_with_label ("button2");
313 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
315 button = gtk_toggle_button_new_with_label ("button3");
316 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
318 button = gtk_toggle_button_new_with_label ("inconsistent");
319 gtk_toggle_button_set_inconsistent (GTK_TOGGLE_BUTTON (button), TRUE);
320 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
322 separator = gtk_hseparator_new ();
323 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
325 box2 = gtk_vbox_new (FALSE, 10);
326 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
327 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
329 button = gtk_button_new_with_label ("close");
330 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
331 GTK_SIGNAL_FUNC(gtk_widget_destroy),
332 GTK_OBJECT (window));
333 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
334 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
335 gtk_widget_grab_default (button);
338 if (!GTK_WIDGET_VISIBLE (window))
339 gtk_widget_show_all (window);
341 gtk_widget_destroy (window);
349 create_check_buttons (void)
351 static GtkWidget *window = NULL;
355 GtkWidget *separator;
359 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
361 gtk_signal_connect (GTK_OBJECT (window), "destroy",
362 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
365 gtk_window_set_title (GTK_WINDOW (window), "GtkCheckButton");
366 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
368 box1 = gtk_vbox_new (FALSE, 0);
369 gtk_container_add (GTK_CONTAINER (window), box1);
371 box2 = gtk_vbox_new (FALSE, 10);
372 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
373 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
375 button = gtk_check_button_new_with_mnemonic ("_button1");
376 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
378 button = gtk_check_button_new_with_label ("button2");
379 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
381 button = gtk_check_button_new_with_label ("button3");
382 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
384 button = gtk_check_button_new_with_label ("inconsistent");
385 gtk_toggle_button_set_inconsistent (GTK_TOGGLE_BUTTON (button), TRUE);
386 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
388 separator = gtk_hseparator_new ();
389 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
391 box2 = gtk_vbox_new (FALSE, 10);
392 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
393 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
395 button = gtk_button_new_with_label ("close");
396 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
397 GTK_SIGNAL_FUNC(gtk_widget_destroy),
398 GTK_OBJECT (window));
399 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
400 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
401 gtk_widget_grab_default (button);
404 if (!GTK_WIDGET_VISIBLE (window))
405 gtk_widget_show_all (window);
407 gtk_widget_destroy (window);
415 create_radio_buttons (void)
417 static GtkWidget *window = NULL;
421 GtkWidget *separator;
425 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
427 gtk_signal_connect (GTK_OBJECT (window), "destroy",
428 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
431 gtk_window_set_title (GTK_WINDOW (window), "radio buttons");
432 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
434 box1 = gtk_vbox_new (FALSE, 0);
435 gtk_container_add (GTK_CONTAINER (window), box1);
437 box2 = gtk_vbox_new (FALSE, 10);
438 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
439 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
441 button = gtk_radio_button_new_with_label (NULL, "button1");
442 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
444 button = gtk_radio_button_new_with_label (
445 gtk_radio_button_get_group (GTK_RADIO_BUTTON (button)),
447 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
448 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
450 button = gtk_radio_button_new_with_label (
451 gtk_radio_button_get_group (GTK_RADIO_BUTTON (button)),
453 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
455 button = gtk_radio_button_new_with_label (
456 gtk_radio_button_get_group (GTK_RADIO_BUTTON (button)),
458 gtk_toggle_button_set_inconsistent (GTK_TOGGLE_BUTTON (button), TRUE);
459 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
461 separator = gtk_hseparator_new ();
462 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
464 box2 = gtk_vbox_new (FALSE, 10);
465 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
466 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
468 button = gtk_button_new_with_label ("close");
469 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
470 GTK_SIGNAL_FUNC(gtk_widget_destroy),
471 GTK_OBJECT (window));
472 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
473 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
474 gtk_widget_grab_default (button);
477 if (!GTK_WIDGET_VISIBLE (window))
478 gtk_widget_show_all (window);
480 gtk_widget_destroy (window);
488 create_bbox (gint horizontal,
499 frame = gtk_frame_new (title);
502 bbox = gtk_hbutton_box_new ();
504 bbox = gtk_vbutton_box_new ();
506 gtk_container_set_border_width (GTK_CONTAINER (bbox), 5);
507 gtk_container_add (GTK_CONTAINER (frame), bbox);
509 gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), layout);
510 gtk_box_set_spacing (GTK_BOX (bbox), spacing);
511 gtk_button_box_set_child_size (GTK_BUTTON_BOX (bbox), child_w, child_h);
513 button = gtk_button_new_with_label ("OK");
514 gtk_container_add (GTK_CONTAINER (bbox), button);
516 button = gtk_button_new_with_label ("Cancel");
517 gtk_container_add (GTK_CONTAINER (bbox), button);
519 button = gtk_button_new_with_label ("Help");
520 gtk_container_add (GTK_CONTAINER (bbox), button);
526 create_button_box (void)
528 static GtkWidget* window = NULL;
529 GtkWidget *main_vbox;
532 GtkWidget *frame_horz;
533 GtkWidget *frame_vert;
537 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
538 gtk_window_set_title (GTK_WINDOW (window), "Button Boxes");
540 gtk_signal_connect (GTK_OBJECT (window), "destroy",
541 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
544 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
546 main_vbox = gtk_vbox_new (FALSE, 0);
547 gtk_container_add (GTK_CONTAINER (window), main_vbox);
549 frame_horz = gtk_frame_new ("Horizontal Button Boxes");
550 gtk_box_pack_start (GTK_BOX (main_vbox), frame_horz, TRUE, TRUE, 10);
552 vbox = gtk_vbox_new (FALSE, 0);
553 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
554 gtk_container_add (GTK_CONTAINER (frame_horz), vbox);
556 gtk_box_pack_start (GTK_BOX (vbox),
557 create_bbox (TRUE, "Spread", 40, 85, 20, GTK_BUTTONBOX_SPREAD),
560 gtk_box_pack_start (GTK_BOX (vbox),
561 create_bbox (TRUE, "Edge", 40, 85, 20, GTK_BUTTONBOX_EDGE),
564 gtk_box_pack_start (GTK_BOX (vbox),
565 create_bbox (TRUE, "Start", 40, 85, 20, GTK_BUTTONBOX_START),
568 gtk_box_pack_start (GTK_BOX (vbox),
569 create_bbox (TRUE, "End", 40, 85, 20, GTK_BUTTONBOX_END),
572 frame_vert = gtk_frame_new ("Vertical Button Boxes");
573 gtk_box_pack_start (GTK_BOX (main_vbox), frame_vert, TRUE, TRUE, 10);
575 hbox = gtk_hbox_new (FALSE, 0);
576 gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
577 gtk_container_add (GTK_CONTAINER (frame_vert), hbox);
579 gtk_box_pack_start (GTK_BOX (hbox),
580 create_bbox (FALSE, "Spread", 30, 85, 20, GTK_BUTTONBOX_SPREAD),
583 gtk_box_pack_start (GTK_BOX (hbox),
584 create_bbox (FALSE, "Edge", 30, 85, 20, GTK_BUTTONBOX_EDGE),
587 gtk_box_pack_start (GTK_BOX (hbox),
588 create_bbox (FALSE, "Start", 30, 85, 20, GTK_BUTTONBOX_START),
591 gtk_box_pack_start (GTK_BOX (hbox),
592 create_bbox (FALSE, "End", 30, 85, 20, GTK_BUTTONBOX_END),
596 if (!GTK_WIDGET_VISIBLE (window))
597 gtk_widget_show_all (window);
599 gtk_widget_destroy (window);
607 new_pixmap (char *filename,
609 GdkColor *background)
615 if (strcmp (filename, "test.xpm") == 0 ||
616 !file_exists (filename))
618 pixmap = gdk_pixmap_create_from_xpm_d (window, &mask,
623 pixmap = gdk_pixmap_create_from_xpm (window, &mask,
627 wpixmap = gtk_pixmap_new (pixmap, mask);
634 set_toolbar_small_stock (GtkWidget *widget,
637 gtk_toolbar_set_icon_size (GTK_TOOLBAR (data), GTK_ICON_SIZE_SMALL_TOOLBAR);
641 set_toolbar_large_stock (GtkWidget *widget,
644 gtk_toolbar_set_icon_size (GTK_TOOLBAR (data), GTK_ICON_SIZE_LARGE_TOOLBAR);
648 set_toolbar_horizontal (GtkWidget *widget,
651 gtk_toolbar_set_orientation (GTK_TOOLBAR (data), GTK_ORIENTATION_HORIZONTAL);
655 set_toolbar_vertical (GtkWidget *widget,
658 gtk_toolbar_set_orientation (GTK_TOOLBAR (data), GTK_ORIENTATION_VERTICAL);
662 set_toolbar_icons (GtkWidget *widget,
665 gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_ICONS);
669 set_toolbar_text (GtkWidget *widget,
672 gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_TEXT);
676 set_toolbar_both (GtkWidget *widget,
679 gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_BOTH);
683 set_toolbar_both_horiz (GtkWidget *widget,
686 gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_BOTH_HORIZ);
690 set_toolbar_enable (GtkWidget *widget,
693 gtk_toolbar_set_tooltips (GTK_TOOLBAR (data), TRUE);
697 set_toolbar_disable (GtkWidget *widget,
700 gtk_toolbar_set_tooltips (GTK_TOOLBAR (data), FALSE);
704 create_toolbar (void)
706 static GtkWidget *window = NULL;
712 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
713 gtk_window_set_title (GTK_WINDOW (window), "Toolbar test");
714 gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
716 gtk_signal_connect (GTK_OBJECT (window), "destroy",
717 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
720 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
721 gtk_widget_realize (window);
723 toolbar = gtk_toolbar_new ();
725 gtk_toolbar_insert_stock (GTK_TOOLBAR (toolbar),
727 "Stock icon: New", "Toolbar/New",
728 (GtkSignalFunc) set_toolbar_small_stock, toolbar, -1);
730 gtk_toolbar_insert_stock (GTK_TOOLBAR (toolbar),
732 "Stock icon: Open", "Toolbar/Open",
733 (GtkSignalFunc) set_toolbar_large_stock, toolbar, -1);
735 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
736 "Horizontal", "Horizontal toolbar layout", "Toolbar/Horizontal",
737 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
738 (GtkSignalFunc) set_toolbar_horizontal, toolbar);
739 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
740 "Vertical", "Vertical toolbar layout", "Toolbar/Vertical",
741 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
742 (GtkSignalFunc) set_toolbar_vertical, toolbar);
744 gtk_toolbar_append_space (GTK_TOOLBAR(toolbar));
746 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
747 "Icons", "Only show toolbar icons", "Toolbar/IconsOnly",
748 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
749 (GtkSignalFunc) set_toolbar_icons, toolbar);
750 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
751 "Text", "Only show toolbar text", "Toolbar/TextOnly",
752 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
753 (GtkSignalFunc) set_toolbar_text, toolbar);
754 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
755 "Both", "Show toolbar icons and text", "Toolbar/Both",
756 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
757 (GtkSignalFunc) set_toolbar_both, toolbar);
758 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
760 "Show toolbar icons and text in a horizontal fashion",
762 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
763 (GtkSignalFunc) set_toolbar_both_horiz, toolbar);
765 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
767 entry = gtk_entry_new ();
769 gtk_toolbar_append_widget (GTK_TOOLBAR (toolbar), entry, "This is an unusable GtkEntry ;)", "Hey don't click me!!!");
771 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
774 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
776 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
777 "Enable", "Enable tooltips", NULL,
778 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
779 (GtkSignalFunc) set_toolbar_enable, toolbar);
780 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
781 "Disable", "Disable tooltips", NULL,
782 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
783 (GtkSignalFunc) set_toolbar_disable, toolbar);
785 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
787 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
788 "Frobate", "Frobate tooltip", NULL,
789 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
790 (GtkSignalFunc) NULL, toolbar);
791 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
792 "Baz", "Baz tooltip", NULL,
793 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
794 (GtkSignalFunc) NULL, toolbar);
796 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
798 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
799 "Blah", "Blah tooltip", NULL,
800 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
801 (GtkSignalFunc) NULL, toolbar);
802 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
803 "Bar", "Bar tooltip", NULL,
804 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
805 (GtkSignalFunc) NULL, toolbar);
807 gtk_container_add (GTK_CONTAINER (window), toolbar);
810 if (!GTK_WIDGET_VISIBLE (window))
811 gtk_widget_show_all (window);
813 gtk_widget_destroy (window);
817 make_toolbar (GtkWidget *window)
821 if (!GTK_WIDGET_REALIZED (window))
822 gtk_widget_realize (window);
824 toolbar = gtk_toolbar_new ();
826 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
827 "Horizontal", "Horizontal toolbar layout", NULL,
828 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
829 (GtkSignalFunc) set_toolbar_horizontal, toolbar);
830 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
831 "Vertical", "Vertical toolbar layout", NULL,
832 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
833 (GtkSignalFunc) set_toolbar_vertical, toolbar);
835 gtk_toolbar_append_space (GTK_TOOLBAR(toolbar));
837 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
838 "Icons", "Only show toolbar icons", NULL,
839 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
840 (GtkSignalFunc) set_toolbar_icons, toolbar);
841 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
842 "Text", "Only show toolbar text", NULL,
843 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
844 (GtkSignalFunc) set_toolbar_text, toolbar);
845 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
846 "Both", "Show toolbar icons and text", NULL,
847 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
848 (GtkSignalFunc) set_toolbar_both, toolbar);
850 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
852 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
853 "Woot", "Woot woot woot", NULL,
854 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
855 (GtkSignalFunc) NULL, toolbar);
856 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
857 "Blah", "Blah blah blah", "Toolbar/Big",
858 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
859 (GtkSignalFunc) NULL, toolbar);
861 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
863 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
864 "Enable", "Enable tooltips", NULL,
865 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
866 (GtkSignalFunc) set_toolbar_enable, toolbar);
867 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
868 "Disable", "Disable tooltips", NULL,
869 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
870 (GtkSignalFunc) set_toolbar_disable, toolbar);
872 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
874 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
875 "Hoo", "Hoo tooltip", NULL,
876 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
877 (GtkSignalFunc) NULL, toolbar);
878 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
879 "Woo", "Woo tooltip", NULL,
880 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
881 (GtkSignalFunc) NULL, toolbar);
890 static guint statusbar_counter = 1;
893 statusbar_push (GtkWidget *button,
894 GtkStatusbar *statusbar)
898 sprintf (text, "something %d", statusbar_counter++);
900 gtk_statusbar_push (statusbar, 1, text);
904 statusbar_pop (GtkWidget *button,
905 GtkStatusbar *statusbar)
907 gtk_statusbar_pop (statusbar, 1);
911 statusbar_steal (GtkWidget *button,
912 GtkStatusbar *statusbar)
914 gtk_statusbar_remove (statusbar, 1, 4);
918 statusbar_popped (GtkStatusbar *statusbar,
922 if (!statusbar->messages)
923 statusbar_counter = 1;
927 statusbar_contexts (GtkStatusbar *statusbar)
931 string = "any context";
932 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
934 gtk_statusbar_get_context_id (statusbar, string));
936 string = "idle messages";
937 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
939 gtk_statusbar_get_context_id (statusbar, string));
941 string = "some text";
942 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
944 gtk_statusbar_get_context_id (statusbar, string));
946 string = "hit the mouse";
947 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
949 gtk_statusbar_get_context_id (statusbar, string));
951 string = "hit the mouse2";
952 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
954 gtk_statusbar_get_context_id (statusbar, string));
958 create_statusbar (void)
960 static GtkWidget *window = NULL;
964 GtkWidget *separator;
965 GtkWidget *statusbar;
969 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
971 gtk_signal_connect (GTK_OBJECT (window), "destroy",
972 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
975 gtk_window_set_title (GTK_WINDOW (window), "statusbar");
976 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
978 box1 = gtk_vbox_new (FALSE, 0);
979 gtk_container_add (GTK_CONTAINER (window), box1);
981 box2 = gtk_vbox_new (FALSE, 10);
982 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
983 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
985 statusbar = gtk_statusbar_new ();
986 gtk_box_pack_end (GTK_BOX (box1), statusbar, TRUE, TRUE, 0);
987 gtk_signal_connect (GTK_OBJECT (statusbar),
989 GTK_SIGNAL_FUNC (statusbar_popped),
992 button = gtk_widget_new (gtk_button_get_type (),
993 "label", "push something",
997 g_object_connect (G_OBJECT (button),
998 "signal::clicked", statusbar_push, statusbar,
1001 button = g_object_connect (gtk_widget_new (gtk_button_get_type (),
1006 "signal_after::clicked", statusbar_pop, statusbar,
1009 button = g_object_connect (gtk_widget_new (gtk_button_get_type (),
1010 "label", "steal #4",
1014 "signal_after::clicked", statusbar_steal, statusbar,
1017 button = g_object_connect (gtk_widget_new (gtk_button_get_type (),
1018 "label", "test contexts",
1022 "swapped_signal_after::clicked", statusbar_contexts, statusbar,
1025 separator = gtk_hseparator_new ();
1026 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
1028 box2 = gtk_vbox_new (FALSE, 10);
1029 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
1030 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
1032 button = gtk_button_new_with_label ("close");
1033 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
1034 GTK_SIGNAL_FUNC(gtk_widget_destroy),
1035 GTK_OBJECT (window));
1036 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
1037 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
1038 gtk_widget_grab_default (button);
1041 if (!GTK_WIDGET_VISIBLE (window))
1042 gtk_widget_show_all (window);
1044 gtk_widget_destroy (window);
1052 cb_tree_destroy_event(GtkWidget* w)
1054 sTreeButtons* tree_buttons;
1056 /* free buttons structure associate at this tree */
1057 tree_buttons = gtk_object_get_user_data (GTK_OBJECT (w));
1058 g_free (tree_buttons);
1062 cb_add_new_item(GtkWidget* w, GtkTree* tree)
1064 sTreeButtons* tree_buttons;
1065 GList* selected_list;
1066 GtkWidget* selected_item;
1068 GtkWidget* item_new;
1071 tree_buttons = gtk_object_get_user_data(GTK_OBJECT(tree));
1073 selected_list = GTK_TREE_SELECTION_OLD(tree);
1075 if(selected_list == NULL)
1077 /* there is no item in tree */
1078 subtree = GTK_WIDGET(tree);
1082 /* list can have only one element */
1083 selected_item = GTK_WIDGET(selected_list->data);
1085 subtree = GTK_TREE_ITEM_SUBTREE(selected_item);
1089 /* current selected item have not subtree ... create it */
1090 subtree = gtk_tree_new();
1091 gtk_tree_item_set_subtree(GTK_TREE_ITEM(selected_item),
1096 /* at this point, we know which subtree will be used to add new item */
1097 /* create a new item */
1098 sprintf(buffer, "item add %d", tree_buttons->nb_item_add);
1099 item_new = gtk_tree_item_new_with_label(buffer);
1100 gtk_tree_append(GTK_TREE(subtree), item_new);
1101 gtk_widget_show(item_new);
1103 tree_buttons->nb_item_add++;
1107 cb_remove_item(GtkWidget*w, GtkTree* tree)
1109 GList* selected_list;
1112 selected_list = GTK_TREE_SELECTION_OLD(tree);
1116 while (selected_list)
1118 clear_list = g_list_prepend (clear_list, selected_list->data);
1119 selected_list = selected_list->next;
1122 clear_list = g_list_reverse (clear_list);
1123 gtk_tree_remove_items(tree, clear_list);
1125 g_list_free (clear_list);
1129 cb_remove_subtree(GtkWidget*w, GtkTree* tree)
1131 GList* selected_list;
1134 selected_list = GTK_TREE_SELECTION_OLD(tree);
1138 item = GTK_TREE_ITEM (selected_list->data);
1140 gtk_tree_item_remove_subtree (item);
1145 cb_tree_changed(GtkTree* tree)
1147 sTreeButtons* tree_buttons;
1148 GList* selected_list;
1151 tree_buttons = gtk_object_get_user_data(GTK_OBJECT(tree));
1153 selected_list = GTK_TREE_SELECTION_OLD(tree);
1154 nb_selected = g_list_length(selected_list);
1156 if(nb_selected == 0)
1158 if(tree->children == NULL)
1159 gtk_widget_set_sensitive(tree_buttons->add_button, TRUE);
1161 gtk_widget_set_sensitive(tree_buttons->add_button, FALSE);
1162 gtk_widget_set_sensitive(tree_buttons->remove_button, FALSE);
1163 gtk_widget_set_sensitive(tree_buttons->subtree_button, FALSE);
1167 gtk_widget_set_sensitive(tree_buttons->remove_button, TRUE);
1168 gtk_widget_set_sensitive(tree_buttons->add_button, (nb_selected == 1));
1169 gtk_widget_set_sensitive(tree_buttons->subtree_button, (nb_selected == 1));
1174 create_subtree(GtkWidget* item, guint level, guint nb_item_max, guint recursion_level_max)
1176 GtkWidget* item_subtree;
1177 GtkWidget* item_new;
1182 if(level == recursion_level_max) return;
1186 /* query with no root item */
1188 item_subtree = item;
1193 /* query with no root item */
1194 /* create subtree and associate it with current item */
1195 item_subtree = gtk_tree_new();
1199 for(nb_item = 0; nb_item < nb_item_max; nb_item++)
1201 sprintf(buffer, "item %d-%d", level, nb_item);
1202 item_new = gtk_tree_item_new_with_label(buffer);
1203 gtk_tree_append(GTK_TREE(item_subtree), item_new);
1204 create_subtree(item_new, level+1, nb_item_max, recursion_level_max);
1205 gtk_widget_show(item_new);
1209 gtk_tree_item_set_subtree(GTK_TREE_ITEM(item), item_subtree);
1213 create_tree_sample(guint selection_mode,
1214 guint draw_line, guint view_line, guint no_root_item,
1215 guint nb_item_max, guint recursion_level_max)
1220 GtkWidget* separator;
1222 GtkWidget* scrolled_win;
1223 GtkWidget* root_tree;
1224 GtkWidget* root_item;
1225 sTreeButtons* tree_buttons;
1227 /* create tree buttons struct */
1228 if ((tree_buttons = g_malloc (sizeof (sTreeButtons))) == NULL)
1230 g_error("can't allocate memory for tree structure !\n");
1233 tree_buttons->nb_item_add = 0;
1235 /* create top level window */
1236 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
1237 gtk_window_set_title(GTK_WINDOW(window), "Tree Sample");
1238 gtk_signal_connect(GTK_OBJECT(window), "destroy",
1239 (GtkSignalFunc) cb_tree_destroy_event, NULL);
1240 gtk_object_set_user_data(GTK_OBJECT(window), tree_buttons);
1242 box1 = gtk_vbox_new(FALSE, 0);
1243 gtk_container_add(GTK_CONTAINER(window), box1);
1244 gtk_widget_show(box1);
1246 /* create tree box */
1247 box2 = gtk_vbox_new(FALSE, 0);
1248 gtk_box_pack_start(GTK_BOX(box1), box2, TRUE, TRUE, 0);
1249 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1250 gtk_widget_show(box2);
1252 /* create scrolled window */
1253 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
1254 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
1255 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1256 gtk_box_pack_start (GTK_BOX (box2), scrolled_win, TRUE, TRUE, 0);
1257 gtk_widget_set_usize (scrolled_win, 200, 200);
1258 gtk_widget_show (scrolled_win);
1260 /* create root tree widget */
1261 root_tree = gtk_tree_new();
1262 gtk_signal_connect(GTK_OBJECT(root_tree), "selection_changed",
1263 (GtkSignalFunc)cb_tree_changed,
1265 gtk_object_set_user_data(GTK_OBJECT(root_tree), tree_buttons);
1266 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_win), root_tree);
1267 gtk_tree_set_selection_mode(GTK_TREE(root_tree), selection_mode);
1268 gtk_tree_set_view_lines(GTK_TREE(root_tree), draw_line);
1269 gtk_tree_set_view_mode(GTK_TREE(root_tree), !view_line);
1270 gtk_widget_show(root_tree);
1274 /* set root tree to subtree function with root item variable */
1275 root_item = GTK_WIDGET(root_tree);
1279 /* create root tree item widget */
1280 root_item = gtk_tree_item_new_with_label("root item");
1281 gtk_tree_append(GTK_TREE(root_tree), root_item);
1282 gtk_widget_show(root_item);
1284 create_subtree(root_item, -no_root_item, nb_item_max, recursion_level_max);
1286 box2 = gtk_vbox_new(FALSE, 0);
1287 gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, FALSE, 0);
1288 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1289 gtk_widget_show(box2);
1291 button = gtk_button_new_with_label("Add Item");
1292 gtk_widget_set_sensitive(button, FALSE);
1293 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1294 (GtkSignalFunc) cb_add_new_item,
1295 (gpointer)root_tree);
1296 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1297 gtk_widget_show(button);
1298 tree_buttons->add_button = button;
1300 button = gtk_button_new_with_label("Remove Item(s)");
1301 gtk_widget_set_sensitive(button, FALSE);
1302 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1303 (GtkSignalFunc) cb_remove_item,
1304 (gpointer)root_tree);
1305 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1306 gtk_widget_show(button);
1307 tree_buttons->remove_button = button;
1309 button = gtk_button_new_with_label("Remove Subtree");
1310 gtk_widget_set_sensitive(button, FALSE);
1311 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1312 (GtkSignalFunc) cb_remove_subtree,
1313 (gpointer)root_tree);
1314 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1315 gtk_widget_show(button);
1316 tree_buttons->subtree_button = button;
1318 /* create separator */
1319 separator = gtk_hseparator_new();
1320 gtk_box_pack_start(GTK_BOX(box1), separator, FALSE, FALSE, 0);
1321 gtk_widget_show(separator);
1323 /* create button box */
1324 box2 = gtk_vbox_new(FALSE, 0);
1325 gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, FALSE, 0);
1326 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1327 gtk_widget_show(box2);
1329 button = gtk_button_new_with_label("Close");
1330 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1331 gtk_signal_connect_object(GTK_OBJECT (button), "clicked",
1332 (GtkSignalFunc) gtk_widget_destroy,
1333 GTK_OBJECT(window));
1334 gtk_widget_show(button);
1336 gtk_widget_show(window);
1340 cb_create_tree(GtkWidget* w)
1342 guint selection_mode = GTK_SELECTION_SINGLE;
1347 guint recursion_level;
1349 /* get selection mode choice */
1350 if(GTK_TOGGLE_BUTTON(sTreeSampleSelection.single_button)->active)
1351 selection_mode = GTK_SELECTION_SINGLE;
1353 if(GTK_TOGGLE_BUTTON(sTreeSampleSelection.browse_button)->active)
1354 selection_mode = GTK_SELECTION_BROWSE;
1356 selection_mode = GTK_SELECTION_MULTIPLE;
1358 /* get options choice */
1359 draw_line = GTK_TOGGLE_BUTTON(sTreeSampleSelection.draw_line_button)->active;
1360 view_line = GTK_TOGGLE_BUTTON(sTreeSampleSelection.view_line_button)->active;
1361 no_root_item = GTK_TOGGLE_BUTTON(sTreeSampleSelection.no_root_item_button)->active;
1364 nb_item = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(sTreeSampleSelection.nb_item_spinner));
1365 recursion_level = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(sTreeSampleSelection.recursion_spinner));
1367 if (pow (nb_item, recursion_level) > 10000)
1369 g_print ("%g total items? That will take a very long time. Try less\n",
1370 pow (nb_item, recursion_level));
1374 create_tree_sample(selection_mode, draw_line, view_line, no_root_item, nb_item, recursion_level);
1378 create_tree_mode_window(void)
1380 static GtkWidget* window;
1388 GtkWidget* separator;
1395 /* create toplevel window */
1396 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
1397 gtk_window_set_title(GTK_WINDOW(window), "Set Tree Parameters");
1398 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1399 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
1401 box1 = gtk_vbox_new(FALSE, 0);
1402 gtk_container_add(GTK_CONTAINER(window), box1);
1404 /* create upper box - selection box */
1405 box2 = gtk_vbox_new(FALSE, 5);
1406 gtk_box_pack_start(GTK_BOX(box1), box2, TRUE, TRUE, 0);
1407 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1409 box3 = gtk_hbox_new(FALSE, 5);
1410 gtk_box_pack_start(GTK_BOX(box2), box3, TRUE, TRUE, 0);
1412 /* create selection mode frame */
1413 frame = gtk_frame_new("Selection Mode");
1414 gtk_box_pack_start(GTK_BOX(box3), frame, TRUE, TRUE, 0);
1416 box4 = gtk_vbox_new(FALSE, 0);
1417 gtk_container_add(GTK_CONTAINER(frame), box4);
1418 gtk_container_set_border_width(GTK_CONTAINER(box4), 5);
1420 /* create radio button */
1421 button = gtk_radio_button_new_with_label(NULL, "SINGLE");
1422 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1423 sTreeSampleSelection.single_button = button;
1425 button = gtk_radio_button_new_with_label(gtk_radio_button_get_group (GTK_RADIO_BUTTON (button)),
1427 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1428 sTreeSampleSelection.browse_button = button;
1430 button = gtk_radio_button_new_with_label(gtk_radio_button_get_group (GTK_RADIO_BUTTON (button)),
1432 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1433 sTreeSampleSelection.multiple_button = button;
1435 sTreeSampleSelection.selection_mode_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (button));
1437 /* create option mode frame */
1438 frame = gtk_frame_new("Options");
1439 gtk_box_pack_start(GTK_BOX(box3), frame, TRUE, TRUE, 0);
1441 box4 = gtk_vbox_new(FALSE, 0);
1442 gtk_container_add(GTK_CONTAINER(frame), box4);
1443 gtk_container_set_border_width(GTK_CONTAINER(box4), 5);
1445 /* create check button */
1446 button = gtk_check_button_new_with_label("Draw line");
1447 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1448 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
1449 sTreeSampleSelection.draw_line_button = button;
1451 button = gtk_check_button_new_with_label("View Line mode");
1452 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1453 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
1454 sTreeSampleSelection.view_line_button = button;
1456 button = gtk_check_button_new_with_label("Without Root item");
1457 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1458 sTreeSampleSelection.no_root_item_button = button;
1460 /* create recursion parameter */
1461 frame = gtk_frame_new("Size Parameters");
1462 gtk_box_pack_start(GTK_BOX(box2), frame, TRUE, TRUE, 0);
1464 box4 = gtk_hbox_new(FALSE, 5);
1465 gtk_container_add(GTK_CONTAINER(frame), box4);
1466 gtk_container_set_border_width(GTK_CONTAINER(box4), 5);
1468 /* create number of item spin button */
1469 box5 = gtk_hbox_new(FALSE, 5);
1470 gtk_box_pack_start(GTK_BOX(box4), box5, FALSE, FALSE, 0);
1472 label = gtk_label_new("Number of items : ");
1473 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
1474 gtk_box_pack_start (GTK_BOX (box5), label, FALSE, TRUE, 0);
1476 adj = (GtkAdjustment *) gtk_adjustment_new (DEFAULT_NUMBER_OF_ITEM, 1.0, 255.0, 1.0,
1478 spinner = gtk_spin_button_new (adj, 0, 0);
1479 gtk_box_pack_start (GTK_BOX (box5), spinner, FALSE, TRUE, 0);
1480 sTreeSampleSelection.nb_item_spinner = spinner;
1482 /* create recursion level spin button */
1483 box5 = gtk_hbox_new(FALSE, 5);
1484 gtk_box_pack_start(GTK_BOX(box4), box5, FALSE, FALSE, 0);
1486 label = gtk_label_new("Depth : ");
1487 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
1488 gtk_box_pack_start (GTK_BOX (box5), label, FALSE, TRUE, 0);
1490 adj = (GtkAdjustment *) gtk_adjustment_new (DEFAULT_RECURSION_LEVEL, 0.0, 255.0, 1.0,
1492 spinner = gtk_spin_button_new (adj, 0, 0);
1493 gtk_box_pack_start (GTK_BOX (box5), spinner, FALSE, TRUE, 0);
1494 sTreeSampleSelection.recursion_spinner = spinner;
1496 /* create horizontal separator */
1497 separator = gtk_hseparator_new();
1498 gtk_box_pack_start(GTK_BOX(box1), separator, FALSE, FALSE, 0);
1500 /* create bottom button box */
1501 box2 = gtk_hbox_new(TRUE, 10);
1502 gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, FALSE, 0);
1503 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1505 button = gtk_button_new_with_label("Create Tree");
1506 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1507 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1508 (GtkSignalFunc) cb_create_tree, NULL);
1510 button = gtk_button_new_with_label("Close");
1511 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1512 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
1513 GTK_SIGNAL_FUNC(gtk_widget_destroy),
1514 GTK_OBJECT (window));
1516 if (!GTK_WIDGET_VISIBLE (window))
1517 gtk_widget_show_all (window);
1519 gtk_widget_destroy (window);
1527 handle_box_child_signal (GtkHandleBox *hb,
1529 const gchar *action)
1531 printf ("%s: child <%s> %sed\n",
1532 gtk_type_name (GTK_OBJECT_TYPE (hb)),
1533 gtk_type_name (GTK_OBJECT_TYPE (child)),
1538 create_handle_box (void)
1540 static GtkWidget* window = NULL;
1541 GtkWidget *handle_box;
1542 GtkWidget *handle_box2;
1547 GtkWidget *separator;
1551 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1552 gtk_window_set_title (GTK_WINDOW (window),
1554 gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
1556 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1557 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
1560 gtk_container_set_border_width (GTK_CONTAINER (window), 20);
1562 vbox = gtk_vbox_new (FALSE, 0);
1563 gtk_container_add (GTK_CONTAINER (window), vbox);
1564 gtk_widget_show (vbox);
1566 label = gtk_label_new ("Above");
1567 gtk_container_add (GTK_CONTAINER (vbox), label);
1568 gtk_widget_show (label);
1570 separator = gtk_hseparator_new ();
1571 gtk_container_add (GTK_CONTAINER (vbox), separator);
1572 gtk_widget_show (separator);
1574 hbox = gtk_hbox_new (FALSE, 10);
1575 gtk_container_add (GTK_CONTAINER (vbox), hbox);
1576 gtk_widget_show (hbox);
1578 separator = gtk_hseparator_new ();
1579 gtk_container_add (GTK_CONTAINER (vbox), separator);
1580 gtk_widget_show (separator);
1582 label = gtk_label_new ("Below");
1583 gtk_container_add (GTK_CONTAINER (vbox), label);
1584 gtk_widget_show (label);
1586 handle_box = gtk_handle_box_new ();
1587 gtk_box_pack_start (GTK_BOX (hbox), handle_box, FALSE, FALSE, 0);
1588 gtk_signal_connect (GTK_OBJECT (handle_box),
1590 GTK_SIGNAL_FUNC (handle_box_child_signal),
1592 gtk_signal_connect (GTK_OBJECT (handle_box),
1594 GTK_SIGNAL_FUNC (handle_box_child_signal),
1596 gtk_widget_show (handle_box);
1598 toolbar = make_toolbar (window);
1600 gtk_container_add (GTK_CONTAINER (handle_box), toolbar);
1601 gtk_widget_show (toolbar);
1603 handle_box = gtk_handle_box_new ();
1604 gtk_box_pack_start (GTK_BOX (hbox), handle_box, FALSE, FALSE, 0);
1605 gtk_signal_connect (GTK_OBJECT (handle_box),
1607 GTK_SIGNAL_FUNC (handle_box_child_signal),
1609 gtk_signal_connect (GTK_OBJECT (handle_box),
1611 GTK_SIGNAL_FUNC (handle_box_child_signal),
1613 gtk_widget_show (handle_box);
1615 handle_box2 = gtk_handle_box_new ();
1616 gtk_container_add (GTK_CONTAINER (handle_box), handle_box2);
1617 gtk_signal_connect (GTK_OBJECT (handle_box2),
1619 GTK_SIGNAL_FUNC (handle_box_child_signal),
1621 gtk_signal_connect (GTK_OBJECT (handle_box2),
1623 GTK_SIGNAL_FUNC (handle_box_child_signal),
1625 gtk_widget_show (handle_box2);
1627 label = gtk_label_new ("Fooo!");
1628 gtk_container_add (GTK_CONTAINER (handle_box2), label);
1629 gtk_widget_show (label);
1632 if (!GTK_WIDGET_VISIBLE (window))
1633 gtk_widget_show (window);
1635 gtk_widget_destroy (window);
1639 * Test for getting an image from a drawable
1650 take_snapshot (GtkWidget *button,
1653 struct GetImageData *gid = data;
1654 GdkRectangle visible;
1656 int height_fraction;
1659 GdkColor color = { 0, 30000, 0, 0 };
1660 GdkRectangle target;
1663 /* Do some begin_paint_rect on some random rects, draw some
1664 * distinctive stuff into those rects, then take the snapshot.
1665 * figure out whether any rects were overlapped and report to
1669 visible = gid->sw->allocation;
1671 visible.x = gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (gid->sw))->value;
1672 visible.y = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (gid->sw))->value;
1674 width_fraction = visible.width / 4;
1675 height_fraction = visible.height / 4;
1677 gc = gdk_gc_new (gid->src->window);
1678 black_gc = gid->src->style->black_gc;
1680 gdk_gc_set_rgb_fg_color (gc, &color);
1683 target.x = visible.x + width_fraction;
1684 target.y = visible.y + height_fraction * 3;
1685 target.width = width_fraction;
1686 target.height = height_fraction / 2;
1688 gdk_window_begin_paint_rect (gid->src->window,
1691 gdk_draw_rectangle (gid->src->window,
1695 target.width, target.height);
1697 gdk_draw_rectangle (gid->src->window,
1700 target.x + 10, target.y + 10,
1701 target.width - 20, target.height - 20);
1703 target.x = visible.x + width_fraction;
1704 target.y = visible.y + height_fraction;
1705 target.width = width_fraction;
1706 target.height = height_fraction;
1708 gdk_window_begin_paint_rect (gid->src->window,
1711 gdk_draw_rectangle (gid->src->window,
1715 target.width, target.height);
1717 gdk_draw_rectangle (gid->src->window,
1720 target.x + 10, target.y + 10,
1721 target.width - 20, target.height - 20);
1723 target.x = visible.x + width_fraction * 3;
1724 target.y = visible.y + height_fraction;
1725 target.width = width_fraction / 2;
1726 target.height = height_fraction;
1728 gdk_window_begin_paint_rect (gid->src->window,
1731 gdk_draw_rectangle (gid->src->window,
1735 target.width, target.height);
1737 gdk_draw_rectangle (gid->src->window,
1740 target.x + 10, target.y + 10,
1741 target.width - 20, target.height - 20);
1743 target.x = visible.x + width_fraction * 2;
1744 target.y = visible.y + height_fraction * 2;
1745 target.width = width_fraction / 4;
1746 target.height = height_fraction / 4;
1748 gdk_window_begin_paint_rect (gid->src->window,
1751 gdk_draw_rectangle (gid->src->window,
1755 target.width, target.height);
1757 gdk_draw_rectangle (gid->src->window,
1760 target.x + 10, target.y + 10,
1761 target.width - 20, target.height - 20);
1763 target.x += target.width / 2;
1764 target.y += target.width / 2;
1766 gdk_window_begin_paint_rect (gid->src->window,
1769 gdk_draw_rectangle (gid->src->window,
1773 target.width, target.height);
1775 gdk_draw_rectangle (gid->src->window,
1778 target.x + 10, target.y + 10,
1779 target.width - 20, target.height - 20);
1781 /* Screen shot area */
1783 target.x = visible.x + width_fraction * 1.5;
1784 target.y = visible.y + height_fraction * 1.5;
1785 target.width = width_fraction * 2;
1786 target.height = height_fraction * 2;
1788 shot = gdk_drawable_get_image (gid->src->window,
1790 target.width, target.height);
1792 gtk_image_set_from_image (GTK_IMAGE (gid->snap),
1795 g_object_unref (G_OBJECT (shot));
1797 gdk_window_end_paint (gid->src->window);
1798 gdk_window_end_paint (gid->src->window);
1799 gdk_window_end_paint (gid->src->window);
1800 gdk_window_end_paint (gid->src->window);
1801 gdk_window_end_paint (gid->src->window);
1803 gdk_draw_rectangle (gid->src->window,
1804 gid->src->style->black_gc,
1807 target.width, target.height);
1809 g_object_unref (G_OBJECT (gc));
1813 image_source_expose (GtkWidget *da,
1814 GdkEventExpose *event,
1817 int x = event->area.x;
1818 GdkColor red = { 0, 65535, 0, 0 };
1819 GdkColor green = { 0, 0, 65535, 0 };
1820 GdkColor blue = { 0, 0, 0, 65535 };
1823 gc = gdk_gc_new (event->window);
1825 while (x < (event->area.x + event->area.width))
1832 gdk_gc_set_rgb_fg_color (gc, &red);
1838 gdk_gc_set_rgb_fg_color (gc, &green);
1844 gdk_gc_set_rgb_fg_color (gc, &blue);
1848 g_assert_not_reached ();
1852 gdk_draw_line (event->window,
1855 x, event->area.y + event->area.height);
1860 g_object_unref (G_OBJECT (gc));
1866 create_get_image (void)
1868 static GtkWidget *window = NULL;
1871 gtk_widget_destroy (window);
1880 struct GetImageData *gid;
1882 gid = g_new (struct GetImageData, 1);
1884 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1886 gtk_signal_connect (GTK_OBJECT (window),
1888 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
1891 gtk_object_set_data_full (GTK_OBJECT (window),
1892 "testgtk-get-image-data",
1896 vbox = gtk_vbox_new (FALSE, 0);
1898 gtk_container_add (GTK_CONTAINER (window), vbox);
1900 sw = gtk_scrolled_window_new (NULL, NULL);
1901 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
1902 GTK_POLICY_AUTOMATIC,
1903 GTK_POLICY_AUTOMATIC);
1907 gtk_widget_set_usize (sw, 400, 400);
1909 src = gtk_drawing_area_new ();
1910 gtk_widget_set_usize (src, 10000, 10000);
1912 gtk_signal_connect (GTK_OBJECT (src),
1914 GTK_SIGNAL_FUNC (image_source_expose),
1919 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (sw),
1922 gtk_box_pack_start (GTK_BOX (vbox),
1926 hbox = gtk_hbox_new (FALSE, 3);
1928 snap = gtk_widget_new (GTK_TYPE_IMAGE, NULL);
1932 sw = gtk_scrolled_window_new (NULL, NULL);
1933 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
1934 GTK_POLICY_AUTOMATIC,
1935 GTK_POLICY_AUTOMATIC);
1936 gtk_widget_set_usize (sw, 300, 300);
1938 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (sw), snap);
1940 gtk_box_pack_end (GTK_BOX (hbox), sw, FALSE, FALSE, 5);
1942 button = gtk_button_new_with_label ("Get image from drawable");
1944 gtk_signal_connect (GTK_OBJECT (button),
1946 GTK_SIGNAL_FUNC (take_snapshot),
1949 gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
1951 gtk_box_pack_end (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
1953 gtk_widget_show_all (window);
1961 sensitivity_toggled (GtkWidget *toggle,
1964 gtk_widget_set_sensitive (widget, GTK_TOGGLE_BUTTON (toggle)->active);
1968 create_sensitivity_control (GtkWidget *widget)
1972 button = gtk_toggle_button_new_with_label ("Sensitive");
1974 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button),
1975 GTK_WIDGET_IS_SENSITIVE (widget));
1977 gtk_signal_connect (GTK_OBJECT (button),
1979 GTK_SIGNAL_FUNC (sensitivity_toggled),
1982 gtk_widget_show_all (button);
1988 set_selectable_recursive (GtkWidget *widget,
1991 if (GTK_IS_CONTAINER (widget))
1996 children = gtk_container_children (GTK_CONTAINER (widget));
2000 set_selectable_recursive (tmp->data, setting);
2004 g_list_free (children);
2006 else if (GTK_IS_LABEL (widget))
2008 gtk_label_set_selectable (GTK_LABEL (widget), setting);
2013 selectable_toggled (GtkWidget *toggle,
2016 set_selectable_recursive (widget,
2017 GTK_TOGGLE_BUTTON (toggle)->active);
2021 create_selectable_control (GtkWidget *widget)
2025 button = gtk_toggle_button_new_with_label ("Selectable");
2027 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button),
2030 gtk_signal_connect (GTK_OBJECT (button),
2032 GTK_SIGNAL_FUNC (selectable_toggled),
2035 gtk_widget_show_all (button);
2040 void create_labels (void)
2042 static GtkWidget *window = NULL;
2051 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2052 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2053 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2056 gtk_window_set_title (GTK_WINDOW (window), "Label");
2058 vbox = gtk_vbox_new (FALSE, 5);
2060 hbox = gtk_hbox_new (FALSE, 5);
2061 gtk_container_add (GTK_CONTAINER (window), vbox);
2063 gtk_box_pack_end (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
2065 button = create_sensitivity_control (hbox);
2067 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
2069 button = create_selectable_control (hbox);
2071 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
2073 vbox = gtk_vbox_new (FALSE, 5);
2075 gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);
2076 gtk_container_set_border_width (GTK_CONTAINER (window), 5);
2078 frame = gtk_frame_new ("Normal Label");
2079 label = gtk_label_new ("This is a Normal label");
2080 gtk_container_add (GTK_CONTAINER (frame), label);
2081 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2083 frame = gtk_frame_new ("Multi-line Label");
2084 label = gtk_label_new ("This is a Multi-line label.\nSecond line\nThird line");
2085 gtk_container_add (GTK_CONTAINER (frame), label);
2086 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2088 frame = gtk_frame_new ("Left Justified Label");
2089 label = gtk_label_new ("This is a Left-Justified\nMulti-line label.\nThird line");
2090 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2091 gtk_container_add (GTK_CONTAINER (frame), label);
2092 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2094 frame = gtk_frame_new ("Right Justified Label");
2095 label = gtk_label_new ("This is a Right-Justified\nMulti-line label.\nFourth line, (j/k)");
2096 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_RIGHT);
2097 gtk_container_add (GTK_CONTAINER (frame), label);
2098 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2100 frame = gtk_frame_new ("Internationalized Label");
2101 label = gtk_label_new (NULL);
2102 gtk_label_set_markup (GTK_LABEL (label),
2103 "French (Français) Bonjour, Salut\n"
2104 "Korean (한글) 안녕하세요, 안녕하십니까\n"
2105 "Russian (Русский) Здравствуйте!\n"
2106 "Chinese (Simplified) <span lang=\"zh-cn\">元气 开发</span>\n"
2107 "Chinese (Traditional) <span lang=\"zh-tw\">元氣 開發</span>\n"
2108 "Japanese <span lang=\"ja\">元気 開発</span>");
2109 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2110 gtk_container_add (GTK_CONTAINER (frame), label);
2111 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2113 frame = gtk_frame_new ("Bidirection Label");
2114 label = gtk_label_new ("Arabic السلام عليكم\n"
2116 gtk_widget_set_direction (label, GTK_TEXT_DIR_RTL);
2117 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_RIGHT);
2118 gtk_container_add (GTK_CONTAINER (frame), label);
2119 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2121 vbox = gtk_vbox_new (FALSE, 5);
2122 gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);
2123 frame = gtk_frame_new ("Line wrapped label");
2124 label = gtk_label_new ("This is an example of a line-wrapped label. It should not be taking "\
2125 "up the entire "/* big space to test spacing */\
2126 "width allocated to it, but automatically wraps the words to fit. "\
2127 "The time has come, for all good men, to come to the aid of their party. "\
2128 "The sixth sheik's six sheep's sick.\n"\
2129 " It supports multiple paragraphs correctly, and correctly adds "\
2130 "many extra spaces. ");
2132 gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
2133 gtk_container_add (GTK_CONTAINER (frame), label);
2134 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2136 frame = gtk_frame_new ("Filled, wrapped label");
2137 label = gtk_label_new ("This is an example of a line-wrapped, filled label. It should be taking "\
2138 "up the entire width allocated to it. Here is a seneance to prove "\
2139 "my point. Here is another sentence. "\
2140 "Here comes the sun, do de do de do.\n"\
2141 " This is a new paragraph.\n"\
2142 " This is another newer, longer, better paragraph. It is coming to an end, "\
2144 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_FILL);
2145 gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
2146 gtk_container_add (GTK_CONTAINER (frame), label);
2147 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2149 frame = gtk_frame_new ("Underlined label");
2150 label = gtk_label_new ("This label is underlined!\n"
2151 "This one is underlined (こんにちは) in quite a funky fashion");
2152 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2153 gtk_label_set_pattern (GTK_LABEL (label), "_________________________ _ _________ _ _____ _ __ __ ___ ____ _____");
2154 gtk_container_add (GTK_CONTAINER (frame), label);
2155 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2157 frame = gtk_frame_new ("Markup label");
2158 label = gtk_label_new (NULL);
2160 /* There's also a gtk_label_set_markup() without accel if you
2161 * don't have an accelerator key
2163 gtk_label_set_markup_with_mnemonic (GTK_LABEL (label),
2164 "This <span foreground=\"blue\" background=\"orange\">label</span> has "
2165 "<b>markup</b> _such as "
2166 "<big><i>Big Italics</i></big>\n"
2167 "<tt>Monospace font</tt>\n"
2168 "<u>Underline!</u>\n"
2170 "<span foreground=\"green\" background=\"red\">Ugly colors</span>\n"
2171 "and nothing on this line,\n"
2174 "or even on this one\n"
2175 "la <big>la <big>la <big>la <big>la</big></big></big></big>\n"
2176 "but this _word is <span foreground=\"purple\"><big>purple</big></span>\n"
2177 "<span underline=\"double\">We like <sup>superscript</sup> and <sub>subscript</sub> too</span>");
2179 g_assert (gtk_label_get_mnemonic_keyval (GTK_LABEL (label)) == GDK_s);
2181 gtk_container_add (GTK_CONTAINER (frame), label);
2182 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2185 if (!GTK_WIDGET_VISIBLE (window))
2186 gtk_widget_show_all (window);
2188 gtk_widget_destroy (window);
2196 reparent_label (GtkWidget *widget,
2197 GtkWidget *new_parent)
2201 label = gtk_object_get_user_data (GTK_OBJECT (widget));
2203 gtk_widget_reparent (label, new_parent);
2207 set_parent_signal (GtkWidget *child,
2208 GtkWidget *old_parent,
2211 g_print ("set_parent for \"%s\": new parent: \"%s\", old parent: \"%s\", data: %d\n",
2212 gtk_type_name (GTK_OBJECT_TYPE (child)),
2213 child->parent ? gtk_type_name (GTK_OBJECT_TYPE (child->parent)) : "NULL",
2214 old_parent ? gtk_type_name (GTK_OBJECT_TYPE (old_parent)) : "NULL",
2215 GPOINTER_TO_INT (func_data));
2219 create_reparent (void)
2221 static GtkWidget *window = NULL;
2228 GtkWidget *separator;
2232 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2234 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2235 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2238 gtk_window_set_title (GTK_WINDOW (window), "reparent");
2239 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
2241 box1 = gtk_vbox_new (FALSE, 0);
2242 gtk_container_add (GTK_CONTAINER (window), box1);
2244 box2 = gtk_hbox_new (FALSE, 5);
2245 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2246 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2248 label = gtk_label_new ("Hello World");
2250 frame = gtk_frame_new ("Frame 1");
2251 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
2253 box3 = gtk_vbox_new (FALSE, 5);
2254 gtk_container_set_border_width (GTK_CONTAINER (box3), 5);
2255 gtk_container_add (GTK_CONTAINER (frame), box3);
2257 button = gtk_button_new_with_label ("switch");
2258 gtk_signal_connect (GTK_OBJECT (button), "clicked",
2259 GTK_SIGNAL_FUNC(reparent_label),
2261 gtk_object_set_user_data (GTK_OBJECT (button), label);
2262 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
2264 gtk_box_pack_start (GTK_BOX (box3), label, FALSE, TRUE, 0);
2265 gtk_signal_connect (GTK_OBJECT (label),
2267 GTK_SIGNAL_FUNC (set_parent_signal),
2268 GINT_TO_POINTER (42));
2270 frame = gtk_frame_new ("Frame 2");
2271 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
2273 box3 = gtk_vbox_new (FALSE, 5);
2274 gtk_container_set_border_width (GTK_CONTAINER (box3), 5);
2275 gtk_container_add (GTK_CONTAINER (frame), box3);
2277 button = gtk_button_new_with_label ("switch");
2278 gtk_signal_connect (GTK_OBJECT (button), "clicked",
2279 GTK_SIGNAL_FUNC(reparent_label),
2281 gtk_object_set_user_data (GTK_OBJECT (button), label);
2282 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
2284 separator = gtk_hseparator_new ();
2285 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2287 box2 = gtk_vbox_new (FALSE, 10);
2288 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2289 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2291 button = gtk_button_new_with_label ("close");
2292 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2293 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2294 GTK_OBJECT (window));
2295 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2296 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2297 gtk_widget_grab_default (button);
2300 if (!GTK_WIDGET_VISIBLE (window))
2301 gtk_widget_show_all (window);
2303 gtk_widget_destroy (window);
2309 gint upositionx = 0;
2310 gint upositiony = 0;
2313 uposition_configure (GtkWidget *window)
2319 lx = gtk_object_get_data (GTK_OBJECT (window), "x");
2320 ly = gtk_object_get_data (GTK_OBJECT (window), "y");
2322 gdk_window_get_root_origin (window->window, &upositionx, &upositiony);
2323 sprintf (buffer, "%d", upositionx);
2324 gtk_label_set_text (lx, buffer);
2325 sprintf (buffer, "%d", upositiony);
2326 gtk_label_set_text (ly, buffer);
2332 uposition_stop_configure (GtkToggleButton *toggle,
2336 gtk_signal_handler_block_by_func (window, GTK_SIGNAL_FUNC (uposition_configure), NULL);
2338 gtk_signal_handler_unblock_by_func (window, GTK_SIGNAL_FUNC (uposition_configure), NULL);
2342 create_saved_position (void)
2344 static GtkWidget *window = NULL;
2349 GtkWidget *main_vbox;
2357 window = g_object_connect (gtk_widget_new (GTK_TYPE_WINDOW,
2358 "type", GTK_WINDOW_TOPLEVEL,
2361 "title", "Saved Position",
2363 "signal::configure_event", uposition_configure, NULL,
2366 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2367 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
2370 main_vbox = gtk_vbox_new (FALSE, 5);
2371 gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 0);
2372 gtk_container_add (GTK_CONTAINER (window), main_vbox);
2375 gtk_widget_new (gtk_vbox_get_type (),
2376 "GtkBox::homogeneous", FALSE,
2377 "GtkBox::spacing", 5,
2378 "GtkContainer::border_width", 10,
2379 "GtkWidget::parent", main_vbox,
2380 "GtkWidget::visible", TRUE,
2381 "child", g_object_connect (gtk_widget_new (GTK_TYPE_TOGGLE_BUTTON,
2382 "label", "Stop Events",
2386 "signal::clicked", uposition_stop_configure, window,
2390 hbox = gtk_hbox_new (FALSE, 0);
2391 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
2392 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
2394 label = gtk_label_new ("X Origin : ");
2395 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
2396 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
2398 x_label = gtk_label_new ("");
2399 gtk_box_pack_start (GTK_BOX (hbox), x_label, TRUE, TRUE, 0);
2400 gtk_object_set_data (GTK_OBJECT (window), "x", x_label);
2402 hbox = gtk_hbox_new (FALSE, 0);
2403 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
2404 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
2406 label = gtk_label_new ("Y Origin : ");
2407 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
2408 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
2410 y_label = gtk_label_new ("");
2411 gtk_box_pack_start (GTK_BOX (hbox), y_label, TRUE, TRUE, 0);
2412 gtk_object_set_data (GTK_OBJECT (window), "y", y_label);
2415 gtk_widget_new (gtk_hseparator_get_type (),
2416 "GtkWidget::visible", TRUE,
2418 gtk_box_pack_start (GTK_BOX (main_vbox), any, FALSE, TRUE, 0);
2420 hbox = gtk_hbox_new (FALSE, 0);
2421 gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
2422 gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
2424 button = gtk_button_new_with_label ("Close");
2425 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2426 GTK_SIGNAL_FUNC (gtk_widget_destroy),
2427 GTK_OBJECT (window));
2428 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
2429 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2430 gtk_widget_grab_default (button);
2432 gtk_widget_show_all (window);
2435 gtk_widget_destroy (window);
2443 create_pixmap (void)
2445 static GtkWidget *window = NULL;
2451 GtkWidget *separator;
2452 GtkWidget *pixmapwid;
2456 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2458 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2459 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2462 gtk_window_set_title (GTK_WINDOW (window), "GtkPixmap");
2463 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
2464 gtk_widget_realize(window);
2466 box1 = gtk_vbox_new (FALSE, 0);
2467 gtk_container_add (GTK_CONTAINER (window), box1);
2469 box2 = gtk_vbox_new (FALSE, 10);
2470 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2471 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2473 button = gtk_button_new ();
2474 gtk_box_pack_start (GTK_BOX (box2), button, FALSE, FALSE, 0);
2476 pixmapwid = new_pixmap ("test.xpm", window->window, NULL);
2478 label = gtk_label_new ("Pixmap\ntest");
2479 box3 = gtk_hbox_new (FALSE, 0);
2480 gtk_container_set_border_width (GTK_CONTAINER (box3), 2);
2481 gtk_container_add (GTK_CONTAINER (box3), pixmapwid);
2482 gtk_container_add (GTK_CONTAINER (box3), label);
2483 gtk_container_add (GTK_CONTAINER (button), box3);
2485 button = gtk_button_new ();
2486 gtk_box_pack_start (GTK_BOX (box2), button, FALSE, FALSE, 0);
2488 pixmapwid = new_pixmap ("test.xpm", window->window, NULL);
2490 label = gtk_label_new ("Pixmap\ntest");
2491 box3 = gtk_hbox_new (FALSE, 0);
2492 gtk_container_set_border_width (GTK_CONTAINER (box3), 2);
2493 gtk_container_add (GTK_CONTAINER (box3), pixmapwid);
2494 gtk_container_add (GTK_CONTAINER (box3), label);
2495 gtk_container_add (GTK_CONTAINER (button), box3);
2497 gtk_widget_set_sensitive (button, FALSE);
2499 separator = gtk_hseparator_new ();
2500 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2502 box2 = gtk_vbox_new (FALSE, 10);
2503 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2504 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2506 button = gtk_button_new_with_label ("close");
2507 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2508 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2509 GTK_OBJECT (window));
2510 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2511 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2512 gtk_widget_grab_default (button);
2515 if (!GTK_WIDGET_VISIBLE (window))
2516 gtk_widget_show_all (window);
2518 gtk_widget_destroy (window);
2522 tips_query_widget_entered (GtkTipsQuery *tips_query,
2524 const gchar *tip_text,
2525 const gchar *tip_private,
2528 if (GTK_TOGGLE_BUTTON (toggle)->active)
2530 gtk_label_set_text (GTK_LABEL (tips_query), tip_text ? "There is a Tip!" : "There is no Tip!");
2531 /* don't let GtkTipsQuery reset its label */
2532 gtk_signal_emit_stop_by_name (GTK_OBJECT (tips_query), "widget_entered");
2537 tips_query_widget_selected (GtkWidget *tips_query,
2539 const gchar *tip_text,
2540 const gchar *tip_private,
2541 GdkEventButton *event,
2545 g_print ("Help \"%s\" requested for <%s>\n",
2546 tip_private ? tip_private : "None",
2547 gtk_type_name (GTK_OBJECT_TYPE (widget)));
2552 create_tooltips (void)
2554 static GtkWidget *window = NULL;
2561 GtkWidget *tips_query;
2562 GtkWidget *separator;
2563 GtkTooltips *tooltips;
2568 gtk_widget_new (gtk_window_get_type (),
2569 "GtkWindow::type", GTK_WINDOW_TOPLEVEL,
2570 "GtkContainer::border_width", 0,
2571 "GtkWindow::title", "Tooltips",
2572 "GtkWindow::allow_shrink", TRUE,
2573 "GtkWindow::allow_grow", FALSE,
2574 "GtkWindow::auto_shrink", TRUE,
2575 "GtkWidget::width", 200,
2578 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2579 GTK_SIGNAL_FUNC (destroy_tooltips),
2582 tooltips=gtk_tooltips_new();
2583 gtk_object_set_data (GTK_OBJECT (window), "tooltips", tooltips);
2585 box1 = gtk_vbox_new (FALSE, 0);
2586 gtk_container_add (GTK_CONTAINER (window), box1);
2588 box2 = gtk_vbox_new (FALSE, 10);
2589 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2590 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2592 button = gtk_toggle_button_new_with_label ("button1");
2593 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2595 gtk_tooltips_set_tip (tooltips,button,"This is button 1", "ContextHelp/buttons/1");
2597 button = gtk_toggle_button_new_with_label ("button2");
2598 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2600 gtk_tooltips_set_tip (tooltips,
2602 "This is button 2. This is also a really long tooltip which probably won't fit on a single line and will therefore need to be wrapped. Hopefully the wrapping will work correctly.",
2603 "ContextHelp/buttons/2_long");
2605 toggle = gtk_toggle_button_new_with_label ("Override TipsQuery Label");
2606 gtk_box_pack_start (GTK_BOX (box2), toggle, TRUE, TRUE, 0);
2608 gtk_tooltips_set_tip (tooltips, toggle, "Toggle TipsQuery view.", "Hi msw! ;)");
2611 gtk_widget_new (gtk_vbox_get_type (),
2612 "homogeneous", FALSE,
2618 tips_query = gtk_tips_query_new ();
2621 gtk_widget_new (gtk_button_get_type (),
2626 g_object_connect (G_OBJECT (button),
2627 "swapped_signal::clicked", gtk_tips_query_start_query, tips_query,
2629 gtk_box_set_child_packing (GTK_BOX (box3), button, FALSE, FALSE, 0, GTK_PACK_START);
2630 gtk_tooltips_set_tip (tooltips,
2632 "Start the Tooltips Inspector",
2633 "ContextHelp/buttons/?");
2636 g_object_set (g_object_connect (tips_query,
2637 "signal::widget_entered", tips_query_widget_entered, toggle,
2638 "signal::widget_selected", tips_query_widget_selected, NULL,
2645 frame = gtk_widget_new (gtk_frame_get_type (),
2646 "label", "ToolTips Inspector",
2647 "label_xalign", (double) 0.5,
2653 gtk_box_set_child_packing (GTK_BOX (box2), frame, TRUE, TRUE, 10, GTK_PACK_START);
2655 separator = gtk_hseparator_new ();
2656 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2658 box2 = gtk_vbox_new (FALSE, 10);
2659 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2660 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2662 button = gtk_button_new_with_label ("close");
2663 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2664 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2665 GTK_OBJECT (window));
2666 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2667 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2668 gtk_widget_grab_default (button);
2670 gtk_tooltips_set_tip (tooltips, button, "Push this button to close window", "ContextHelp/buttons/Close");
2673 if (!GTK_WIDGET_VISIBLE (window))
2674 gtk_widget_show_all (window);
2676 gtk_widget_destroy (window);
2684 pack_image (GtkWidget *box,
2688 gtk_box_pack_start (GTK_BOX (box),
2689 gtk_label_new (text),
2692 gtk_box_pack_start (GTK_BOX (box),
2700 static GtkWidget *window = NULL;
2708 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2709 /* this is bogus for testing drawing when allocation < request,
2710 * don't copy into real code
2712 gtk_window_set_policy (GTK_WINDOW (window), TRUE, TRUE, FALSE);
2714 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2715 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2718 vbox = gtk_vbox_new (FALSE, 5);
2720 gtk_container_add (GTK_CONTAINER (window), vbox);
2722 pack_image (vbox, "Stock Warning Dialog",
2723 gtk_image_new_from_stock (GTK_STOCK_DIALOG_WARNING,
2724 GTK_ICON_SIZE_DIALOG));
2726 pixmap = gdk_pixmap_colormap_create_from_xpm_d (NULL,
2727 gtk_widget_get_colormap (window),
2732 pack_image (vbox, "Pixmap",
2733 gtk_image_new_from_pixmap (pixmap, mask));
2736 if (!GTK_WIDGET_VISIBLE (window))
2737 gtk_widget_show_all (window);
2739 gtk_widget_destroy (window);
2747 create_menu (gint depth, gint length, gboolean tearoff)
2750 GtkWidget *menuitem;
2759 menu = gtk_menu_new ();
2764 menuitem = gtk_tearoff_menu_item_new ();
2765 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
2766 gtk_widget_show (menuitem);
2769 image = gtk_image_new_from_stock (GTK_STOCK_OPEN,
2770 GTK_ICON_SIZE_MENU);
2771 gtk_widget_show (image);
2772 menuitem = gtk_image_menu_item_new_with_label ("Image item");
2773 gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menuitem), image);
2774 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
2775 gtk_widget_show (menuitem);
2777 for (i = 0, j = 1; i < length; i++, j++)
2779 sprintf (buf, "item %2d - %d", depth, j);
2781 menuitem = gtk_radio_menu_item_new_with_label (group, buf);
2782 group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menuitem));
2785 gtk_check_menu_item_set_show_toggle (GTK_CHECK_MENU_ITEM (menuitem), TRUE);
2787 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
2788 gtk_widget_show (menuitem);
2790 gtk_widget_set_sensitive (menuitem, FALSE);
2793 gtk_check_menu_item_set_inconsistent (GTK_CHECK_MENU_ITEM (menuitem),
2797 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (depth - 1, 5, TRUE));
2806 static GtkWidget *window = NULL;
2810 GtkWidget *optionmenu;
2811 GtkWidget *separator;
2817 GtkWidget *menuitem;
2818 GtkAccelGroup *accel_group;
2821 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2823 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2824 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2826 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
2827 GTK_SIGNAL_FUNC (gtk_true),
2830 accel_group = gtk_accel_group_new ();
2831 gtk_accel_group_attach (accel_group, G_OBJECT (window));
2833 gtk_window_set_title (GTK_WINDOW (window), "menus");
2834 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
2837 box1 = gtk_vbox_new (FALSE, 0);
2838 gtk_container_add (GTK_CONTAINER (window), box1);
2839 gtk_widget_show (box1);
2841 menubar = gtk_menu_bar_new ();
2842 gtk_box_pack_start (GTK_BOX (box1), menubar, FALSE, TRUE, 0);
2843 gtk_widget_show (menubar);
2845 menu = create_menu (2, 50, TRUE);
2847 menuitem = gtk_menu_item_new_with_label ("test\nline2");
2848 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), menu);
2849 gtk_menu_bar_append (GTK_MENU_BAR (menubar), menuitem);
2850 gtk_widget_show (menuitem);
2852 menuitem = gtk_menu_item_new_with_label ("foo");
2853 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (3, 5, TRUE));
2854 gtk_menu_bar_append (GTK_MENU_BAR (menubar), menuitem);
2855 gtk_widget_show (menuitem);
2857 image = gtk_image_new_from_stock (GTK_STOCK_HELP,
2858 GTK_ICON_SIZE_MENU);
2859 gtk_widget_show (image);
2860 menuitem = gtk_image_menu_item_new_with_label ("Help");
2861 gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menuitem), image);
2862 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (4, 5, TRUE));
2863 gtk_menu_item_set_right_justified (GTK_MENU_ITEM (menuitem), TRUE);
2864 gtk_menu_bar_append (GTK_MENU_BAR (menubar), menuitem);
2865 gtk_widget_show (menuitem);
2867 box2 = gtk_vbox_new (FALSE, 10);
2868 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2869 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2870 gtk_widget_show (box2);
2872 menu = create_menu (1, 5, FALSE);
2873 gtk_menu_set_accel_group (GTK_MENU (menu), accel_group);
2875 menuitem = gtk_image_menu_item_new_from_stock (GTK_STOCK_NEW, accel_group);
2876 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
2877 gtk_widget_show (menuitem);
2879 menuitem = gtk_check_menu_item_new_with_label ("Accelerate Me");
2880 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
2881 gtk_widget_show (menuitem);
2882 gtk_widget_add_accelerator (menuitem,
2887 GTK_ACCEL_VISIBLE | GTK_ACCEL_SIGNAL_VISIBLE);
2888 menuitem = gtk_check_menu_item_new_with_label ("Accelerator Locked");
2889 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
2890 gtk_widget_show (menuitem);
2891 gtk_widget_add_accelerator (menuitem,
2896 GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
2897 menuitem = gtk_check_menu_item_new_with_label ("Accelerators Frozen");
2898 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
2899 gtk_widget_show (menuitem);
2900 gtk_widget_add_accelerator (menuitem,
2906 gtk_widget_add_accelerator (menuitem,
2912 gtk_widget_lock_accelerators (menuitem);
2914 optionmenu = gtk_option_menu_new ();
2915 gtk_option_menu_set_menu (GTK_OPTION_MENU (optionmenu), menu);
2916 gtk_option_menu_set_history (GTK_OPTION_MENU (optionmenu), 3);
2917 gtk_box_pack_start (GTK_BOX (box2), optionmenu, TRUE, TRUE, 0);
2918 gtk_widget_show (optionmenu);
2920 separator = gtk_hseparator_new ();
2921 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2922 gtk_widget_show (separator);
2924 box2 = gtk_vbox_new (FALSE, 10);
2925 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2926 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2927 gtk_widget_show (box2);
2929 button = gtk_button_new_with_label ("close");
2930 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2931 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2932 GTK_OBJECT (window));
2933 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2934 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2935 gtk_widget_grab_default (button);
2936 gtk_widget_show (button);
2939 if (!GTK_WIDGET_VISIBLE (window))
2940 gtk_widget_show (window);
2942 gtk_widget_destroy (window);
2946 gtk_ifactory_cb (gpointer callback_data,
2947 guint callback_action,
2950 g_message ("ItemFactory: activated \"%s\"", gtk_item_factory_path_from_widget (widget));
2953 /* This file was automatically generated by the make-inline-pixbuf program.
2954 * It contains inline RGB image data.
2956 static const guchar apple[] =
2958 /* File magic (1197763408) */
2959 0x47, 0x64, 0x6b, 0x50,
2960 /* Format of following stuff (0) */
2961 0x00, 0x00, 0x00, 0x00,
2962 /* Rowstride (64) */
2963 0x00, 0x00, 0x00, 0x40,
2965 0x00, 0x00, 0x00, 0x10,
2967 0x00, 0x00, 0x00, 0x10,
2968 /* Has an alpha channel (TRUE) */
2970 /* Colorspace (0 == RGB, no other options implemented) (0) */
2971 0x00, 0x00, 0x00, 0x00,
2972 /* Number of channels (4) */
2973 0x00, 0x00, 0x00, 0x04,
2974 /* Bits per sample (8) */
2975 0x00, 0x00, 0x00, 0x08,
2977 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2978 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2979 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2980 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2981 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2982 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2983 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2984 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x14, 0x0f, 0x04,
2985 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2986 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2987 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2988 0x00, 0x00, 0x00, 0x00, 0x61, 0x6d, 0x5b, 0x2b, 0x6e, 0x7c, 0x61, 0xd9,
2989 0x71, 0x80, 0x63, 0xd7, 0x5f, 0x6b, 0x5b, 0x35, 0x00, 0x00, 0x00, 0x00,
2990 0x3a, 0x35, 0x28, 0x8f, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00,
2991 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2992 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2993 0x00, 0x00, 0x00, 0x00, 0x60, 0x6c, 0x5c, 0x07, 0x6d, 0x7b, 0x61, 0xd8,
2994 0x75, 0x84, 0x65, 0xf6, 0x76, 0x86, 0x66, 0xf7, 0x6a, 0x77, 0x60, 0xec,
2995 0x5e, 0x6a, 0x58, 0x47, 0x1c, 0x1a, 0x13, 0xa2, 0x4b, 0x47, 0x30, 0x07,
2996 0x55, 0x4e, 0x33, 0x21, 0x48, 0x3e, 0x2a, 0x08, 0xd0, 0xb8, 0x84, 0x00,
2997 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2998 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0x76, 0x5f, 0x74,
2999 0x75, 0x84, 0x65, 0xf3, 0x67, 0x75, 0x5e, 0xc4, 0x69, 0x62, 0x55, 0x75,
3000 0x94, 0x50, 0x50, 0x69, 0x75, 0x5c, 0x52, 0xb2, 0x69, 0x38, 0x34, 0xa2,
3001 0xa7, 0x5b, 0x53, 0xea, 0xa3, 0x52, 0x4f, 0xff, 0x90, 0x47, 0x42, 0xfa,
3002 0x76, 0x44, 0x36, 0xb9, 0x59, 0x38, 0x29, 0x3c, 0x00, 0x00, 0x00, 0x00,
3003 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0x6b, 0x5a, 0x09,
3004 0x69, 0x76, 0x5e, 0xb0, 0x5f, 0x6b, 0x59, 0x57, 0x9a, 0x4b, 0x4d, 0x5b,
3005 0xb8, 0x5f, 0x63, 0xfa, 0xcc, 0x7d, 0x7e, 0xff, 0xc5, 0x69, 0x68, 0xff,
3006 0xc7, 0x6b, 0x67, 0xff, 0xc5, 0x6f, 0x67, 0xff, 0xba, 0x5e, 0x5a, 0xff,
3007 0xb1, 0x4d, 0x4d, 0xff, 0x92, 0x4b, 0x42, 0xff, 0x6a, 0x3e, 0x30, 0xfc,
3008 0x5c, 0x3b, 0x27, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3009 0x5d, 0x69, 0x57, 0x09, 0x5d, 0x69, 0x57, 0x09, 0x92, 0x47, 0x46, 0x1e,
3010 0xba, 0x65, 0x64, 0xf4, 0xe7, 0xbf, 0xc0, 0xff, 0xdf, 0xa5, 0xa3, 0xff,
3011 0xd4, 0x84, 0x81, 0xff, 0xd1, 0x7c, 0x76, 0xff, 0xc9, 0x78, 0x6d, 0xff,
3012 0xbb, 0x6a, 0x5d, 0xff, 0xb3, 0x5a, 0x52, 0xff, 0x9f, 0x4b, 0x47, 0xff,
3013 0x78, 0x45, 0x35, 0xff, 0x5f, 0x3c, 0x28, 0xfa, 0x53, 0x5a, 0x38, 0x24,
3014 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3015 0xa1, 0x54, 0x4d, 0x8c, 0xcf, 0x8e, 0x89, 0xff, 0xe3, 0xb1, 0xae, 0xff,
3016 0xd8, 0x94, 0x8e, 0xff, 0xd3, 0x8a, 0x82, 0xff, 0xcf, 0x80, 0x76, 0xff,
3017 0xc4, 0x75, 0x67, 0xff, 0xb7, 0x6c, 0x5c, 0xff, 0xab, 0x5e, 0x51, 0xff,
3018 0x9c, 0x4c, 0x46, 0xff, 0x7e, 0x4a, 0x3a, 0xff, 0x5c, 0x3c, 0x26, 0xff,
3019 0x58, 0x3d, 0x28, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3020 0x00, 0x00, 0x00, 0x00, 0xa2, 0x59, 0x4f, 0xc3, 0xcd, 0x8e, 0x88, 0xff,
3021 0xd3, 0x93, 0x8c, 0xff, 0xd0, 0x8c, 0x83, 0xff, 0xcc, 0x84, 0x79, 0xff,
3022 0xc7, 0x7c, 0x6e, 0xff, 0xbc, 0x73, 0x61, 0xff, 0xb1, 0x6b, 0x59, 0xff,
3023 0xa3, 0x5f, 0x4f, 0xff, 0x93, 0x50, 0x44, 0xff, 0x78, 0x48, 0x35, 0xff,
3024 0x59, 0x3b, 0x25, 0xff, 0x4f, 0x3d, 0x28, 0x4f, 0x00, 0x00, 0x00, 0x00,
3025 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9b, 0x5b, 0x4d, 0xbc,
3026 0xbd, 0x7e, 0x72, 0xff, 0xc6, 0x86, 0x7a, 0xff, 0xc5, 0x7f, 0x72, 0xff,
3027 0xc2, 0x7b, 0x6c, 0xff, 0xbf, 0x77, 0x63, 0xff, 0xb7, 0x72, 0x5b, 0xff,
3028 0xa9, 0x6b, 0x53, 0xff, 0x9a, 0x60, 0x4b, 0xff, 0x8b, 0x56, 0x41, 0xff,
3029 0x6a, 0x44, 0x2e, 0xff, 0x53, 0x38, 0x21, 0xfd, 0x42, 0x4b, 0x2e, 0x1a,
3030 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3031 0x8e, 0x57, 0x48, 0x6e, 0xa6, 0x6b, 0x5a, 0xff, 0xb3, 0x74, 0x62, 0xff,
3032 0xb8, 0x75, 0x61, 0xff, 0xba, 0x76, 0x61, 0xff, 0xb7, 0x74, 0x5c, 0xff,
3033 0xae, 0x6e, 0x54, 0xff, 0x9f, 0x67, 0x4c, 0xff, 0x90, 0x5d, 0x43, 0xff,
3034 0x79, 0x4d, 0x38, 0xff, 0x5c, 0x3d, 0x25, 0xff, 0x50, 0x39, 0x23, 0xb8,
3035 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3036 0x00, 0x00, 0x00, 0x00, 0x78, 0x52, 0x43, 0x07, 0x92, 0x5c, 0x47, 0xdc,
3037 0x9e, 0x64, 0x4e, 0xff, 0xa8, 0x6b, 0x52, 0xff, 0xaa, 0x6d, 0x53, 0xff,
3038 0xa7, 0x6d, 0x50, 0xff, 0x9c, 0x67, 0x4a, 0xff, 0x8e, 0x5d, 0x41, 0xff,
3039 0x7d, 0x54, 0x3a, 0xff, 0x6a, 0x4b, 0x32, 0xff, 0x51, 0x39, 0x23, 0xff,
3040 0x28, 0x20, 0x12, 0x77, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x01,
3041 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3042 0x6f, 0x4a, 0x37, 0x2a, 0x81, 0x54, 0x3d, 0xec, 0x8b, 0x5a, 0x41, 0xff,
3043 0x8b, 0x5a, 0x3f, 0xff, 0x85, 0x56, 0x3c, 0xff, 0x7d, 0x52, 0x38, 0xff,
3044 0x77, 0x51, 0x33, 0xff, 0x6f, 0x4e, 0x34, 0xff, 0x5f, 0x45, 0x2c, 0xff,
3045 0x2e, 0x21, 0x14, 0xff, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x92,
3046 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00,
3047 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x11, 0x0b, 0x08, 0xb4,
3048 0x50, 0x37, 0x25, 0xfe, 0x6d, 0x49, 0x2f, 0xff, 0x52, 0x37, 0x22, 0xff,
3049 0x50, 0x37, 0x21, 0xff, 0x66, 0x45, 0x2b, 0xff, 0x60, 0x46, 0x2c, 0xff,
3050 0x2d, 0x22, 0x16, 0xff, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0xd2,
3051 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00,
3052 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
3053 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x64, 0x09, 0x0a, 0x07, 0xa4,
3054 0x00, 0x00, 0x00, 0xbd, 0x00, 0x00, 0x00, 0xbe, 0x00, 0x00, 0x00, 0xc4,
3055 0x00, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x00, 0x9d, 0x00, 0x00, 0x00, 0x6c,
3056 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00,
3057 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3058 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
3059 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0d,
3060 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x06,
3061 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3062 0x00, 0x00, 0x00, 0x00
3067 dump_accels (gpointer callback_data,
3068 guint callback_action,
3071 gtk_item_factory_dump_items (NULL, FALSE, gtk_item_factory_print_func, stdout);
3074 static GtkItemFactoryEntry menu_items[] =
3076 { "/_File", NULL, 0, 0, "<Branch>" },
3077 { "/File/tearoff1", NULL, gtk_ifactory_cb, 0, "<Tearoff>" },
3078 { "/File/_New", NULL, gtk_ifactory_cb, 0, "<StockItem>", GTK_STOCK_NEW },
3079 { "/File/_Open", NULL, gtk_ifactory_cb, 0, "<StockItem>", GTK_STOCK_OPEN },
3080 { "/File/_Save", NULL, gtk_ifactory_cb, 0, "<StockItem>", GTK_STOCK_SAVE },
3081 { "/File/Save _As...", "<control>A", gtk_ifactory_cb, 0, "<StockItem>", GTK_STOCK_SAVE },
3082 { "/File/_Dump \"_Accels\"", NULL, dump_accels, 0 },
3083 { "/File/\\/Test__Escaping/And\\/\n\tWei\\\\rdly",
3084 NULL, gtk_ifactory_cb, 0 },
3085 { "/File/sep1", NULL, gtk_ifactory_cb, 0, "<Separator>" },
3086 { "/File/_Quit", NULL, gtk_ifactory_cb, 0, "<StockItem>", GTK_STOCK_QUIT },
3088 { "/_Preferences", NULL, 0, 0, "<Branch>" },
3089 { "/_Preferences/_Color", NULL, 0, 0, "<Branch>" },
3090 { "/_Preferences/Color/_Red", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
3091 { "/_Preferences/Color/_Green", NULL, gtk_ifactory_cb, 0, "/Preferences/Color/Red" },
3092 { "/_Preferences/Color/_Blue", NULL, gtk_ifactory_cb, 0, "/Preferences/Color/Red" },
3093 { "/_Preferences/_Shape", NULL, 0, 0, "<Branch>" },
3094 { "/_Preferences/Shape/_Square", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
3095 { "/_Preferences/Shape/_Rectangle", NULL, gtk_ifactory_cb, 0, "/Preferences/Shape/Square" },
3096 { "/_Preferences/Shape/_Oval", NULL, gtk_ifactory_cb, 0, "/Preferences/Shape/Rectangle" },
3097 { "/_Preferences/Shape/_Rectangle", NULL, gtk_ifactory_cb, 0, "/Preferences/Shape/Square" },
3098 { "/_Preferences/Shape/_Oval", NULL, gtk_ifactory_cb, 0, "/Preferences/Shape/Rectangle" },
3099 { "/_Preferences/Shape/_Image", NULL, gtk_ifactory_cb, 0, "<ImageItem>", apple },
3101 /* For testing deletion of menus */
3102 { "/_Preferences/Should_NotAppear", NULL, 0, 0, "<Branch>" },
3103 { "/Preferences/ShouldNotAppear/SubItem1", NULL, gtk_ifactory_cb, 0 },
3104 { "/Preferences/ShouldNotAppear/SubItem2", NULL, gtk_ifactory_cb, 0 },
3106 { "/_Help", NULL, 0, 0, "<LastBranch>" },
3107 { "/Help/_Help", NULL, gtk_ifactory_cb, 0, "<StockItem>", GTK_STOCK_HELP},
3108 { "/Help/_About", NULL, gtk_ifactory_cb, 0 },
3112 static int nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]);
3115 create_item_factory (void)
3117 static GtkWidget *window = NULL;
3123 GtkWidget *separator;
3126 GtkAccelGroup *accel_group;
3127 GtkItemFactory *item_factory;
3129 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3131 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3132 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
3134 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
3135 GTK_SIGNAL_FUNC (gtk_true),
3138 accel_group = gtk_accel_group_new ();
3139 item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>", accel_group);
3140 gtk_object_set_data_full (GTK_OBJECT (window),
3143 (GtkDestroyNotify) gtk_object_unref);
3144 gtk_accel_group_attach (accel_group, G_OBJECT (window));
3145 gtk_window_set_title (GTK_WINDOW (window), "Item Factory");
3146 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
3147 gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL);
3149 /* preselect /Preferences/Shape/Oval over the other radios
3151 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (gtk_item_factory_get_item (item_factory,
3152 "/Preferences/Shape/Oval")),
3155 box1 = gtk_vbox_new (FALSE, 0);
3156 gtk_container_add (GTK_CONTAINER (window), box1);
3158 gtk_box_pack_start (GTK_BOX (box1),
3159 gtk_item_factory_get_widget (item_factory, "<main>"),
3162 label = gtk_label_new ("Type\n<alt>\nto start");
3163 gtk_widget_set_usize (label, 200, 200);
3164 gtk_misc_set_alignment (GTK_MISC (label), 0.5, 0.5);
3165 gtk_box_pack_start (GTK_BOX (box1), label, TRUE, TRUE, 0);
3168 separator = gtk_hseparator_new ();
3169 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
3172 box2 = gtk_vbox_new (FALSE, 10);
3173 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
3174 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
3176 button = gtk_button_new_with_label ("close");
3177 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
3178 GTK_SIGNAL_FUNC(gtk_widget_destroy),
3179 GTK_OBJECT (window));
3180 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
3181 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
3182 gtk_widget_grab_default (button);
3184 gtk_item_factory_delete_item (item_factory, "/Preferences/ShouldNotAppear");
3186 gtk_widget_show_all (window);
3189 gtk_widget_destroy (window);
3197 cmw_destroy_cb(GtkWidget *widget)
3199 /* This is needed to get out of gtk_main */
3206 cmw_color (GtkWidget *widget, GtkWidget *parent)
3210 csd=gtk_color_selection_dialog_new ("This is a modal color selection dialog");
3212 gtk_color_selection_set_has_palette (GTK_COLOR_SELECTION (GTK_COLOR_SELECTION_DIALOG (csd)->colorsel),
3216 gtk_window_set_modal (GTK_WINDOW(csd),TRUE);
3218 /* And mark it as a transient dialog */
3219 gtk_window_set_transient_for (GTK_WINDOW (csd), GTK_WINDOW (parent));
3221 gtk_signal_connect (GTK_OBJECT(csd), "destroy",
3222 GTK_SIGNAL_FUNC(cmw_destroy_cb),NULL);
3224 gtk_signal_connect_object (GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(csd)->ok_button),
3225 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
3227 gtk_signal_connect_object (GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(csd)->cancel_button),
3228 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
3231 /* wait until destroy calls gtk_main_quit */
3232 gtk_widget_show (csd);
3237 cmw_file (GtkWidget *widget, GtkWidget *parent)
3241 fs = gtk_file_selection_new("This is a modal file selection dialog");
3244 gtk_window_set_modal (GTK_WINDOW(fs),TRUE);
3246 /* And mark it as a transient dialog */
3247 gtk_window_set_transient_for (GTK_WINDOW (fs), GTK_WINDOW (parent));
3249 gtk_signal_connect (GTK_OBJECT(fs), "destroy",
3250 GTK_SIGNAL_FUNC(cmw_destroy_cb),NULL);
3252 gtk_signal_connect_object (GTK_OBJECT(GTK_FILE_SELECTION(fs)->ok_button),
3253 "clicked",GTK_SIGNAL_FUNC(gtk_widget_destroy),
3255 gtk_signal_connect_object (GTK_OBJECT(GTK_FILE_SELECTION(fs)->cancel_button),
3256 "clicked",GTK_SIGNAL_FUNC(gtk_widget_destroy),
3259 /* wait until destroy calls gtk_main_quit */
3260 gtk_widget_show (fs);
3267 create_modal_window (void)
3269 GtkWidget *window = NULL;
3270 GtkWidget *box1,*box2;
3272 GtkWidget *btnColor,*btnFile,*btnClose;
3274 /* Create modal window (Here you can use any window descendent )*/
3275 window=gtk_window_new (GTK_WINDOW_TOPLEVEL);
3276 gtk_window_set_title (GTK_WINDOW(window),"This window is modal");
3278 /* Set window as modal */
3279 gtk_window_set_modal (GTK_WINDOW(window),TRUE);
3281 /* Create widgets */
3282 box1 = gtk_vbox_new (FALSE,5);
3283 frame1 = gtk_frame_new ("Standard dialogs in modal form");
3284 box2 = gtk_vbox_new (TRUE,5);
3285 btnColor = gtk_button_new_with_label ("Color");
3286 btnFile = gtk_button_new_with_label ("File Selection");
3287 btnClose = gtk_button_new_with_label ("Close");
3290 gtk_container_set_border_width (GTK_CONTAINER(box1),3);
3291 gtk_container_set_border_width (GTK_CONTAINER(box2),3);
3294 gtk_container_add (GTK_CONTAINER (window), box1);
3295 gtk_box_pack_start (GTK_BOX (box1), frame1, TRUE, TRUE, 4);
3296 gtk_container_add (GTK_CONTAINER (frame1), box2);
3297 gtk_box_pack_start (GTK_BOX (box2), btnColor, FALSE, FALSE, 4);
3298 gtk_box_pack_start (GTK_BOX (box2), btnFile, FALSE, FALSE, 4);
3299 gtk_box_pack_start (GTK_BOX (box1), gtk_hseparator_new (), FALSE, FALSE, 4);
3300 gtk_box_pack_start (GTK_BOX (box1), btnClose, FALSE, FALSE, 4);
3302 /* connect signals */
3303 gtk_signal_connect_object (GTK_OBJECT (btnClose), "clicked",
3304 GTK_SIGNAL_FUNC (gtk_widget_destroy),
3305 GTK_OBJECT (window));
3307 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3308 GTK_SIGNAL_FUNC (cmw_destroy_cb),NULL);
3310 gtk_signal_connect (GTK_OBJECT (btnColor), "clicked",
3311 GTK_SIGNAL_FUNC (cmw_color),window);
3312 gtk_signal_connect (GTK_OBJECT (btnFile), "clicked",
3313 GTK_SIGNAL_FUNC (cmw_file),window);
3316 gtk_widget_show_all (window);
3318 /* wait until dialog get destroyed */
3327 make_message_dialog (GtkWidget **dialog,
3328 GtkMessageType type,
3329 GtkButtonsType buttons)
3333 gtk_widget_destroy (*dialog);
3338 *dialog = gtk_message_dialog_new (NULL, 0, type, buttons,
3339 "This is a message dialog; it can wrap long lines. This is a long line. La la la. Look this line is wrapped. Blah blah blah blah blah blah. (Note: testgtk has a nonstandard gtkrc that changes some of the message dialog icons.)");
3341 gtk_signal_connect_object (GTK_OBJECT (*dialog),
3343 GTK_SIGNAL_FUNC (gtk_widget_destroy),
3344 GTK_OBJECT (*dialog));
3346 gtk_signal_connect (GTK_OBJECT (*dialog),
3348 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
3351 gtk_widget_show (*dialog);
3355 create_message_dialog (void)
3357 static GtkWidget *info = NULL;
3358 static GtkWidget *warning = NULL;
3359 static GtkWidget *error = NULL;
3360 static GtkWidget *question = NULL;
3362 make_message_dialog (&info, GTK_MESSAGE_INFO, GTK_BUTTONS_OK);
3363 make_message_dialog (&warning, GTK_MESSAGE_WARNING, GTK_BUTTONS_CLOSE);
3364 make_message_dialog (&error, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK_CANCEL);
3365 make_message_dialog (&question, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO);
3372 static GtkWidget *sw_parent = NULL;
3373 static GtkWidget *sw_float_parent;
3374 static guint sw_destroyed_handler = 0;
3377 scrolled_windows_delete_cb (GtkWidget *widget, GdkEventAny *event, GtkWidget *scrollwin)
3379 gtk_widget_reparent (scrollwin, sw_parent);
3381 gtk_signal_disconnect (GTK_OBJECT (sw_parent), sw_destroyed_handler);
3382 sw_float_parent = NULL;
3384 sw_destroyed_handler = 0;
3390 scrolled_windows_destroy_cb (GtkWidget *widget, GtkWidget *scrollwin)
3392 gtk_widget_destroy (sw_float_parent);
3394 sw_float_parent = NULL;
3396 sw_destroyed_handler = 0;
3400 scrolled_windows_remove (GtkWidget *widget, GtkWidget *scrollwin)
3404 gtk_widget_reparent (scrollwin, sw_parent);
3405 gtk_widget_destroy (sw_float_parent);
3407 gtk_signal_disconnect (GTK_OBJECT (sw_parent), sw_destroyed_handler);
3408 sw_float_parent = NULL;
3410 sw_destroyed_handler = 0;
3414 sw_parent = scrollwin->parent;
3415 sw_float_parent = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3416 gtk_window_set_default_size (GTK_WINDOW (sw_float_parent), 200, 200);
3418 gtk_widget_reparent (scrollwin, sw_float_parent);
3419 gtk_widget_show (sw_float_parent);
3421 sw_destroyed_handler =
3422 gtk_signal_connect (GTK_OBJECT (sw_parent), "destroy",
3423 GTK_SIGNAL_FUNC (scrolled_windows_destroy_cb), scrollwin);
3424 gtk_signal_connect (GTK_OBJECT (sw_float_parent), "delete_event",
3425 GTK_SIGNAL_FUNC (scrolled_windows_delete_cb), scrollwin);
3430 create_scrolled_windows (void)
3432 static GtkWidget *window;
3433 GtkWidget *scrolled_window;
3441 window = gtk_dialog_new ();
3443 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3444 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
3447 gtk_window_set_title (GTK_WINDOW (window), "dialog");
3448 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
3451 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
3452 gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10);
3453 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
3454 GTK_POLICY_AUTOMATIC,
3455 GTK_POLICY_AUTOMATIC);
3456 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
3457 scrolled_window, TRUE, TRUE, 0);
3458 gtk_widget_show (scrolled_window);
3460 table = gtk_table_new (20, 20, FALSE);
3461 gtk_table_set_row_spacings (GTK_TABLE (table), 10);
3462 gtk_table_set_col_spacings (GTK_TABLE (table), 10);
3463 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), table);
3464 gtk_container_set_focus_hadjustment (GTK_CONTAINER (table),
3465 gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
3466 gtk_container_set_focus_vadjustment (GTK_CONTAINER (table),
3467 gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
3468 gtk_widget_show (table);
3470 for (i = 0; i < 20; i++)
3471 for (j = 0; j < 20; j++)
3473 sprintf (buffer, "button (%d,%d)\n", i, j);
3474 button = gtk_toggle_button_new_with_label (buffer);
3475 gtk_table_attach_defaults (GTK_TABLE (table), button,
3477 gtk_widget_show (button);
3481 button = gtk_button_new_with_label ("Close");
3482 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
3483 GTK_SIGNAL_FUNC(gtk_widget_destroy),
3484 GTK_OBJECT (window));
3485 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
3486 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
3487 button, TRUE, TRUE, 0);
3488 gtk_widget_grab_default (button);
3489 gtk_widget_show (button);
3491 button = gtk_button_new_with_label ("Reparent Out");
3492 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3493 GTK_SIGNAL_FUNC(scrolled_windows_remove),
3495 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
3496 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
3497 button, TRUE, TRUE, 0);
3498 gtk_widget_grab_default (button);
3499 gtk_widget_show (button);
3501 gtk_window_set_default_size (GTK_WINDOW (window), 300, 300);
3504 if (!GTK_WIDGET_VISIBLE (window))
3505 gtk_widget_show (window);
3507 gtk_widget_destroy (window);
3515 entry_toggle_frame (GtkWidget *checkbutton,
3518 gtk_entry_set_has_frame (GTK_ENTRY(entry),
3519 GTK_TOGGLE_BUTTON(checkbutton)->active);
3523 entry_toggle_sensitive (GtkWidget *checkbutton,
3526 gtk_widget_set_sensitive (entry, GTK_TOGGLE_BUTTON(checkbutton)->active);
3530 entry_props_clicked (GtkWidget *button,
3533 GtkWidget *window = create_prop_editor (entry, 0);
3535 gtk_window_set_title (GTK_WINDOW (window), "Entry Properties");
3541 static GtkWidget *window = NULL;
3545 GtkWidget *has_frame_check;
3546 GtkWidget *sensitive_check;
3547 GtkWidget *entry, *cb;
3549 GtkWidget *separator;
3550 GList *cbitems = NULL;
3554 cbitems = g_list_append(cbitems, "item0");
3555 cbitems = g_list_append(cbitems, "item1 item1");
3556 cbitems = g_list_append(cbitems, "item2 item2 item2");
3557 cbitems = g_list_append(cbitems, "item3 item3 item3 item3");
3558 cbitems = g_list_append(cbitems, "item4 item4 item4 item4 item4");
3559 cbitems = g_list_append(cbitems, "item5 item5 item5 item5 item5 item5");
3560 cbitems = g_list_append(cbitems, "item6 item6 item6 item6 item6");
3561 cbitems = g_list_append(cbitems, "item7 item7 item7 item7");
3562 cbitems = g_list_append(cbitems, "item8 item8 item8");
3563 cbitems = g_list_append(cbitems, "item9 item9");
3565 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3567 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3568 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
3571 gtk_window_set_title (GTK_WINDOW (window), "entry");
3572 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
3575 box1 = gtk_vbox_new (FALSE, 0);
3576 gtk_container_add (GTK_CONTAINER (window), box1);
3579 box2 = gtk_vbox_new (FALSE, 10);
3580 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
3581 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
3583 hbox = gtk_hbox_new (FALSE, 5);
3584 gtk_box_pack_start (GTK_BOX (box2), hbox, TRUE, TRUE, 0);
3586 entry = gtk_entry_new ();
3587 gtk_entry_set_text (GTK_ENTRY (entry), "hello world السلام عليكم");
3588 gtk_editable_select_region (GTK_EDITABLE (entry), 0, 5);
3589 gtk_box_pack_start (GTK_BOX (hbox), entry, TRUE, TRUE, 0);
3591 button = gtk_button_new_with_mnemonic ("_Props");
3592 gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
3593 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3594 GTK_SIGNAL_FUNC (entry_props_clicked),
3597 cb = gtk_combo_new ();
3598 gtk_combo_set_popdown_strings (GTK_COMBO (cb), cbitems);
3599 gtk_entry_set_text (GTK_ENTRY (GTK_COMBO(cb)->entry), "hello world \n\n\n foo");
3600 gtk_editable_select_region (GTK_EDITABLE (GTK_COMBO(cb)->entry),
3602 gtk_box_pack_start (GTK_BOX (box2), cb, TRUE, TRUE, 0);
3604 sensitive_check = gtk_check_button_new_with_label("Sensitive");
3605 gtk_box_pack_start (GTK_BOX (box2), sensitive_check, FALSE, TRUE, 0);
3606 gtk_signal_connect (GTK_OBJECT(sensitive_check), "toggled",
3607 GTK_SIGNAL_FUNC(entry_toggle_sensitive), entry);
3608 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(sensitive_check), TRUE);
3610 has_frame_check = gtk_check_button_new_with_label("Has Frame");
3611 gtk_box_pack_start (GTK_BOX (box2), has_frame_check, FALSE, TRUE, 0);
3612 gtk_signal_connect (GTK_OBJECT(has_frame_check), "toggled",
3613 GTK_SIGNAL_FUNC(entry_toggle_frame), entry);
3614 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(has_frame_check), TRUE);
3616 separator = gtk_hseparator_new ();
3617 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
3619 box2 = gtk_vbox_new (FALSE, 10);
3620 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
3621 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
3623 button = gtk_button_new_with_label ("close");
3624 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
3625 GTK_SIGNAL_FUNC(gtk_widget_destroy),
3626 GTK_OBJECT (window));
3627 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
3628 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
3629 gtk_widget_grab_default (button);
3632 if (!GTK_WIDGET_VISIBLE (window))
3633 gtk_widget_show_all (window);
3635 gtk_widget_destroy (window);
3642 #define SIZE_GROUP_INITIAL_SIZE 50
3645 size_group_hsize_changed (GtkSpinButton *spin_button,
3648 gtk_widget_set_usize (GTK_BIN (button)->child,
3649 gtk_spin_button_get_value_as_int (spin_button),
3654 size_group_vsize_changed (GtkSpinButton *spin_button,
3657 gtk_widget_set_usize (GTK_BIN (button)->child,
3659 gtk_spin_button_get_value_as_int (spin_button));
3663 create_size_group_window (GtkSizeGroup *master_size_group)
3667 GtkWidget *main_button;
3669 GtkWidget *spin_button;
3671 GtkSizeGroup *hgroup1;
3672 GtkSizeGroup *hgroup2;
3673 GtkSizeGroup *vgroup1;
3674 GtkSizeGroup *vgroup2;
3676 window = gtk_dialog_new_with_buttons ("GtkSizeGroup",
3682 gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
3684 gtk_signal_connect (GTK_OBJECT (window), "response",
3685 GTK_SIGNAL_FUNC (gtk_widget_destroy),
3688 table = gtk_table_new (2, 2, FALSE);
3689 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), table, TRUE, TRUE, 0);
3691 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
3692 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
3693 gtk_container_set_border_width (GTK_CONTAINER (table), 5);
3694 gtk_widget_set_usize (table, 250, 250);
3696 hgroup1 = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
3697 hgroup2 = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
3698 vgroup1 = gtk_size_group_new (GTK_SIZE_GROUP_VERTICAL);
3699 vgroup2 = gtk_size_group_new (GTK_SIZE_GROUP_VERTICAL);
3701 main_button = gtk_button_new_with_label ("X");
3703 gtk_table_attach (GTK_TABLE (table), main_button,
3705 GTK_EXPAND, GTK_EXPAND,
3707 gtk_size_group_add_widget (master_size_group, main_button);
3708 gtk_size_group_add_widget (hgroup1, main_button);
3709 gtk_size_group_add_widget (vgroup1, main_button);
3710 gtk_widget_set_usize (GTK_BIN (main_button)->child, SIZE_GROUP_INITIAL_SIZE, SIZE_GROUP_INITIAL_SIZE);
3712 button = gtk_button_new ();
3713 gtk_table_attach (GTK_TABLE (table), button,
3715 GTK_EXPAND, GTK_EXPAND,
3717 gtk_size_group_add_widget (vgroup1, button);
3718 gtk_size_group_add_widget (vgroup2, button);
3720 button = gtk_button_new ();
3721 gtk_table_attach (GTK_TABLE (table), button,
3723 GTK_EXPAND, GTK_EXPAND,
3725 gtk_size_group_add_widget (hgroup1, button);
3726 gtk_size_group_add_widget (hgroup2, button);
3728 button = gtk_button_new ();
3729 gtk_table_attach (GTK_TABLE (table), button,
3731 GTK_EXPAND, GTK_EXPAND,
3733 gtk_size_group_add_widget (hgroup2, button);
3734 gtk_size_group_add_widget (vgroup2, button);
3736 g_object_unref (G_OBJECT (hgroup1));
3737 g_object_unref (G_OBJECT (hgroup2));
3738 g_object_unref (G_OBJECT (vgroup1));
3739 g_object_unref (G_OBJECT (vgroup2));
3741 hbox = gtk_hbox_new (FALSE, 5);
3742 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), hbox, FALSE, FALSE, 0);
3744 spin_button = gtk_spin_button_new_with_range (1, 100, 1);
3745 gtk_spin_button_set_value (GTK_SPIN_BUTTON (spin_button), SIZE_GROUP_INITIAL_SIZE);
3746 gtk_box_pack_start (GTK_BOX (hbox), spin_button, TRUE, TRUE, 0);
3747 gtk_signal_connect (GTK_OBJECT (spin_button), "value_changed",
3748 GTK_SIGNAL_FUNC (size_group_hsize_changed), main_button);
3750 spin_button = gtk_spin_button_new_with_range (1, 100, 1);
3751 gtk_spin_button_set_value (GTK_SPIN_BUTTON (spin_button), SIZE_GROUP_INITIAL_SIZE);
3752 gtk_box_pack_start (GTK_BOX (hbox), spin_button, TRUE, TRUE, 0);
3753 gtk_signal_connect (GTK_OBJECT (spin_button), "value_changed",
3754 GTK_SIGNAL_FUNC (size_group_vsize_changed), main_button);
3760 create_size_groups (void)
3762 static GtkWidget *window1 = NULL;
3763 static GtkWidget *window2 = NULL;
3764 static GtkSizeGroup *master_size_group;
3766 if (!master_size_group)
3767 master_size_group = gtk_size_group_new (GTK_SIZE_GROUP_BOTH);
3771 window1 = create_size_group_window (master_size_group);
3773 gtk_signal_connect (GTK_OBJECT (window1), "destroy",
3774 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
3780 window2 = create_size_group_window (master_size_group);
3782 gtk_signal_connect (GTK_OBJECT (window2), "destroy",
3783 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
3787 if (GTK_WIDGET_VISIBLE (window1) && GTK_WIDGET_VISIBLE (window2))
3789 gtk_widget_destroy (window1);
3790 gtk_widget_destroy (window2);
3794 if (!GTK_WIDGET_VISIBLE (window1))
3795 gtk_widget_show_all (window1);
3796 if (!GTK_WIDGET_VISIBLE (window2))
3797 gtk_widget_show_all (window2);
3805 static GtkWidget *spinner1;
3808 toggle_snap (GtkWidget *widget, GtkSpinButton *spin)
3810 gtk_spin_button_set_snap_to_ticks (spin, GTK_TOGGLE_BUTTON (widget)->active);
3814 toggle_numeric (GtkWidget *widget, GtkSpinButton *spin)
3816 gtk_spin_button_set_numeric (spin, GTK_TOGGLE_BUTTON (widget)->active);
3820 change_digits (GtkWidget *widget, GtkSpinButton *spin)
3822 gtk_spin_button_set_digits (GTK_SPIN_BUTTON (spinner1),
3823 gtk_spin_button_get_value_as_int (spin));
3827 get_value (GtkWidget *widget, gpointer data)
3831 GtkSpinButton *spin;
3833 spin = GTK_SPIN_BUTTON (spinner1);
3834 label = GTK_LABEL (gtk_object_get_user_data (GTK_OBJECT (widget)));
3835 if (GPOINTER_TO_INT (data) == 1)
3836 sprintf (buf, "%d", gtk_spin_button_get_value_as_int (spin));
3838 sprintf (buf, "%0.*f", spin->digits,
3839 gtk_spin_button_get_value_as_float (spin));
3840 gtk_label_set_text (label, buf);
3844 get_spin_value (GtkWidget *widget, gpointer data)
3848 GtkSpinButton *spin;
3850 spin = GTK_SPIN_BUTTON (widget);
3851 label = GTK_LABEL (data);
3853 buffer = g_strdup_printf ("%0.*f", spin->digits,
3854 gtk_spin_button_get_value_as_float (spin));
3855 gtk_label_set_text (label, buffer);
3861 spin_button_time_output_func (GtkSpinButton *spin_button)
3863 static gchar buf[6];
3867 hours = spin_button->adjustment->value / 60.0;
3868 minutes = (fabs(floor (hours) - hours) < 1e-5) ? 0.0 : 30;
3869 sprintf (buf, "%02.0f:%02.0f", floor (hours), minutes);
3870 if (strcmp (buf, gtk_entry_get_text (GTK_ENTRY (spin_button))))
3871 gtk_entry_set_text (GTK_ENTRY (spin_button), buf);
3876 spin_button_month_input_func (GtkSpinButton *spin_button,
3880 static gchar *month[12] = { "January", "February", "March", "April",
3881 "May", "June", "July", "August",
3882 "September", "October", "November", "December" };
3884 gboolean found = FALSE;
3886 for (i = 1; i <= 12; i++)
3888 tmp1 = g_strdup (month[i-1]);
3890 tmp2 = g_strdup (gtk_entry_get_text (GTK_ENTRY (spin_button)));
3892 if (strstr (tmp1, tmp2) == tmp1)
3902 return GTK_INPUT_ERROR;
3904 *new_val = (gdouble) i;
3909 spin_button_month_output_func (GtkSpinButton *spin_button)
3912 static gchar *month[12] = { "January", "February", "March", "April",
3913 "May", "June", "July", "August", "September",
3914 "October", "November", "December" };
3916 for (i = 1; i <= 12; i++)
3917 if (fabs (spin_button->adjustment->value - (double)i) < 1e-5)
3919 if (strcmp (month[i-1], gtk_entry_get_text (GTK_ENTRY (spin_button))))
3920 gtk_entry_set_text (GTK_ENTRY (spin_button), month[i-1]);
3926 spin_button_hex_input_func (GtkSpinButton *spin_button,
3933 buf = gtk_entry_get_text (GTK_ENTRY (spin_button));
3934 res = strtol(buf, &err, 16);
3937 return GTK_INPUT_ERROR;
3943 spin_button_hex_output_func (GtkSpinButton *spin_button)
3945 static gchar buf[7];
3948 val = (gint) spin_button->adjustment->value;
3949 if (fabs (val) < 1e-5)
3950 sprintf (buf, "0x00");
3952 sprintf (buf, "0x%.2X", val);
3953 if (strcmp (buf, gtk_entry_get_text (GTK_ENTRY (spin_button))))
3954 gtk_entry_set_text (GTK_ENTRY (spin_button), buf);
3961 static GtkWidget *window = NULL;
3964 GtkWidget *main_vbox;
3967 GtkWidget *spinner2;
3971 GtkWidget *val_label;
3976 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3978 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3979 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
3982 gtk_window_set_title (GTK_WINDOW (window), "GtkSpinButton");
3984 main_vbox = gtk_vbox_new (FALSE, 5);
3985 gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 10);
3986 gtk_container_add (GTK_CONTAINER (window), main_vbox);
3988 frame = gtk_frame_new ("Not accelerated");
3989 gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0);
3991 vbox = gtk_vbox_new (FALSE, 0);
3992 gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
3993 gtk_container_add (GTK_CONTAINER (frame), vbox);
3995 /* Time, month, hex spinners */
3997 hbox = gtk_hbox_new (FALSE, 0);
3998 gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 5);
4000 vbox2 = gtk_vbox_new (FALSE, 0);
4001 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
4003 label = gtk_label_new ("Time :");
4004 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
4005 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
4007 adj = (GtkAdjustment *) gtk_adjustment_new (0, 0, 1410, 30, 60, 0);
4008 spinner = gtk_spin_button_new (adj, 0, 0);
4009 gtk_editable_set_editable (GTK_EDITABLE (spinner), FALSE);
4010 gtk_signal_connect (GTK_OBJECT (spinner),
4012 GTK_SIGNAL_FUNC (spin_button_time_output_func),
4014 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
4015 gtk_widget_set_usize (spinner, 55, -1);
4016 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
4018 vbox2 = gtk_vbox_new (FALSE, 0);
4019 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
4021 label = gtk_label_new ("Month :");
4022 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
4023 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
4025 adj = (GtkAdjustment *) gtk_adjustment_new (1.0, 1.0, 12.0, 1.0,
4027 spinner = gtk_spin_button_new (adj, 0, 0);
4028 gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (spinner),
4029 GTK_UPDATE_IF_VALID);
4030 gtk_signal_connect (GTK_OBJECT (spinner),
4032 GTK_SIGNAL_FUNC (spin_button_month_input_func),
4034 gtk_signal_connect (GTK_OBJECT (spinner),
4036 GTK_SIGNAL_FUNC (spin_button_month_output_func),
4038 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
4039 gtk_widget_set_usize (spinner, 85, -1);
4040 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
4042 vbox2 = gtk_vbox_new (FALSE, 0);
4043 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
4045 label = gtk_label_new ("Hex :");
4046 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
4047 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
4049 adj = (GtkAdjustment *) gtk_adjustment_new (0, 0, 255, 1, 16, 0);
4050 spinner = gtk_spin_button_new (adj, 0, 0);
4051 gtk_editable_set_editable (GTK_EDITABLE (spinner), TRUE);
4052 gtk_signal_connect (GTK_OBJECT (spinner),
4054 GTK_SIGNAL_FUNC (spin_button_hex_input_func),
4056 gtk_signal_connect (GTK_OBJECT (spinner),
4058 GTK_SIGNAL_FUNC (spin_button_hex_output_func),
4060 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
4061 gtk_widget_set_usize (spinner, 55, 0);
4062 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
4064 frame = gtk_frame_new ("Accelerated");
4065 gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0);
4067 vbox = gtk_vbox_new (FALSE, 0);
4068 gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
4069 gtk_container_add (GTK_CONTAINER (frame), vbox);
4071 hbox = gtk_hbox_new (FALSE, 0);
4072 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
4074 vbox2 = gtk_vbox_new (FALSE, 0);
4075 gtk_box_pack_start (GTK_BOX (hbox), vbox2, FALSE, FALSE, 5);
4077 label = gtk_label_new ("Value :");
4078 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
4079 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
4081 adj = (GtkAdjustment *) gtk_adjustment_new (0.0, -10000.0, 10000.0,
4083 spinner1 = gtk_spin_button_new (adj, 1.0, 2);
4084 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner1), TRUE);
4085 gtk_box_pack_start (GTK_BOX (vbox2), spinner1, FALSE, TRUE, 0);
4087 vbox2 = gtk_vbox_new (FALSE, 0);
4088 gtk_box_pack_start (GTK_BOX (hbox), vbox2, FALSE, FALSE, 5);
4090 label = gtk_label_new ("Digits :");
4091 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
4092 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
4094 adj = (GtkAdjustment *) gtk_adjustment_new (2, 1, 15, 1, 1, 0);
4095 spinner2 = gtk_spin_button_new (adj, 0.0, 0);
4096 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
4097 GTK_SIGNAL_FUNC (change_digits),
4098 (gpointer) spinner2);
4099 gtk_box_pack_start (GTK_BOX (vbox2), spinner2, FALSE, TRUE, 0);
4101 hbox = gtk_hbox_new (FALSE, 0);
4102 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 5);
4104 button = gtk_check_button_new_with_label ("Snap to 0.5-ticks");
4105 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4106 GTK_SIGNAL_FUNC (toggle_snap),
4108 gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
4109 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
4111 button = gtk_check_button_new_with_label ("Numeric only input mode");
4112 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4113 GTK_SIGNAL_FUNC (toggle_numeric),
4115 gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
4116 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
4118 val_label = gtk_label_new ("");
4120 hbox = gtk_hbox_new (FALSE, 0);
4121 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
4123 button = gtk_button_new_with_label ("Value as Int");
4124 gtk_object_set_user_data (GTK_OBJECT (button), val_label);
4125 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4126 GTK_SIGNAL_FUNC (get_value),
4127 GINT_TO_POINTER (1));
4128 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
4130 button = gtk_button_new_with_label ("Value as Float");
4131 gtk_object_set_user_data (GTK_OBJECT (button), val_label);
4132 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4133 GTK_SIGNAL_FUNC (get_value),
4134 GINT_TO_POINTER (2));
4135 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
4137 gtk_box_pack_start (GTK_BOX (vbox), val_label, TRUE, TRUE, 0);
4138 gtk_label_set_text (GTK_LABEL (val_label), "0");
4140 frame = gtk_frame_new ("Using Convenience Constructor");
4141 gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0);
4143 hbox = gtk_hbox_new (FALSE, 0);
4144 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4145 gtk_container_add (GTK_CONTAINER (frame), hbox);
4147 val_label = gtk_label_new ("0.0");
4149 spinner = gtk_spin_button_new_with_range (0.0, 10.0, 0.009);
4150 gtk_spin_button_set_value (GTK_SPIN_BUTTON (spinner), 0.0);
4151 gtk_signal_connect (GTK_OBJECT (spinner), "value_changed",
4152 GTK_SIGNAL_FUNC (get_spin_value), val_label);
4153 gtk_box_pack_start (GTK_BOX (hbox), spinner, TRUE, TRUE, 5);
4154 gtk_box_pack_start (GTK_BOX (hbox), val_label, TRUE, TRUE, 5);
4156 hbox = gtk_hbox_new (FALSE, 0);
4157 gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
4159 button = gtk_button_new_with_label ("Close");
4160 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
4161 GTK_SIGNAL_FUNC (gtk_widget_destroy),
4162 GTK_OBJECT (window));
4163 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
4166 if (!GTK_WIDGET_VISIBLE (window))
4167 gtk_widget_show_all (window);
4169 gtk_widget_destroy (window);
4178 cursor_expose_event (GtkWidget *widget,
4182 GtkDrawingArea *darea;
4183 GdkDrawable *drawable;
4190 g_return_val_if_fail (widget != NULL, TRUE);
4191 g_return_val_if_fail (GTK_IS_DRAWING_AREA (widget), TRUE);
4193 darea = GTK_DRAWING_AREA (widget);
4194 drawable = widget->window;
4195 white_gc = widget->style->white_gc;
4196 gray_gc = widget->style->bg_gc[GTK_STATE_NORMAL];
4197 black_gc = widget->style->black_gc;
4198 max_width = widget->allocation.width;
4199 max_height = widget->allocation.height;
4201 gdk_draw_rectangle (drawable, white_gc,
4208 gdk_draw_rectangle (drawable, black_gc,
4215 gdk_draw_rectangle (drawable, gray_gc,
4226 set_cursor (GtkWidget *spinner,
4234 c = CLAMP (gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spinner)), 0, 152);
4237 label = gtk_object_get_user_data (GTK_OBJECT (spinner));
4238 vals = gtk_type_enum_get_values (GDK_TYPE_CURSOR_TYPE);
4239 while (vals && vals->value != c)
4242 gtk_label_set_text (GTK_LABEL (label), vals->value_nick);
4244 gtk_label_set_text (GTK_LABEL (label), "<unknown>");
4246 cursor = gdk_cursor_new (c);
4247 gdk_window_set_cursor (widget->window, cursor);
4248 gdk_cursor_unref (cursor);
4252 cursor_event (GtkWidget *widget,
4254 GtkSpinButton *spinner)
4256 if ((event->type == GDK_BUTTON_PRESS) &&
4257 ((event->button.button == 1) ||
4258 (event->button.button == 3)))
4260 gtk_spin_button_spin (spinner, event->button.button == 1 ?
4261 GTK_SPIN_STEP_FORWARD : GTK_SPIN_STEP_BACKWARD, 0);
4269 create_cursors (void)
4271 static GtkWidget *window = NULL;
4274 GtkWidget *main_vbox;
4285 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
4287 gtk_signal_connect (GTK_OBJECT (window), "destroy",
4288 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
4291 gtk_window_set_title (GTK_WINDOW (window), "Cursors");
4293 main_vbox = gtk_vbox_new (FALSE, 5);
4294 gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 0);
4295 gtk_container_add (GTK_CONTAINER (window), main_vbox);
4298 gtk_widget_new (gtk_vbox_get_type (),
4299 "GtkBox::homogeneous", FALSE,
4300 "GtkBox::spacing", 5,
4301 "GtkContainer::border_width", 10,
4302 "GtkWidget::parent", main_vbox,
4303 "GtkWidget::visible", TRUE,
4306 hbox = gtk_hbox_new (FALSE, 0);
4307 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4308 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
4310 label = gtk_label_new ("Cursor Value : ");
4311 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
4312 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
4314 adj = (GtkAdjustment *) gtk_adjustment_new (0,
4318 spinner = gtk_spin_button_new (adj, 0, 0);
4319 gtk_box_pack_start (GTK_BOX (hbox), spinner, TRUE, TRUE, 0);
4322 gtk_widget_new (gtk_frame_get_type (),
4323 "GtkFrame::shadow", GTK_SHADOW_ETCHED_IN,
4324 "GtkFrame::label_xalign", 0.5,
4325 "GtkFrame::label", "Cursor Area",
4326 "GtkContainer::border_width", 10,
4327 "GtkWidget::parent", vbox,
4328 "GtkWidget::visible", TRUE,
4331 darea = gtk_drawing_area_new ();
4332 gtk_widget_set_usize (darea, 80, 80);
4333 gtk_container_add (GTK_CONTAINER (frame), darea);
4334 gtk_signal_connect (GTK_OBJECT (darea),
4336 GTK_SIGNAL_FUNC (cursor_expose_event),
4338 gtk_widget_set_events (darea, GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK);
4339 gtk_signal_connect (GTK_OBJECT (darea),
4340 "button_press_event",
4341 GTK_SIGNAL_FUNC (cursor_event),
4343 gtk_widget_show (darea);
4345 gtk_signal_connect (GTK_OBJECT (spinner), "changed",
4346 GTK_SIGNAL_FUNC (set_cursor),
4349 label = gtk_widget_new (GTK_TYPE_LABEL,
4354 gtk_container_child_set (GTK_CONTAINER (vbox), label,
4357 gtk_object_set_user_data (GTK_OBJECT (spinner), label);
4360 gtk_widget_new (gtk_hseparator_get_type (),
4361 "GtkWidget::visible", TRUE,
4363 gtk_box_pack_start (GTK_BOX (main_vbox), any, FALSE, TRUE, 0);
4365 hbox = gtk_hbox_new (FALSE, 0);
4366 gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
4367 gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
4369 button = gtk_button_new_with_label ("Close");
4370 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
4371 GTK_SIGNAL_FUNC (gtk_widget_destroy),
4372 GTK_OBJECT (window));
4373 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
4375 gtk_widget_show_all (window);
4377 set_cursor (spinner, darea);
4380 gtk_widget_destroy (window);
4388 list_add (GtkWidget *widget,
4393 GtkWidget *list_item;
4394 GtkContainer *container;
4396 container = GTK_CONTAINER (list);
4398 sprintf (buffer, "added item %d", i++);
4399 list_item = gtk_list_item_new_with_label (buffer);
4400 gtk_widget_show (list_item);
4402 gtk_container_add (container, list_item);
4406 list_remove (GtkWidget *widget,
4409 GList *clear_list = NULL;
4410 GList *sel_row = NULL;
4413 if (list->selection_mode == GTK_SELECTION_EXTENDED)
4417 item = GTK_CONTAINER (list)->focus_child;
4418 if (!item && list->selection)
4419 item = list->selection->data;
4423 work = g_list_find (list->children, item);
4424 for (sel_row = work; sel_row; sel_row = sel_row->next)
4425 if (GTK_WIDGET (sel_row->data)->state != GTK_STATE_SELECTED)
4430 for (sel_row = work; sel_row; sel_row = sel_row->prev)
4431 if (GTK_WIDGET (sel_row->data)->state != GTK_STATE_SELECTED)
4437 for (work = list->selection; work; work = work->next)
4438 clear_list = g_list_prepend (clear_list, work->data);
4440 clear_list = g_list_reverse (clear_list);
4441 gtk_list_remove_items (GTK_LIST (list), clear_list);
4442 g_list_free (clear_list);
4444 if (list->selection_mode == GTK_SELECTION_EXTENDED && sel_row)
4445 gtk_list_select_child (list, GTK_WIDGET(sel_row->data));
4449 list_clear (GtkWidget *widget,
4452 gtk_list_clear_items (GTK_LIST (list), 0, -1);
4455 static GtkWidget *list_omenu;
4458 list_toggle_sel_mode (GtkWidget *widget, GtkList *list)
4462 if (!GTK_WIDGET_MAPPED (widget))
4465 i = gtk_option_menu_get_history (GTK_OPTION_MENU (widget));
4467 gtk_list_set_selection_mode (list, (GtkSelectionMode) i);
4473 static GtkWidget *window = NULL;
4475 static gchar *items[] =
4488 GtkWidget *scrolled_win;
4491 GtkWidget *separator;
4494 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
4496 gtk_signal_connect (GTK_OBJECT (window), "destroy",
4497 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
4500 gtk_window_set_title (GTK_WINDOW (window), "list");
4501 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
4503 vbox = gtk_vbox_new (FALSE, 0);
4504 gtk_container_add (GTK_CONTAINER (window), vbox);
4506 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
4507 gtk_container_set_border_width (GTK_CONTAINER (scrolled_win), 5);
4508 gtk_widget_set_usize (scrolled_win, -1, 300);
4509 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
4510 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
4511 GTK_POLICY_AUTOMATIC,
4512 GTK_POLICY_AUTOMATIC);
4514 list = gtk_list_new ();
4515 gtk_list_set_selection_mode (GTK_LIST (list), GTK_SELECTION_EXTENDED);
4516 gtk_scrolled_window_add_with_viewport
4517 (GTK_SCROLLED_WINDOW (scrolled_win), list);
4518 gtk_container_set_focus_vadjustment
4519 (GTK_CONTAINER (list),
4520 gtk_scrolled_window_get_vadjustment
4521 (GTK_SCROLLED_WINDOW (scrolled_win)));
4522 gtk_container_set_focus_hadjustment
4523 (GTK_CONTAINER (list),
4524 gtk_scrolled_window_get_hadjustment
4525 (GTK_SCROLLED_WINDOW (scrolled_win)));
4527 if ((infile = fopen("gtkenums.h", "r")))
4533 while (fgets (buffer, 256, infile))
4535 if ((pos = strchr (buffer, '\n')))
4537 item = gtk_list_item_new_with_label (buffer);
4538 gtk_container_add (GTK_CONTAINER (list), item);
4545 hbox = gtk_hbox_new (TRUE, 5);
4546 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4547 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
4549 button = gtk_button_new_with_label ("Insert Row");
4550 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4551 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4552 GTK_SIGNAL_FUNC (list_add),
4555 button = gtk_button_new_with_label ("Clear List");
4556 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4557 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4558 GTK_SIGNAL_FUNC (list_clear),
4561 button = gtk_button_new_with_label ("Remove Selection");
4562 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4563 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4564 GTK_SIGNAL_FUNC (list_remove),
4567 cbox = gtk_hbox_new (FALSE, 0);
4568 gtk_box_pack_start (GTK_BOX (vbox), cbox, FALSE, TRUE, 0);
4570 hbox = gtk_hbox_new (FALSE, 5);
4571 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4572 gtk_box_pack_start (GTK_BOX (cbox), hbox, TRUE, FALSE, 0);
4574 label = gtk_label_new ("Selection Mode :");
4575 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
4577 list_omenu = build_option_menu (items, 3, 3,
4578 list_toggle_sel_mode,
4580 gtk_box_pack_start (GTK_BOX (hbox), list_omenu, FALSE, TRUE, 0);
4582 separator = gtk_hseparator_new ();
4583 gtk_box_pack_start (GTK_BOX (vbox), separator, FALSE, TRUE, 0);
4585 cbox = gtk_hbox_new (FALSE, 0);
4586 gtk_box_pack_start (GTK_BOX (vbox), cbox, FALSE, TRUE, 0);
4588 button = gtk_button_new_with_label ("close");
4589 gtk_container_set_border_width (GTK_CONTAINER (button), 10);
4590 gtk_box_pack_start (GTK_BOX (cbox), button, TRUE, TRUE, 0);
4591 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
4592 GTK_SIGNAL_FUNC(gtk_widget_destroy),
4593 GTK_OBJECT (window));
4595 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
4596 gtk_widget_grab_default (button);
4599 if (!GTK_WIDGET_VISIBLE (window))
4600 gtk_widget_show_all (window);
4602 gtk_widget_destroy (window);
4609 static char * book_open_xpm[] = {
4632 static char * book_closed_xpm[] = {
4657 static char * mini_page_xpm[] = {
4680 static char * gtk_mini_xpm[] = {
4720 #define TESTGTK_CLIST_COLUMNS 12
4721 static gint clist_rows = 0;
4722 static GtkWidget *clist_omenu;
4725 add1000_clist (GtkWidget *widget, gpointer data)
4728 char text[TESTGTK_CLIST_COLUMNS][50];
4729 char *texts[TESTGTK_CLIST_COLUMNS];
4734 clist = GTK_CLIST (data);
4736 pixmap = gdk_pixmap_create_from_xpm_d (clist->clist_window,
4738 >K_WIDGET (data)->style->white,
4741 for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++)
4744 sprintf (text[i], "Column %d", i);
4748 sprintf (text[1], "Right");
4749 sprintf (text[2], "Center");
4751 gtk_clist_freeze (GTK_CLIST (data));
4752 for (i = 0; i < 1000; i++)
4754 sprintf (text[0], "CListRow %d", rand() % 10000);
4755 row = gtk_clist_append (clist, texts);
4756 gtk_clist_set_pixtext (clist, row, 3, "gtk+", 5, pixmap, mask);
4759 gtk_clist_thaw (GTK_CLIST (data));
4761 gdk_pixmap_unref (pixmap);
4762 gdk_bitmap_unref (mask);
4766 add10000_clist (GtkWidget *widget, gpointer data)
4769 char text[TESTGTK_CLIST_COLUMNS][50];
4770 char *texts[TESTGTK_CLIST_COLUMNS];
4772 for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++)
4775 sprintf (text[i], "Column %d", i);
4778 sprintf (text[1], "Right");
4779 sprintf (text[2], "Center");
4781 gtk_clist_freeze (GTK_CLIST (data));
4782 for (i = 0; i < 10000; i++)
4784 sprintf (text[0], "CListRow %d", rand() % 10000);
4785 gtk_clist_append (GTK_CLIST (data), texts);
4787 gtk_clist_thaw (GTK_CLIST (data));
4791 clear_clist (GtkWidget *widget, gpointer data)
4793 gtk_clist_clear (GTK_CLIST (data));
4797 void clist_remove_selection (GtkWidget *widget, GtkCList *clist)
4799 gtk_clist_freeze (clist);
4801 while (clist->selection)
4806 row = GPOINTER_TO_INT (clist->selection->data);
4808 gtk_clist_remove (clist, row);
4810 if (clist->selection_mode == GTK_SELECTION_BROWSE)
4814 if (clist->selection_mode == GTK_SELECTION_EXTENDED && !clist->selection &&
4815 clist->focus_row >= 0)
4816 gtk_clist_select_row (clist, clist->focus_row, -1);
4818 gtk_clist_thaw (clist);
4821 void toggle_title_buttons (GtkWidget *widget, GtkCList *clist)
4823 if (GTK_TOGGLE_BUTTON (widget)->active)
4824 gtk_clist_column_titles_show (clist);
4826 gtk_clist_column_titles_hide (clist);
4829 void toggle_reorderable (GtkWidget *widget, GtkCList *clist)
4831 gtk_clist_set_reorderable (clist, GTK_TOGGLE_BUTTON (widget)->active);
4835 insert_row_clist (GtkWidget *widget, gpointer data)
4837 static char *text[] =
4839 "This", "is an", "inserted", "row.",
4840 "This", "is an", "inserted", "row.",
4841 "This", "is an", "inserted", "row."
4844 static GtkStyle *style1 = NULL;
4845 static GtkStyle *style2 = NULL;
4846 static GtkStyle *style3 = NULL;
4849 if (GTK_CLIST (data)->focus_row >= 0)
4850 row = gtk_clist_insert (GTK_CLIST (data), GTK_CLIST (data)->focus_row,
4853 row = gtk_clist_prepend (GTK_CLIST (data), text);
4867 style1 = gtk_style_copy (GTK_WIDGET (data)->style);
4868 style1->base[GTK_STATE_NORMAL] = col1;
4869 style1->base[GTK_STATE_SELECTED] = col2;
4871 style2 = gtk_style_copy (GTK_WIDGET (data)->style);
4872 style2->fg[GTK_STATE_NORMAL] = col1;
4873 style2->fg[GTK_STATE_SELECTED] = col2;
4875 style3 = gtk_style_copy (GTK_WIDGET (data)->style);
4876 style3->fg[GTK_STATE_NORMAL] = col1;
4877 style3->base[GTK_STATE_NORMAL] = col2;
4878 pango_font_description_free (style3->font_desc);
4879 style3->font_desc = pango_font_description_from_string ("courier 12");
4882 gtk_clist_set_cell_style (GTK_CLIST (data), row, 3, style1);
4883 gtk_clist_set_cell_style (GTK_CLIST (data), row, 4, style2);
4884 gtk_clist_set_cell_style (GTK_CLIST (data), row, 0, style3);
4890 clist_warning_test (GtkWidget *button,
4894 static gboolean add_remove = FALSE;
4896 add_remove = !add_remove;
4898 child = gtk_label_new ("Test");
4899 gtk_widget_ref (child);
4900 gtk_object_sink (GTK_OBJECT (child));
4903 gtk_container_add (GTK_CONTAINER (clist), child);
4906 child->parent = clist;
4907 gtk_container_remove (GTK_CONTAINER (clist), child);
4908 child->parent = NULL;
4911 gtk_widget_destroy (child);
4912 gtk_widget_unref (child);
4916 undo_selection (GtkWidget *button, GtkCList *clist)
4918 gtk_clist_undo_selection (clist);
4922 clist_toggle_sel_mode (GtkWidget *widget, GtkCList *clist)
4926 if (!GTK_WIDGET_MAPPED (widget))
4929 i = gtk_option_menu_get_history (GTK_OPTION_MENU (widget));
4931 gtk_clist_set_selection_mode (clist, (GtkSelectionMode) i);
4935 clist_click_column (GtkCList *clist, gint column, gpointer data)
4938 gtk_clist_set_column_visibility (clist, column, FALSE);
4939 else if (column == clist->sort_column)
4941 if (clist->sort_type == GTK_SORT_ASCENDING)
4942 clist->sort_type = GTK_SORT_DESCENDING;
4944 clist->sort_type = GTK_SORT_ASCENDING;
4947 gtk_clist_set_sort_column (clist, column);
4949 gtk_clist_sort (clist);
4956 static GtkWidget *window = NULL;
4958 static char *titles[] =
4960 "auto resize", "not resizeable", "max width 100", "min width 50",
4961 "hide column", "Title 5", "Title 6", "Title 7",
4962 "Title 8", "Title 9", "Title 10", "Title 11"
4965 static gchar *items[] =
4972 char text[TESTGTK_CLIST_COLUMNS][50];
4973 char *texts[TESTGTK_CLIST_COLUMNS];
4979 GtkWidget *separator;
4980 GtkWidget *scrolled_win;
4983 GtkWidget *undo_button;
4993 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
4995 gtk_signal_connect (GTK_OBJECT (window), "destroy",
4996 GTK_SIGNAL_FUNC (gtk_widget_destroyed), &window);
4998 gtk_window_set_title (GTK_WINDOW (window), "clist");
4999 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
5001 vbox = gtk_vbox_new (FALSE, 0);
5002 gtk_container_add (GTK_CONTAINER (window), vbox);
5004 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
5005 gtk_container_set_border_width (GTK_CONTAINER (scrolled_win), 5);
5006 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
5007 GTK_POLICY_AUTOMATIC,
5008 GTK_POLICY_AUTOMATIC);
5010 /* create GtkCList here so we have a pointer to throw at the
5011 * button callbacks -- more is done with it later */
5012 clist = gtk_clist_new_with_titles (TESTGTK_CLIST_COLUMNS, titles);
5013 gtk_container_add (GTK_CONTAINER (scrolled_win), clist);
5014 gtk_signal_connect (GTK_OBJECT (clist), "click_column",
5015 (GtkSignalFunc) clist_click_column, NULL);
5017 /* control buttons */
5018 hbox = gtk_hbox_new (FALSE, 5);
5019 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
5020 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
5022 button = gtk_button_new_with_label ("Insert Row");
5023 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5024 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5025 (GtkSignalFunc) insert_row_clist, (gpointer) clist);
5027 button = gtk_button_new_with_label ("Add 1,000 Rows With Pixmaps");
5028 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5029 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5030 (GtkSignalFunc) add1000_clist, (gpointer) clist);
5032 button = gtk_button_new_with_label ("Add 10,000 Rows");
5033 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5034 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5035 (GtkSignalFunc) add10000_clist, (gpointer) clist);
5037 /* second layer of buttons */
5038 hbox = gtk_hbox_new (FALSE, 5);
5039 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
5040 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
5042 button = gtk_button_new_with_label ("Clear List");
5043 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5044 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5045 (GtkSignalFunc) clear_clist, (gpointer) clist);
5047 button = gtk_button_new_with_label ("Remove Selection");
5048 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5049 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5050 (GtkSignalFunc) clist_remove_selection,
5053 undo_button = gtk_button_new_with_label ("Undo Selection");
5054 gtk_box_pack_start (GTK_BOX (hbox), undo_button, TRUE, TRUE, 0);
5055 gtk_signal_connect (GTK_OBJECT (undo_button), "clicked",
5056 (GtkSignalFunc) undo_selection, (gpointer) clist);
5058 button = gtk_button_new_with_label ("Warning Test");
5059 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5060 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5061 (GtkSignalFunc) clist_warning_test,(gpointer) clist);
5063 /* third layer of buttons */
5064 hbox = gtk_hbox_new (FALSE, 5);
5065 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
5066 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
5068 check = gtk_check_button_new_with_label ("Show Title Buttons");
5069 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
5070 gtk_signal_connect (GTK_OBJECT (check), "clicked",
5071 GTK_SIGNAL_FUNC (toggle_title_buttons), clist);
5072 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE);
5074 check = gtk_check_button_new_with_label ("Reorderable");
5075 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
5076 gtk_signal_connect (GTK_OBJECT (check), "clicked",
5077 GTK_SIGNAL_FUNC (toggle_reorderable), clist);
5078 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE);
5080 label = gtk_label_new ("Selection Mode :");
5081 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
5083 clist_omenu = build_option_menu (items, 3, 3,
5084 clist_toggle_sel_mode,
5086 gtk_box_pack_start (GTK_BOX (hbox), clist_omenu, FALSE, TRUE, 0);
5089 * the rest of the clist configuration
5092 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
5093 gtk_clist_set_row_height (GTK_CLIST (clist), 18);
5094 gtk_widget_set_usize (clist, -1, 300);
5096 for (i = 1; i < TESTGTK_CLIST_COLUMNS; i++)
5097 gtk_clist_set_column_width (GTK_CLIST (clist), i, 80);
5099 gtk_clist_set_column_auto_resize (GTK_CLIST (clist), 0, TRUE);
5100 gtk_clist_set_column_resizeable (GTK_CLIST (clist), 1, FALSE);
5101 gtk_clist_set_column_max_width (GTK_CLIST (clist), 2, 100);
5102 gtk_clist_set_column_min_width (GTK_CLIST (clist), 3, 50);
5103 gtk_clist_set_selection_mode (GTK_CLIST (clist), GTK_SELECTION_EXTENDED);
5104 gtk_clist_set_column_justification (GTK_CLIST (clist), 1,
5106 gtk_clist_set_column_justification (GTK_CLIST (clist), 2,
5107 GTK_JUSTIFY_CENTER);
5109 for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++)
5112 sprintf (text[i], "Column %d", i);
5115 sprintf (text[1], "Right");
5116 sprintf (text[2], "Center");
5125 style = gtk_style_new ();
5126 style->fg[GTK_STATE_NORMAL] = col1;
5127 style->base[GTK_STATE_NORMAL] = col2;
5129 pango_font_description_set_size (style->font_desc, 14 * PANGO_SCALE);
5130 pango_font_description_set_weight (style->font_desc, PANGO_WEIGHT_BOLD);
5132 for (i = 0; i < 10; i++)
5134 sprintf (text[0], "CListRow %d", clist_rows++);
5135 gtk_clist_append (GTK_CLIST (clist), texts);
5140 gtk_clist_set_row_style (GTK_CLIST (clist), i, style);
5143 gtk_clist_set_cell_style (GTK_CLIST (clist), i, i % 4, style);
5148 gtk_style_unref (style);
5150 separator = gtk_hseparator_new ();
5151 gtk_box_pack_start (GTK_BOX (vbox), separator, FALSE, TRUE, 0);
5153 hbox = gtk_hbox_new (FALSE, 0);
5154 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
5156 button = gtk_button_new_with_label ("close");
5157 gtk_container_set_border_width (GTK_CONTAINER (button), 10);
5158 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5159 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5160 GTK_SIGNAL_FUNC(gtk_widget_destroy),
5161 GTK_OBJECT (window));
5163 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5164 gtk_widget_grab_default (button);
5167 if (!GTK_WIDGET_VISIBLE (window))
5168 gtk_widget_show_all (window);
5172 gtk_widget_destroy (window);
5187 static gint books = 0;
5188 static gint pages = 0;
5190 static GtkWidget *book_label;
5191 static GtkWidget *page_label;
5192 static GtkWidget *sel_label;
5193 static GtkWidget *vis_label;
5194 static GtkWidget *omenu1;
5195 static GtkWidget *omenu2;
5196 static GtkWidget *omenu3;
5197 static GtkWidget *omenu4;
5198 static GtkWidget *spin1;
5199 static GtkWidget *spin2;
5200 static GtkWidget *spin3;
5201 static gint line_style;
5203 void after_press (GtkCTree *ctree, gpointer data)
5207 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->selection));
5208 gtk_label_set_text (GTK_LABEL (sel_label), buf);
5210 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->row_list));
5211 gtk_label_set_text (GTK_LABEL (vis_label), buf);
5213 sprintf (buf, "%d", books);
5214 gtk_label_set_text (GTK_LABEL (book_label), buf);
5216 sprintf (buf, "%d", pages);
5217 gtk_label_set_text (GTK_LABEL (page_label), buf);
5220 void after_move (GtkCTree *ctree, GtkCTreeNode *child, GtkCTreeNode *parent,
5221 GtkCTreeNode *sibling, gpointer data)
5227 gtk_ctree_get_node_info (ctree, child, &source,
5228 NULL, NULL, NULL, NULL, NULL, NULL, NULL);
5230 gtk_ctree_get_node_info (ctree, parent, &target1,
5231 NULL, NULL, NULL, NULL, NULL, NULL, NULL);
5233 gtk_ctree_get_node_info (ctree, sibling, &target2,
5234 NULL, NULL, NULL, NULL, NULL, NULL, NULL);
5236 g_print ("Moving \"%s\" to \"%s\" with sibling \"%s\".\n", source,
5237 (parent) ? target1 : "nil", (sibling) ? target2 : "nil");
5240 void count_items (GtkCTree *ctree, GtkCTreeNode *list)
5242 if (GTK_CTREE_ROW (list)->is_leaf)
5248 void expand_all (GtkWidget *widget, GtkCTree *ctree)
5250 gtk_ctree_expand_recursive (ctree, NULL);
5251 after_press (ctree, NULL);
5254 void collapse_all (GtkWidget *widget, GtkCTree *ctree)
5256 gtk_ctree_collapse_recursive (ctree, NULL);
5257 after_press (ctree, NULL);
5260 void select_all (GtkWidget *widget, GtkCTree *ctree)
5262 gtk_ctree_select_recursive (ctree, NULL);
5263 after_press (ctree, NULL);
5266 void change_style (GtkWidget *widget, GtkCTree *ctree)
5268 static GtkStyle *style1 = NULL;
5269 static GtkStyle *style2 = NULL;
5275 if (GTK_CLIST (ctree)->focus_row >= 0)
5276 node = GTK_CTREE_NODE
5277 (g_list_nth (GTK_CLIST (ctree)->row_list,GTK_CLIST (ctree)->focus_row));
5279 node = GTK_CTREE_NODE (GTK_CLIST (ctree)->row_list);
5293 style1 = gtk_style_new ();
5294 style1->base[GTK_STATE_NORMAL] = col1;
5295 style1->fg[GTK_STATE_SELECTED] = col2;
5297 style2 = gtk_style_new ();
5298 style2->base[GTK_STATE_SELECTED] = col2;
5299 style2->fg[GTK_STATE_NORMAL] = col1;
5300 style2->base[GTK_STATE_NORMAL] = col2;
5301 pango_font_description_free (style2->font_desc);
5302 style2->font_desc = pango_font_description_from_string ("courier 30");
5305 gtk_ctree_node_set_cell_style (ctree, node, 1, style1);
5306 gtk_ctree_node_set_cell_style (ctree, node, 0, style2);
5308 if (GTK_CTREE_ROW (node)->children)
5309 gtk_ctree_node_set_row_style (ctree, GTK_CTREE_ROW (node)->children,
5313 void unselect_all (GtkWidget *widget, GtkCTree *ctree)
5315 gtk_ctree_unselect_recursive (ctree, NULL);
5316 after_press (ctree, NULL);
5319 void remove_selection (GtkWidget *widget, GtkCTree *ctree)
5324 clist = GTK_CLIST (ctree);
5326 gtk_clist_freeze (clist);
5328 while (clist->selection)
5330 node = clist->selection->data;
5332 if (GTK_CTREE_ROW (node)->is_leaf)
5335 gtk_ctree_post_recursive (ctree, node,
5336 (GtkCTreeFunc) count_items, NULL);
5338 gtk_ctree_remove_node (ctree, node);
5340 if (clist->selection_mode == GTK_SELECTION_BROWSE)
5344 if (clist->selection_mode == GTK_SELECTION_EXTENDED && !clist->selection &&
5345 clist->focus_row >= 0)
5347 node = gtk_ctree_node_nth (ctree, clist->focus_row);
5350 gtk_ctree_select (ctree, node);
5353 gtk_clist_thaw (clist);
5354 after_press (ctree, NULL);
5357 struct _ExportStruct {
5363 typedef struct _ExportStruct ExportStruct;
5366 gnode2ctree (GtkCTree *ctree,
5369 GtkCTreeNode *cnode,
5373 GdkPixmap *pixmap_closed;
5374 GdkBitmap *mask_closed;
5375 GdkPixmap *pixmap_opened;
5376 GdkBitmap *mask_opened;
5378 if (!cnode || !gnode || (!(es = gnode->data)))
5383 pixmap_closed = pixmap3;
5384 mask_closed = mask3;
5385 pixmap_opened = NULL;
5390 pixmap_closed = pixmap1;
5391 mask_closed = mask1;
5392 pixmap_opened = pixmap2;
5393 mask_opened = mask2;
5396 gtk_ctree_set_node_info (ctree, cnode, es->tree, 2, pixmap_closed,
5397 mask_closed, pixmap_opened, mask_opened,
5398 es->is_leaf, (depth < 3));
5399 gtk_ctree_node_set_text (ctree, cnode, 1, es->info);
5407 ctree2gnode (GtkCTree *ctree,
5410 GtkCTreeNode *cnode,
5415 if (!cnode || !gnode)
5418 es = g_new (ExportStruct, 1);
5420 es->is_leaf = GTK_CTREE_ROW (cnode)->is_leaf;
5421 es->tree = GTK_CELL_PIXTEXT (GTK_CTREE_ROW (cnode)->row.cell[0])->text;
5422 es->info = GTK_CELL_PIXTEXT (GTK_CTREE_ROW (cnode)->row.cell[1])->text;
5426 void export_ctree (GtkWidget *widget, GtkCTree *ctree)
5428 char *title[] = { "Tree" , "Info" };
5429 static GtkWidget *export_window = NULL;
5430 static GtkCTree *export_ctree;
5432 GtkWidget *scrolled_win;
5440 export_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5442 gtk_signal_connect (GTK_OBJECT (export_window), "destroy",
5443 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
5446 gtk_window_set_title (GTK_WINDOW (export_window), "exported ctree");
5447 gtk_container_set_border_width (GTK_CONTAINER (export_window), 5);
5449 vbox = gtk_vbox_new (FALSE, 0);
5450 gtk_container_add (GTK_CONTAINER (export_window), vbox);
5452 button = gtk_button_new_with_label ("Close");
5453 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, TRUE, 0);
5455 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5456 (GtkSignalFunc) gtk_widget_destroy,
5457 GTK_OBJECT(export_window));
5459 sep = gtk_hseparator_new ();
5460 gtk_box_pack_end (GTK_BOX (vbox), sep, FALSE, TRUE, 10);
5462 export_ctree = GTK_CTREE (gtk_ctree_new_with_titles (2, 0, title));
5463 gtk_ctree_set_line_style (export_ctree, GTK_CTREE_LINES_DOTTED);
5465 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
5466 gtk_container_add (GTK_CONTAINER (scrolled_win),
5467 GTK_WIDGET (export_ctree));
5468 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
5469 GTK_POLICY_AUTOMATIC,
5470 GTK_POLICY_AUTOMATIC);
5471 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
5472 gtk_clist_set_selection_mode (GTK_CLIST (export_ctree),
5473 GTK_SELECTION_EXTENDED);
5474 gtk_clist_set_column_width (GTK_CLIST (export_ctree), 0, 200);
5475 gtk_clist_set_column_width (GTK_CLIST (export_ctree), 1, 200);
5476 gtk_widget_set_usize (GTK_WIDGET (export_ctree), 300, 200);
5479 if (!GTK_WIDGET_VISIBLE (export_window))
5480 gtk_widget_show_all (export_window);
5482 gtk_clist_clear (GTK_CLIST (export_ctree));
5484 node = GTK_CTREE_NODE (g_list_nth (GTK_CLIST (ctree)->row_list,
5485 GTK_CLIST (ctree)->focus_row));
5489 gnode = gtk_ctree_export_to_gnode (ctree, NULL, NULL, node,
5493 gtk_ctree_insert_gnode (export_ctree, NULL, NULL, gnode,
5495 g_node_destroy (gnode);
5499 void change_indent (GtkWidget *widget, GtkCTree *ctree)
5501 gtk_ctree_set_indent (ctree, GTK_ADJUSTMENT (widget)->value);
5504 void change_spacing (GtkWidget *widget, GtkCTree *ctree)
5506 gtk_ctree_set_spacing (ctree, GTK_ADJUSTMENT (widget)->value);
5509 void change_row_height (GtkWidget *widget, GtkCList *clist)
5511 gtk_clist_set_row_height (clist, GTK_ADJUSTMENT (widget)->value);
5514 void set_background (GtkCTree *ctree, GtkCTreeNode *node, gpointer data)
5516 GtkStyle *style = NULL;
5521 if (ctree->line_style != GTK_CTREE_LINES_TABBED)
5523 if (!GTK_CTREE_ROW (node)->is_leaf)
5524 style = GTK_CTREE_ROW (node)->row.data;
5525 else if (GTK_CTREE_ROW (node)->parent)
5526 style = GTK_CTREE_ROW (GTK_CTREE_ROW (node)->parent)->row.data;
5529 gtk_ctree_node_set_row_style (ctree, node, style);
5532 void ctree_toggle_line_style (GtkWidget *widget, GtkCTree *ctree)
5536 if (!GTK_WIDGET_MAPPED (widget))
5539 i = gtk_option_menu_get_history (GTK_OPTION_MENU (widget));
5541 if ((ctree->line_style == GTK_CTREE_LINES_TABBED &&
5542 ((GtkCTreeLineStyle) i) != GTK_CTREE_LINES_TABBED) ||
5543 (ctree->line_style != GTK_CTREE_LINES_TABBED &&
5544 ((GtkCTreeLineStyle) i) == GTK_CTREE_LINES_TABBED))
5545 gtk_ctree_pre_recursive (ctree, NULL, set_background, NULL);
5546 gtk_ctree_set_line_style (ctree, i);
5550 void ctree_toggle_expander_style (GtkWidget *widget, GtkCTree *ctree)
5554 if (!GTK_WIDGET_MAPPED (widget))
5557 i = gtk_option_menu_get_history (GTK_OPTION_MENU (widget));
5559 gtk_ctree_set_expander_style (ctree, (GtkCTreeExpanderStyle) i);
5562 void ctree_toggle_justify (GtkWidget *widget, GtkCTree *ctree)
5566 if (!GTK_WIDGET_MAPPED (widget))
5569 i = gtk_option_menu_get_history (GTK_OPTION_MENU (widget));
5571 gtk_clist_set_column_justification (GTK_CLIST (ctree), ctree->tree_column,
5572 (GtkJustification) i);
5575 void ctree_toggle_sel_mode (GtkWidget *widget, GtkCTree *ctree)
5579 if (!GTK_WIDGET_MAPPED (widget))
5582 i = gtk_option_menu_get_history (GTK_OPTION_MENU (widget));
5584 gtk_clist_set_selection_mode (GTK_CLIST (ctree), (GtkSelectionMode) i);
5585 after_press (ctree, NULL);
5588 void build_recursive (GtkCTree *ctree, gint cur_depth, gint depth,
5589 gint num_books, gint num_pages, GtkCTreeNode *parent)
5594 GtkCTreeNode *sibling;
5601 for (i = num_pages + num_books; i > num_books; i--)
5604 sprintf (buf1, "Page %02d", (gint) rand() % 100);
5605 sprintf (buf2, "Item %d-%d", cur_depth, i);
5606 sibling = gtk_ctree_insert_node (ctree, parent, sibling, text, 5,
5607 pixmap3, mask3, NULL, NULL,
5610 if (parent && ctree->line_style == GTK_CTREE_LINES_TABBED)
5611 gtk_ctree_node_set_row_style (ctree, sibling,
5612 GTK_CTREE_ROW (parent)->row.style);
5615 if (cur_depth == depth)
5618 for (i = num_books; i > 0; i--)
5623 sprintf (buf1, "Book %02d", (gint) rand() % 100);
5624 sprintf (buf2, "Item %d-%d", cur_depth, i);
5625 sibling = gtk_ctree_insert_node (ctree, parent, sibling, text, 5,
5626 pixmap1, mask1, pixmap2, mask2,
5629 style = gtk_style_new ();
5630 switch (cur_depth % 3)
5633 style->base[GTK_STATE_NORMAL].red = 10000 * (cur_depth % 6);
5634 style->base[GTK_STATE_NORMAL].green = 0;
5635 style->base[GTK_STATE_NORMAL].blue = 65535 - ((i * 10000) % 65535);
5638 style->base[GTK_STATE_NORMAL].red = 10000 * (cur_depth % 6);
5639 style->base[GTK_STATE_NORMAL].green = 65535 - ((i * 10000) % 65535);
5640 style->base[GTK_STATE_NORMAL].blue = 0;
5643 style->base[GTK_STATE_NORMAL].red = 65535 - ((i * 10000) % 65535);
5644 style->base[GTK_STATE_NORMAL].green = 0;
5645 style->base[GTK_STATE_NORMAL].blue = 10000 * (cur_depth % 6);
5648 gtk_ctree_node_set_row_data_full (ctree, sibling, style,
5649 (GtkDestroyNotify) gtk_style_unref);
5651 if (ctree->line_style == GTK_CTREE_LINES_TABBED)
5652 gtk_ctree_node_set_row_style (ctree, sibling, style);
5654 build_recursive (ctree, cur_depth + 1, depth, num_books, num_pages,
5659 void rebuild_tree (GtkWidget *widget, GtkCTree *ctree)
5662 gchar label1[] = "Root";
5663 gchar label2[] = "";
5664 GtkCTreeNode *parent;
5671 d = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin1));
5672 b = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin2));
5673 p = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin3));
5675 n = ((pow (b, d) - 1) / (b - 1)) * (p + 1);
5679 g_print ("%d total items? Try less\n",n);
5683 gtk_clist_freeze (GTK_CLIST (ctree));
5684 gtk_clist_clear (GTK_CLIST (ctree));
5689 parent = gtk_ctree_insert_node (ctree, NULL, NULL, text, 5, pixmap1,
5690 mask1, pixmap2, mask2, FALSE, TRUE);
5692 style = gtk_style_new ();
5693 style->base[GTK_STATE_NORMAL].red = 0;
5694 style->base[GTK_STATE_NORMAL].green = 45000;
5695 style->base[GTK_STATE_NORMAL].blue = 55000;
5696 gtk_ctree_node_set_row_data_full (ctree, parent, style,
5697 (GtkDestroyNotify) gtk_style_unref);
5699 if (ctree->line_style == GTK_CTREE_LINES_TABBED)
5700 gtk_ctree_node_set_row_style (ctree, parent, style);
5702 build_recursive (ctree, 1, d, b, p, parent);
5703 gtk_clist_thaw (GTK_CLIST (ctree));
5704 after_press (ctree, NULL);
5708 ctree_click_column (GtkCTree *ctree, gint column, gpointer data)
5712 clist = GTK_CLIST (ctree);
5714 if (column == clist->sort_column)
5716 if (clist->sort_type == GTK_SORT_ASCENDING)
5717 clist->sort_type = GTK_SORT_DESCENDING;
5719 clist->sort_type = GTK_SORT_ASCENDING;
5722 gtk_clist_set_sort_column (clist, column);
5724 gtk_ctree_sort_recursive (ctree, NULL);
5727 void create_ctree (void)
5729 static GtkWidget *window = NULL;
5730 GtkTooltips *tooltips;
5732 GtkWidget *scrolled_win;
5744 GdkColor transparent = { 0 };
5746 char *title[] = { "Tree" , "Info" };
5749 static gchar *items1[] =
5757 static gchar *items2[] =
5765 static gchar *items3[] =
5771 static gchar *items4[] =
5780 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5782 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5783 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
5786 gtk_window_set_title (GTK_WINDOW (window), "GtkCTree");
5787 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
5789 tooltips = gtk_tooltips_new ();
5790 gtk_object_ref (GTK_OBJECT (tooltips));
5791 gtk_object_sink (GTK_OBJECT (tooltips));
5793 gtk_object_set_data_full (GTK_OBJECT (window), "tooltips", tooltips,
5794 (GtkDestroyNotify) gtk_object_unref);
5796 vbox = gtk_vbox_new (FALSE, 0);
5797 gtk_container_add (GTK_CONTAINER (window), vbox);
5799 hbox = gtk_hbox_new (FALSE, 5);
5800 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
5801 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
5803 label = gtk_label_new ("Depth :");
5804 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
5806 adj = (GtkAdjustment *) gtk_adjustment_new (4, 1, 10, 1, 5, 0);
5807 spin1 = gtk_spin_button_new (adj, 0, 0);
5808 gtk_box_pack_start (GTK_BOX (hbox), spin1, FALSE, TRUE, 5);
5810 label = gtk_label_new ("Books :");
5811 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
5813 adj = (GtkAdjustment *) gtk_adjustment_new (3, 1, 20, 1, 5, 0);
5814 spin2 = gtk_spin_button_new (adj, 0, 0);
5815 gtk_box_pack_start (GTK_BOX (hbox), spin2, FALSE, TRUE, 5);
5817 label = gtk_label_new ("Pages :");
5818 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
5820 adj = (GtkAdjustment *) gtk_adjustment_new (5, 1, 20, 1, 5, 0);
5821 spin3 = gtk_spin_button_new (adj, 0, 0);
5822 gtk_box_pack_start (GTK_BOX (hbox), spin3, FALSE, TRUE, 5);
5824 button = gtk_button_new_with_label ("Close");
5825 gtk_box_pack_end (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5827 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5828 (GtkSignalFunc) gtk_widget_destroy,
5829 GTK_OBJECT(window));
5831 button = gtk_button_new_with_label ("Rebuild Tree");
5832 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5834 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
5835 gtk_container_set_border_width (GTK_CONTAINER (scrolled_win), 5);
5836 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
5837 GTK_POLICY_AUTOMATIC,
5839 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
5841 ctree = GTK_CTREE (gtk_ctree_new_with_titles (2, 0, title));
5842 gtk_container_add (GTK_CONTAINER (scrolled_win), GTK_WIDGET (ctree));
5844 gtk_clist_set_column_auto_resize (GTK_CLIST (ctree), 0, TRUE);
5845 gtk_clist_set_column_width (GTK_CLIST (ctree), 1, 200);
5846 gtk_clist_set_selection_mode (GTK_CLIST (ctree), GTK_SELECTION_EXTENDED);
5847 gtk_ctree_set_line_style (ctree, GTK_CTREE_LINES_DOTTED);
5848 line_style = GTK_CTREE_LINES_DOTTED;
5850 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5851 GTK_SIGNAL_FUNC (rebuild_tree), ctree);
5852 gtk_signal_connect (GTK_OBJECT (ctree), "click_column",
5853 (GtkSignalFunc) ctree_click_column, NULL);
5855 gtk_signal_connect_after (GTK_OBJECT (ctree), "button_press_event",
5856 GTK_SIGNAL_FUNC (after_press), NULL);
5857 gtk_signal_connect_after (GTK_OBJECT (ctree), "button_release_event",
5858 GTK_SIGNAL_FUNC (after_press), NULL);
5859 gtk_signal_connect_after (GTK_OBJECT (ctree), "tree_move",
5860 GTK_SIGNAL_FUNC (after_move), NULL);
5861 gtk_signal_connect_after (GTK_OBJECT (ctree), "end_selection",
5862 GTK_SIGNAL_FUNC (after_press), NULL);
5863 gtk_signal_connect_after (GTK_OBJECT (ctree), "toggle_focus_row",
5864 GTK_SIGNAL_FUNC (after_press), NULL);
5865 gtk_signal_connect_after (GTK_OBJECT (ctree), "select_all",
5866 GTK_SIGNAL_FUNC (after_press), NULL);
5867 gtk_signal_connect_after (GTK_OBJECT (ctree), "unselect_all",
5868 GTK_SIGNAL_FUNC (after_press), NULL);
5869 gtk_signal_connect_after (GTK_OBJECT (ctree), "scroll_vertical",
5870 GTK_SIGNAL_FUNC (after_press), NULL);
5872 bbox = gtk_hbox_new (FALSE, 5);
5873 gtk_container_set_border_width (GTK_CONTAINER (bbox), 5);
5874 gtk_box_pack_start (GTK_BOX (vbox), bbox, FALSE, TRUE, 0);
5876 mbox = gtk_vbox_new (TRUE, 5);
5877 gtk_box_pack_start (GTK_BOX (bbox), mbox, FALSE, TRUE, 0);
5879 label = gtk_label_new ("Row Height :");
5880 gtk_box_pack_start (GTK_BOX (mbox), label, FALSE, FALSE, 0);
5882 label = gtk_label_new ("Indent :");
5883 gtk_box_pack_start (GTK_BOX (mbox), label, FALSE, FALSE, 0);
5885 label = gtk_label_new ("Spacing :");
5886 gtk_box_pack_start (GTK_BOX (mbox), label, FALSE, FALSE, 0);
5888 mbox = gtk_vbox_new (TRUE, 5);
5889 gtk_box_pack_start (GTK_BOX (bbox), mbox, FALSE, TRUE, 0);
5891 adj = (GtkAdjustment *) gtk_adjustment_new (20, 12, 100, 1, 10, 0);
5892 spinner = gtk_spin_button_new (adj, 0, 0);
5893 gtk_box_pack_start (GTK_BOX (mbox), spinner, FALSE, FALSE, 5);
5894 gtk_tooltips_set_tip (tooltips, spinner,
5895 "Row height of list items", NULL);
5896 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
5897 GTK_SIGNAL_FUNC (change_row_height), ctree);
5898 gtk_clist_set_row_height ( GTK_CLIST (ctree), adj->value);
5900 adj = (GtkAdjustment *) gtk_adjustment_new (20, 0, 60, 1, 10, 0);
5901 spinner = gtk_spin_button_new (adj, 0, 0);
5902 gtk_box_pack_start (GTK_BOX (mbox), spinner, FALSE, FALSE, 5);
5903 gtk_tooltips_set_tip (tooltips, spinner, "Tree Indentation.", NULL);
5904 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
5905 GTK_SIGNAL_FUNC (change_indent), ctree);
5907 adj = (GtkAdjustment *) gtk_adjustment_new (5, 0, 60, 1, 10, 0);
5908 spinner = gtk_spin_button_new (adj, 0, 0);
5909 gtk_box_pack_start (GTK_BOX (mbox), spinner, FALSE, FALSE, 5);
5910 gtk_tooltips_set_tip (tooltips, spinner, "Tree Spacing.", NULL);
5911 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
5912 GTK_SIGNAL_FUNC (change_spacing), ctree);
5914 mbox = gtk_vbox_new (TRUE, 5);
5915 gtk_box_pack_start (GTK_BOX (bbox), mbox, FALSE, TRUE, 0);
5917 hbox = gtk_hbox_new (FALSE, 5);
5918 gtk_box_pack_start (GTK_BOX (mbox), hbox, FALSE, FALSE, 0);
5920 button = gtk_button_new_with_label ("Expand All");
5921 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5922 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5923 GTK_SIGNAL_FUNC (expand_all), ctree);
5925 button = gtk_button_new_with_label ("Collapse All");
5926 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5927 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5928 GTK_SIGNAL_FUNC (collapse_all), ctree);
5930 button = gtk_button_new_with_label ("Change Style");
5931 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5932 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5933 GTK_SIGNAL_FUNC (change_style), ctree);
5935 button = gtk_button_new_with_label ("Export Tree");
5936 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5937 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5938 GTK_SIGNAL_FUNC (export_ctree), ctree);
5940 hbox = gtk_hbox_new (FALSE, 5);
5941 gtk_box_pack_start (GTK_BOX (mbox), hbox, FALSE, FALSE, 0);
5943 button = gtk_button_new_with_label ("Select All");
5944 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5945 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5946 GTK_SIGNAL_FUNC (select_all), ctree);
5948 button = gtk_button_new_with_label ("Unselect All");
5949 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5950 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5951 GTK_SIGNAL_FUNC (unselect_all), ctree);
5953 button = gtk_button_new_with_label ("Remove Selection");
5954 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5955 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5956 GTK_SIGNAL_FUNC (remove_selection), ctree);
5958 check = gtk_check_button_new_with_label ("Reorderable");
5959 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
5960 gtk_tooltips_set_tip (tooltips, check,
5961 "Tree items can be reordered by dragging.", NULL);
5962 gtk_signal_connect (GTK_OBJECT (check), "clicked",
5963 GTK_SIGNAL_FUNC (toggle_reorderable), ctree);
5964 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE);
5966 hbox = gtk_hbox_new (TRUE, 5);
5967 gtk_box_pack_start (GTK_BOX (mbox), hbox, FALSE, FALSE, 0);
5969 omenu1 = build_option_menu (items1, 4, 2,
5970 ctree_toggle_line_style,
5972 gtk_box_pack_start (GTK_BOX (hbox), omenu1, FALSE, TRUE, 0);
5973 gtk_tooltips_set_tip (tooltips, omenu1, "The tree's line style.", NULL);
5975 omenu2 = build_option_menu (items2, 4, 1,
5976 ctree_toggle_expander_style,
5978 gtk_box_pack_start (GTK_BOX (hbox), omenu2, FALSE, TRUE, 0);
5979 gtk_tooltips_set_tip (tooltips, omenu2, "The tree's expander style.",
5982 omenu3 = build_option_menu (items3, 2, 0,
5983 ctree_toggle_justify, ctree);
5984 gtk_box_pack_start (GTK_BOX (hbox), omenu3, FALSE, TRUE, 0);
5985 gtk_tooltips_set_tip (tooltips, omenu3, "The tree's justification.",
5988 omenu4 = build_option_menu (items4, 3, 3,
5989 ctree_toggle_sel_mode, ctree);
5990 gtk_box_pack_start (GTK_BOX (hbox), omenu4, FALSE, TRUE, 0);
5991 gtk_tooltips_set_tip (tooltips, omenu4, "The list's selection mode.",
5994 gtk_widget_realize (window);
5997 pixmap1 = gdk_pixmap_create_from_xpm_d (window->window, &mask1,
5998 &transparent, book_closed_xpm);
6000 pixmap2 = gdk_pixmap_create_from_xpm_d (window->window, &mask2,
6001 &transparent, book_open_xpm);
6003 pixmap3 = gdk_pixmap_create_from_xpm_d (window->window, &mask3,
6004 &transparent, mini_page_xpm);
6006 gtk_widget_set_usize (GTK_WIDGET (ctree), 0, 300);
6008 frame = gtk_frame_new (NULL);
6009 gtk_container_set_border_width (GTK_CONTAINER (frame), 0);
6010 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_OUT);
6011 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
6013 hbox = gtk_hbox_new (TRUE, 2);
6014 gtk_container_set_border_width (GTK_CONTAINER (hbox), 2);
6015 gtk_container_add (GTK_CONTAINER (frame), hbox);
6017 frame = gtk_frame_new (NULL);
6018 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
6019 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
6021 hbox2 = gtk_hbox_new (FALSE, 0);
6022 gtk_container_set_border_width (GTK_CONTAINER (hbox2), 2);
6023 gtk_container_add (GTK_CONTAINER (frame), hbox2);
6025 label = gtk_label_new ("Books :");
6026 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
6028 sprintf (buf, "%d", books);
6029 book_label = gtk_label_new (buf);
6030 gtk_box_pack_end (GTK_BOX (hbox2), book_label, FALSE, TRUE, 5);
6032 frame = gtk_frame_new (NULL);
6033 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
6034 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
6036 hbox2 = gtk_hbox_new (FALSE, 0);
6037 gtk_container_set_border_width (GTK_CONTAINER (hbox2), 2);
6038 gtk_container_add (GTK_CONTAINER (frame), hbox2);
6040 label = gtk_label_new ("Pages :");
6041 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
6043 sprintf (buf, "%d", pages);
6044 page_label = gtk_label_new (buf);
6045 gtk_box_pack_end (GTK_BOX (hbox2), page_label, FALSE, TRUE, 5);
6047 frame = gtk_frame_new (NULL);
6048 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
6049 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
6051 hbox2 = gtk_hbox_new (FALSE, 0);
6052 gtk_container_set_border_width (GTK_CONTAINER (hbox2), 2);
6053 gtk_container_add (GTK_CONTAINER (frame), hbox2);
6055 label = gtk_label_new ("Selected :");
6056 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
6058 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->selection));
6059 sel_label = gtk_label_new (buf);
6060 gtk_box_pack_end (GTK_BOX (hbox2), sel_label, FALSE, TRUE, 5);
6062 frame = gtk_frame_new (NULL);
6063 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
6064 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
6066 hbox2 = gtk_hbox_new (FALSE, 0);
6067 gtk_container_set_border_width (GTK_CONTAINER (hbox2), 2);
6068 gtk_container_add (GTK_CONTAINER (frame), hbox2);
6070 label = gtk_label_new ("Visible :");
6071 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
6073 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->row_list));
6074 vis_label = gtk_label_new (buf);
6075 gtk_box_pack_end (GTK_BOX (hbox2), vis_label, FALSE, TRUE, 5);
6077 rebuild_tree (NULL, ctree);
6080 if (!GTK_WIDGET_VISIBLE (window))
6081 gtk_widget_show_all (window);
6083 gtk_widget_destroy (window);
6091 color_selection_ok (GtkWidget *w,
6092 GtkColorSelectionDialog *cs)
6094 GtkColorSelection *colorsel;
6097 colorsel=GTK_COLOR_SELECTION(cs->colorsel);
6099 gtk_color_selection_get_color(colorsel,color);
6100 gtk_color_selection_set_color(colorsel,color);
6104 color_selection_changed (GtkWidget *w,
6105 GtkColorSelectionDialog *cs)
6107 GtkColorSelection *colorsel;
6110 colorsel=GTK_COLOR_SELECTION(cs->colorsel);
6111 gtk_color_selection_get_color(colorsel,color);
6115 opacity_toggled_cb (GtkWidget *w,
6116 GtkColorSelectionDialog *cs)
6118 GtkColorSelection *colorsel;
6120 colorsel = GTK_COLOR_SELECTION (cs->colorsel);
6121 gtk_color_selection_set_has_opacity_control (colorsel,
6122 gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w)));
6126 palette_toggled_cb (GtkWidget *w,
6127 GtkColorSelectionDialog *cs)
6129 GtkColorSelection *colorsel;
6131 colorsel = GTK_COLOR_SELECTION (cs->colorsel);
6132 gtk_color_selection_set_has_palette (colorsel,
6133 gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w)));
6137 create_color_selection (void)
6139 static GtkWidget *window = NULL;
6143 GtkWidget *options_hbox;
6144 GtkWidget *check_button;
6146 window = gtk_color_selection_dialog_new ("color selection dialog");
6147 gtk_widget_show (GTK_COLOR_SELECTION_DIALOG (window)->help_button);
6149 gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
6151 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6152 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6155 options_hbox = gtk_hbox_new (FALSE, 0);
6156 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), options_hbox, FALSE, FALSE, 0);
6157 gtk_container_set_border_width (GTK_CONTAINER (options_hbox), 10);
6159 check_button = gtk_check_button_new_with_label ("Show Opacity");
6160 gtk_box_pack_start (GTK_BOX (options_hbox), check_button, FALSE, FALSE, 0);
6161 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
6162 GTK_SIGNAL_FUNC (opacity_toggled_cb), window);
6164 check_button = gtk_check_button_new_with_label ("Show Palette");
6165 gtk_box_pack_end (GTK_BOX (options_hbox), check_button, FALSE, FALSE, 0);
6166 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
6167 GTK_SIGNAL_FUNC (palette_toggled_cb), window);
6169 gtk_widget_show_all (options_hbox);
6171 gtk_signal_connect (
6172 GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (window)->colorsel),
6174 GTK_SIGNAL_FUNC(color_selection_changed),
6177 gtk_signal_connect (
6178 GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (window)->ok_button),
6180 GTK_SIGNAL_FUNC(color_selection_ok),
6183 gtk_signal_connect_object (
6184 GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (window)->cancel_button),
6186 GTK_SIGNAL_FUNC(gtk_widget_destroy),
6187 GTK_OBJECT (window));
6190 if (!GTK_WIDGET_VISIBLE (window))
6191 gtk_widget_show (window);
6193 gtk_widget_destroy (window);
6201 file_selection_hide_fileops (GtkWidget *widget,
6202 GtkFileSelection *fs)
6204 gtk_file_selection_hide_fileop_buttons (fs);
6208 file_selection_ok (GtkWidget *w,
6209 GtkFileSelection *fs)
6211 g_print ("%s\n", gtk_file_selection_get_filename (fs));
6212 gtk_widget_destroy (GTK_WIDGET (fs));
6216 create_file_selection (void)
6218 static GtkWidget *window = NULL;
6223 window = gtk_file_selection_new ("file selection dialog");
6225 gtk_file_selection_hide_fileop_buttons (GTK_FILE_SELECTION (window));
6227 gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
6229 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6230 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6233 gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (window)->ok_button),
6234 "clicked", GTK_SIGNAL_FUNC(file_selection_ok),
6236 gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION (window)->cancel_button),
6237 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
6238 GTK_OBJECT (window));
6240 button = gtk_button_new_with_label ("Hide Fileops");
6241 gtk_signal_connect (GTK_OBJECT (button), "clicked",
6242 (GtkSignalFunc) file_selection_hide_fileops,
6244 gtk_box_pack_start (GTK_BOX (GTK_FILE_SELECTION (window)->action_area),
6245 button, FALSE, FALSE, 0);
6246 gtk_widget_show (button);
6248 button = gtk_button_new_with_label ("Show Fileops");
6249 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6250 (GtkSignalFunc) gtk_file_selection_show_fileop_buttons,
6252 gtk_box_pack_start (GTK_BOX (GTK_FILE_SELECTION (window)->action_area),
6253 button, FALSE, FALSE, 0);
6254 gtk_widget_show (button);
6257 if (!GTK_WIDGET_VISIBLE (window))
6258 gtk_widget_show (window);
6260 gtk_widget_destroy (window);
6264 flipping_toggled_cb (GtkWidget *widget, gpointer data)
6266 int state = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
6267 int new_direction = state ? GTK_TEXT_DIR_RTL : GTK_TEXT_DIR_LTR;
6269 gtk_widget_set_default_direction (new_direction);
6273 create_flipping (void)
6275 static GtkWidget *window = NULL;
6276 GtkWidget *check_button, *button;
6280 window = gtk_dialog_new ();
6282 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6283 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6286 gtk_window_set_title (GTK_WINDOW (window), "Bidirectional Flipping");
6288 check_button = gtk_check_button_new_with_label ("Right-to-left global direction");
6289 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
6290 check_button, TRUE, TRUE, 0);
6292 if (gtk_widget_get_default_direction () == GTK_TEXT_DIR_RTL)
6293 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button), TRUE);
6295 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
6296 GTK_SIGNAL_FUNC (flipping_toggled_cb), FALSE);
6298 gtk_container_set_border_width (GTK_CONTAINER (check_button), 10);
6300 button = gtk_button_new_with_label ("Close");
6301 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6302 GTK_SIGNAL_FUNC (gtk_widget_destroy), GTK_OBJECT (window));
6303 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
6304 button, TRUE, TRUE, 0);
6307 if (!GTK_WIDGET_VISIBLE (window))
6308 gtk_widget_show_all (window);
6310 gtk_widget_destroy (window);
6318 make_focus_table (GList **list)
6323 table = gtk_table_new (5, 5, FALSE);
6336 widget = gtk_entry_new ();
6338 widget = gtk_button_new_with_label ("Foo");
6340 *list = g_list_prepend (*list, widget);
6342 gtk_table_attach (GTK_TABLE (table),
6346 GTK_EXPAND | GTK_FILL,
6347 GTK_EXPAND | GTK_FILL,
6356 *list = g_list_reverse (*list);
6364 static GtkWidget *window = NULL;
6372 window = gtk_dialog_new_with_buttons ("Keyboard focus navigation",
6378 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6379 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
6382 gtk_signal_connect (GTK_OBJECT (window), "response",
6383 GTK_SIGNAL_FUNC (gtk_widget_destroy),
6386 gtk_window_set_title (GTK_WINDOW (window), "Keyboard Focus Navigation");
6388 frame = gtk_frame_new ("Weird tab focus chain");
6390 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
6391 frame, TRUE, TRUE, 0);
6393 table = make_focus_table (&list);
6395 gtk_container_add (GTK_CONTAINER (frame), table);
6397 gtk_container_set_focus_chain (GTK_CONTAINER (table),
6402 frame = gtk_frame_new ("Default tab focus chain");
6404 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
6405 frame, TRUE, TRUE, 0);
6408 table = make_focus_table (&list);
6412 gtk_container_add (GTK_CONTAINER (frame), table);
6415 if (!GTK_WIDGET_VISIBLE (window))
6416 gtk_widget_show_all (window);
6418 gtk_widget_destroy (window);
6426 font_selection_ok (GtkWidget *w,
6427 GtkFontSelectionDialog *fs)
6429 gchar *s = gtk_font_selection_dialog_get_font_name (fs);
6431 g_print ("%s\n", s);
6433 gtk_widget_destroy (GTK_WIDGET (fs));
6437 create_font_selection (void)
6439 static GtkWidget *window = NULL;
6443 window = gtk_font_selection_dialog_new ("Font Selection Dialog");
6445 gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
6447 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6448 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6451 gtk_signal_connect (GTK_OBJECT (GTK_FONT_SELECTION_DIALOG (window)->ok_button),
6452 "clicked", GTK_SIGNAL_FUNC(font_selection_ok),
6453 GTK_FONT_SELECTION_DIALOG (window));
6454 gtk_signal_connect_object (GTK_OBJECT (GTK_FONT_SELECTION_DIALOG (window)->cancel_button),
6455 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
6456 GTK_OBJECT (window));
6459 if (!GTK_WIDGET_VISIBLE (window))
6460 gtk_widget_show (window);
6462 gtk_widget_destroy (window);
6469 static GtkWidget *dialog_window = NULL;
6472 label_toggle (GtkWidget *widget,
6477 *label = gtk_label_new ("Dialog Test");
6478 gtk_signal_connect (GTK_OBJECT (*label),
6480 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
6482 gtk_misc_set_padding (GTK_MISC (*label), 10, 10);
6483 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->vbox),
6484 *label, TRUE, TRUE, 0);
6485 gtk_widget_show (*label);
6488 gtk_widget_destroy (*label);
6491 #define RESPONSE_TOGGLE_SEPARATOR 1
6494 print_response (GtkWidget *dialog,
6498 g_print ("response signal received (%d)\n", response_id);
6500 if (response_id == RESPONSE_TOGGLE_SEPARATOR)
6502 gtk_dialog_set_has_separator (GTK_DIALOG (dialog),
6503 !gtk_dialog_get_has_separator (GTK_DIALOG (dialog)));
6508 create_dialog (void)
6510 static GtkWidget *label;
6515 /* This is a terrible example; it's much simpler to create
6516 * dialogs than this. Don't use testgtk for example code,
6520 dialog_window = gtk_dialog_new ();
6522 gtk_signal_connect (GTK_OBJECT (dialog_window),
6524 GTK_SIGNAL_FUNC (print_response),
6527 gtk_signal_connect (GTK_OBJECT (dialog_window), "destroy",
6528 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6531 gtk_window_set_title (GTK_WINDOW (dialog_window), "GtkDialog");
6532 gtk_container_set_border_width (GTK_CONTAINER (dialog_window), 0);
6534 button = gtk_button_new_with_label ("OK");
6535 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6536 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->action_area),
6537 button, TRUE, TRUE, 0);
6538 gtk_widget_grab_default (button);
6539 gtk_widget_show (button);
6541 button = gtk_button_new_with_label ("Toggle");
6542 gtk_signal_connect (GTK_OBJECT (button), "clicked",
6543 GTK_SIGNAL_FUNC (label_toggle),
6545 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6546 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->action_area),
6547 button, TRUE, TRUE, 0);
6548 gtk_widget_show (button);
6552 button = gtk_button_new_with_label ("Separator");
6554 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6556 gtk_dialog_add_action_widget (GTK_DIALOG (dialog_window),
6558 RESPONSE_TOGGLE_SEPARATOR);
6559 gtk_widget_show (button);
6562 if (!GTK_WIDGET_VISIBLE (dialog_window))
6563 gtk_widget_show (dialog_window);
6565 gtk_widget_destroy (dialog_window);
6570 static gboolean event_watcher_enter_id = 0;
6571 static gboolean event_watcher_leave_id = 0;
6574 event_watcher (GSignalInvocationHint *ihint,
6575 guint n_param_values,
6576 const GValue *param_values,
6579 g_print ("Watch: \"%s\" emitted for %s\n",
6580 gtk_signal_name (ihint->signal_id),
6581 gtk_type_name (GTK_OBJECT_TYPE (g_value_get_object (param_values + 0))));
6587 event_watcher_down (void)
6589 if (event_watcher_enter_id)
6593 signal_id = gtk_signal_lookup ("enter_notify_event", GTK_TYPE_WIDGET);
6594 g_signal_remove_emission_hook (signal_id, event_watcher_enter_id);
6595 event_watcher_enter_id = 0;
6596 signal_id = gtk_signal_lookup ("leave_notify_event", GTK_TYPE_WIDGET);
6597 g_signal_remove_emission_hook (signal_id, event_watcher_leave_id);
6598 event_watcher_leave_id = 0;
6603 event_watcher_toggle (void)
6605 if (event_watcher_enter_id)
6606 event_watcher_down ();
6611 signal_id = gtk_signal_lookup ("enter_notify_event", GTK_TYPE_WIDGET);
6612 event_watcher_enter_id = g_signal_add_emission_hook (signal_id, 0, event_watcher, NULL, NULL);
6613 signal_id = gtk_signal_lookup ("leave_notify_event", GTK_TYPE_WIDGET);
6614 event_watcher_leave_id = g_signal_add_emission_hook (signal_id, 0, event_watcher, NULL, NULL);
6619 create_event_watcher (void)
6625 dialog_window = gtk_dialog_new ();
6627 gtk_signal_connect (GTK_OBJECT (dialog_window), "destroy",
6628 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
6630 gtk_signal_connect (GTK_OBJECT (dialog_window),
6632 GTK_SIGNAL_FUNC (event_watcher_down),
6635 gtk_window_set_title (GTK_WINDOW (dialog_window), "Event Watcher");
6636 gtk_container_set_border_width (GTK_CONTAINER (dialog_window), 0);
6637 gtk_widget_set_usize (dialog_window, 200, 110);
6639 button = gtk_toggle_button_new_with_label ("Activate Watch");
6640 gtk_signal_connect (GTK_OBJECT (button), "clicked",
6641 GTK_SIGNAL_FUNC (event_watcher_toggle),
6643 gtk_container_set_border_width (GTK_CONTAINER (button), 10);
6644 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->vbox),
6645 button, TRUE, TRUE, 0);
6646 gtk_widget_show (button);
6648 button = gtk_button_new_with_label ("Close");
6649 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6650 GTK_SIGNAL_FUNC (gtk_widget_destroy),
6651 (GtkObject*) dialog_window);
6652 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6653 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->action_area),
6654 button, TRUE, TRUE, 0);
6655 gtk_widget_grab_default (button);
6656 gtk_widget_show (button);
6659 if (!GTK_WIDGET_VISIBLE (dialog_window))
6660 gtk_widget_show (dialog_window);
6662 gtk_widget_destroy (dialog_window);
6670 reformat_value (GtkScale *scale,
6673 return g_strdup_printf ("-->%0.*g<--",
6674 gtk_scale_get_digits (scale), value);
6678 create_range_controls (void)
6680 static GtkWidget *window = NULL;
6684 GtkWidget *scrollbar;
6686 GtkWidget *separator;
6687 GtkObject *adjustment;
6692 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6694 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6695 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6698 gtk_window_set_title (GTK_WINDOW (window), "range controls");
6699 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6702 box1 = gtk_vbox_new (FALSE, 0);
6703 gtk_container_add (GTK_CONTAINER (window), box1);
6704 gtk_widget_show (box1);
6707 box2 = gtk_vbox_new (FALSE, 10);
6708 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6709 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
6710 gtk_widget_show (box2);
6713 adjustment = gtk_adjustment_new (0.0, 0.0, 101.0, 0.1, 1.0, 1.0);
6715 scale = gtk_hscale_new (GTK_ADJUSTMENT (adjustment));
6716 gtk_widget_set_usize (GTK_WIDGET (scale), 150, -1);
6717 gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED);
6718 gtk_scale_set_digits (GTK_SCALE (scale), 1);
6719 gtk_scale_set_draw_value (GTK_SCALE (scale), TRUE);
6720 gtk_box_pack_start (GTK_BOX (box2), scale, TRUE, TRUE, 0);
6721 gtk_widget_show (scale);
6723 scrollbar = gtk_hscrollbar_new (GTK_ADJUSTMENT (adjustment));
6724 gtk_range_set_update_policy (GTK_RANGE (scrollbar),
6725 GTK_UPDATE_CONTINUOUS);
6726 gtk_box_pack_start (GTK_BOX (box2), scrollbar, TRUE, TRUE, 0);
6727 gtk_widget_show (scrollbar);
6729 scale = gtk_hscale_new (GTK_ADJUSTMENT (adjustment));
6730 gtk_scale_set_draw_value (GTK_SCALE (scale), TRUE);
6731 gtk_signal_connect (GTK_OBJECT (scale),
6733 GTK_SIGNAL_FUNC (reformat_value),
6735 gtk_box_pack_start (GTK_BOX (box2), scale, TRUE, TRUE, 0);
6736 gtk_widget_show (scale);
6738 hbox = gtk_hbox_new (FALSE, 0);
6740 scale = gtk_vscale_new (GTK_ADJUSTMENT (adjustment));
6741 gtk_widget_set_usize (scale, -1, 200);
6742 gtk_scale_set_digits (GTK_SCALE (scale), 2);
6743 gtk_scale_set_draw_value (GTK_SCALE (scale), TRUE);
6744 gtk_box_pack_start (GTK_BOX (hbox), scale, TRUE, TRUE, 0);
6745 gtk_widget_show (scale);
6747 scale = gtk_vscale_new (GTK_ADJUSTMENT (adjustment));
6748 gtk_widget_set_usize (scale, -1, 200);
6749 gtk_scale_set_digits (GTK_SCALE (scale), 2);
6750 gtk_scale_set_draw_value (GTK_SCALE (scale), TRUE);
6751 gtk_range_set_inverted (GTK_RANGE (scale), TRUE);
6752 gtk_box_pack_start (GTK_BOX (hbox), scale, TRUE, TRUE, 0);
6753 gtk_widget_show (scale);
6755 scale = gtk_vscale_new (GTK_ADJUSTMENT (adjustment));
6756 gtk_scale_set_draw_value (GTK_SCALE (scale), TRUE);
6757 gtk_signal_connect (GTK_OBJECT (scale),
6759 GTK_SIGNAL_FUNC (reformat_value),
6761 gtk_box_pack_start (GTK_BOX (hbox), scale, TRUE, TRUE, 0);
6762 gtk_widget_show (scale);
6765 gtk_box_pack_start (GTK_BOX (box2), hbox, TRUE, TRUE, 0);
6766 gtk_widget_show (hbox);
6768 separator = gtk_hseparator_new ();
6769 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
6770 gtk_widget_show (separator);
6773 box2 = gtk_vbox_new (FALSE, 10);
6774 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6775 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6776 gtk_widget_show (box2);
6779 button = gtk_button_new_with_label ("close");
6780 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6781 GTK_SIGNAL_FUNC(gtk_widget_destroy),
6782 GTK_OBJECT (window));
6783 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6784 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6785 gtk_widget_grab_default (button);
6786 gtk_widget_show (button);
6789 if (!GTK_WIDGET_VISIBLE (window))
6790 gtk_widget_show (window);
6792 gtk_widget_destroy (window);
6800 create_rulers (void)
6802 static GtkWidget *window = NULL;
6808 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6809 gtk_window_set_policy (GTK_WINDOW (window), TRUE, TRUE, FALSE);
6811 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6812 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6815 gtk_window_set_title (GTK_WINDOW (window), "rulers");
6816 gtk_widget_set_usize (window, 300, 300);
6817 gtk_widget_set_events (window,
6818 GDK_POINTER_MOTION_MASK
6819 | GDK_POINTER_MOTION_HINT_MASK);
6820 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6822 table = gtk_table_new (2, 2, FALSE);
6823 gtk_container_add (GTK_CONTAINER (window), table);
6824 gtk_widget_show (table);
6826 ruler = gtk_hruler_new ();
6827 gtk_ruler_set_metric (GTK_RULER (ruler), GTK_CENTIMETERS);
6828 gtk_ruler_set_range (GTK_RULER (ruler), 100, 0, 0, 20);
6830 gtk_signal_connect_object (GTK_OBJECT (window),
6831 "motion_notify_event",
6832 GTK_SIGNAL_FUNC (GTK_WIDGET_GET_CLASS (ruler)->motion_notify_event),
6833 GTK_OBJECT (ruler));
6835 gtk_table_attach (GTK_TABLE (table), ruler, 1, 2, 0, 1,
6836 GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
6837 gtk_widget_show (ruler);
6840 ruler = gtk_vruler_new ();
6841 gtk_ruler_set_range (GTK_RULER (ruler), 5, 15, 0, 20);
6843 gtk_signal_connect_object (GTK_OBJECT (window),
6844 "motion_notify_event",
6845 GTK_SIGNAL_FUNC (GTK_WIDGET_GET_CLASS (ruler)->motion_notify_event),
6846 GTK_OBJECT (ruler));
6848 gtk_table_attach (GTK_TABLE (table), ruler, 0, 1, 1, 2,
6849 GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
6850 gtk_widget_show (ruler);
6853 if (!GTK_WIDGET_VISIBLE (window))
6854 gtk_widget_show (window);
6856 gtk_widget_destroy (window);
6860 text_toggle_editable (GtkWidget *checkbutton,
6863 gtk_text_set_editable(GTK_TEXT(text),
6864 GTK_TOGGLE_BUTTON(checkbutton)->active);
6868 text_toggle_word_wrap (GtkWidget *checkbutton,
6871 gtk_text_set_word_wrap(GTK_TEXT(text),
6872 GTK_TOGGLE_BUTTON(checkbutton)->active);
6879 { { 0, 0x0000, 0x0000, 0x0000 }, "black" },
6880 { { 0, 0xFFFF, 0xFFFF, 0xFFFF }, "white" },
6881 { { 0, 0xFFFF, 0x0000, 0x0000 }, "red" },
6882 { { 0, 0x0000, 0xFFFF, 0x0000 }, "green" },
6883 { { 0, 0x0000, 0x0000, 0xFFFF }, "blue" },
6884 { { 0, 0x0000, 0xFFFF, 0xFFFF }, "cyan" },
6885 { { 0, 0xFFFF, 0x0000, 0xFFFF }, "magenta" },
6886 { { 0, 0xFFFF, 0xFFFF, 0x0000 }, "yellow" }
6889 int ntext_colors = sizeof(text_colors) / sizeof(text_colors[0]);
6895 text_insert_random (GtkWidget *w, GtkText *text)
6899 for (i=0; i<10; i++)
6901 c = 'A' + rand() % ('Z' - 'A');
6902 gtk_text_set_point (text, rand() % gtk_text_get_length (text));
6903 gtk_text_insert (text, NULL, NULL, NULL, &c, 1);
6912 static GtkWidget *window = NULL;
6918 GtkWidget *separator;
6919 GtkWidget *scrolled_window;
6926 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6927 gtk_widget_set_name (window, "text window");
6928 gtk_widget_set_usize (window, 500, 500);
6929 gtk_window_set_policy (GTK_WINDOW(window), TRUE, TRUE, FALSE);
6931 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6932 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6935 gtk_window_set_title (GTK_WINDOW (window), "test");
6936 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6939 box1 = gtk_vbox_new (FALSE, 0);
6940 gtk_container_add (GTK_CONTAINER (window), box1);
6941 gtk_widget_show (box1);
6944 box2 = gtk_vbox_new (FALSE, 10);
6945 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6946 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
6947 gtk_widget_show (box2);
6950 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
6951 gtk_box_pack_start (GTK_BOX (box2), scrolled_window, TRUE, TRUE, 0);
6952 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
6955 gtk_widget_show (scrolled_window);
6957 text = gtk_text_new (NULL, NULL);
6958 gtk_text_set_editable (GTK_TEXT (text), TRUE);
6959 gtk_container_add (GTK_CONTAINER (scrolled_window), text);
6960 gtk_widget_grab_focus (text);
6961 gtk_widget_show (text);
6964 gtk_text_freeze (GTK_TEXT (text));
6966 for (i=0; i<ntext_colors; i++)
6968 gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL,
6969 text_colors[i].name, -1);
6970 gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL, "\t", -1);
6972 for (j=0; j<ntext_colors; j++)
6974 gtk_text_insert (GTK_TEXT (text), NULL,
6975 &text_colors[j].color, &text_colors[i].color,
6978 gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL, "\n", -1);
6981 infile = fopen("testgtk.c", "r");
6986 int nbytes_read, nbytes_alloc;
6989 nbytes_alloc = 1024;
6990 buffer = g_new (char, nbytes_alloc);
6994 if (nbytes_alloc < nbytes_read + 1024)
6997 buffer = g_realloc (buffer, nbytes_alloc);
6999 len = fread (buffer + nbytes_read, 1, 1024, infile);
7005 gtk_text_insert (GTK_TEXT (text), NULL, NULL,
7006 NULL, buffer, nbytes_read);
7011 gtk_text_thaw (GTK_TEXT (text));
7013 hbox = gtk_hbutton_box_new ();
7014 gtk_box_pack_start (GTK_BOX (box2), hbox, FALSE, FALSE, 0);
7015 gtk_widget_show (hbox);
7017 check = gtk_check_button_new_with_label("Editable");
7018 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, FALSE, 0);
7019 gtk_signal_connect (GTK_OBJECT(check), "toggled",
7020 GTK_SIGNAL_FUNC(text_toggle_editable), text);
7021 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), TRUE);
7022 gtk_widget_show (check);
7024 check = gtk_check_button_new_with_label("Wrap Words");
7025 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
7026 gtk_signal_connect (GTK_OBJECT(check), "toggled",
7027 GTK_SIGNAL_FUNC(text_toggle_word_wrap), text);
7028 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), FALSE);
7029 gtk_widget_show (check);
7031 separator = gtk_hseparator_new ();
7032 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
7033 gtk_widget_show (separator);
7036 box2 = gtk_vbox_new (FALSE, 10);
7037 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
7038 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
7039 gtk_widget_show (box2);
7042 button = gtk_button_new_with_label ("insert random");
7043 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7044 GTK_SIGNAL_FUNC(text_insert_random),
7046 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
7047 gtk_widget_show (button);
7049 button = gtk_button_new_with_label ("close");
7050 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7051 GTK_SIGNAL_FUNC(gtk_widget_destroy),
7052 GTK_OBJECT (window));
7053 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
7054 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7055 gtk_widget_grab_default (button);
7056 gtk_widget_show (button);
7059 if (!GTK_WIDGET_VISIBLE (window))
7060 gtk_widget_show (window);
7062 gtk_widget_destroy (window);
7069 GdkPixmap *book_open;
7070 GdkPixmap *book_closed;
7071 GdkBitmap *book_open_mask;
7072 GdkBitmap *book_closed_mask;
7073 GtkWidget *sample_notebook;
7076 set_page_pixmaps (GtkNotebook *notebook, gint page_num,
7077 GdkPixmap *pixmap, GdkPixmap *mask)
7079 GtkWidget *page_widget;
7082 page_widget = gtk_notebook_get_nth_page (notebook, page_num);
7084 pixwid = gtk_object_get_data (GTK_OBJECT (page_widget), "tab_pixmap");
7085 gtk_pixmap_set (GTK_PIXMAP (pixwid), pixmap, mask);
7087 pixwid = gtk_object_get_data (GTK_OBJECT (page_widget), "menu_pixmap");
7088 gtk_pixmap_set (GTK_PIXMAP (pixwid), pixmap, mask);
7092 page_switch (GtkWidget *widget, GtkNotebookPage *page, gint page_num)
7094 GtkNotebook *notebook = GTK_NOTEBOOK (widget);
7095 gint old_page_num = gtk_notebook_get_current_page (notebook);
7097 if (page_num == old_page_num)
7100 set_page_pixmaps (notebook, page_num, book_open, book_open_mask);
7102 if (old_page_num != -1)
7103 set_page_pixmaps (notebook, old_page_num, book_closed, book_closed_mask);
7107 tab_fill (GtkToggleButton *button, GtkWidget *child)
7110 GtkPackType pack_type;
7112 gtk_notebook_query_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
7113 &expand, NULL, &pack_type);
7114 gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
7115 expand, button->active, pack_type);
7119 tab_expand (GtkToggleButton *button, GtkWidget *child)
7122 GtkPackType pack_type;
7124 gtk_notebook_query_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
7125 NULL, &fill, &pack_type);
7126 gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
7127 button->active, fill, pack_type);
7131 tab_pack (GtkToggleButton *button, GtkWidget *child)
7137 gtk_notebook_query_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
7138 &expand, &fill, NULL);
7139 gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
7140 expand, fill, button->active);
7144 create_pages (GtkNotebook *notebook, gint start, gint end)
7146 GtkWidget *child = NULL;
7151 GtkWidget *label_box;
7152 GtkWidget *menu_box;
7156 char accel_buffer[32];
7158 for (i = start; i <= end; i++)
7160 sprintf (buffer, "Page %d", i);
7161 sprintf (accel_buffer, "Page _%d", i);
7163 child = gtk_frame_new (buffer);
7164 gtk_container_set_border_width (GTK_CONTAINER (child), 10);
7166 vbox = gtk_vbox_new (TRUE,0);
7167 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
7168 gtk_container_add (GTK_CONTAINER (child), vbox);
7170 hbox = gtk_hbox_new (TRUE,0);
7171 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
7173 button = gtk_check_button_new_with_label ("Fill Tab");
7174 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
7175 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
7176 gtk_signal_connect (GTK_OBJECT (button), "toggled",
7177 GTK_SIGNAL_FUNC (tab_fill), child);
7179 button = gtk_check_button_new_with_label ("Expand Tab");
7180 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
7181 gtk_signal_connect (GTK_OBJECT (button), "toggled",
7182 GTK_SIGNAL_FUNC (tab_expand), child);
7184 button = gtk_check_button_new_with_label ("Pack end");
7185 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
7186 gtk_signal_connect (GTK_OBJECT (button), "toggled",
7187 GTK_SIGNAL_FUNC (tab_pack), child);
7189 button = gtk_button_new_with_label ("Hide Page");
7190 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 5);
7191 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7192 GTK_SIGNAL_FUNC (gtk_widget_hide),
7193 GTK_OBJECT (child));
7195 gtk_widget_show_all (child);
7197 label_box = gtk_hbox_new (FALSE, 0);
7198 pixwid = gtk_pixmap_new (book_closed, book_closed_mask);
7199 gtk_object_set_data (GTK_OBJECT (child), "tab_pixmap", pixwid);
7201 gtk_box_pack_start (GTK_BOX (label_box), pixwid, FALSE, TRUE, 0);
7202 gtk_misc_set_padding (GTK_MISC (pixwid), 3, 1);
7203 label = gtk_label_new_with_mnemonic (accel_buffer);
7204 gtk_box_pack_start (GTK_BOX (label_box), label, FALSE, TRUE, 0);
7205 gtk_widget_show_all (label_box);
7208 menu_box = gtk_hbox_new (FALSE, 0);
7209 pixwid = gtk_pixmap_new (book_closed, book_closed_mask);
7210 gtk_object_set_data (GTK_OBJECT (child), "menu_pixmap", pixwid);
7212 gtk_box_pack_start (GTK_BOX (menu_box), pixwid, FALSE, TRUE, 0);
7213 gtk_misc_set_padding (GTK_MISC (pixwid), 3, 1);
7214 label = gtk_label_new (buffer);
7215 gtk_box_pack_start (GTK_BOX (menu_box), label, FALSE, TRUE, 0);
7216 gtk_widget_show_all (menu_box);
7218 gtk_notebook_append_page_menu (notebook, child, label_box, menu_box);
7223 rotate_notebook (GtkButton *button,
7224 GtkNotebook *notebook)
7226 gtk_notebook_set_tab_pos (notebook, (notebook->tab_pos + 1) % 4);
7230 show_all_pages (GtkButton *button,
7231 GtkNotebook *notebook)
7233 gtk_container_foreach (GTK_CONTAINER (notebook),
7234 (GtkCallback) gtk_widget_show, NULL);
7238 notebook_type_changed (GtkWidget *optionmenu,
7239 GtkNotebook *notebook)
7250 c = gtk_option_menu_get_history (GTK_OPTION_MENU (optionmenu));
7255 /* standard notebook */
7256 gtk_notebook_set_show_tabs (notebook, TRUE);
7257 gtk_notebook_set_show_border (notebook, TRUE);
7258 gtk_notebook_set_scrollable (notebook, FALSE);
7262 /* notabs notebook */
7263 gtk_notebook_set_show_tabs (notebook, FALSE);
7264 gtk_notebook_set_show_border (notebook, TRUE);
7269 gtk_notebook_set_show_tabs (notebook, FALSE);
7270 gtk_notebook_set_show_border (notebook, FALSE);
7275 gtk_notebook_set_show_tabs (notebook, TRUE);
7276 gtk_notebook_set_show_border (notebook, TRUE);
7277 gtk_notebook_set_scrollable (notebook, TRUE);
7278 if (g_list_length (notebook->children) == 5)
7279 create_pages (notebook, 6, 15);
7285 if (g_list_length (notebook->children) == 15)
7286 for (i = 0; i < 10; i++)
7287 gtk_notebook_remove_page (notebook, 5);
7291 notebook_popup (GtkToggleButton *button,
7292 GtkNotebook *notebook)
7295 gtk_notebook_popup_enable (notebook);
7297 gtk_notebook_popup_disable (notebook);
7301 notebook_homogeneous (GtkToggleButton *button,
7302 GtkNotebook *notebook)
7304 gtk_notebook_set_homogeneous_tabs (notebook, button->active);
7308 create_notebook (void)
7310 static GtkWidget *window = NULL;
7314 GtkWidget *separator;
7316 GdkColor *transparent = NULL;
7319 static gchar *items[] =
7329 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7331 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7332 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7335 gtk_window_set_title (GTK_WINDOW (window), "notebook");
7336 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
7338 box1 = gtk_vbox_new (FALSE, 0);
7339 gtk_container_add (GTK_CONTAINER (window), box1);
7341 sample_notebook = gtk_notebook_new ();
7342 gtk_signal_connect (GTK_OBJECT (sample_notebook), "switch_page",
7343 GTK_SIGNAL_FUNC (page_switch), NULL);
7344 gtk_notebook_set_tab_pos (GTK_NOTEBOOK (sample_notebook), GTK_POS_TOP);
7345 gtk_box_pack_start (GTK_BOX (box1), sample_notebook, TRUE, TRUE, 0);
7346 gtk_container_set_border_width (GTK_CONTAINER (sample_notebook), 10);
7348 gtk_widget_realize (sample_notebook);
7350 book_open = gdk_pixmap_create_from_xpm_d (sample_notebook->window,
7355 book_closed = gdk_pixmap_create_from_xpm_d (sample_notebook->window,
7360 create_pages (GTK_NOTEBOOK (sample_notebook), 1, 5);
7362 separator = gtk_hseparator_new ();
7363 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 10);
7365 box2 = gtk_hbox_new (FALSE, 5);
7366 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
7367 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
7369 button = gtk_check_button_new_with_label ("popup menu");
7370 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, FALSE, 0);
7371 gtk_signal_connect (GTK_OBJECT(button), "clicked",
7372 GTK_SIGNAL_FUNC (notebook_popup),
7373 GTK_OBJECT (sample_notebook));
7375 button = gtk_check_button_new_with_label ("homogeneous tabs");
7376 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, FALSE, 0);
7377 gtk_signal_connect (GTK_OBJECT(button), "clicked",
7378 GTK_SIGNAL_FUNC (notebook_homogeneous),
7379 GTK_OBJECT (sample_notebook));
7381 box2 = gtk_hbox_new (FALSE, 5);
7382 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
7383 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
7385 label = gtk_label_new ("Notebook Style :");
7386 gtk_box_pack_start (GTK_BOX (box2), label, FALSE, TRUE, 0);
7388 omenu = build_option_menu (items, G_N_ELEMENTS (items), 0,
7389 notebook_type_changed,
7391 gtk_box_pack_start (GTK_BOX (box2), omenu, FALSE, TRUE, 0);
7393 button = gtk_button_new_with_label ("Show all Pages");
7394 gtk_box_pack_start (GTK_BOX (box2), button, FALSE, TRUE, 0);
7395 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7396 GTK_SIGNAL_FUNC (show_all_pages), sample_notebook);
7398 box2 = gtk_hbox_new (TRUE, 10);
7399 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
7400 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
7402 button = gtk_button_new_with_label ("prev");
7403 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7404 GTK_SIGNAL_FUNC (gtk_notebook_prev_page),
7405 GTK_OBJECT (sample_notebook));
7406 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
7408 button = gtk_button_new_with_label ("next");
7409 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7410 GTK_SIGNAL_FUNC (gtk_notebook_next_page),
7411 GTK_OBJECT (sample_notebook));
7412 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
7414 button = gtk_button_new_with_label ("rotate");
7415 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7416 GTK_SIGNAL_FUNC (rotate_notebook), sample_notebook);
7417 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
7419 separator = gtk_hseparator_new ();
7420 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 5);
7422 button = gtk_button_new_with_label ("close");
7423 gtk_container_set_border_width (GTK_CONTAINER (button), 5);
7424 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7425 GTK_SIGNAL_FUNC (gtk_widget_destroy),
7426 GTK_OBJECT (window));
7427 gtk_box_pack_start (GTK_BOX (box1), button, FALSE, FALSE, 0);
7428 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7429 gtk_widget_grab_default (button);
7432 if (!GTK_WIDGET_VISIBLE (window))
7433 gtk_widget_show_all (window);
7435 gtk_widget_destroy (window);
7443 toggle_resize (GtkWidget *widget, GtkWidget *child)
7445 GtkPaned *paned = GTK_PANED (child->parent);
7446 gboolean is_child1 = (child == paned->child1);
7447 gboolean resize, shrink;
7449 resize = is_child1 ? paned->child1_resize : paned->child2_resize;
7450 shrink = is_child1 ? paned->child1_shrink : paned->child2_shrink;
7452 gtk_widget_ref (child);
7453 gtk_container_remove (GTK_CONTAINER (child->parent), child);
7455 gtk_paned_pack1 (paned, child, !resize, shrink);
7457 gtk_paned_pack2 (paned, child, !resize, shrink);
7458 gtk_widget_unref (child);
7462 toggle_shrink (GtkWidget *widget, GtkWidget *child)
7464 GtkPaned *paned = GTK_PANED (child->parent);
7465 gboolean is_child1 = (child == paned->child1);
7466 gboolean resize, shrink;
7468 resize = is_child1 ? paned->child1_resize : paned->child2_resize;
7469 shrink = is_child1 ? paned->child1_shrink : paned->child2_shrink;
7471 gtk_widget_ref (child);
7472 gtk_container_remove (GTK_CONTAINER (child->parent), child);
7474 gtk_paned_pack1 (paned, child, resize, !shrink);
7476 gtk_paned_pack2 (paned, child, resize, !shrink);
7477 gtk_widget_unref (child);
7481 paned_props_clicked (GtkWidget *button,
7484 GtkWidget *window = create_prop_editor (paned, GTK_TYPE_PANED);
7486 gtk_window_set_title (GTK_WINDOW (window), "Paned Properties");
7490 create_pane_options (GtkPaned *paned,
7491 const gchar *frame_label,
7492 const gchar *label1,
7493 const gchar *label2)
7499 GtkWidget *check_button;
7501 frame = gtk_frame_new (frame_label);
7502 gtk_container_set_border_width (GTK_CONTAINER (frame), 4);
7504 table = gtk_table_new (4, 2, 4);
7505 gtk_container_add (GTK_CONTAINER (frame), table);
7507 label = gtk_label_new (label1);
7508 gtk_table_attach_defaults (GTK_TABLE (table), label,
7511 check_button = gtk_check_button_new_with_label ("Resize");
7512 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
7514 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
7515 GTK_SIGNAL_FUNC (toggle_resize),
7518 check_button = gtk_check_button_new_with_label ("Shrink");
7519 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
7521 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
7523 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
7524 GTK_SIGNAL_FUNC (toggle_shrink),
7527 label = gtk_label_new (label2);
7528 gtk_table_attach_defaults (GTK_TABLE (table), label,
7531 check_button = gtk_check_button_new_with_label ("Resize");
7532 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
7534 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
7536 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
7537 GTK_SIGNAL_FUNC (toggle_resize),
7540 check_button = gtk_check_button_new_with_label ("Shrink");
7541 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
7543 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
7545 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
7546 GTK_SIGNAL_FUNC (toggle_shrink),
7549 button = gtk_button_new_with_mnemonic ("_Properties");
7550 gtk_table_attach_defaults (GTK_TABLE (table), button,
7552 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7553 GTK_SIGNAL_FUNC (paned_props_clicked),
7562 static GtkWidget *window = NULL;
7571 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7573 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7574 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7577 gtk_window_set_title (GTK_WINDOW (window), "Panes");
7578 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
7580 vbox = gtk_vbox_new (FALSE, 0);
7581 gtk_container_add (GTK_CONTAINER (window), vbox);
7583 vpaned = gtk_vpaned_new ();
7584 gtk_box_pack_start (GTK_BOX (vbox), vpaned, TRUE, TRUE, 0);
7585 gtk_container_set_border_width (GTK_CONTAINER(vpaned), 5);
7587 hpaned = gtk_hpaned_new ();
7588 gtk_paned_add1 (GTK_PANED (vpaned), hpaned);
7590 frame = gtk_frame_new (NULL);
7591 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
7592 gtk_widget_set_usize (frame, 60, 60);
7593 gtk_paned_add1 (GTK_PANED (hpaned), frame);
7595 button = gtk_button_new_with_label ("Hi there");
7596 gtk_container_add (GTK_CONTAINER(frame), button);
7598 frame = gtk_frame_new (NULL);
7599 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
7600 gtk_widget_set_usize (frame, 80, 60);
7601 gtk_paned_add2 (GTK_PANED (hpaned), frame);
7603 frame = gtk_frame_new (NULL);
7604 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
7605 gtk_widget_set_usize (frame, 60, 80);
7606 gtk_paned_add2 (GTK_PANED (vpaned), frame);
7608 /* Now create toggle buttons to control sizing */
7610 gtk_box_pack_start (GTK_BOX (vbox),
7611 create_pane_options (GTK_PANED (hpaned),
7617 gtk_box_pack_start (GTK_BOX (vbox),
7618 create_pane_options (GTK_PANED (vpaned),
7624 gtk_widget_show_all (vbox);
7627 if (!GTK_WIDGET_VISIBLE (window))
7628 gtk_widget_show (window);
7630 gtk_widget_destroy (window);
7637 typedef struct _cursoroffset {gint x,y;} CursorOffset;
7640 shape_pressed (GtkWidget *widget, GdkEventButton *event)
7644 /* ignore double and triple click */
7645 if (event->type != GDK_BUTTON_PRESS)
7648 p = gtk_object_get_user_data (GTK_OBJECT(widget));
7649 p->x = (int) event->x;
7650 p->y = (int) event->y;
7652 gtk_grab_add (widget);
7653 gdk_pointer_grab (widget->window, TRUE,
7654 GDK_BUTTON_RELEASE_MASK |
7655 GDK_BUTTON_MOTION_MASK |
7656 GDK_POINTER_MOTION_HINT_MASK,
7661 shape_released (GtkWidget *widget)
7663 gtk_grab_remove (widget);
7664 gdk_pointer_ungrab (0);
7668 shape_motion (GtkWidget *widget,
7669 GdkEventMotion *event)
7673 GdkModifierType mask;
7675 p = gtk_object_get_user_data (GTK_OBJECT (widget));
7678 * Can't use event->x / event->y here
7679 * because I need absolute coordinates.
7681 gdk_window_get_pointer (NULL, &xp, &yp, &mask);
7682 gtk_widget_set_uposition (widget, xp - p->x, yp - p->y);
7686 shape_create_icon (char *xpm_file,
7696 CursorOffset* icon_pos;
7698 GdkBitmap *gdk_pixmap_mask;
7699 GdkPixmap *gdk_pixmap;
7702 style = gtk_widget_get_default_style ();
7703 gc = style->black_gc;
7706 * GDK_WINDOW_TOPLEVEL works also, giving you a title border
7708 window = gtk_window_new (window_type);
7710 fixed = gtk_fixed_new ();
7711 gtk_widget_set_usize (fixed, 100,100);
7712 gtk_container_add (GTK_CONTAINER (window), fixed);
7713 gtk_widget_show (fixed);
7715 gtk_widget_set_events (window,
7716 gtk_widget_get_events (window) |
7717 GDK_BUTTON_MOTION_MASK |
7718 GDK_POINTER_MOTION_HINT_MASK |
7719 GDK_BUTTON_PRESS_MASK);
7721 gtk_widget_realize (window);
7722 gdk_pixmap = gdk_pixmap_create_from_xpm (window->window, &gdk_pixmap_mask,
7723 &style->bg[GTK_STATE_NORMAL],
7726 pixmap = gtk_pixmap_new (gdk_pixmap, gdk_pixmap_mask);
7727 gtk_fixed_put (GTK_FIXED (fixed), pixmap, px,py);
7728 gtk_widget_show (pixmap);
7730 gtk_widget_shape_combine_mask (window, gdk_pixmap_mask, px, py);
7732 gdk_drawable_unref (gdk_pixmap_mask);
7733 gdk_drawable_unref (gdk_pixmap);
7735 gtk_signal_connect (GTK_OBJECT (window), "button_press_event",
7736 GTK_SIGNAL_FUNC (shape_pressed),NULL);
7737 gtk_signal_connect (GTK_OBJECT (window), "button_release_event",
7738 GTK_SIGNAL_FUNC (shape_released),NULL);
7739 gtk_signal_connect (GTK_OBJECT (window), "motion_notify_event",
7740 GTK_SIGNAL_FUNC (shape_motion),NULL);
7742 icon_pos = g_new (CursorOffset, 1);
7743 gtk_object_set_user_data(GTK_OBJECT(window), icon_pos);
7745 gtk_widget_set_uposition (window, x, y);
7746 gtk_widget_show (window);
7752 create_shapes (void)
7754 /* Variables used by the Drag/Drop and Shape Window demos */
7755 static GtkWidget *modeller = NULL;
7756 static GtkWidget *sheets = NULL;
7757 static GtkWidget *rings = NULL;
7758 static GtkWidget *with_region = NULL;
7760 if (!(file_exists ("Modeller.xpm") &&
7761 file_exists ("FilesQueue.xpm") &&
7762 file_exists ("3DRings.xpm")))
7768 modeller = shape_create_icon ("Modeller.xpm",
7769 440, 140, 0,0, GTK_WINDOW_POPUP);
7771 gtk_signal_connect (GTK_OBJECT (modeller), "destroy",
7772 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7776 gtk_widget_destroy (modeller);
7780 sheets = shape_create_icon ("FilesQueue.xpm",
7781 580, 170, 0,0, GTK_WINDOW_POPUP);
7783 gtk_signal_connect (GTK_OBJECT (sheets), "destroy",
7784 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7789 gtk_widget_destroy (sheets);
7793 rings = shape_create_icon ("3DRings.xpm",
7794 460, 270, 25,25, GTK_WINDOW_TOPLEVEL);
7796 gtk_signal_connect (GTK_OBJECT (rings), "destroy",
7797 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7801 gtk_widget_destroy (rings);
7808 with_region = shape_create_icon ("3DRings.xpm",
7809 460, 270, 25,25, GTK_WINDOW_TOPLEVEL);
7811 gtk_window_set_decorated (GTK_WINDOW (with_region), FALSE);
7813 gtk_signal_connect (GTK_OBJECT (with_region), "destroy",
7814 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7817 /* reset shape from mask to a region */
7820 region = gdk_region_new ();
7832 gdk_region_union_with_rect (region, &rect);
7840 gdk_window_shape_combine_region (with_region->window,
7845 gtk_widget_destroy (with_region);
7853 create_wmhints (void)
7855 static GtkWidget *window = NULL;
7857 GtkWidget *separator;
7866 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7868 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7869 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7872 gtk_window_set_title (GTK_WINDOW (window), "WM Hints");
7873 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
7875 gtk_widget_realize (window);
7877 circles = gdk_bitmap_create_from_data (window->window,
7881 gdk_window_set_icon (window->window, NULL,
7884 gdk_window_set_icon_name (window->window, "WMHints Test Icon");
7886 gdk_window_set_decorations (window->window, GDK_DECOR_ALL | GDK_DECOR_MENU);
7887 gdk_window_set_functions (window->window, GDK_FUNC_ALL | GDK_FUNC_RESIZE);
7889 box1 = gtk_vbox_new (FALSE, 0);
7890 gtk_container_add (GTK_CONTAINER (window), box1);
7891 gtk_widget_show (box1);
7893 label = gtk_label_new ("Try iconizing me!");
7894 gtk_widget_set_usize (label, 150, 50);
7895 gtk_box_pack_start (GTK_BOX (box1), label, TRUE, TRUE, 0);
7896 gtk_widget_show (label);
7899 separator = gtk_hseparator_new ();
7900 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
7901 gtk_widget_show (separator);
7904 box2 = gtk_vbox_new (FALSE, 10);
7905 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
7906 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
7907 gtk_widget_show (box2);
7910 button = gtk_button_new_with_label ("close");
7912 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7913 GTK_SIGNAL_FUNC(gtk_widget_destroy),
7914 GTK_OBJECT (window));
7916 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
7917 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7918 gtk_widget_grab_default (button);
7919 gtk_widget_show (button);
7922 if (!GTK_WIDGET_VISIBLE (window))
7923 gtk_widget_show (window);
7925 gtk_widget_destroy (window);
7930 * Window state tracking
7934 window_state_callback (GtkWidget *widget,
7935 GdkEventWindowState *event,
7938 GtkWidget *label = data;
7941 msg = g_strconcat (GTK_WINDOW (widget)->title, ": ",
7942 (event->new_window_state & GDK_WINDOW_STATE_WITHDRAWN) ?
7943 "withdrawn" : "not withdrawn", ", ",
7944 (event->new_window_state & GDK_WINDOW_STATE_ICONIFIED) ?
7945 "iconified" : "not iconified", ", ",
7946 (event->new_window_state & GDK_WINDOW_STATE_STICKY) ?
7947 "sticky" : "not sticky", ", ",
7948 (event->new_window_state & GDK_WINDOW_STATE_MAXIMIZED) ?
7949 "maximized" : "not maximized",
7952 gtk_label_set_text (GTK_LABEL (label), msg);
7960 tracking_label (GtkWidget *window)
7966 hbox = gtk_hbox_new (FALSE, 5);
7968 gtk_signal_connect_object (GTK_OBJECT (hbox),
7970 GTK_SIGNAL_FUNC (gtk_widget_destroy),
7971 GTK_OBJECT (window));
7973 label = gtk_label_new ("<no window state events received>");
7974 gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
7975 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
7977 gtk_signal_connect (GTK_OBJECT (window),
7978 "window_state_event",
7979 GTK_SIGNAL_FUNC (window_state_callback),
7982 button = gtk_button_new_with_label ("Deiconify");
7983 gtk_signal_connect_object (GTK_OBJECT (button),
7985 GTK_SIGNAL_FUNC (gtk_window_deiconify),
7986 GTK_OBJECT (window));
7987 gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
7989 button = gtk_button_new_with_label ("Iconify");
7990 gtk_signal_connect_object (GTK_OBJECT (button),
7992 GTK_SIGNAL_FUNC (gtk_window_iconify),
7993 GTK_OBJECT (window));
7994 gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
7996 button = gtk_button_new_with_label ("Present");
7997 gtk_signal_connect_object (GTK_OBJECT (button),
7999 GTK_SIGNAL_FUNC (gtk_window_present),
8000 GTK_OBJECT (window));
8001 gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
8003 button = gtk_button_new_with_label ("Show");
8004 gtk_signal_connect_object (GTK_OBJECT (button),
8006 GTK_SIGNAL_FUNC (gtk_widget_show),
8007 GTK_OBJECT (window));
8008 gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
8010 gtk_widget_show_all (hbox);
8016 get_state_controls (GtkWidget *window)
8021 vbox = gtk_vbox_new (FALSE, 0);
8023 button = gtk_button_new_with_label ("Stick");
8024 gtk_signal_connect_object (GTK_OBJECT (button),
8026 GTK_SIGNAL_FUNC (gtk_window_stick),
8027 GTK_OBJECT (window));
8028 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8030 button = gtk_button_new_with_label ("Unstick");
8031 gtk_signal_connect_object (GTK_OBJECT (button),
8033 GTK_SIGNAL_FUNC (gtk_window_unstick),
8034 GTK_OBJECT (window));
8035 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8037 button = gtk_button_new_with_label ("Maximize");
8038 gtk_signal_connect_object (GTK_OBJECT (button),
8040 GTK_SIGNAL_FUNC (gtk_window_maximize),
8041 GTK_OBJECT (window));
8042 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8044 button = gtk_button_new_with_label ("Unmaximize");
8045 gtk_signal_connect_object (GTK_OBJECT (button),
8047 GTK_SIGNAL_FUNC (gtk_window_unmaximize),
8048 GTK_OBJECT (window));
8049 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8051 button = gtk_button_new_with_label ("Iconify");
8052 gtk_signal_connect_object (GTK_OBJECT (button),
8054 GTK_SIGNAL_FUNC (gtk_window_iconify),
8055 GTK_OBJECT (window));
8056 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8058 button = gtk_button_new_with_label ("Hide (withdraw)");
8059 gtk_signal_connect_object (GTK_OBJECT (button),
8061 GTK_SIGNAL_FUNC (gtk_widget_hide),
8062 GTK_OBJECT (window));
8063 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8065 gtk_widget_show_all (vbox);
8071 create_window_states (void)
8073 static GtkWidget *window = NULL;
8076 GtkWidget *iconified;
8078 GtkWidget *controls;
8082 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
8084 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8085 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
8088 gtk_window_set_title (GTK_WINDOW (window), "Window states");
8090 box1 = gtk_vbox_new (FALSE, 0);
8091 gtk_container_add (GTK_CONTAINER (window), box1);
8093 iconified = gtk_window_new (GTK_WINDOW_TOPLEVEL);
8094 gtk_signal_connect_object (GTK_OBJECT (iconified), "destroy",
8095 GTK_SIGNAL_FUNC(gtk_widget_destroy),
8096 GTK_OBJECT (window));
8097 gtk_window_iconify (GTK_WINDOW (iconified));
8098 gtk_window_set_title (GTK_WINDOW (iconified), "Iconified initially");
8099 controls = get_state_controls (iconified);
8100 gtk_container_add (GTK_CONTAINER (iconified), controls);
8102 normal = gtk_window_new (GTK_WINDOW_TOPLEVEL);
8103 gtk_signal_connect_object (GTK_OBJECT (normal), "destroy",
8104 GTK_SIGNAL_FUNC(gtk_widget_destroy),
8105 GTK_OBJECT (window));
8107 gtk_window_set_title (GTK_WINDOW (normal), "Deiconified initially");
8108 controls = get_state_controls (normal);
8109 gtk_container_add (GTK_CONTAINER (normal), controls);
8111 label = tracking_label (iconified);
8112 gtk_container_add (GTK_CONTAINER (box1), label);
8114 label = tracking_label (normal);
8115 gtk_container_add (GTK_CONTAINER (box1), label);
8117 gtk_widget_show_all (iconified);
8118 gtk_widget_show_all (normal);
8119 gtk_widget_show_all (box1);
8122 if (!GTK_WIDGET_VISIBLE (window))
8123 gtk_widget_show (window);
8125 gtk_widget_destroy (window);
8133 configure_event_callback (GtkWidget *widget,
8134 GdkEventConfigure *event,
8137 GtkWidget *label = data;
8141 gtk_window_get_position (GTK_WINDOW (widget), &x, &y);
8143 msg = g_strdup_printf ("event: %d,%d %d x %d\n"
8145 event->x, event->y, event->width, event->height,
8148 gtk_label_set_text (GTK_LABEL (label), msg);
8156 get_ints (GtkWidget *window,
8163 spin1 = g_object_get_data (G_OBJECT (window), "spin1");
8164 spin2 = g_object_get_data (G_OBJECT (window), "spin2");
8166 *a = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin1));
8167 *b = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin2));
8171 set_size_callback (GtkWidget *widget,
8176 get_ints (data, &w, &h);
8178 gtk_window_resize (GTK_WINDOW (g_object_get_data (data, "target")), w, h);
8182 unset_default_size_callback (GtkWidget *widget,
8185 gtk_window_set_default_size (g_object_get_data (data, "target"),
8190 set_default_size_callback (GtkWidget *widget,
8195 get_ints (data, &w, &h);
8197 gtk_window_set_default_size (g_object_get_data (data, "target"),
8202 unset_usize_callback (GtkWidget *widget,
8205 gtk_widget_set_size_request (g_object_get_data (data, "target"),
8210 set_usize_callback (GtkWidget *widget,
8215 get_ints (data, &w, &h);
8217 gtk_widget_set_size_request (g_object_get_data (data, "target"),
8222 set_location_callback (GtkWidget *widget,
8227 get_ints (data, &x, &y);
8229 gtk_window_move (g_object_get_data (data, "target"), x, y);
8233 move_to_position_callback (GtkWidget *widget,
8239 window = g_object_get_data (data, "target");
8241 gtk_window_get_position (window, &x, &y);
8243 gtk_window_move (window, x, y);
8247 set_geometry_callback (GtkWidget *entry,
8253 target = GTK_WINDOW (g_object_get_data (G_OBJECT (data), "target"));
8255 text = gtk_editable_get_chars (GTK_EDITABLE (entry), 0, -1);
8257 if (!gtk_window_parse_geometry (target, text))
8258 g_print ("Bad geometry string '%s'\n", text);
8264 allow_shrink_callback (GtkWidget *widget,
8267 g_object_set (G_OBJECT (g_object_get_data (data, "target")),
8269 GTK_TOGGLE_BUTTON (widget)->active,
8274 allow_grow_callback (GtkWidget *widget,
8277 g_object_set (G_OBJECT (g_object_get_data (data, "target")),
8279 GTK_TOGGLE_BUTTON (widget)->active,
8284 auto_shrink_callback (GtkWidget *widget,
8287 g_object_set (G_OBJECT (g_object_get_data (data, "target")),
8289 GTK_TOGGLE_BUTTON (widget)->active,
8294 gravity_selected (GtkWidget *widget,
8297 gtk_window_set_gravity (GTK_WINDOW (g_object_get_data (data, "target")),
8298 gtk_option_menu_get_history (GTK_OPTION_MENU (widget)) + GDK_GRAVITY_NORTH_WEST);
8302 pos_selected (GtkWidget *widget,
8305 gtk_window_set_position (GTK_WINDOW (g_object_get_data (data, "target")),
8306 gtk_option_menu_get_history (GTK_OPTION_MENU (widget)) + GTK_WIN_POS_NONE);
8310 move_gravity_window_to_current_position (GtkWidget *widget,
8316 window = GTK_WINDOW (data);
8318 gtk_window_get_position (window, &x, &y);
8320 gtk_window_move (window, x, y);
8324 get_screen_corner (GtkWindow *window,
8330 gtk_window_get_size (GTK_WINDOW (window), &w, &h);
8332 switch (gtk_window_get_gravity (window))
8334 case GDK_GRAVITY_SOUTH_EAST:
8335 *x = gdk_screen_width () - w;
8336 *y = gdk_screen_height () - h;
8339 case GDK_GRAVITY_NORTH_EAST:
8340 *x = gdk_screen_width () - w;
8344 case GDK_GRAVITY_SOUTH_WEST:
8346 *y = gdk_screen_height () - h;
8349 case GDK_GRAVITY_NORTH_WEST:
8354 case GDK_GRAVITY_SOUTH:
8355 *x = (gdk_screen_width () - w) / 2;
8356 *y = gdk_screen_height () - h;
8359 case GDK_GRAVITY_NORTH:
8360 *x = (gdk_screen_width () - w) / 2;
8364 case GDK_GRAVITY_WEST:
8366 *y = (gdk_screen_height () - h) / 2;
8369 case GDK_GRAVITY_EAST:
8370 *x = gdk_screen_width () - w;
8371 *y = (gdk_screen_height () - h) / 2;
8374 case GDK_GRAVITY_CENTER:
8375 *x = (gdk_screen_width () - w) / 2;
8376 *y = (gdk_screen_height () - h) / 2;
8379 case GDK_GRAVITY_STATIC:
8380 /* pick some random numbers */
8386 g_assert_not_reached ();
8392 move_gravity_window_to_starting_position (GtkWidget *widget,
8398 window = GTK_WINDOW (data);
8400 get_screen_corner (window,
8403 gtk_window_move (window, x, y);
8407 make_gravity_window (GtkWidget *destroy_with,
8416 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
8418 vbox = gtk_vbox_new (FALSE, 0);
8419 gtk_widget_show (vbox);
8421 gtk_container_add (GTK_CONTAINER (window), vbox);
8422 gtk_window_set_title (GTK_WINDOW (window), title);
8423 gtk_window_set_gravity (GTK_WINDOW (window), gravity);
8425 gtk_signal_connect_object (GTK_OBJECT (destroy_with),
8427 GTK_SIGNAL_FUNC (gtk_widget_destroy),
8428 GTK_OBJECT (window));
8431 button = gtk_button_new_with_mnemonic ("_Move to current position");
8433 g_signal_connect (G_OBJECT (button), "clicked",
8434 G_CALLBACK (move_gravity_window_to_current_position),
8437 gtk_container_add (GTK_CONTAINER (vbox), button);
8438 gtk_widget_show (button);
8440 button = gtk_button_new_with_mnemonic ("Move to _starting position");
8442 g_signal_connect (G_OBJECT (button), "clicked",
8443 G_CALLBACK (move_gravity_window_to_starting_position),
8446 gtk_container_add (GTK_CONTAINER (vbox), button);
8447 gtk_widget_show (button);
8449 /* Pretend this is the result of --geometry.
8450 * DO NOT COPY THIS CODE unless you are setting --geometry results,
8451 * and in that case you probably should just use gtk_window_parse_geometry().
8452 * AGAIN, DO NOT SET GDK_HINT_USER_POS! It violates the ICCCM unless
8453 * you are parsing --geometry or equivalent.
8455 gtk_window_set_geometry_hints (GTK_WINDOW (window),
8459 gtk_window_set_default_size (GTK_WINDOW (window),
8462 get_screen_corner (GTK_WINDOW (window), &x, &y);
8464 gtk_window_move (GTK_WINDOW (window),
8471 do_gravity_test (GtkWidget *widget,
8474 GtkWidget *destroy_with = data;
8477 /* We put a window at each gravity point on the screen. */
8478 window = make_gravity_window (destroy_with, GDK_GRAVITY_NORTH_WEST,
8480 gtk_widget_show (window);
8482 window = make_gravity_window (destroy_with, GDK_GRAVITY_SOUTH_EAST,
8484 gtk_widget_show (window);
8486 window = make_gravity_window (destroy_with, GDK_GRAVITY_NORTH_EAST,
8488 gtk_widget_show (window);
8490 window = make_gravity_window (destroy_with, GDK_GRAVITY_SOUTH_WEST,
8492 gtk_widget_show (window);
8494 window = make_gravity_window (destroy_with, GDK_GRAVITY_SOUTH,
8496 gtk_widget_show (window);
8498 window = make_gravity_window (destroy_with, GDK_GRAVITY_NORTH,
8500 gtk_widget_show (window);
8503 window = make_gravity_window (destroy_with, GDK_GRAVITY_WEST,
8505 gtk_widget_show (window);
8508 window = make_gravity_window (destroy_with, GDK_GRAVITY_EAST,
8510 gtk_widget_show (window);
8512 window = make_gravity_window (destroy_with, GDK_GRAVITY_CENTER,
8514 gtk_widget_show (window);
8516 window = make_gravity_window (destroy_with, GDK_GRAVITY_STATIC,
8518 gtk_widget_show (window);
8522 window_controls (GtkWidget *window)
8524 GtkWidget *control_window;
8535 control_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
8537 gtk_window_set_title (GTK_WINDOW (control_window), "Size controls");
8539 g_object_set_data (G_OBJECT (control_window),
8543 gtk_signal_connect_object (GTK_OBJECT (control_window),
8545 GTK_SIGNAL_FUNC (gtk_widget_destroy),
8546 GTK_OBJECT (window));
8548 vbox = gtk_vbox_new (FALSE, 5);
8550 gtk_container_add (GTK_CONTAINER (control_window), vbox);
8552 label = gtk_label_new ("<no configure events>");
8553 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
8555 gtk_signal_connect (GTK_OBJECT (window),
8557 GTK_SIGNAL_FUNC (configure_event_callback),
8560 adj = (GtkAdjustment *) gtk_adjustment_new (10.0, -2000.0, 2000.0, 1.0,
8562 spin = gtk_spin_button_new (adj, 0, 0);
8564 gtk_box_pack_start (GTK_BOX (vbox), spin, FALSE, FALSE, 0);
8566 g_object_set_data (G_OBJECT (control_window), "spin1", spin);
8568 adj = (GtkAdjustment *) gtk_adjustment_new (10.0, -2000.0, 2000.0, 1.0,
8570 spin = gtk_spin_button_new (adj, 0, 0);
8572 gtk_box_pack_start (GTK_BOX (vbox), spin, FALSE, FALSE, 0);
8574 g_object_set_data (G_OBJECT (control_window), "spin2", spin);
8576 entry = gtk_entry_new ();
8577 gtk_box_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 0);
8579 gtk_signal_connect (GTK_OBJECT (entry), "changed",
8580 GTK_SIGNAL_FUNC (set_geometry_callback),
8583 button = gtk_button_new_with_label ("Show gravity test windows");
8584 gtk_signal_connect_object (GTK_OBJECT (button),
8586 GTK_SIGNAL_FUNC (do_gravity_test),
8588 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8590 button = gtk_button_new_with_label ("Reshow with initial size");
8591 gtk_signal_connect_object (GTK_OBJECT (button),
8593 GTK_SIGNAL_FUNC (gtk_window_reshow_with_initial_size),
8594 GTK_OBJECT (window));
8595 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8597 button = gtk_button_new_with_label ("Queue resize");
8598 gtk_signal_connect_object (GTK_OBJECT (button),
8600 GTK_SIGNAL_FUNC (gtk_widget_queue_resize),
8601 GTK_OBJECT (window));
8602 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8604 button = gtk_button_new_with_label ("Resize");
8605 gtk_signal_connect (GTK_OBJECT (button),
8607 GTK_SIGNAL_FUNC (set_size_callback),
8608 GTK_OBJECT (control_window));
8609 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8611 button = gtk_button_new_with_label ("Set default size");
8612 gtk_signal_connect (GTK_OBJECT (button),
8614 GTK_SIGNAL_FUNC (set_default_size_callback),
8615 GTK_OBJECT (control_window));
8616 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8618 button = gtk_button_new_with_label ("Unset default size");
8619 gtk_signal_connect (GTK_OBJECT (button),
8621 GTK_SIGNAL_FUNC (unset_default_size_callback),
8622 GTK_OBJECT (control_window));
8623 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8625 button = gtk_button_new_with_label ("Set size request");
8626 gtk_signal_connect (GTK_OBJECT (button),
8628 GTK_SIGNAL_FUNC (set_usize_callback),
8629 GTK_OBJECT (control_window));
8630 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8632 button = gtk_button_new_with_label ("Unset size request");
8633 gtk_signal_connect (GTK_OBJECT (button),
8635 GTK_SIGNAL_FUNC (unset_usize_callback),
8636 GTK_OBJECT (control_window));
8637 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8639 button = gtk_button_new_with_label ("Move");
8640 gtk_signal_connect (GTK_OBJECT (button),
8642 GTK_SIGNAL_FUNC (set_location_callback),
8643 GTK_OBJECT (control_window));
8644 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8646 button = gtk_button_new_with_label ("Move to current position");
8647 gtk_signal_connect (GTK_OBJECT (button),
8649 GTK_SIGNAL_FUNC (move_to_position_callback),
8650 GTK_OBJECT (control_window));
8651 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8653 button = gtk_check_button_new_with_label ("Allow shrink");
8654 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), FALSE);
8655 gtk_signal_connect (GTK_OBJECT (button),
8657 GTK_SIGNAL_FUNC (allow_shrink_callback),
8658 GTK_OBJECT (control_window));
8659 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8661 button = gtk_check_button_new_with_label ("Allow grow");
8662 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
8663 gtk_signal_connect (GTK_OBJECT (button),
8665 GTK_SIGNAL_FUNC (allow_grow_callback),
8666 GTK_OBJECT (control_window));
8667 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8669 button = gtk_check_button_new_with_label ("Auto shrink");
8670 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), FALSE);
8671 gtk_signal_connect (GTK_OBJECT (button),
8673 GTK_SIGNAL_FUNC (auto_shrink_callback),
8674 GTK_OBJECT (control_window));
8675 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8677 button = gtk_button_new_with_mnemonic ("_Show");
8678 gtk_signal_connect_object (GTK_OBJECT (button),
8680 GTK_SIGNAL_FUNC (gtk_widget_show),
8681 GTK_OBJECT (window));
8682 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8684 button = gtk_button_new_with_mnemonic ("_Hide");
8685 gtk_signal_connect_object (GTK_OBJECT (button),
8687 GTK_SIGNAL_FUNC (gtk_widget_hide),
8688 GTK_OBJECT (window));
8689 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8691 menu = gtk_menu_new ();
8697 static gchar *names[] = {
8698 "GDK_GRAVITY_NORTH_WEST",
8699 "GDK_GRAVITY_NORTH",
8700 "GDK_GRAVITY_NORTH_EAST",
8702 "GDK_GRAVITY_CENTER",
8704 "GDK_GRAVITY_SOUTH_WEST",
8705 "GDK_GRAVITY_SOUTH",
8706 "GDK_GRAVITY_SOUTH_EAST",
8707 "GDK_GRAVITY_STATIC",
8711 g_assert (names[i]);
8713 mi = gtk_menu_item_new_with_label (names[i]);
8715 gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
8720 gtk_widget_show_all (menu);
8722 om = gtk_option_menu_new ();
8723 gtk_option_menu_set_menu (GTK_OPTION_MENU (om), menu);
8726 gtk_signal_connect (GTK_OBJECT (om),
8728 GTK_SIGNAL_FUNC (gravity_selected),
8731 gtk_box_pack_end (GTK_BOX (vbox), om, FALSE, FALSE, 0);
8734 menu = gtk_menu_new ();
8740 static gchar *names[] = {
8742 "GTK_WIN_POS_CENTER",
8743 "GTK_WIN_POS_MOUSE",
8744 "GTK_WIN_POS_CENTER_ALWAYS",
8745 "GTK_WIN_POS_CENTER_ON_PARENT",
8749 g_assert (names[i]);
8751 mi = gtk_menu_item_new_with_label (names[i]);
8753 gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
8758 gtk_widget_show_all (menu);
8760 om = gtk_option_menu_new ();
8761 gtk_option_menu_set_menu (GTK_OPTION_MENU (om), menu);
8764 gtk_signal_connect (GTK_OBJECT (om),
8766 GTK_SIGNAL_FUNC (pos_selected),
8769 gtk_box_pack_end (GTK_BOX (vbox), om, FALSE, FALSE, 0);
8771 gtk_widget_show_all (vbox);
8773 return control_window;
8777 create_window_sizing (void)
8779 static GtkWidget *window = NULL;
8780 static GtkWidget *target_window = NULL;
8786 target_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
8788 label = gtk_label_new (NULL);
8789 gtk_label_set_markup (GTK_LABEL (label), "<span foreground=\"purple\"><big>Window being resized</big></span>\nBlah blah blah blah\nblah blah blah\nblah blah blah blah blah");
8790 gtk_container_add (GTK_CONTAINER (target_window), label);
8791 gtk_widget_show (label);
8793 gtk_signal_connect (GTK_OBJECT (target_window), "destroy",
8794 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
8797 window = window_controls (target_window);
8799 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8800 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
8803 gtk_window_set_title (GTK_WINDOW (target_window), "Window to size");
8806 /* don't show target window by default, we want to allow testing
8807 * of behavior on first show.
8810 if (!GTK_WIDGET_VISIBLE (window))
8811 gtk_widget_show (window);
8813 gtk_widget_destroy (window);
8820 typedef struct _ProgressData {
8823 GtkWidget *block_spin;
8824 GtkWidget *x_align_spin;
8825 GtkWidget *y_align_spin;
8826 GtkWidget *step_spin;
8827 GtkWidget *act_blocks_spin;
8836 progress_timeout (gpointer data)
8841 adj = GTK_PROGRESS (data)->adjustment;
8843 new_val = adj->value + 1;
8844 if (new_val > adj->upper)
8845 new_val = adj->lower;
8847 gtk_progress_set_value (GTK_PROGRESS (data), new_val);
8853 destroy_progress (GtkWidget *widget,
8854 ProgressData **pdata)
8856 gtk_timeout_remove ((*pdata)->timer);
8857 (*pdata)->timer = 0;
8858 (*pdata)->window = NULL;
8864 progressbar_toggle_orientation (GtkWidget *widget, ProgressData *pdata)
8868 if (!GTK_WIDGET_MAPPED (widget))
8871 i = gtk_option_menu_get_history (GTK_OPTION_MENU (widget));
8873 gtk_progress_bar_set_orientation (GTK_PROGRESS_BAR (pdata->pbar),
8874 (GtkProgressBarOrientation) i);
8878 toggle_show_text (GtkWidget *widget, ProgressData *pdata)
8880 gtk_progress_set_show_text (GTK_PROGRESS (pdata->pbar),
8881 GTK_TOGGLE_BUTTON (widget)->active);
8882 gtk_widget_set_sensitive (pdata->entry, GTK_TOGGLE_BUTTON (widget)->active);
8883 gtk_widget_set_sensitive (pdata->x_align_spin,
8884 GTK_TOGGLE_BUTTON (widget)->active);
8885 gtk_widget_set_sensitive (pdata->y_align_spin,
8886 GTK_TOGGLE_BUTTON (widget)->active);
8890 progressbar_toggle_bar_style (GtkWidget *widget, ProgressData *pdata)
8894 if (!GTK_WIDGET_MAPPED (widget))
8897 i = gtk_option_menu_get_history (GTK_OPTION_MENU (widget));
8900 gtk_widget_set_sensitive (pdata->block_spin, TRUE);
8902 gtk_widget_set_sensitive (pdata->block_spin, FALSE);
8904 gtk_progress_bar_set_bar_style (GTK_PROGRESS_BAR (pdata->pbar),
8905 (GtkProgressBarStyle) i);
8909 progress_value_changed (GtkAdjustment *adj, ProgressData *pdata)
8913 if (GTK_PROGRESS (pdata->pbar)->activity_mode)
8914 sprintf (buf, "???");
8916 sprintf (buf, "%.0f%%", 100 *
8917 gtk_progress_get_current_percentage (GTK_PROGRESS (pdata->pbar)));
8918 gtk_label_set_text (GTK_LABEL (pdata->label), buf);
8922 adjust_blocks (GtkAdjustment *adj, ProgressData *pdata)
8924 gtk_progress_set_percentage (GTK_PROGRESS (pdata->pbar), 0);
8925 gtk_progress_bar_set_discrete_blocks (GTK_PROGRESS_BAR (pdata->pbar),
8926 gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (pdata->block_spin)));
8930 adjust_step (GtkAdjustment *adj, ProgressData *pdata)
8932 gtk_progress_bar_set_activity_step (GTK_PROGRESS_BAR (pdata->pbar),
8933 gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (pdata->step_spin)));
8937 adjust_act_blocks (GtkAdjustment *adj, ProgressData *pdata)
8939 gtk_progress_bar_set_activity_blocks (GTK_PROGRESS_BAR (pdata->pbar),
8940 gtk_spin_button_get_value_as_int
8941 (GTK_SPIN_BUTTON (pdata->act_blocks_spin)));
8945 adjust_align (GtkAdjustment *adj, ProgressData *pdata)
8947 gtk_progress_set_text_alignment (GTK_PROGRESS (pdata->pbar),
8948 gtk_spin_button_get_value_as_float
8949 (GTK_SPIN_BUTTON (pdata->x_align_spin)),
8950 gtk_spin_button_get_value_as_float
8951 (GTK_SPIN_BUTTON (pdata->y_align_spin)));
8955 toggle_activity_mode (GtkWidget *widget, ProgressData *pdata)
8957 gtk_progress_set_activity_mode (GTK_PROGRESS (pdata->pbar),
8958 GTK_TOGGLE_BUTTON (widget)->active);
8959 gtk_widget_set_sensitive (pdata->step_spin,
8960 GTK_TOGGLE_BUTTON (widget)->active);
8961 gtk_widget_set_sensitive (pdata->act_blocks_spin,
8962 GTK_TOGGLE_BUTTON (widget)->active);
8966 entry_changed (GtkWidget *widget, ProgressData *pdata)
8968 gtk_progress_set_format_string (GTK_PROGRESS (pdata->pbar),
8969 gtk_entry_get_text (GTK_ENTRY (pdata->entry)));
8973 create_progress_bar (void)
8985 static ProgressData *pdata = NULL;
8987 static gchar *items1[] =
8995 static gchar *items2[] =
9002 pdata = g_new0 (ProgressData, 1);
9006 pdata->window = gtk_dialog_new ();
9008 gtk_window_set_policy (GTK_WINDOW (pdata->window), FALSE, FALSE, TRUE);
9010 gtk_signal_connect (GTK_OBJECT (pdata->window), "destroy",
9011 GTK_SIGNAL_FUNC (destroy_progress),
9016 gtk_window_set_title (GTK_WINDOW (pdata->window), "GtkProgressBar");
9017 gtk_container_set_border_width (GTK_CONTAINER (pdata->window), 0);
9019 vbox = gtk_vbox_new (FALSE, 5);
9020 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
9021 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (pdata->window)->vbox),
9022 vbox, FALSE, TRUE, 0);
9024 frame = gtk_frame_new ("Progress");
9025 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
9027 vbox2 = gtk_vbox_new (FALSE, 5);
9028 gtk_container_add (GTK_CONTAINER (frame), vbox2);
9030 align = gtk_alignment_new (0.5, 0.5, 0, 0);
9031 gtk_box_pack_start (GTK_BOX (vbox2), align, FALSE, FALSE, 5);
9033 adj = (GtkAdjustment *) gtk_adjustment_new (0, 1, 300, 0, 0, 0);
9034 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
9035 GTK_SIGNAL_FUNC (progress_value_changed), pdata);
9037 pdata->pbar = gtk_progress_bar_new_with_adjustment (adj);
9038 gtk_progress_set_format_string (GTK_PROGRESS (pdata->pbar),
9039 "%v from [%l,%u] (=%p%%)");
9040 gtk_container_add (GTK_CONTAINER (align), pdata->pbar);
9041 pdata->timer = gtk_timeout_add (100, progress_timeout, pdata->pbar);
9043 align = gtk_alignment_new (0.5, 0.5, 0, 0);
9044 gtk_box_pack_start (GTK_BOX (vbox2), align, FALSE, FALSE, 5);
9046 hbox = gtk_hbox_new (FALSE, 5);
9047 gtk_container_add (GTK_CONTAINER (align), hbox);
9048 label = gtk_label_new ("Label updated by user :");
9049 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
9050 pdata->label = gtk_label_new ("");
9051 gtk_box_pack_start (GTK_BOX (hbox), pdata->label, FALSE, TRUE, 0);
9053 frame = gtk_frame_new ("Options");
9054 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
9056 vbox2 = gtk_vbox_new (FALSE, 5);
9057 gtk_container_add (GTK_CONTAINER (frame), vbox2);
9059 tab = gtk_table_new (7, 2, FALSE);
9060 gtk_box_pack_start (GTK_BOX (vbox2), tab, FALSE, TRUE, 0);
9062 label = gtk_label_new ("Orientation :");
9063 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 0, 1,
9064 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
9066 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
9068 pdata->omenu1 = build_option_menu (items1, 4, 0,
9069 progressbar_toggle_orientation,
9071 hbox = gtk_hbox_new (FALSE, 0);
9072 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 0, 1,
9073 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
9075 gtk_box_pack_start (GTK_BOX (hbox), pdata->omenu1, TRUE, TRUE, 0);
9077 check = gtk_check_button_new_with_label ("Show text");
9078 gtk_signal_connect (GTK_OBJECT (check), "clicked",
9079 GTK_SIGNAL_FUNC (toggle_show_text),
9081 gtk_table_attach (GTK_TABLE (tab), check, 0, 1, 1, 2,
9082 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
9085 hbox = gtk_hbox_new (FALSE, 0);
9086 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 1, 2,
9087 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
9090 label = gtk_label_new ("Format : ");
9091 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
9093 pdata->entry = gtk_entry_new ();
9094 gtk_signal_connect (GTK_OBJECT (pdata->entry), "changed",
9095 GTK_SIGNAL_FUNC (entry_changed),
9097 gtk_box_pack_start (GTK_BOX (hbox), pdata->entry, TRUE, TRUE, 0);
9098 gtk_entry_set_text (GTK_ENTRY (pdata->entry), "%v from [%l,%u] (=%p%%)");
9099 gtk_widget_set_usize (pdata->entry, 100, -1);
9100 gtk_widget_set_sensitive (pdata->entry, FALSE);
9102 label = gtk_label_new ("Text align :");
9103 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 2, 3,
9104 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
9106 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
9108 hbox = gtk_hbox_new (FALSE, 0);
9109 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 2, 3,
9110 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
9113 label = gtk_label_new ("x :");
9114 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 5);
9116 adj = (GtkAdjustment *) gtk_adjustment_new (0.5, 0, 1, 0.1, 0.1, 0);
9117 pdata->x_align_spin = gtk_spin_button_new (adj, 0, 1);
9118 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
9119 GTK_SIGNAL_FUNC (adjust_align), pdata);
9120 gtk_box_pack_start (GTK_BOX (hbox), pdata->x_align_spin, FALSE, TRUE, 0);
9121 gtk_widget_set_sensitive (pdata->x_align_spin, FALSE);
9123 label = gtk_label_new ("y :");
9124 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 5);
9126 adj = (GtkAdjustment *) gtk_adjustment_new (0.5, 0, 1, 0.1, 0.1, 0);
9127 pdata->y_align_spin = gtk_spin_button_new (adj, 0, 1);
9128 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
9129 GTK_SIGNAL_FUNC (adjust_align), pdata);
9130 gtk_box_pack_start (GTK_BOX (hbox), pdata->y_align_spin, FALSE, TRUE, 0);
9131 gtk_widget_set_sensitive (pdata->y_align_spin, FALSE);
9133 label = gtk_label_new ("Bar Style :");
9134 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 3, 4,
9135 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
9137 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
9139 pdata->omenu2 = build_option_menu (items2, 2, 0,
9140 progressbar_toggle_bar_style,
9142 hbox = gtk_hbox_new (FALSE, 0);
9143 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 3, 4,
9144 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
9146 gtk_box_pack_start (GTK_BOX (hbox), pdata->omenu2, TRUE, TRUE, 0);
9148 label = gtk_label_new ("Block count :");
9149 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 4, 5,
9150 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
9152 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
9154 hbox = gtk_hbox_new (FALSE, 0);
9155 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 4, 5,
9156 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
9158 adj = (GtkAdjustment *) gtk_adjustment_new (10, 2, 20, 1, 5, 0);
9159 pdata->block_spin = gtk_spin_button_new (adj, 0, 0);
9160 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
9161 GTK_SIGNAL_FUNC (adjust_blocks), pdata);
9162 gtk_box_pack_start (GTK_BOX (hbox), pdata->block_spin, FALSE, TRUE, 0);
9163 gtk_widget_set_sensitive (pdata->block_spin, FALSE);
9165 check = gtk_check_button_new_with_label ("Activity mode");
9166 gtk_signal_connect (GTK_OBJECT (check), "clicked",
9167 GTK_SIGNAL_FUNC (toggle_activity_mode),
9169 gtk_table_attach (GTK_TABLE (tab), check, 0, 1, 5, 6,
9170 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
9173 hbox = gtk_hbox_new (FALSE, 0);
9174 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 5, 6,
9175 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
9177 label = gtk_label_new ("Step size : ");
9178 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
9179 adj = (GtkAdjustment *) gtk_adjustment_new (3, 1, 20, 1, 5, 0);
9180 pdata->step_spin = gtk_spin_button_new (adj, 0, 0);
9181 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
9182 GTK_SIGNAL_FUNC (adjust_step), pdata);
9183 gtk_box_pack_start (GTK_BOX (hbox), pdata->step_spin, FALSE, TRUE, 0);
9184 gtk_widget_set_sensitive (pdata->step_spin, FALSE);
9186 hbox = gtk_hbox_new (FALSE, 0);
9187 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 6, 7,
9188 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
9190 label = gtk_label_new ("Blocks : ");
9191 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
9192 adj = (GtkAdjustment *) gtk_adjustment_new (5, 2, 10, 1, 5, 0);
9193 pdata->act_blocks_spin = gtk_spin_button_new (adj, 0, 0);
9194 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
9195 GTK_SIGNAL_FUNC (adjust_act_blocks), pdata);
9196 gtk_box_pack_start (GTK_BOX (hbox), pdata->act_blocks_spin, FALSE, TRUE,
9198 gtk_widget_set_sensitive (pdata->act_blocks_spin, FALSE);
9200 button = gtk_button_new_with_label ("close");
9201 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
9202 GTK_SIGNAL_FUNC (gtk_widget_destroy),
9203 GTK_OBJECT (pdata->window));
9204 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
9205 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (pdata->window)->action_area),
9206 button, TRUE, TRUE, 0);
9207 gtk_widget_grab_default (button);
9210 if (!GTK_WIDGET_VISIBLE (pdata->window))
9211 gtk_widget_show_all (pdata->window);
9213 gtk_widget_destroy (pdata->window);
9225 GtkWidget *res_widget;
9229 find_widget (GtkWidget *widget, FindWidgetData *data)
9231 GtkAllocation new_allocation;
9235 new_allocation = widget->allocation;
9237 if (data->found || !GTK_WIDGET_MAPPED (widget))
9240 /* Note that in the following code, we only count the
9241 * position as being inside a WINDOW widget if it is inside
9242 * widget->window; points that are outside of widget->window
9243 * but within the allocation are not counted. This is consistent
9244 * with the way we highlight drag targets.
9246 if (!GTK_WIDGET_NO_WINDOW (widget))
9248 new_allocation.x = 0;
9249 new_allocation.y = 0;
9252 if (widget->parent && !data->first)
9254 GdkWindow *window = widget->window;
9255 while (window != widget->parent->window)
9257 gint tx, ty, twidth, theight;
9258 gdk_window_get_size (window, &twidth, &theight);
9260 if (new_allocation.x < 0)
9262 new_allocation.width += new_allocation.x;
9263 new_allocation.x = 0;
9265 if (new_allocation.y < 0)
9267 new_allocation.height += new_allocation.y;
9268 new_allocation.y = 0;
9270 if (new_allocation.x + new_allocation.width > twidth)
9271 new_allocation.width = twidth - new_allocation.x;
9272 if (new_allocation.y + new_allocation.height > theight)
9273 new_allocation.height = theight - new_allocation.y;
9275 gdk_window_get_position (window, &tx, &ty);
9276 new_allocation.x += tx;
9278 new_allocation.y += ty;
9281 window = gdk_window_get_parent (window);
9285 if ((data->x >= new_allocation.x) && (data->y >= new_allocation.y) &&
9286 (data->x < new_allocation.x + new_allocation.width) &&
9287 (data->y < new_allocation.y + new_allocation.height))
9289 /* First, check if the drag is in a valid drop site in
9290 * one of our children
9292 if (GTK_IS_CONTAINER (widget))
9294 FindWidgetData new_data = *data;
9296 new_data.x -= x_offset;
9297 new_data.y -= y_offset;
9298 new_data.found = FALSE;
9299 new_data.first = FALSE;
9301 gtk_container_forall (GTK_CONTAINER (widget),
9302 (GtkCallback)find_widget,
9305 data->found = new_data.found;
9307 data->res_widget = new_data.res_widget;
9310 /* If not, and this widget is registered as a drop site, check to
9311 * emit "drag_motion" to check if we are actually in
9317 data->res_widget = widget;
9323 find_widget_at_pointer (void)
9325 GtkWidget *widget = NULL;
9326 GdkWindow *pointer_window;
9328 FindWidgetData data;
9330 pointer_window = gdk_window_at_pointer (NULL, NULL);
9333 gdk_window_get_user_data (pointer_window, (gpointer*) &widget);
9337 gdk_window_get_pointer (widget->window,
9345 find_widget (widget, &data);
9347 return data.res_widget;
9353 struct PropertiesData {
9361 destroy_properties (GtkWidget *widget,
9362 struct PropertiesData *data)
9366 *data->window = NULL;
9367 data->window = NULL;
9372 gdk_cursor_destroy (data->cursor);
9373 data->cursor = NULL;
9378 gtk_signal_disconnect (widget, data->handler);
9386 property_query_event (GtkWidget *widget,
9388 struct PropertiesData *data)
9390 GtkWidget *res_widget = NULL;
9392 if (!data->in_query)
9395 if (event->type == GDK_BUTTON_RELEASE)
9397 gtk_grab_remove (widget);
9398 gdk_pointer_ungrab (GDK_CURRENT_TIME);
9400 res_widget = find_widget_at_pointer ();
9402 create_prop_editor (G_OBJECT (res_widget), 0);
9404 data->in_query = FALSE;
9411 query_properties (GtkButton *button,
9412 struct PropertiesData *data)
9416 gtk_signal_connect (GTK_OBJECT (button), "event",
9417 (GtkSignalFunc) property_query_event, data);
9421 data->cursor = gdk_cursor_new (GDK_TARGET);
9423 failure = gdk_pointer_grab (GTK_WIDGET (button)->window,
9425 GDK_BUTTON_RELEASE_MASK,
9430 gtk_grab_add (GTK_WIDGET (button));
9432 data->in_query = TRUE;
9436 create_properties (void)
9438 static GtkWidget *window = NULL;
9442 struct PropertiesData *data;
9444 data = g_new (struct PropertiesData, 1);
9445 data->window = &window;
9446 data->in_query = FALSE;
9447 data->cursor = NULL;
9452 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
9454 data->handler = gtk_signal_connect (GTK_OBJECT (window), "destroy",
9455 GTK_SIGNAL_FUNC(destroy_properties),
9458 gtk_window_set_title (GTK_WINDOW (window), "test properties");
9459 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
9461 vbox = gtk_vbox_new (FALSE, 1);
9462 gtk_container_add (GTK_CONTAINER (window), vbox);
9464 label = gtk_label_new ("This is just a dumb test to test properties.\nIf you need a generic module, get GLE.");
9465 gtk_box_pack_start (GTK_BOX (vbox), label, TRUE, TRUE, 0);
9467 button = gtk_button_new_with_label ("Query properties");
9468 gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
9469 gtk_signal_connect (GTK_OBJECT (button), "clicked",
9470 GTK_SIGNAL_FUNC(query_properties),
9474 if (!GTK_WIDGET_VISIBLE (window))
9475 gtk_widget_show_all (window);
9477 gtk_widget_destroy (window);
9486 static int color_idle = 0;
9489 color_idle_func (GtkWidget *preview)
9491 static int count = 1;
9495 for (i = 0; i < 256; i++)
9497 for (j = 0, k = 0; j < 256; j++)
9499 buf[k+0] = i + count;
9501 buf[k+2] = j + count;
9505 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
9510 gtk_widget_draw (preview, NULL);
9516 color_preview_destroy (GtkWidget *widget,
9519 gtk_idle_remove (color_idle);
9526 create_color_preview (void)
9528 static GtkWidget *window = NULL;
9535 gtk_widget_push_colormap (gdk_rgb_get_cmap ());
9536 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
9537 gtk_widget_pop_colormap ();
9539 gtk_signal_connect (GTK_OBJECT (window), "destroy",
9540 GTK_SIGNAL_FUNC(color_preview_destroy),
9543 gtk_window_set_title (GTK_WINDOW (window), "test");
9544 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
9546 preview = gtk_preview_new (GTK_PREVIEW_COLOR);
9547 gtk_preview_size (GTK_PREVIEW (preview), 256, 256);
9548 gtk_container_add (GTK_CONTAINER (window), preview);
9550 for (i = 0; i < 256; i++)
9552 for (j = 0, k = 0; j < 256; j++)
9560 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
9563 color_idle = gtk_idle_add ((GtkFunction) color_idle_func, preview);
9566 if (!GTK_WIDGET_VISIBLE (window))
9567 gtk_widget_show_all (window);
9569 gtk_widget_destroy (window);
9576 static int gray_idle = 0;
9579 gray_idle_func (GtkWidget *preview)
9581 static int count = 1;
9585 for (i = 0; i < 256; i++)
9587 for (j = 0; j < 256; j++)
9588 buf[j] = i + j + count;
9590 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
9595 gtk_widget_draw (preview, NULL);
9601 gray_preview_destroy (GtkWidget *widget,
9604 gtk_idle_remove (gray_idle);
9611 create_gray_preview (void)
9613 static GtkWidget *window = NULL;
9620 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
9622 gtk_signal_connect (GTK_OBJECT (window), "destroy",
9623 GTK_SIGNAL_FUNC(gray_preview_destroy),
9626 gtk_window_set_title (GTK_WINDOW (window), "test");
9627 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
9629 preview = gtk_preview_new (GTK_PREVIEW_GRAYSCALE);
9630 gtk_preview_size (GTK_PREVIEW (preview), 256, 256);
9631 gtk_container_add (GTK_CONTAINER (window), preview);
9633 for (i = 0; i < 256; i++)
9635 for (j = 0; j < 256; j++)
9638 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
9641 gray_idle = gtk_idle_add ((GtkFunction) gray_idle_func, preview);
9644 if (!GTK_WIDGET_VISIBLE (window))
9645 gtk_widget_show_all (window);
9647 gtk_widget_destroy (window);
9656 selection_test_received (GtkWidget *list, GtkSelectionData *data)
9659 GtkWidget *list_item;
9663 if (data->length < 0)
9665 g_print ("Selection retrieval failed\n");
9668 if (data->type != GDK_SELECTION_TYPE_ATOM)
9670 g_print ("Selection \"TARGETS\" was not returned as atoms!\n");
9674 /* Clear out any current list items */
9676 gtk_list_clear_items (GTK_LIST(list), 0, -1);
9678 /* Add new items to list */
9680 atoms = (GdkAtom *)data->data;
9683 l = data->length / sizeof (GdkAtom);
9684 for (i = 0; i < l; i++)
9687 name = gdk_atom_name (atoms[i]);
9690 list_item = gtk_list_item_new_with_label (name);
9694 list_item = gtk_list_item_new_with_label ("(bad atom)");
9696 gtk_widget_show (list_item);
9697 item_list = g_list_append (item_list, list_item);
9700 gtk_list_append_items (GTK_LIST (list), item_list);
9706 selection_test_get_targets (GtkWidget *widget, GtkWidget *list)
9708 static GdkAtom targets_atom = GDK_NONE;
9710 if (targets_atom == GDK_NONE)
9711 targets_atom = gdk_atom_intern ("TARGETS", FALSE);
9713 gtk_selection_convert (list, GDK_SELECTION_PRIMARY, targets_atom,
9718 create_selection_test (void)
9720 static GtkWidget *window = NULL;
9723 GtkWidget *scrolled_win;
9729 window = gtk_dialog_new ();
9731 gtk_signal_connect (GTK_OBJECT (window), "destroy",
9732 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
9735 gtk_window_set_title (GTK_WINDOW (window), "Selection Test");
9736 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
9738 /* Create the list */
9740 vbox = gtk_vbox_new (FALSE, 5);
9741 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
9742 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), vbox,
9745 label = gtk_label_new ("Gets available targets for current selection");
9746 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9748 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
9749 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
9750 GTK_POLICY_AUTOMATIC,
9751 GTK_POLICY_AUTOMATIC);
9752 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
9753 gtk_widget_set_usize (scrolled_win, 100, 200);
9755 list = gtk_list_new ();
9756 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_win), list);
9758 gtk_signal_connect (GTK_OBJECT(list), "selection_received",
9759 GTK_SIGNAL_FUNC (selection_test_received), NULL);
9761 /* .. And create some buttons */
9762 button = gtk_button_new_with_label ("Get Targets");
9763 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
9764 button, TRUE, TRUE, 0);
9766 gtk_signal_connect (GTK_OBJECT (button), "clicked",
9767 GTK_SIGNAL_FUNC (selection_test_get_targets), list);
9769 button = gtk_button_new_with_label ("Quit");
9770 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
9771 button, TRUE, TRUE, 0);
9773 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
9774 GTK_SIGNAL_FUNC (gtk_widget_destroy),
9775 GTK_OBJECT (window));
9778 if (!GTK_WIDGET_VISIBLE (window))
9779 gtk_widget_show_all (window);
9781 gtk_widget_destroy (window);
9789 create_gamma_curve (void)
9791 static GtkWidget *window = NULL, *curve;
9792 static int count = 0;
9799 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
9800 gtk_window_set_title (GTK_WINDOW (window), "test");
9801 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
9803 gtk_signal_connect (GTK_OBJECT (window), "destroy",
9804 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
9807 curve = gtk_gamma_curve_new ();
9808 gtk_container_add (GTK_CONTAINER (window), curve);
9809 gtk_widget_show (curve);
9812 max = 127 + (count % 2)*128;
9813 gtk_curve_set_range (GTK_CURVE (GTK_GAMMA_CURVE (curve)->curve),
9815 for (i = 0; i < max; ++i)
9816 vec[i] = (127 / sqrt (max)) * sqrt (i);
9817 gtk_curve_set_vector (GTK_CURVE (GTK_GAMMA_CURVE (curve)->curve),
9820 if (!GTK_WIDGET_VISIBLE (window))
9821 gtk_widget_show (window);
9822 else if (count % 4 == 3)
9824 gtk_widget_destroy (window);
9835 static int scroll_test_pos = 0.0;
9838 scroll_test_expose (GtkWidget *widget, GdkEventExpose *event,
9842 gint imin, imax, jmin, jmax;
9844 imin = (event->area.x) / 10;
9845 imax = (event->area.x + event->area.width + 9) / 10;
9847 jmin = ((int)adj->value + event->area.y) / 10;
9848 jmax = ((int)adj->value + event->area.y + event->area.height + 9) / 10;
9850 gdk_window_clear_area (widget->window,
9851 event->area.x, event->area.y,
9852 event->area.width, event->area.height);
9854 for (i=imin; i<imax; i++)
9855 for (j=jmin; j<jmax; j++)
9857 gdk_draw_rectangle (widget->window,
9858 widget->style->black_gc,
9860 10*i, 10*j - (int)adj->value, 1+i%10, 1+j%10);
9866 scroll_test_scroll (GtkWidget *widget, GdkEventScroll *event,
9869 gdouble new_value = adj->value + ((event->direction == GDK_SCROLL_UP) ?
9870 -adj->page_increment / 2:
9871 adj->page_increment / 2);
9872 new_value = CLAMP (new_value, adj->lower, adj->upper - adj->page_size);
9873 gtk_adjustment_set_value (adj, new_value);
9879 scroll_test_configure (GtkWidget *widget, GdkEventConfigure *event,
9882 adj->page_increment = 0.9 * widget->allocation.height;
9883 adj->page_size = widget->allocation.height;
9885 gtk_signal_emit_by_name (GTK_OBJECT (adj), "changed");
9889 scroll_test_adjustment_changed (GtkAdjustment *adj, GtkWidget *widget)
9891 /* gint source_min = (int)adj->value - scroll_test_pos; */
9894 dy = scroll_test_pos - (int)adj->value;
9895 scroll_test_pos = adj->value;
9897 if (!GTK_WIDGET_DRAWABLE (widget))
9899 gdk_window_scroll (widget->window, 0, dy);
9900 gdk_window_process_updates (widget->window, FALSE);
9905 create_scroll_test (void)
9907 static GtkWidget *window = NULL;
9909 GtkWidget *drawing_area;
9910 GtkWidget *scrollbar;
9913 GdkGeometry geometry;
9914 GdkWindowHints geometry_mask;
9918 window = gtk_dialog_new ();
9920 gtk_signal_connect (GTK_OBJECT (window), "destroy",
9921 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
9924 gtk_window_set_title (GTK_WINDOW (window), "Scroll Test");
9925 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
9927 hbox = gtk_hbox_new (FALSE, 0);
9928 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), hbox,
9930 gtk_widget_show (hbox);
9932 drawing_area = gtk_drawing_area_new ();
9933 gtk_drawing_area_size (GTK_DRAWING_AREA (drawing_area), 200, 200);
9934 gtk_box_pack_start (GTK_BOX (hbox), drawing_area, TRUE, TRUE, 0);
9935 gtk_widget_show (drawing_area);
9937 gtk_widget_set_events (drawing_area, GDK_EXPOSURE_MASK | GDK_SCROLL_MASK);
9939 adj = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.0, 1000.0, 1.0, 180.0, 200.0));
9940 scroll_test_pos = 0.0;
9942 scrollbar = gtk_vscrollbar_new (adj);
9943 gtk_box_pack_start (GTK_BOX (hbox), scrollbar, FALSE, FALSE, 0);
9944 gtk_widget_show (scrollbar);
9946 gtk_signal_connect (GTK_OBJECT (drawing_area), "expose_event",
9947 GTK_SIGNAL_FUNC (scroll_test_expose), adj);
9948 gtk_signal_connect (GTK_OBJECT (drawing_area), "configure_event",
9949 GTK_SIGNAL_FUNC (scroll_test_configure), adj);
9950 gtk_signal_connect (GTK_OBJECT (drawing_area), "scroll_event",
9951 GTK_SIGNAL_FUNC (scroll_test_scroll), adj);
9953 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
9954 GTK_SIGNAL_FUNC (scroll_test_adjustment_changed),
9957 /* .. And create some buttons */
9959 button = gtk_button_new_with_label ("Quit");
9960 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
9961 button, TRUE, TRUE, 0);
9963 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
9964 GTK_SIGNAL_FUNC (gtk_widget_destroy),
9965 GTK_OBJECT (window));
9966 gtk_widget_show (button);
9968 /* Set up gridded geometry */
9970 geometry_mask = GDK_HINT_MIN_SIZE |
9971 GDK_HINT_BASE_SIZE |
9972 GDK_HINT_RESIZE_INC;
9974 geometry.min_width = 20;
9975 geometry.min_height = 20;
9976 geometry.base_width = 0;
9977 geometry.base_height = 0;
9978 geometry.width_inc = 10;
9979 geometry.height_inc = 10;
9981 gtk_window_set_geometry_hints (GTK_WINDOW (window),
9982 drawing_area, &geometry, geometry_mask);
9985 if (!GTK_WIDGET_VISIBLE (window))
9986 gtk_widget_show (window);
9988 gtk_widget_destroy (window);
9995 static int timer = 0;
9998 timeout_test (GtkWidget *label)
10000 static int count = 0;
10001 static char buffer[32];
10003 sprintf (buffer, "count: %d", ++count);
10004 gtk_label_set_text (GTK_LABEL (label), buffer);
10010 start_timeout_test (GtkWidget *widget,
10015 timer = gtk_timeout_add (100, (GtkFunction) timeout_test, label);
10020 stop_timeout_test (GtkWidget *widget,
10025 gtk_timeout_remove (timer);
10031 destroy_timeout_test (GtkWidget *widget,
10032 GtkWidget **window)
10034 stop_timeout_test (NULL, NULL);
10040 create_timeout_test (void)
10042 static GtkWidget *window = NULL;
10048 window = gtk_dialog_new ();
10050 gtk_signal_connect (GTK_OBJECT (window), "destroy",
10051 GTK_SIGNAL_FUNC(destroy_timeout_test),
10054 gtk_window_set_title (GTK_WINDOW (window), "Timeout Test");
10055 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
10057 label = gtk_label_new ("count: 0");
10058 gtk_misc_set_padding (GTK_MISC (label), 10, 10);
10059 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
10060 label, TRUE, TRUE, 0);
10061 gtk_widget_show (label);
10063 button = gtk_button_new_with_label ("close");
10064 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
10065 GTK_SIGNAL_FUNC(gtk_widget_destroy),
10066 GTK_OBJECT (window));
10067 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
10068 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
10069 button, TRUE, TRUE, 0);
10070 gtk_widget_grab_default (button);
10071 gtk_widget_show (button);
10073 button = gtk_button_new_with_label ("start");
10074 gtk_signal_connect (GTK_OBJECT (button), "clicked",
10075 GTK_SIGNAL_FUNC(start_timeout_test),
10077 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
10078 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
10079 button, TRUE, TRUE, 0);
10080 gtk_widget_show (button);
10082 button = gtk_button_new_with_label ("stop");
10083 gtk_signal_connect (GTK_OBJECT (button), "clicked",
10084 GTK_SIGNAL_FUNC(stop_timeout_test),
10086 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
10087 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
10088 button, TRUE, TRUE, 0);
10089 gtk_widget_show (button);
10092 if (!GTK_WIDGET_VISIBLE (window))
10093 gtk_widget_show (window);
10095 gtk_widget_destroy (window);
10102 static int idle_id = 0;
10105 idle_test (GtkWidget *label)
10107 static int count = 0;
10108 static char buffer[32];
10110 sprintf (buffer, "count: %d", ++count);
10111 gtk_label_set_text (GTK_LABEL (label), buffer);
10117 start_idle_test (GtkWidget *widget,
10122 idle_id = gtk_idle_add ((GtkFunction) idle_test, label);
10127 stop_idle_test (GtkWidget *widget,
10132 gtk_idle_remove (idle_id);
10138 destroy_idle_test (GtkWidget *widget,
10139 GtkWidget **window)
10141 stop_idle_test (NULL, NULL);
10147 toggle_idle_container (GtkObject *button,
10148 GtkContainer *container)
10150 gtk_container_set_resize_mode (container, GPOINTER_TO_INT (gtk_object_get_user_data (button)));
10154 create_idle_test (void)
10156 static GtkWidget *window = NULL;
10159 GtkWidget *container;
10163 GtkWidget *button2;
10167 window = gtk_dialog_new ();
10169 gtk_signal_connect (GTK_OBJECT (window), "destroy",
10170 GTK_SIGNAL_FUNC(destroy_idle_test),
10173 gtk_window_set_title (GTK_WINDOW (window), "Idle Test");
10174 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
10176 label = gtk_label_new ("count: 0");
10177 gtk_misc_set_padding (GTK_MISC (label), 10, 10);
10178 gtk_widget_show (label);
10181 gtk_widget_new (GTK_TYPE_HBOX,
10183 /* "GtkContainer::child", gtk_widget_new (GTK_TYPE_HBOX,
10184 * "GtkWidget::visible", TRUE,
10189 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
10190 container, TRUE, TRUE, 0);
10193 gtk_widget_new (GTK_TYPE_FRAME,
10195 "label", "Label Container",
10197 "parent", GTK_DIALOG (window)->vbox,
10200 gtk_widget_new (GTK_TYPE_VBOX,
10205 g_object_connect (gtk_widget_new (GTK_TYPE_RADIO_BUTTON,
10206 "label", "Resize-Parent",
10207 "user_data", (void*)GTK_RESIZE_PARENT,
10211 "signal::clicked", toggle_idle_container, container,
10213 button = gtk_widget_new (GTK_TYPE_RADIO_BUTTON,
10214 "label", "Resize-Queue",
10215 "user_data", (void*)GTK_RESIZE_QUEUE,
10220 g_object_connect (button,
10221 "signal::clicked", toggle_idle_container, container,
10223 button2 = gtk_widget_new (GTK_TYPE_RADIO_BUTTON,
10224 "label", "Resize-Immediate",
10225 "user_data", (void*)GTK_RESIZE_IMMEDIATE,
10227 g_object_connect (button2,
10228 "signal::clicked", toggle_idle_container, container,
10230 g_object_set (button2,
10236 button = gtk_button_new_with_label ("close");
10237 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
10238 GTK_SIGNAL_FUNC(gtk_widget_destroy),
10239 GTK_OBJECT (window));
10240 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
10241 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
10242 button, TRUE, TRUE, 0);
10243 gtk_widget_grab_default (button);
10244 gtk_widget_show (button);
10246 button = gtk_button_new_with_label ("start");
10247 gtk_signal_connect (GTK_OBJECT (button), "clicked",
10248 GTK_SIGNAL_FUNC(start_idle_test),
10250 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
10251 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
10252 button, TRUE, TRUE, 0);
10253 gtk_widget_show (button);
10255 button = gtk_button_new_with_label ("stop");
10256 gtk_signal_connect (GTK_OBJECT (button), "clicked",
10257 GTK_SIGNAL_FUNC(stop_idle_test),
10259 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
10260 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
10261 button, TRUE, TRUE, 0);
10262 gtk_widget_show (button);
10265 if (!GTK_WIDGET_VISIBLE (window))
10266 gtk_widget_show (window);
10268 gtk_widget_destroy (window);
10276 reload_all_rc_files (void)
10278 static GdkAtom atom_rcfiles = GDK_NONE;
10280 GdkEventClient sev;
10284 atom_rcfiles = gdk_atom_intern("_GTK_READ_RCFILES", FALSE);
10286 for(i = 0; i < 5; i++)
10288 sev.data_format = 32;
10289 sev.message_type = atom_rcfiles;
10290 gdk_event_send_clientmessage_toall ((GdkEvent *) &sev);
10294 create_rc_file (void)
10296 static GtkWidget *window = NULL;
10301 window = gtk_dialog_new ();
10303 gtk_signal_connect (GTK_OBJECT (window), "destroy",
10304 GTK_SIGNAL_FUNC(destroy_idle_test),
10307 gtk_window_set_title (GTK_WINDOW (window), "Reload Rc file");
10308 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
10310 button = gtk_button_new_with_label ("Reload");
10311 gtk_signal_connect (GTK_OBJECT (button), "clicked",
10312 GTK_SIGNAL_FUNC(gtk_rc_reparse_all), NULL);
10313 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
10314 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
10315 button, TRUE, TRUE, 0);
10316 gtk_widget_grab_default (button);
10317 gtk_widget_show (button);
10319 button = gtk_button_new_with_label ("Reload All");
10320 gtk_signal_connect (GTK_OBJECT (button), "clicked",
10321 GTK_SIGNAL_FUNC(reload_all_rc_files), NULL);
10322 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
10323 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
10324 button, TRUE, TRUE, 0);
10325 gtk_widget_show (button);
10327 button = gtk_button_new_with_label ("Close");
10328 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
10329 GTK_SIGNAL_FUNC(gtk_widget_destroy),
10330 GTK_OBJECT (window));
10331 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
10332 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
10333 button, TRUE, TRUE, 0);
10334 gtk_widget_show (button);
10338 if (!GTK_WIDGET_VISIBLE (window))
10339 gtk_widget_show (window);
10341 gtk_widget_destroy (window);
10345 * Test of recursive mainloop
10349 mainloop_destroyed (GtkWidget *w, GtkWidget **window)
10356 create_mainloop (void)
10358 static GtkWidget *window = NULL;
10364 window = gtk_dialog_new ();
10366 gtk_window_set_title (GTK_WINDOW (window), "Test Main Loop");
10368 gtk_signal_connect (GTK_OBJECT (window), "destroy",
10369 GTK_SIGNAL_FUNC(mainloop_destroyed),
10372 label = gtk_label_new ("In recursive main loop...");
10373 gtk_misc_set_padding (GTK_MISC(label), 20, 20);
10375 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), label,
10377 gtk_widget_show (label);
10379 button = gtk_button_new_with_label ("Leave");
10380 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area), button,
10383 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
10384 GTK_SIGNAL_FUNC (gtk_widget_destroy),
10385 GTK_OBJECT (window));
10387 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
10388 gtk_widget_grab_default (button);
10390 gtk_widget_show (button);
10393 if (!GTK_WIDGET_VISIBLE (window))
10395 gtk_widget_show (window);
10397 g_print ("create_mainloop: start\n");
10399 g_print ("create_mainloop: done\n");
10402 gtk_widget_destroy (window);
10406 layout_expose_handler (GtkWidget *widget, GdkEventExpose *event)
10411 gint imin, imax, jmin, jmax;
10413 layout = GTK_LAYOUT (widget);
10415 imin = (layout->xoffset + event->area.x) / 10;
10416 imax = (layout->xoffset + event->area.x + event->area.width + 9) / 10;
10418 jmin = (layout->yoffset + event->area.y) / 10;
10419 jmax = (layout->yoffset + event->area.y + event->area.height + 9) / 10;
10421 gdk_window_clear_area (widget->window,
10422 event->area.x, event->area.y,
10423 event->area.width, event->area.height);
10425 for (i=imin; i<imax; i++)
10426 for (j=jmin; j<jmax; j++)
10428 gdk_draw_rectangle (layout->bin_window,
10429 widget->style->black_gc,
10431 10*i - layout->xoffset, 10*j - layout->yoffset,
10437 void create_layout (void)
10439 static GtkWidget *window = NULL;
10441 GtkWidget *scrolledwindow;
10450 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
10451 gtk_signal_connect (GTK_OBJECT (window), "destroy",
10452 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
10455 gtk_window_set_title (GTK_WINDOW (window), "Layout");
10456 gtk_widget_set_usize (window, 200, 200);
10458 scrolledwindow = gtk_scrolled_window_new (NULL, NULL);
10459 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow),
10461 gtk_scrolled_window_set_placement (GTK_SCROLLED_WINDOW (scrolledwindow),
10462 GTK_CORNER_TOP_RIGHT);
10464 gtk_container_add (GTK_CONTAINER (window), scrolledwindow);
10466 layout = gtk_layout_new (NULL, NULL);
10467 gtk_container_add (GTK_CONTAINER (scrolledwindow), layout);
10469 /* We set step sizes here since GtkLayout does not set
10472 GTK_LAYOUT (layout)->hadjustment->step_increment = 10.0;
10473 GTK_LAYOUT (layout)->vadjustment->step_increment = 10.0;
10475 gtk_widget_set_events (layout, GDK_EXPOSURE_MASK);
10476 gtk_signal_connect (GTK_OBJECT (layout), "expose_event",
10477 GTK_SIGNAL_FUNC (layout_expose_handler), NULL);
10479 gtk_layout_set_size (GTK_LAYOUT (layout), 1600, 128000);
10481 for (i=0 ; i < 16 ; i++)
10482 for (j=0 ; j < 16 ; j++)
10484 sprintf(buf, "Button %d, %d", i, j);
10486 button = gtk_button_new_with_label (buf);
10488 button = gtk_label_new (buf);
10490 gtk_layout_put (GTK_LAYOUT (layout), button,
10494 for (i=16; i < 1280; i++)
10496 sprintf(buf, "Button %d, %d", i, 0);
10498 button = gtk_button_new_with_label (buf);
10500 button = gtk_label_new (buf);
10502 gtk_layout_put (GTK_LAYOUT (layout), button,
10507 if (!GTK_WIDGET_VISIBLE (window))
10508 gtk_widget_show_all (window);
10510 gtk_widget_destroy (window);
10514 create_styles (void)
10516 static GtkWidget *window = NULL;
10521 static GdkColor red = { 0, 0xffff, 0, 0 };
10522 static GdkColor green = { 0, 0, 0xffff, 0 };
10523 static GdkColor blue = { 0, 0, 0, 0xffff };
10524 static GdkColor yellow = { 0, 0xffff, 0xffff, 0 };
10525 static GdkColor cyan = { 0, 0 , 0xffff, 0xffff };
10526 PangoFontDescription *font_desc;
10528 GtkRcStyle *rc_style;
10532 window = gtk_dialog_new ();
10533 gtk_signal_connect (GTK_OBJECT (window), "destroy",
10534 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
10538 button = gtk_button_new_with_label ("Close");
10539 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
10540 GTK_SIGNAL_FUNC(gtk_widget_destroy),
10541 GTK_OBJECT (window));
10542 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
10543 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
10544 button, TRUE, TRUE, 0);
10545 gtk_widget_show (button);
10547 vbox = gtk_vbox_new (FALSE, 5);
10548 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
10549 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), vbox, FALSE, FALSE, 0);
10551 label = gtk_label_new ("Font:");
10552 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
10553 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
10555 font_desc = pango_font_description_from_string ("Helvetica,Sans Oblique 18");
10557 button = gtk_button_new_with_label ("Some Text");
10558 gtk_widget_modify_font (GTK_BIN (button)->child, font_desc);
10559 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
10561 label = gtk_label_new ("Foreground:");
10562 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
10563 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
10565 button = gtk_button_new_with_label ("Some Text");
10566 gtk_widget_modify_fg (GTK_BIN (button)->child, GTK_STATE_NORMAL, &red);
10567 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
10569 label = gtk_label_new ("Background:");
10570 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
10571 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
10573 button = gtk_button_new_with_label ("Some Text");
10574 gtk_widget_modify_bg (button, GTK_STATE_NORMAL, &green);
10575 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
10577 label = gtk_label_new ("Text:");
10578 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
10579 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
10581 entry = gtk_entry_new ();
10582 gtk_entry_set_text (GTK_ENTRY (entry), "Some Text");
10583 gtk_widget_modify_text (entry, GTK_STATE_NORMAL, &blue);
10584 gtk_box_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 0);
10586 label = gtk_label_new ("Base:");
10587 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
10588 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
10590 entry = gtk_entry_new ();
10591 gtk_entry_set_text (GTK_ENTRY (entry), "Some Text");
10592 gtk_widget_modify_base (entry, GTK_STATE_NORMAL, &yellow);
10593 gtk_box_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 0);
10595 label = gtk_label_new ("Multiple:");
10596 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
10597 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
10599 button = gtk_button_new_with_label ("Some Text");
10601 rc_style = gtk_rc_style_new ();
10603 rc_style->font_desc = pango_font_description_copy (font_desc);
10604 rc_style->color_flags[GTK_STATE_NORMAL] = GTK_RC_FG | GTK_RC_BG;
10605 rc_style->color_flags[GTK_STATE_PRELIGHT] = GTK_RC_FG | GTK_RC_BG;
10606 rc_style->color_flags[GTK_STATE_ACTIVE] = GTK_RC_FG | GTK_RC_BG;
10607 rc_style->fg[GTK_STATE_NORMAL] = yellow;
10608 rc_style->bg[GTK_STATE_NORMAL] = blue;
10609 rc_style->fg[GTK_STATE_PRELIGHT] = blue;
10610 rc_style->bg[GTK_STATE_PRELIGHT] = yellow;
10611 rc_style->fg[GTK_STATE_ACTIVE] = red;
10612 rc_style->bg[GTK_STATE_ACTIVE] = cyan;
10613 rc_style->xthickness = 5;
10614 rc_style->ythickness = 5;
10616 gtk_widget_modify_style (button, rc_style);
10617 gtk_widget_modify_style (GTK_BIN (button)->child, rc_style);
10619 g_object_unref (G_OBJECT (rc_style));
10621 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
10624 if (!GTK_WIDGET_VISIBLE (window))
10625 gtk_widget_show_all (window);
10627 gtk_widget_destroy (window);
10631 * Main Window and Exit
10635 do_exit (GtkWidget *widget, GtkWidget *window)
10637 gtk_widget_destroy (window);
10644 gboolean do_not_benchmark;
10647 { "button box", create_button_box },
10648 { "buttons", create_buttons },
10649 { "check buttons", create_check_buttons },
10650 { "clist", create_clist},
10651 { "color selection", create_color_selection },
10652 { "ctree", create_ctree },
10653 { "cursors", create_cursors },
10654 { "dialog", create_dialog },
10655 { "entry", create_entry },
10656 { "event watcher", create_event_watcher },
10657 { "file selection", create_file_selection },
10658 { "flipping", create_flipping },
10659 { "focus", create_focus },
10660 { "font selection", create_font_selection },
10661 { "gamma curve", create_gamma_curve, TRUE },
10662 { "handle box", create_handle_box },
10663 { "image from drawable", create_get_image },
10664 { "image", create_image },
10665 { "item factory", create_item_factory },
10666 { "labels", create_labels },
10667 { "layout", create_layout },
10668 { "list", create_list },
10669 { "menus", create_menus },
10670 { "message dialog", create_message_dialog },
10671 { "modal window", create_modal_window, TRUE },
10672 { "notebook", create_notebook },
10673 { "panes", create_panes },
10674 { "pixmap", create_pixmap },
10675 { "preview color", create_color_preview, TRUE },
10676 { "preview gray", create_gray_preview, TRUE },
10677 { "progress bar", create_progress_bar },
10678 { "properties", create_properties },
10679 { "radio buttons", create_radio_buttons },
10680 { "range controls", create_range_controls },
10681 { "rc file", create_rc_file },
10682 { "reparent", create_reparent },
10683 { "rulers", create_rulers },
10684 { "saved position", create_saved_position },
10685 { "scrolled windows", create_scrolled_windows },
10686 { "shapes", create_shapes },
10687 { "size groups", create_size_groups },
10688 { "spinbutton", create_spins },
10689 { "statusbar", create_statusbar },
10690 { "styles", create_styles },
10691 { "test idle", create_idle_test },
10692 { "test mainloop", create_mainloop, TRUE },
10693 { "test scrolling", create_scroll_test },
10694 { "test selection", create_selection_test },
10695 { "test timeout", create_timeout_test },
10696 { "text", create_text },
10697 { "toggle buttons", create_toggle_buttons },
10698 { "toolbar", create_toolbar },
10699 { "tooltips", create_tooltips },
10700 { "tree", create_tree_mode_window},
10701 { "WM hints", create_wmhints },
10702 { "window sizing", create_window_sizing },
10703 { "window states", create_window_states }
10705 int nbuttons = sizeof (buttons) / sizeof (buttons[0]);
10708 create_main_window (void)
10713 GtkWidget *scrolled_window;
10717 GtkWidget *separator;
10718 GdkGeometry geometry;
10721 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
10722 gtk_widget_set_name (window, "main window");
10723 gtk_widget_set_uposition (window, 20, 20);
10724 gtk_window_set_default_size (GTK_WINDOW (window), -1, 400);
10726 geometry.min_width = -1;
10727 geometry.min_height = -1;
10728 geometry.max_width = -1;
10729 geometry.max_height = G_MAXSHORT;
10730 gtk_window_set_geometry_hints (GTK_WINDOW (window), NULL,
10732 GDK_HINT_MIN_SIZE | GDK_HINT_MAX_SIZE);
10734 gtk_signal_connect (GTK_OBJECT (window), "destroy",
10735 GTK_SIGNAL_FUNC(gtk_main_quit),
10737 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
10738 GTK_SIGNAL_FUNC (gtk_false),
10741 box1 = gtk_vbox_new (FALSE, 0);
10742 gtk_container_add (GTK_CONTAINER (window), box1);
10744 if (gtk_micro_version > 0)
10749 gtk_micro_version);
10754 gtk_minor_version);
10756 label = gtk_label_new (buffer);
10757 gtk_box_pack_start (GTK_BOX (box1), label, FALSE, FALSE, 0);
10759 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
10760 gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10);
10761 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
10763 GTK_POLICY_AUTOMATIC);
10764 gtk_box_pack_start (GTK_BOX (box1), scrolled_window, TRUE, TRUE, 0);
10766 box2 = gtk_vbox_new (FALSE, 0);
10767 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
10768 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), box2);
10769 gtk_container_set_focus_vadjustment (GTK_CONTAINER (box2),
10770 gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
10771 gtk_widget_show (box2);
10773 for (i = 0; i < nbuttons; i++)
10775 button = gtk_button_new_with_label (buttons[i].label);
10776 if (buttons[i].func)
10777 gtk_signal_connect (GTK_OBJECT (button),
10779 GTK_SIGNAL_FUNC(buttons[i].func),
10782 gtk_widget_set_sensitive (button, FALSE);
10783 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
10786 separator = gtk_hseparator_new ();
10787 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
10789 box2 = gtk_vbox_new (FALSE, 10);
10790 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
10791 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
10793 button = gtk_button_new_with_mnemonic ("_Close");
10794 gtk_signal_connect (GTK_OBJECT (button), "clicked",
10795 GTK_SIGNAL_FUNC (do_exit),
10797 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
10798 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
10799 gtk_widget_grab_default (button);
10801 gtk_widget_show_all (window);
10807 if (file_exists ("../gdk-pixbuf/.libs/libpixbufloader-pnm.so"))
10809 putenv ("GDK_PIXBUF_MODULEDIR=../gdk-pixbuf/.libs");
10810 putenv ("GTK_IM_MODULE_FILE=../modules/input/gtk.immodules");
10815 pad (const char *str, int to)
10817 static char buf[256];
10818 int len = strlen (str);
10821 for (i = 0; i < to; i++)
10826 memcpy (buf, str, len);
10832 bench_iteration (void (* fn) ())
10835 while (g_main_iteration (FALSE));
10837 while (g_main_iteration (FALSE));
10841 do_real_bench (void (* fn) (), char *name, int num)
10847 static gboolean printed_headers = FALSE;
10849 if (!printed_headers) {
10850 g_print ("Test Iters First Other\n");
10851 g_print ("-------------------- ----- ---------- ----------\n");
10852 printed_headers = TRUE;
10855 g_get_current_time (&tv0);
10856 bench_iteration (fn);
10857 g_get_current_time (&tv1);
10859 dt_first = ((double)tv1.tv_sec - tv0.tv_sec) * 1000.0
10860 + (tv1.tv_usec - tv0.tv_usec) / 1000.0;
10862 g_get_current_time (&tv0);
10863 for (n = 0; n < num - 1; n++)
10864 bench_iteration (fn);
10865 g_get_current_time (&tv1);
10866 dt = ((double)tv1.tv_sec - tv0.tv_sec) * 1000.0
10867 + (tv1.tv_usec - tv0.tv_usec) / 1000.0;
10869 g_print ("%s %5d ", pad (name, 20), num);
10871 g_print ("%10.1f %10.1f\n", dt_first, dt/(num-1));
10873 g_print ("%10.1f\n", dt_first);
10877 do_bench (char* what, int num)
10883 if (g_strcasecmp (what, "ALL") == 0)
10885 for (i = 0; i < nbuttons; i++)
10887 if (!buttons[i].do_not_benchmark)
10888 do_real_bench (buttons[i].func, buttons[i].label, num);
10895 for (i = 0; i < nbuttons; i++)
10897 if (strcmp (buttons[i].label, what) == 0)
10899 fn = buttons[i].func;
10905 g_print ("Can't bench: \"%s\" not found.\n", what);
10907 do_real_bench (fn, buttons[i].label, num);
10914 fprintf (stderr, "Usage: testgtk [--bench ALL|<bench>[:<count>]]\n");
10919 main (int argc, char *argv[])
10921 GtkBindingSet *binding_set;
10923 gboolean done_benchmarks = FALSE;
10925 srand (time (NULL));
10929 /* Check to see if we are being run from the correct
10932 if (file_exists ("testgtkrc"))
10933 gtk_rc_add_default_file ("testgtkrc");
10935 gtk_init (&argc, &argv);
10939 for (i = 1; i < argc; i++)
10941 if (strncmp (argv[i], "--bench", strlen("--bench")) == 0)
10948 nextarg = strchr (argv[i], '=');
10959 count = strchr (nextarg, ':');
10962 what = g_strndup (nextarg, count - nextarg);
10964 num = atoi (count);
10969 what = g_strdup (nextarg);
10971 do_bench (what, num ? num : 1);
10972 done_benchmarks = TRUE;
10977 if (done_benchmarks)
10982 binding_set = gtk_binding_set_by_class (gtk_type_class (GTK_TYPE_WIDGET));
10983 gtk_binding_entry_add_signal (binding_set,
10984 '9', GDK_CONTROL_MASK | GDK_RELEASE_MASK,
10987 GTK_TYPE_STRING, "GtkWidgetClass <ctrl><release>9 test");
10989 create_main_window ();
10995 while (g_main_pending ())
10996 g_main_iteration (FALSE);
10999 while (g_main_pending ())
11000 g_main_iteration (FALSE);