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 Library 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 * Library General Public License for more details.
14 * You should have received a copy of the GNU Library 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.
27 #include "../gdk/gdk.h"
28 #include "../gdk/gdkx.h"
29 #include "../gdk/gdkkeysyms.h"
31 #include "circles.xbm"
33 typedef struct _OptionMenuItem
40 shape_create_icon (char *xpm_file,
48 build_option_menu (OptionMenuItem items[],
53 /* macro, structure and variables used by tree window demos */
54 #define DEFAULT_NUMBER_OF_ITEM 3
55 #define DEFAULT_RECURSION_LEVEL 3
58 GSList* selection_mode_group;
59 GtkWidget* single_button;
60 GtkWidget* browse_button;
61 GtkWidget* multiple_button;
62 GtkWidget* draw_line_button;
63 GtkWidget* view_line_button;
64 GtkWidget* no_root_item_button;
65 GtkWidget* nb_item_spinner;
66 GtkWidget* recursion_spinner;
67 } sTreeSampleSelection;
69 typedef struct sTreeButtons {
71 GtkWidget* add_button;
72 GtkWidget* remove_button;
73 GtkWidget* subtree_button;
75 /* end of tree section */
78 build_option_menu (OptionMenuItem items[],
89 omenu = gtk_option_menu_new ();
91 menu = gtk_menu_new ();
94 for (i = 0; i < num_items; i++)
96 menu_item = gtk_radio_menu_item_new_with_label (group, items[i].name);
97 gtk_signal_connect (GTK_OBJECT (menu_item), "activate",
98 (GtkSignalFunc) items[i].func, data);
99 group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menu_item));
100 gtk_menu_append (GTK_MENU (menu), menu_item);
102 gtk_check_menu_item_set_state (GTK_CHECK_MENU_ITEM (menu_item), TRUE);
103 gtk_widget_show (menu_item);
106 gtk_option_menu_set_menu (GTK_OPTION_MENU (omenu), menu);
107 gtk_option_menu_set_history (GTK_OPTION_MENU (omenu), history);
113 destroy_tooltips (GtkWidget *widget, GtkWindow **window)
115 GtkTooltips *tt = gtk_object_get_data (GTK_OBJECT (*window), "tooltips");
116 gtk_object_unref (GTK_OBJECT (tt));
125 button_window (GtkWidget *widget,
128 if (!GTK_WIDGET_VISIBLE (button))
129 gtk_widget_show (button);
131 gtk_widget_hide (button);
135 create_buttons (void)
137 static GtkWidget *window = NULL;
141 GtkWidget *button[10];
142 GtkWidget *separator;
146 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
148 gtk_signal_connect (GTK_OBJECT (window), "destroy",
149 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
152 gtk_window_set_title (GTK_WINDOW (window), "GtkButton");
153 gtk_container_border_width (GTK_CONTAINER (window), 0);
155 box1 = gtk_vbox_new (FALSE, 0);
156 gtk_container_add (GTK_CONTAINER (window), box1);
158 table = gtk_table_new (3, 3, FALSE);
159 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
160 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
161 gtk_container_border_width (GTK_CONTAINER (table), 10);
162 gtk_box_pack_start (GTK_BOX (box1), table, TRUE, TRUE, 0);
164 button[0] = gtk_button_new_with_label ("button1");
165 button[1] = gtk_button_new_with_label ("button2");
166 button[2] = gtk_button_new_with_label ("button3");
167 button[3] = gtk_button_new_with_label ("button4");
168 button[4] = gtk_button_new_with_label ("button5");
169 button[5] = gtk_button_new_with_label ("button6");
170 button[6] = gtk_button_new_with_label ("button7");
171 button[7] = gtk_button_new_with_label ("button8");
172 button[8] = gtk_button_new_with_label ("button9");
174 gtk_signal_connect (GTK_OBJECT (button[0]), "clicked",
175 GTK_SIGNAL_FUNC(button_window),
178 gtk_table_attach (GTK_TABLE (table), button[0], 0, 1, 0, 1,
179 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
181 gtk_signal_connect (GTK_OBJECT (button[1]), "clicked",
182 GTK_SIGNAL_FUNC(button_window),
185 gtk_table_attach (GTK_TABLE (table), button[1], 1, 2, 1, 2,
186 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
188 gtk_signal_connect (GTK_OBJECT (button[2]), "clicked",
189 GTK_SIGNAL_FUNC(button_window),
191 gtk_table_attach (GTK_TABLE (table), button[2], 2, 3, 2, 3,
192 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
194 gtk_signal_connect (GTK_OBJECT (button[3]), "clicked",
195 GTK_SIGNAL_FUNC(button_window),
197 gtk_table_attach (GTK_TABLE (table), button[3], 0, 1, 2, 3,
198 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
200 gtk_signal_connect (GTK_OBJECT (button[4]), "clicked",
201 GTK_SIGNAL_FUNC(button_window),
203 gtk_table_attach (GTK_TABLE (table), button[4], 2, 3, 0, 1,
204 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
206 gtk_signal_connect (GTK_OBJECT (button[5]), "clicked",
207 GTK_SIGNAL_FUNC(button_window),
209 gtk_table_attach (GTK_TABLE (table), button[5], 1, 2, 2, 3,
210 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
212 gtk_signal_connect (GTK_OBJECT (button[6]), "clicked",
213 GTK_SIGNAL_FUNC(button_window),
215 gtk_table_attach (GTK_TABLE (table), button[6], 1, 2, 0, 1,
216 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
218 gtk_signal_connect (GTK_OBJECT (button[7]), "clicked",
219 GTK_SIGNAL_FUNC(button_window),
221 gtk_table_attach (GTK_TABLE (table), button[7], 2, 3, 1, 2,
222 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
224 gtk_signal_connect (GTK_OBJECT (button[8]), "clicked",
225 GTK_SIGNAL_FUNC(button_window),
227 gtk_table_attach (GTK_TABLE (table), button[8], 0, 1, 1, 2,
228 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
230 separator = gtk_hseparator_new ();
231 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
233 box2 = gtk_vbox_new (FALSE, 10);
234 gtk_container_border_width (GTK_CONTAINER (box2), 10);
235 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
237 button[9] = gtk_button_new_with_label ("close");
238 gtk_signal_connect_object (GTK_OBJECT (button[9]), "clicked",
239 GTK_SIGNAL_FUNC(gtk_widget_destroy),
240 GTK_OBJECT (window));
241 gtk_box_pack_start (GTK_BOX (box2), button[9], TRUE, TRUE, 0);
242 GTK_WIDGET_SET_FLAGS (button[9], GTK_CAN_DEFAULT);
243 gtk_widget_grab_default (button[9]);
246 if (!GTK_WIDGET_VISIBLE (window))
247 gtk_widget_show_all (window);
249 gtk_widget_destroy (window);
257 create_toggle_buttons (void)
259 static GtkWidget *window = NULL;
263 GtkWidget *separator;
267 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
269 gtk_signal_connect (GTK_OBJECT (window), "destroy",
270 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
273 gtk_window_set_title (GTK_WINDOW (window), "GtkToggleButton");
274 gtk_container_border_width (GTK_CONTAINER (window), 0);
276 box1 = gtk_vbox_new (FALSE, 0);
277 gtk_container_add (GTK_CONTAINER (window), box1);
279 box2 = gtk_vbox_new (FALSE, 10);
280 gtk_container_border_width (GTK_CONTAINER (box2), 10);
281 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
283 button = gtk_toggle_button_new_with_label ("button1");
284 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
286 button = gtk_toggle_button_new_with_label ("button2");
287 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
289 button = gtk_toggle_button_new_with_label ("button3");
290 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
292 separator = gtk_hseparator_new ();
293 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
295 box2 = gtk_vbox_new (FALSE, 10);
296 gtk_container_border_width (GTK_CONTAINER (box2), 10);
297 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
299 button = gtk_button_new_with_label ("close");
300 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
301 GTK_SIGNAL_FUNC(gtk_widget_destroy),
302 GTK_OBJECT (window));
303 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
304 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
305 gtk_widget_grab_default (button);
308 if (!GTK_WIDGET_VISIBLE (window))
309 gtk_widget_show_all (window);
311 gtk_widget_destroy (window);
319 create_check_buttons (void)
321 static GtkWidget *window = NULL;
325 GtkWidget *separator;
329 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
331 gtk_signal_connect (GTK_OBJECT (window), "destroy",
332 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
335 gtk_window_set_title (GTK_WINDOW (window), "GtkCheckButton");
336 gtk_container_border_width (GTK_CONTAINER (window), 0);
338 box1 = gtk_vbox_new (FALSE, 0);
339 gtk_container_add (GTK_CONTAINER (window), box1);
341 box2 = gtk_vbox_new (FALSE, 10);
342 gtk_container_border_width (GTK_CONTAINER (box2), 10);
343 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
345 button = gtk_check_button_new_with_label ("button1");
346 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
348 button = gtk_check_button_new_with_label ("button2");
349 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
351 button = gtk_check_button_new_with_label ("button3");
352 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
354 separator = gtk_hseparator_new ();
355 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
357 box2 = gtk_vbox_new (FALSE, 10);
358 gtk_container_border_width (GTK_CONTAINER (box2), 10);
359 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
361 button = gtk_button_new_with_label ("close");
362 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
363 GTK_SIGNAL_FUNC(gtk_widget_destroy),
364 GTK_OBJECT (window));
365 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
366 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
367 gtk_widget_grab_default (button);
370 if (!GTK_WIDGET_VISIBLE (window))
371 gtk_widget_show_all (window);
373 gtk_widget_destroy (window);
381 create_radio_buttons (void)
383 static GtkWidget *window = NULL;
387 GtkWidget *separator;
391 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
393 gtk_signal_connect (GTK_OBJECT (window), "destroy",
394 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
397 gtk_window_set_title (GTK_WINDOW (window), "radio buttons");
398 gtk_container_border_width (GTK_CONTAINER (window), 0);
400 box1 = gtk_vbox_new (FALSE, 0);
401 gtk_container_add (GTK_CONTAINER (window), box1);
403 box2 = gtk_vbox_new (FALSE, 10);
404 gtk_container_border_width (GTK_CONTAINER (box2), 10);
405 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
407 button = gtk_radio_button_new_with_label (NULL, "button1");
408 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
410 button = gtk_radio_button_new_with_label (
411 gtk_radio_button_group (GTK_RADIO_BUTTON (button)),
413 gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (button), TRUE);
414 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
416 button = gtk_radio_button_new_with_label (
417 gtk_radio_button_group (GTK_RADIO_BUTTON (button)),
419 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
421 separator = gtk_hseparator_new ();
422 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
424 box2 = gtk_vbox_new (FALSE, 10);
425 gtk_container_border_width (GTK_CONTAINER (box2), 10);
426 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
428 button = gtk_button_new_with_label ("close");
429 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
430 GTK_SIGNAL_FUNC(gtk_widget_destroy),
431 GTK_OBJECT (window));
432 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
433 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
434 gtk_widget_grab_default (button);
437 if (!GTK_WIDGET_VISIBLE (window))
438 gtk_widget_show_all (window);
440 gtk_widget_destroy (window);
448 create_bbox (gint horizontal,
459 frame = gtk_frame_new (title);
462 bbox = gtk_hbutton_box_new ();
464 bbox = gtk_vbutton_box_new ();
466 gtk_container_border_width (GTK_CONTAINER (bbox), 5);
467 gtk_container_add (GTK_CONTAINER (frame), bbox);
469 gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), layout);
470 gtk_button_box_set_spacing (GTK_BUTTON_BOX (bbox), spacing);
471 gtk_button_box_set_child_size (GTK_BUTTON_BOX (bbox), child_w, child_h);
473 button = gtk_button_new_with_label ("OK");
474 gtk_container_add (GTK_CONTAINER (bbox), button);
476 button = gtk_button_new_with_label ("Cancel");
477 gtk_container_add (GTK_CONTAINER (bbox), button);
479 button = gtk_button_new_with_label ("Help");
480 gtk_container_add (GTK_CONTAINER (bbox), button);
486 create_button_box (void)
488 static GtkWidget* window = NULL;
489 GtkWidget *main_vbox;
492 GtkWidget *frame_horz;
493 GtkWidget *frame_vert;
497 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
498 gtk_window_set_title (GTK_WINDOW (window), "Button Boxes");
500 gtk_signal_connect (GTK_OBJECT (window), "destroy",
501 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
504 gtk_container_border_width (GTK_CONTAINER (window), 10);
506 main_vbox = gtk_vbox_new (FALSE, 0);
507 gtk_container_add (GTK_CONTAINER (window), main_vbox);
509 frame_horz = gtk_frame_new ("Horizontal Button Boxes");
510 gtk_box_pack_start (GTK_BOX (main_vbox), frame_horz, TRUE, TRUE, 10);
512 vbox = gtk_vbox_new (FALSE, 0);
513 gtk_container_border_width (GTK_CONTAINER (vbox), 10);
514 gtk_container_add (GTK_CONTAINER (frame_horz), vbox);
516 gtk_box_pack_start (GTK_BOX (vbox),
517 create_bbox (TRUE, "Spread", 40, 85, 20, GTK_BUTTONBOX_SPREAD),
520 gtk_box_pack_start (GTK_BOX (vbox),
521 create_bbox (TRUE, "Edge", 40, 85, 20, GTK_BUTTONBOX_EDGE),
524 gtk_box_pack_start (GTK_BOX (vbox),
525 create_bbox (TRUE, "Start", 40, 85, 20, GTK_BUTTONBOX_START),
528 gtk_box_pack_start (GTK_BOX (vbox),
529 create_bbox (TRUE, "End", 40, 85, 20, GTK_BUTTONBOX_END),
532 frame_vert = gtk_frame_new ("Vertical Button Boxes");
533 gtk_box_pack_start (GTK_BOX (main_vbox), frame_vert, TRUE, TRUE, 10);
535 hbox = gtk_hbox_new (FALSE, 0);
536 gtk_container_border_width (GTK_CONTAINER (hbox), 10);
537 gtk_container_add (GTK_CONTAINER (frame_vert), hbox);
539 gtk_box_pack_start (GTK_BOX (hbox),
540 create_bbox (FALSE, "Spread", 30, 85, 20, GTK_BUTTONBOX_SPREAD),
543 gtk_box_pack_start (GTK_BOX (hbox),
544 create_bbox (FALSE, "Edge", 30, 85, 20, GTK_BUTTONBOX_EDGE),
547 gtk_box_pack_start (GTK_BOX (hbox),
548 create_bbox (FALSE, "Start", 30, 85, 20, GTK_BUTTONBOX_START),
551 gtk_box_pack_start (GTK_BOX (hbox),
552 create_bbox (FALSE, "End", 30, 85, 20, GTK_BUTTONBOX_END),
556 if (!GTK_WIDGET_VISIBLE (window))
557 gtk_widget_show_all (window);
559 gtk_widget_destroy (window);
567 new_pixmap (char *filename,
569 GdkColor *background)
575 pixmap = gdk_pixmap_create_from_xpm (window, &mask,
578 wpixmap = gtk_pixmap_new (pixmap, mask);
584 set_toolbar_horizontal (GtkWidget *widget,
587 gtk_toolbar_set_orientation (GTK_TOOLBAR (data), GTK_ORIENTATION_HORIZONTAL);
591 set_toolbar_vertical (GtkWidget *widget,
594 gtk_toolbar_set_orientation (GTK_TOOLBAR (data), GTK_ORIENTATION_VERTICAL);
598 set_toolbar_icons (GtkWidget *widget,
601 gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_ICONS);
605 set_toolbar_text (GtkWidget *widget,
608 gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_TEXT);
612 set_toolbar_both (GtkWidget *widget,
615 gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_BOTH);
619 set_toolbar_small_space (GtkWidget *widget,
622 gtk_toolbar_set_space_size (GTK_TOOLBAR (data), 5);
626 set_toolbar_big_space (GtkWidget *widget,
629 gtk_toolbar_set_space_size (GTK_TOOLBAR (data), 10);
633 set_toolbar_enable (GtkWidget *widget,
636 gtk_toolbar_set_tooltips (GTK_TOOLBAR (data), TRUE);
640 set_toolbar_disable (GtkWidget *widget,
643 gtk_toolbar_set_tooltips (GTK_TOOLBAR (data), FALSE);
647 set_toolbar_borders (GtkWidget *widget,
650 gtk_toolbar_set_button_relief (GTK_TOOLBAR (data), GTK_RELIEF_NORMAL);
654 set_toolbar_borderless (GtkWidget *widget,
657 gtk_toolbar_set_button_relief (GTK_TOOLBAR (data), GTK_RELIEF_NONE);
661 create_toolbar (void)
663 static GtkWidget *window = NULL;
669 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
670 gtk_window_set_title (GTK_WINDOW (window), "Toolbar test");
671 gtk_window_set_policy (GTK_WINDOW (window), FALSE, TRUE, TRUE);
673 gtk_signal_connect (GTK_OBJECT (window), "destroy",
674 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
677 gtk_container_border_width (GTK_CONTAINER (window), 0);
678 gtk_widget_realize (window);
680 toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_BOTH);
681 gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NONE);
683 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
684 "Horizontal", "Horizontal toolbar layout", "Toolbar/Horizontal",
685 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
686 (GtkSignalFunc) set_toolbar_horizontal, toolbar);
687 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
688 "Vertical", "Vertical toolbar layout", "Toolbar/Vertical",
689 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
690 (GtkSignalFunc) set_toolbar_vertical, toolbar);
692 gtk_toolbar_append_space (GTK_TOOLBAR(toolbar));
694 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
695 "Icons", "Only show toolbar icons", "Toolbar/IconsOnly",
696 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
697 (GtkSignalFunc) set_toolbar_icons, toolbar);
698 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
699 "Text", "Only show toolbar text", "Toolbar/TextOnly",
700 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
701 (GtkSignalFunc) set_toolbar_text, toolbar);
702 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
703 "Both", "Show toolbar icons and text", "Toolbar/Both",
704 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
705 (GtkSignalFunc) set_toolbar_both, toolbar);
707 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
709 entry = gtk_entry_new ();
711 gtk_toolbar_append_widget (GTK_TOOLBAR (toolbar), entry, "This is an unusable GtkEntry ;)", "Hey don't click me!!!");
713 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
715 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
716 "Small", "Use small spaces", "Toolbar/Small",
717 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
718 (GtkSignalFunc) set_toolbar_small_space, toolbar);
719 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
720 "Big", "Use big spaces", "Toolbar/Big",
721 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
722 (GtkSignalFunc) set_toolbar_big_space, toolbar);
724 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
726 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
727 "Enable", "Enable tooltips", NULL,
728 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
729 (GtkSignalFunc) set_toolbar_enable, toolbar);
730 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
731 "Disable", "Disable tooltips", NULL,
732 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
733 (GtkSignalFunc) set_toolbar_disable, toolbar);
735 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
737 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
738 "Borders", "Show Borders", NULL,
739 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
740 (GtkSignalFunc) set_toolbar_borders, toolbar);
741 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
742 "Borderless", "Hide Borders", NULL,
743 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
744 (GtkSignalFunc) set_toolbar_borderless, toolbar);
746 gtk_container_add (GTK_CONTAINER (window), toolbar);
749 if (!GTK_WIDGET_VISIBLE (window))
750 gtk_widget_show_all (window);
752 gtk_widget_destroy (window);
756 make_toolbar (GtkWidget *window)
760 if (!GTK_WIDGET_REALIZED (window))
761 gtk_widget_realize (window);
763 toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_BOTH);
764 gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NONE);
766 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
767 "Horizontal", "Horizontal toolbar layout", NULL,
768 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
769 (GtkSignalFunc) set_toolbar_horizontal, toolbar);
770 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
771 "Vertical", "Vertical toolbar layout", NULL,
772 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
773 (GtkSignalFunc) set_toolbar_vertical, toolbar);
775 gtk_toolbar_append_space (GTK_TOOLBAR(toolbar));
777 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
778 "Icons", "Only show toolbar icons", NULL,
779 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
780 (GtkSignalFunc) set_toolbar_icons, toolbar);
781 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
782 "Text", "Only show toolbar text", NULL,
783 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
784 (GtkSignalFunc) set_toolbar_text, toolbar);
785 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
786 "Both", "Show toolbar icons and text", NULL,
787 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
788 (GtkSignalFunc) set_toolbar_both, toolbar);
790 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
792 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
793 "Small", "Use small spaces", NULL,
794 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
795 (GtkSignalFunc) set_toolbar_small_space, toolbar);
796 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
797 "Big", "Use big spaces", "Toolbar/Big",
798 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
799 (GtkSignalFunc) set_toolbar_big_space, toolbar);
801 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
803 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
804 "Enable", "Enable tooltips", NULL,
805 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
806 (GtkSignalFunc) set_toolbar_enable, toolbar);
807 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
808 "Disable", "Disable tooltips", NULL,
809 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
810 (GtkSignalFunc) set_toolbar_disable, toolbar);
812 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
814 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
815 "Borders", "Show Borders", NULL,
816 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
817 (GtkSignalFunc) set_toolbar_borders, toolbar);
818 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
819 "Borderless", "Hide Borders", NULL,
820 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
821 (GtkSignalFunc) set_toolbar_borderless, toolbar);
830 static guint statusbar_counter = 1;
833 statusbar_push (GtkWidget *button,
834 GtkStatusbar *statusbar)
838 sprintf (text, "something %d", statusbar_counter++);
840 gtk_statusbar_push (statusbar, 1, text);
844 statusbar_pop (GtkWidget *button,
845 GtkStatusbar *statusbar)
847 gtk_statusbar_pop (statusbar, 1);
851 statusbar_steal (GtkWidget *button,
852 GtkStatusbar *statusbar)
854 gtk_statusbar_remove (statusbar, 1, 4);
858 statusbar_popped (GtkStatusbar *statusbar,
862 if (!statusbar->messages)
863 statusbar_counter = 1;
867 statusbar_contexts (GtkStatusbar *statusbar)
871 string = "any context";
872 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
874 gtk_statusbar_get_context_id (statusbar, string));
876 string = "idle messages";
877 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
879 gtk_statusbar_get_context_id (statusbar, string));
881 string = "some text";
882 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
884 gtk_statusbar_get_context_id (statusbar, string));
886 string = "hit the mouse";
887 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
889 gtk_statusbar_get_context_id (statusbar, string));
891 string = "hit the mouse2";
892 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
894 gtk_statusbar_get_context_id (statusbar, string));
898 statusbar_dump_stack (GtkStatusbar *statusbar)
902 for (list = statusbar->messages; list; list = list->next)
904 GtkStatusbarMsg *msg;
907 g_print ("context_id: %d, message_id: %d, status_text: \"%s\"\n",
915 create_statusbar (void)
917 static GtkWidget *window = NULL;
921 GtkWidget *separator;
922 GtkWidget *statusbar;
926 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
928 gtk_signal_connect (GTK_OBJECT (window), "destroy",
929 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
932 gtk_window_set_title (GTK_WINDOW (window), "statusbar");
933 gtk_container_border_width (GTK_CONTAINER (window), 0);
935 box1 = gtk_vbox_new (FALSE, 0);
936 gtk_container_add (GTK_CONTAINER (window), box1);
938 box2 = gtk_vbox_new (FALSE, 10);
939 gtk_container_border_width (GTK_CONTAINER (box2), 10);
940 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
942 statusbar = gtk_statusbar_new ();
943 gtk_box_pack_end (GTK_BOX (box1), statusbar, TRUE, TRUE, 0);
944 gtk_signal_connect (GTK_OBJECT (statusbar),
946 GTK_SIGNAL_FUNC (statusbar_popped),
949 button = gtk_widget_new (gtk_button_get_type (),
950 "label", "push something",
953 "signal::clicked", statusbar_push, statusbar,
956 button = gtk_widget_new (gtk_button_get_type (),
960 "signal_after::clicked", statusbar_pop, statusbar,
963 button = gtk_widget_new (gtk_button_get_type (),
967 "signal_after::clicked", statusbar_steal, statusbar,
970 button = gtk_widget_new (gtk_button_get_type (),
971 "label", "dump stack",
974 "object_signal::clicked", statusbar_dump_stack, statusbar,
977 button = gtk_widget_new (gtk_button_get_type (),
978 "label", "test contexts",
981 "object_signal_after::clicked", statusbar_contexts, statusbar,
984 separator = gtk_hseparator_new ();
985 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
987 box2 = gtk_vbox_new (FALSE, 10);
988 gtk_container_border_width (GTK_CONTAINER (box2), 10);
989 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
991 button = gtk_button_new_with_label ("close");
992 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
993 GTK_SIGNAL_FUNC(gtk_widget_destroy),
994 GTK_OBJECT (window));
995 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
996 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
997 gtk_widget_grab_default (button);
1000 if (!GTK_WIDGET_VISIBLE (window))
1001 gtk_widget_show_all (window);
1003 gtk_widget_destroy (window);
1011 cb_tree_destroy_event(GtkWidget* w)
1013 sTreeButtons* tree_buttons;
1015 /* free buttons structure associate at this tree */
1016 tree_buttons = gtk_object_get_user_data(GTK_OBJECT(w));
1021 cb_add_new_item(GtkWidget* w, GtkTree* tree)
1023 sTreeButtons* tree_buttons;
1024 GList* selected_list;
1025 GtkWidget* selected_item;
1027 GtkWidget* item_new;
1030 tree_buttons = gtk_object_get_user_data(GTK_OBJECT(tree));
1032 selected_list = GTK_TREE_SELECTION(tree);
1034 if(selected_list == NULL)
1036 /* there is no item in tree */
1037 subtree = GTK_WIDGET(tree);
1041 /* list can have only one element */
1042 selected_item = GTK_WIDGET(selected_list->data);
1044 subtree = GTK_TREE_ITEM_SUBTREE(selected_item);
1048 /* current selected item have not subtree ... create it */
1049 subtree = gtk_tree_new();
1050 gtk_tree_item_set_subtree(GTK_TREE_ITEM(selected_item),
1055 /* at this point, we know which subtree will be used to add new item */
1056 /* create a new item */
1057 sprintf(buffer, "item add %d", tree_buttons->nb_item_add);
1058 item_new = gtk_tree_item_new_with_label(buffer);
1059 gtk_tree_append(GTK_TREE(subtree), item_new);
1060 gtk_widget_show(item_new);
1062 tree_buttons->nb_item_add++;
1066 cb_remove_item(GtkWidget*w, GtkTree* tree)
1068 GList* selected_list;
1071 selected_list = GTK_TREE_SELECTION(tree);
1075 while (selected_list)
1077 clear_list = g_list_prepend (clear_list, selected_list->data);
1078 selected_list = selected_list->next;
1081 clear_list = g_list_reverse (clear_list);
1082 gtk_tree_remove_items(tree, clear_list);
1084 g_list_free (clear_list);
1088 cb_remove_subtree(GtkWidget*w, GtkTree* tree)
1090 GList* selected_list;
1093 selected_list = GTK_TREE_SELECTION(tree);
1097 item = GTK_TREE_ITEM (selected_list->data);
1099 gtk_tree_item_remove_subtree (item);
1104 cb_tree_changed(GtkTree* tree)
1106 sTreeButtons* tree_buttons;
1107 GList* selected_list;
1110 tree_buttons = gtk_object_get_user_data(GTK_OBJECT(tree));
1112 selected_list = GTK_TREE_SELECTION(tree);
1113 nb_selected = g_list_length(selected_list);
1115 if(nb_selected == 0)
1117 if(tree->children == NULL)
1118 gtk_widget_set_sensitive(tree_buttons->add_button, TRUE);
1120 gtk_widget_set_sensitive(tree_buttons->add_button, FALSE);
1121 gtk_widget_set_sensitive(tree_buttons->remove_button, FALSE);
1122 gtk_widget_set_sensitive(tree_buttons->subtree_button, FALSE);
1126 gtk_widget_set_sensitive(tree_buttons->remove_button, TRUE);
1127 gtk_widget_set_sensitive(tree_buttons->add_button, (nb_selected == 1));
1128 gtk_widget_set_sensitive(tree_buttons->subtree_button, (nb_selected == 1));
1133 create_subtree(GtkWidget* item, guint level, guint nb_item_max, guint recursion_level_max)
1135 GtkWidget* item_subtree;
1136 GtkWidget* item_new;
1141 if(level == recursion_level_max) return;
1145 /* query with no root item */
1147 item_subtree = item;
1152 /* query with no root item */
1153 /* create subtree and associate it with current item */
1154 item_subtree = gtk_tree_new();
1158 for(nb_item = 0; nb_item < nb_item_max; nb_item++)
1160 sprintf(buffer, "item %d-%d", level, nb_item);
1161 item_new = gtk_tree_item_new_with_label(buffer);
1162 gtk_tree_append(GTK_TREE(item_subtree), item_new);
1163 create_subtree(item_new, level+1, nb_item_max, recursion_level_max);
1164 gtk_widget_show(item_new);
1168 gtk_tree_item_set_subtree(GTK_TREE_ITEM(item), item_subtree);
1172 create_tree_sample(guint selection_mode,
1173 guint draw_line, guint view_line, guint no_root_item,
1174 guint nb_item_max, guint recursion_level_max)
1179 GtkWidget* separator;
1181 GtkWidget* scrolled_win;
1182 GtkWidget* root_tree;
1183 GtkWidget* root_item;
1184 sTreeButtons* tree_buttons;
1186 /* create tree buttons struct */
1187 if((tree_buttons = g_malloc(sizeof(sTreeButtons))) == NULL)
1189 g_error("can't allocate memory for tree structure !\n");
1192 tree_buttons->nb_item_add = 0;
1194 /* create top level window */
1195 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
1196 gtk_window_set_title(GTK_WINDOW(window), "Tree Sample");
1197 gtk_signal_connect(GTK_OBJECT(window), "destroy",
1198 (GtkSignalFunc) cb_tree_destroy_event, NULL);
1199 gtk_object_set_user_data(GTK_OBJECT(window), tree_buttons);
1201 box1 = gtk_vbox_new(FALSE, 0);
1202 gtk_container_add(GTK_CONTAINER(window), box1);
1203 gtk_widget_show(box1);
1205 /* create tree box */
1206 box2 = gtk_vbox_new(FALSE, 0);
1207 gtk_box_pack_start(GTK_BOX(box1), box2, TRUE, TRUE, 0);
1208 gtk_container_border_width(GTK_CONTAINER(box2), 5);
1209 gtk_widget_show(box2);
1211 /* create scrolled window */
1212 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
1213 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
1214 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1215 gtk_box_pack_start (GTK_BOX (box2), scrolled_win, TRUE, TRUE, 0);
1216 gtk_widget_set_usize (scrolled_win, 200, 200);
1217 gtk_widget_show (scrolled_win);
1219 /* create root tree widget */
1220 root_tree = gtk_tree_new();
1221 gtk_signal_connect(GTK_OBJECT(root_tree), "selection_changed",
1222 (GtkSignalFunc)cb_tree_changed,
1224 gtk_object_set_user_data(GTK_OBJECT(root_tree), tree_buttons);
1225 gtk_container_add(GTK_CONTAINER(scrolled_win), root_tree);
1226 gtk_tree_set_selection_mode(GTK_TREE(root_tree), selection_mode);
1227 gtk_tree_set_view_lines(GTK_TREE(root_tree), draw_line);
1228 gtk_tree_set_view_mode(GTK_TREE(root_tree), !view_line);
1229 gtk_widget_show(root_tree);
1233 /* set root tree to subtree function with root item variable */
1234 root_item = GTK_WIDGET(root_tree);
1238 /* create root tree item widget */
1239 root_item = gtk_tree_item_new_with_label("root item");
1240 gtk_tree_append(GTK_TREE(root_tree), root_item);
1241 gtk_widget_show(root_item);
1243 create_subtree(root_item, -no_root_item, nb_item_max, recursion_level_max);
1245 box2 = gtk_vbox_new(FALSE, 0);
1246 gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, FALSE, 0);
1247 gtk_container_border_width(GTK_CONTAINER(box2), 5);
1248 gtk_widget_show(box2);
1250 button = gtk_button_new_with_label("Add Item");
1251 gtk_widget_set_sensitive(button, FALSE);
1252 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1253 (GtkSignalFunc) cb_add_new_item,
1254 (gpointer)root_tree);
1255 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1256 gtk_widget_show(button);
1257 tree_buttons->add_button = button;
1259 button = gtk_button_new_with_label("Remove Item(s)");
1260 gtk_widget_set_sensitive(button, FALSE);
1261 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1262 (GtkSignalFunc) cb_remove_item,
1263 (gpointer)root_tree);
1264 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1265 gtk_widget_show(button);
1266 tree_buttons->remove_button = button;
1268 button = gtk_button_new_with_label("Remove Subtree");
1269 gtk_widget_set_sensitive(button, FALSE);
1270 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1271 (GtkSignalFunc) cb_remove_subtree,
1272 (gpointer)root_tree);
1273 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1274 gtk_widget_show(button);
1275 tree_buttons->subtree_button = button;
1277 /* create separator */
1278 separator = gtk_hseparator_new();
1279 gtk_box_pack_start(GTK_BOX(box1), separator, FALSE, FALSE, 0);
1280 gtk_widget_show(separator);
1282 /* create button box */
1283 box2 = gtk_vbox_new(FALSE, 0);
1284 gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, FALSE, 0);
1285 gtk_container_border_width(GTK_CONTAINER(box2), 5);
1286 gtk_widget_show(box2);
1288 button = gtk_button_new_with_label("Close");
1289 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1290 gtk_signal_connect_object(GTK_OBJECT (button), "clicked",
1291 (GtkSignalFunc) gtk_widget_destroy,
1292 GTK_OBJECT(window));
1293 gtk_widget_show(button);
1295 gtk_widget_show(window);
1299 cb_create_tree(GtkWidget* w)
1301 guint selection_mode = GTK_SELECTION_SINGLE;
1306 guint recursion_level;
1308 /* get selection mode choice */
1309 if(GTK_TOGGLE_BUTTON(sTreeSampleSelection.single_button)->active)
1310 selection_mode = GTK_SELECTION_SINGLE;
1312 if(GTK_TOGGLE_BUTTON(sTreeSampleSelection.browse_button)->active)
1313 selection_mode = GTK_SELECTION_BROWSE;
1315 selection_mode = GTK_SELECTION_MULTIPLE;
1317 /* get options choice */
1318 draw_line = GTK_TOGGLE_BUTTON(sTreeSampleSelection.draw_line_button)->active;
1319 view_line = GTK_TOGGLE_BUTTON(sTreeSampleSelection.view_line_button)->active;
1320 no_root_item = GTK_TOGGLE_BUTTON(sTreeSampleSelection.no_root_item_button)->active;
1323 nb_item = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(sTreeSampleSelection.nb_item_spinner));
1324 recursion_level = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(sTreeSampleSelection.recursion_spinner));
1326 if (pow (nb_item, recursion_level) > 10000)
1328 g_print ("%g total items? That will take a very long time. Try less\n",
1329 pow (nb_item, recursion_level));
1333 create_tree_sample(selection_mode, draw_line, view_line, no_root_item, nb_item, recursion_level);
1337 create_tree_mode_window(void)
1339 static GtkWidget* window;
1347 GtkWidget* separator;
1354 /* create toplevel window */
1355 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
1356 gtk_window_set_title(GTK_WINDOW(window), "Set Tree Parameters");
1357 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1358 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
1360 box1 = gtk_vbox_new(FALSE, 0);
1361 gtk_container_add(GTK_CONTAINER(window), box1);
1363 /* create upper box - selection box */
1364 box2 = gtk_vbox_new(FALSE, 5);
1365 gtk_box_pack_start(GTK_BOX(box1), box2, TRUE, TRUE, 0);
1366 gtk_container_border_width(GTK_CONTAINER(box2), 5);
1368 box3 = gtk_hbox_new(FALSE, 5);
1369 gtk_box_pack_start(GTK_BOX(box2), box3, TRUE, TRUE, 0);
1371 /* create selection mode frame */
1372 frame = gtk_frame_new("Selection Mode");
1373 gtk_box_pack_start(GTK_BOX(box3), frame, TRUE, TRUE, 0);
1375 box4 = gtk_vbox_new(FALSE, 0);
1376 gtk_container_add(GTK_CONTAINER(frame), box4);
1377 gtk_container_border_width(GTK_CONTAINER(box4), 5);
1379 /* create radio button */
1380 button = gtk_radio_button_new_with_label(NULL, "SINGLE");
1381 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1382 sTreeSampleSelection.single_button = button;
1384 button = gtk_radio_button_new_with_label(gtk_radio_button_group (GTK_RADIO_BUTTON (button)),
1386 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1387 sTreeSampleSelection.browse_button = button;
1389 button = gtk_radio_button_new_with_label(gtk_radio_button_group (GTK_RADIO_BUTTON (button)),
1391 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1392 sTreeSampleSelection.multiple_button = button;
1394 sTreeSampleSelection.selection_mode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (button));
1396 /* create option mode frame */
1397 frame = gtk_frame_new("Options");
1398 gtk_box_pack_start(GTK_BOX(box3), frame, TRUE, TRUE, 0);
1400 box4 = gtk_vbox_new(FALSE, 0);
1401 gtk_container_add(GTK_CONTAINER(frame), box4);
1402 gtk_container_border_width(GTK_CONTAINER(box4), 5);
1404 /* create check button */
1405 button = gtk_check_button_new_with_label("Draw line");
1406 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1407 gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(button), TRUE);
1408 sTreeSampleSelection.draw_line_button = button;
1410 button = gtk_check_button_new_with_label("View Line mode");
1411 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1412 gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(button), TRUE);
1413 sTreeSampleSelection.view_line_button = button;
1415 button = gtk_check_button_new_with_label("Without Root item");
1416 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1417 sTreeSampleSelection.no_root_item_button = button;
1419 /* create recursion parameter */
1420 frame = gtk_frame_new("Size Parameters");
1421 gtk_box_pack_start(GTK_BOX(box2), frame, TRUE, TRUE, 0);
1423 box4 = gtk_hbox_new(FALSE, 5);
1424 gtk_container_add(GTK_CONTAINER(frame), box4);
1425 gtk_container_border_width(GTK_CONTAINER(box4), 5);
1427 /* create number of item spin button */
1428 box5 = gtk_hbox_new(FALSE, 5);
1429 gtk_box_pack_start(GTK_BOX(box4), box5, FALSE, FALSE, 0);
1431 label = gtk_label_new("Number of items : ");
1432 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
1433 gtk_box_pack_start (GTK_BOX (box5), label, FALSE, TRUE, 0);
1435 adj = (GtkAdjustment *) gtk_adjustment_new ((gfloat)DEFAULT_NUMBER_OF_ITEM, 1.0, 255.0, 1.0,
1437 spinner = gtk_spin_button_new (adj, 0, 0);
1438 gtk_box_pack_start (GTK_BOX (box5), spinner, FALSE, TRUE, 0);
1439 sTreeSampleSelection.nb_item_spinner = spinner;
1441 /* create recursion level spin button */
1442 box5 = gtk_hbox_new(FALSE, 5);
1443 gtk_box_pack_start(GTK_BOX(box4), box5, FALSE, FALSE, 0);
1445 label = gtk_label_new("Depth : ");
1446 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
1447 gtk_box_pack_start (GTK_BOX (box5), label, FALSE, TRUE, 0);
1449 adj = (GtkAdjustment *) gtk_adjustment_new ((gfloat)DEFAULT_RECURSION_LEVEL, 0.0, 255.0, 1.0,
1451 spinner = gtk_spin_button_new (adj, 0, 0);
1452 gtk_box_pack_start (GTK_BOX (box5), spinner, FALSE, TRUE, 0);
1453 sTreeSampleSelection.recursion_spinner = spinner;
1455 /* create horizontal separator */
1456 separator = gtk_hseparator_new();
1457 gtk_box_pack_start(GTK_BOX(box1), separator, FALSE, FALSE, 0);
1459 /* create bottom button box */
1460 box2 = gtk_hbox_new(TRUE, 10);
1461 gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, FALSE, 0);
1462 gtk_container_border_width(GTK_CONTAINER(box2), 5);
1464 button = gtk_button_new_with_label("Create Tree");
1465 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1466 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1467 (GtkSignalFunc) cb_create_tree, NULL);
1469 button = gtk_button_new_with_label("Close");
1470 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1471 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
1472 GTK_SIGNAL_FUNC(gtk_widget_destroy),
1473 GTK_OBJECT (window));
1475 if (!GTK_WIDGET_VISIBLE (window))
1476 gtk_widget_show_all (window);
1478 gtk_widget_destroy (window);
1486 handle_box_child_signal (GtkHandleBox *hb,
1488 const gchar *action)
1490 printf ("%s: child <%s> %sed\n",
1491 gtk_type_name (GTK_OBJECT_TYPE (hb)),
1492 gtk_type_name (GTK_OBJECT_TYPE (child)),
1497 create_handle_box (void)
1499 static GtkWidget* window = NULL;
1500 GtkWidget *handle_box;
1501 GtkWidget *handle_box2;
1506 GtkWidget *separator;
1510 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1511 gtk_window_set_title (GTK_WINDOW (window),
1513 gtk_window_set_policy (GTK_WINDOW (window),
1518 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1519 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
1522 gtk_container_border_width (GTK_CONTAINER (window), 20);
1524 vbox = gtk_vbox_new (FALSE, 0);
1525 gtk_container_add (GTK_CONTAINER (window), vbox);
1526 gtk_widget_show (vbox);
1528 label = gtk_label_new ("Above");
1529 gtk_container_add (GTK_CONTAINER (vbox), label);
1530 gtk_widget_show (label);
1532 separator = gtk_hseparator_new ();
1533 gtk_container_add (GTK_CONTAINER (vbox), separator);
1534 gtk_widget_show (separator);
1536 hbox = gtk_hbox_new (FALSE, 10);
1537 gtk_container_add (GTK_CONTAINER (vbox), hbox);
1538 gtk_widget_show (hbox);
1540 separator = gtk_hseparator_new ();
1541 gtk_container_add (GTK_CONTAINER (vbox), separator);
1542 gtk_widget_show (separator);
1544 label = gtk_label_new ("Below");
1545 gtk_container_add (GTK_CONTAINER (vbox), label);
1546 gtk_widget_show (label);
1548 handle_box = gtk_handle_box_new ();
1549 gtk_container_add (GTK_CONTAINER (hbox), handle_box);
1550 gtk_signal_connect (GTK_OBJECT (handle_box),
1552 GTK_SIGNAL_FUNC (handle_box_child_signal),
1554 gtk_signal_connect (GTK_OBJECT (handle_box),
1556 GTK_SIGNAL_FUNC (handle_box_child_signal),
1558 gtk_widget_show (handle_box);
1560 toolbar = make_toolbar (window);
1561 gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NORMAL);
1562 gtk_container_add (GTK_CONTAINER (handle_box), toolbar);
1563 gtk_widget_show (toolbar);
1565 handle_box = gtk_handle_box_new ();
1566 gtk_container_add (GTK_CONTAINER (hbox), handle_box);
1567 gtk_signal_connect (GTK_OBJECT (handle_box),
1569 GTK_SIGNAL_FUNC (handle_box_child_signal),
1571 gtk_signal_connect (GTK_OBJECT (handle_box),
1573 GTK_SIGNAL_FUNC (handle_box_child_signal),
1575 gtk_widget_show (handle_box);
1577 handle_box2 = gtk_handle_box_new ();
1578 gtk_container_add (GTK_CONTAINER (handle_box), handle_box2);
1579 gtk_signal_connect (GTK_OBJECT (handle_box2),
1581 GTK_SIGNAL_FUNC (handle_box_child_signal),
1583 gtk_signal_connect (GTK_OBJECT (handle_box2),
1585 GTK_SIGNAL_FUNC (handle_box_child_signal),
1587 gtk_widget_show (handle_box2);
1589 label = gtk_label_new ("Fooo!");
1590 gtk_container_add (GTK_CONTAINER (handle_box2), label);
1591 gtk_widget_show (label);
1594 if (!GTK_WIDGET_VISIBLE (window))
1595 gtk_widget_show (window);
1597 gtk_widget_destroy (window);
1605 reparent_label (GtkWidget *widget,
1606 GtkWidget *new_parent)
1610 label = gtk_object_get_user_data (GTK_OBJECT (widget));
1612 gtk_widget_reparent (label, new_parent);
1616 set_parent_signal (GtkWidget *child,
1617 GtkWidget *old_parent,
1620 g_print ("set_parent for \"%s\": new parent: \"%s\", old parent: \"%s\", data: %d\n",
1621 gtk_type_name (GTK_OBJECT_TYPE (child)),
1622 child->parent ? gtk_type_name (GTK_OBJECT_TYPE (child->parent)) : "NULL",
1623 old_parent ? gtk_type_name (GTK_OBJECT_TYPE (old_parent)) : "NULL",
1624 GPOINTER_TO_INT (func_data));
1628 create_reparent (void)
1630 static GtkWidget *window = NULL;
1637 GtkWidget *separator;
1641 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1643 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1644 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
1647 gtk_window_set_title (GTK_WINDOW (window), "reparent");
1648 gtk_container_border_width (GTK_CONTAINER (window), 0);
1650 box1 = gtk_vbox_new (FALSE, 0);
1651 gtk_container_add (GTK_CONTAINER (window), box1);
1653 box2 = gtk_hbox_new (FALSE, 5);
1654 gtk_container_border_width (GTK_CONTAINER (box2), 10);
1655 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
1657 label = gtk_label_new ("Hello World");
1659 frame = gtk_frame_new ("Frame 1");
1660 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
1662 box3 = gtk_vbox_new (FALSE, 5);
1663 gtk_container_border_width (GTK_CONTAINER (box3), 5);
1664 gtk_container_add (GTK_CONTAINER (frame), box3);
1666 button = gtk_button_new_with_label ("switch");
1667 gtk_signal_connect (GTK_OBJECT (button), "clicked",
1668 GTK_SIGNAL_FUNC(reparent_label),
1670 gtk_object_set_user_data (GTK_OBJECT (button), label);
1671 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
1673 gtk_box_pack_start (GTK_BOX (box3), label, FALSE, TRUE, 0);
1674 gtk_signal_connect (GTK_OBJECT (label),
1676 GTK_SIGNAL_FUNC (set_parent_signal),
1677 GINT_TO_POINTER (42));
1679 frame = gtk_frame_new ("Frame 2");
1680 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
1682 box3 = gtk_vbox_new (FALSE, 5);
1683 gtk_container_border_width (GTK_CONTAINER (box3), 5);
1684 gtk_container_add (GTK_CONTAINER (frame), box3);
1686 button = gtk_button_new_with_label ("switch");
1687 gtk_signal_connect (GTK_OBJECT (button), "clicked",
1688 GTK_SIGNAL_FUNC(reparent_label),
1690 gtk_object_set_user_data (GTK_OBJECT (button), label);
1691 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
1693 separator = gtk_hseparator_new ();
1694 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
1696 box2 = gtk_vbox_new (FALSE, 10);
1697 gtk_container_border_width (GTK_CONTAINER (box2), 10);
1698 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
1700 button = gtk_button_new_with_label ("close");
1701 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
1702 GTK_SIGNAL_FUNC(gtk_widget_destroy),
1703 GTK_OBJECT (window));
1704 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
1705 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
1706 gtk_widget_grab_default (button);
1709 if (!GTK_WIDGET_VISIBLE (window))
1710 gtk_widget_show_all (window);
1712 gtk_widget_destroy (window);
1718 gint upositionx = 0;
1719 gint upositiony = 0;
1722 uposition_configure (GtkWidget *window)
1728 lx = gtk_object_get_data (GTK_OBJECT (window), "x");
1729 ly = gtk_object_get_data (GTK_OBJECT (window), "y");
1731 gdk_window_get_root_origin (window->window, &upositionx, &upositiony);
1732 sprintf (buffer, "%d", upositionx);
1733 gtk_label_set (lx, buffer);
1734 sprintf (buffer, "%d", upositiony);
1735 gtk_label_set (ly, buffer);
1741 create_saved_position (void)
1743 static GtkWidget *window = NULL;
1748 GtkWidget *main_vbox;
1756 window = gtk_widget_new (GTK_TYPE_WINDOW,
1757 "type", GTK_WINDOW_TOPLEVEL,
1758 "signal::configure_event", uposition_configure, NULL,
1761 "title", "Saved Position",
1764 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1765 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
1768 main_vbox = gtk_vbox_new (FALSE, 5);
1769 gtk_container_border_width (GTK_CONTAINER (main_vbox), 0);
1770 gtk_container_add (GTK_CONTAINER (window), main_vbox);
1773 gtk_widget_new (gtk_vbox_get_type (),
1774 "GtkBox::homogeneous", FALSE,
1775 "GtkBox::spacing", 5,
1776 "GtkContainer::border_width", 10,
1777 "GtkWidget::parent", main_vbox,
1778 "GtkWidget::visible", TRUE,
1781 hbox = gtk_hbox_new (FALSE, 0);
1782 gtk_container_border_width (GTK_CONTAINER (hbox), 5);
1783 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
1785 label = gtk_label_new ("X Origin : ");
1786 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
1787 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
1789 x_label = gtk_label_new ("");
1790 gtk_box_pack_start (GTK_BOX (hbox), x_label, TRUE, TRUE, 0);
1791 gtk_object_set_data (GTK_OBJECT (window), "x", x_label);
1793 hbox = gtk_hbox_new (FALSE, 0);
1794 gtk_container_border_width (GTK_CONTAINER (hbox), 5);
1795 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
1797 label = gtk_label_new ("Y Origin : ");
1798 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
1799 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
1801 y_label = gtk_label_new ("");
1802 gtk_box_pack_start (GTK_BOX (hbox), y_label, TRUE, TRUE, 0);
1803 gtk_object_set_data (GTK_OBJECT (window), "y", y_label);
1806 gtk_widget_new (gtk_hseparator_get_type (),
1807 "GtkWidget::visible", TRUE,
1809 gtk_box_pack_start (GTK_BOX (main_vbox), any, FALSE, TRUE, 0);
1811 hbox = gtk_hbox_new (FALSE, 0);
1812 gtk_container_border_width (GTK_CONTAINER (hbox), 10);
1813 gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
1815 button = gtk_button_new_with_label ("Close");
1816 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
1817 GTK_SIGNAL_FUNC (gtk_widget_destroy),
1818 GTK_OBJECT (window));
1819 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
1820 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
1821 gtk_widget_grab_default (button);
1823 gtk_widget_show_all (window);
1826 gtk_widget_destroy (window);
1834 create_pixmap (void)
1836 static GtkWidget *window = NULL;
1842 GtkWidget *separator;
1843 GtkWidget *pixmapwid;
1850 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1852 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1853 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
1856 gtk_window_set_title (GTK_WINDOW (window), "GtkPixmap");
1857 gtk_container_border_width (GTK_CONTAINER (window), 0);
1858 gtk_widget_realize(window);
1860 box1 = gtk_vbox_new (FALSE, 0);
1861 gtk_container_add (GTK_CONTAINER (window), box1);
1863 box2 = gtk_vbox_new (FALSE, 10);
1864 gtk_container_border_width (GTK_CONTAINER (box2), 10);
1865 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
1867 button = gtk_button_new ();
1868 gtk_box_pack_start (GTK_BOX (box2), button, FALSE, FALSE, 0);
1870 style = gtk_widget_get_style(button);
1872 pixmap = gdk_pixmap_create_from_xpm (window->window, &mask,
1873 &style->bg[GTK_STATE_NORMAL],
1875 pixmapwid = gtk_pixmap_new (pixmap, mask);
1876 gdk_pixmap_unref (pixmap);
1877 gdk_pixmap_unref (mask);
1879 label = gtk_label_new ("Pixmap\ntest");
1880 box3 = gtk_hbox_new (FALSE, 0);
1881 gtk_container_border_width (GTK_CONTAINER (box3), 2);
1882 gtk_container_add (GTK_CONTAINER (box3), pixmapwid);
1883 gtk_container_add (GTK_CONTAINER (box3), label);
1884 gtk_container_add (GTK_CONTAINER (button), box3);
1886 separator = gtk_hseparator_new ();
1887 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
1889 box2 = gtk_vbox_new (FALSE, 10);
1890 gtk_container_border_width (GTK_CONTAINER (box2), 10);
1891 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
1893 button = gtk_button_new_with_label ("close");
1894 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
1895 GTK_SIGNAL_FUNC(gtk_widget_destroy),
1896 GTK_OBJECT (window));
1897 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
1898 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
1899 gtk_widget_grab_default (button);
1902 if (!GTK_WIDGET_VISIBLE (window))
1903 gtk_widget_show_all (window);
1905 gtk_widget_destroy (window);
1909 tips_query_widget_entered (GtkTipsQuery *tips_query,
1911 const gchar *tip_text,
1912 const gchar *tip_private,
1915 if (GTK_TOGGLE_BUTTON (toggle)->active)
1917 gtk_label_set (GTK_LABEL (tips_query), tip_text ? "There is a Tip!" : "There is no Tip!");
1918 /* don't let GtkTipsQuery reset it's label */
1919 gtk_signal_emit_stop_by_name (GTK_OBJECT (tips_query), "widget_entered");
1924 tips_query_widget_selected (GtkWidget *tips_query,
1926 const gchar *tip_text,
1927 const gchar *tip_private,
1928 GdkEventButton *event,
1932 g_print ("Help \"%s\" requested for <%s>\n",
1933 tip_private ? tip_private : "None",
1934 gtk_type_name (GTK_OBJECT_TYPE (widget)));
1939 create_tooltips (void)
1941 static GtkWidget *window = NULL;
1948 GtkWidget *tips_query;
1949 GtkWidget *separator;
1950 GtkTooltips *tooltips;
1955 gtk_widget_new (gtk_window_get_type (),
1956 "GtkWindow::type", GTK_WINDOW_TOPLEVEL,
1957 "GtkContainer::border_width", 0,
1958 "GtkWindow::title", "Tooltips",
1959 "GtkWindow::allow_shrink", TRUE,
1960 "GtkWindow::allow_grow", FALSE,
1961 "GtkWindow::auto_shrink", TRUE,
1962 "GtkWidget::width", 200,
1965 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1966 GTK_SIGNAL_FUNC (destroy_tooltips),
1969 tooltips=gtk_tooltips_new();
1970 gtk_object_set_data (GTK_OBJECT (window), "tooltips", tooltips);
1972 box1 = gtk_vbox_new (FALSE, 0);
1973 gtk_container_add (GTK_CONTAINER (window), box1);
1975 box2 = gtk_vbox_new (FALSE, 10);
1976 gtk_container_border_width (GTK_CONTAINER (box2), 10);
1977 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
1979 button = gtk_toggle_button_new_with_label ("button1");
1980 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
1982 gtk_tooltips_set_tip (tooltips,button,"This is button 1", "ContextHelp/buttons/1");
1984 button = gtk_toggle_button_new_with_label ("button2");
1985 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
1987 gtk_tooltips_set_tip (tooltips,
1989 "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.",
1990 "ContextHelp/buttons/2_long");
1992 toggle = gtk_toggle_button_new_with_label ("Override TipsQuery Label");
1993 gtk_box_pack_start (GTK_BOX (box2), toggle, TRUE, TRUE, 0);
1995 gtk_tooltips_set_tip (tooltips, toggle, "Toggle TipsQuery view.", "Hi msw! ;)");
1998 gtk_widget_new (gtk_vbox_get_type (),
1999 "GtkBox::homogeneous", FALSE,
2000 "GtkBox::spacing", 5,
2001 "GtkContainer::border_width", 5,
2002 "GtkWidget::visible", TRUE,
2005 tips_query = gtk_tips_query_new ();
2008 gtk_widget_new (gtk_button_get_type (),
2009 "GtkButton::label", "[?]",
2010 "GtkWidget::visible", TRUE,
2011 "GtkWidget::parent", box3,
2012 "GtkObject::object_signal::clicked", gtk_tips_query_start_query, tips_query,
2014 gtk_box_set_child_packing (GTK_BOX (box3), button, FALSE, FALSE, 0, GTK_PACK_START);
2015 gtk_tooltips_set_tip (tooltips,
2017 "Start the Tooltips Inspector",
2018 "ContextHelp/buttons/?");
2021 gtk_widget_set (tips_query,
2022 "GtkWidget::visible", TRUE,
2023 "GtkWidget::parent", box3,
2024 "GtkTipsQuery::caller", button,
2025 "GtkObject::signal::widget_entered", tips_query_widget_entered, toggle,
2026 "GtkObject::signal::widget_selected", tips_query_widget_selected, NULL,
2030 gtk_widget_new (gtk_frame_get_type (),
2031 "GtkFrame::label", "ToolTips Inspector",
2032 "GtkFrame::label_xalign", (double) 0.5,
2033 "GtkContainer::border_width", 0,
2034 "GtkWidget::visible", TRUE,
2035 "GtkWidget::parent", box2,
2036 "GtkContainer::child", box3,
2038 gtk_box_set_child_packing (GTK_BOX (box2), frame, TRUE, TRUE, 10, GTK_PACK_START);
2040 separator = gtk_hseparator_new ();
2041 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2043 box2 = gtk_vbox_new (FALSE, 10);
2044 gtk_container_border_width (GTK_CONTAINER (box2), 10);
2045 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2047 button = gtk_button_new_with_label ("close");
2048 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2049 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2050 GTK_OBJECT (window));
2051 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2052 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2053 gtk_widget_grab_default (button);
2055 gtk_tooltips_set_tip (tooltips, button, "Push this button to close window", "ContextHelp/buttons/Close");
2058 if (!GTK_WIDGET_VISIBLE (window))
2059 gtk_widget_show_all (window);
2061 gtk_widget_destroy (window);
2069 create_menu (gint depth, gboolean tearoff)
2072 GtkWidget *menuitem;
2080 menu = gtk_menu_new ();
2085 menuitem = gtk_tearoff_menu_item_new ();
2086 gtk_menu_append (GTK_MENU (menu), menuitem);
2087 gtk_widget_show (menuitem);
2090 for (i = 0, j = 1; i < 5; i++, j++)
2092 sprintf (buf, "item %2d - %d", depth, j);
2093 menuitem = gtk_radio_menu_item_new_with_label (group, buf);
2094 group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menuitem));
2096 gtk_check_menu_item_set_show_toggle (GTK_CHECK_MENU_ITEM (menuitem), TRUE);
2097 gtk_menu_append (GTK_MENU (menu), menuitem);
2098 gtk_widget_show (menuitem);
2100 gtk_widget_set_sensitive (menuitem, FALSE);
2102 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (depth - 1, TRUE));
2111 static GtkWidget *window = NULL;
2115 GtkWidget *optionmenu;
2116 GtkWidget *separator;
2122 GtkWidget *menuitem;
2123 GtkAccelGroup *accel_group;
2125 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2127 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2128 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2130 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
2131 GTK_SIGNAL_FUNC (gtk_true),
2134 accel_group = gtk_accel_group_new ();
2135 gtk_accel_group_attach (accel_group, GTK_OBJECT (window));
2137 gtk_window_set_title (GTK_WINDOW (window), "menus");
2138 gtk_container_border_width (GTK_CONTAINER (window), 0);
2141 box1 = gtk_vbox_new (FALSE, 0);
2142 gtk_container_add (GTK_CONTAINER (window), box1);
2143 gtk_widget_show (box1);
2145 menubar = gtk_menu_bar_new ();
2146 gtk_box_pack_start (GTK_BOX (box1), menubar, FALSE, TRUE, 0);
2147 gtk_widget_show (menubar);
2149 menu = create_menu (2, TRUE);
2151 menuitem = gtk_menu_item_new_with_label ("test\nline2");
2152 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), menu);
2153 gtk_menu_bar_append (GTK_MENU_BAR (menubar), menuitem);
2154 gtk_widget_show (menuitem);
2156 menuitem = gtk_menu_item_new_with_label ("foo");
2157 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (3, TRUE));
2158 gtk_menu_bar_append (GTK_MENU_BAR (menubar), menuitem);
2159 gtk_widget_show (menuitem);
2161 menuitem = gtk_menu_item_new_with_label ("bar");
2162 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (4, TRUE));
2163 gtk_menu_item_right_justify (GTK_MENU_ITEM (menuitem));
2164 gtk_menu_bar_append (GTK_MENU_BAR (menubar), menuitem);
2165 gtk_widget_show (menuitem);
2167 box2 = gtk_vbox_new (FALSE, 10);
2168 gtk_container_border_width (GTK_CONTAINER (box2), 10);
2169 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2170 gtk_widget_show (box2);
2172 menu = create_menu (1, FALSE);
2173 gtk_menu_set_accel_group (GTK_MENU (menu), accel_group);
2175 menuitem = gtk_check_menu_item_new_with_label ("Accelerate Me");
2176 gtk_menu_append (GTK_MENU (menu), menuitem);
2177 gtk_widget_show (menuitem);
2178 gtk_widget_add_accelerator (menuitem,
2183 GTK_ACCEL_VISIBLE | GTK_ACCEL_SIGNAL_VISIBLE);
2184 menuitem = gtk_check_menu_item_new_with_label ("Accelerator Locked");
2185 gtk_menu_append (GTK_MENU (menu), menuitem);
2186 gtk_widget_show (menuitem);
2187 gtk_widget_add_accelerator (menuitem,
2192 GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
2193 menuitem = gtk_check_menu_item_new_with_label ("Accelerators Frozen");
2194 gtk_menu_append (GTK_MENU (menu), menuitem);
2195 gtk_widget_show (menuitem);
2196 gtk_widget_add_accelerator (menuitem,
2202 gtk_widget_add_accelerator (menuitem,
2208 gtk_widget_freeze_accelerators (menuitem);
2210 optionmenu = gtk_option_menu_new ();
2211 gtk_option_menu_set_menu (GTK_OPTION_MENU (optionmenu), menu);
2212 gtk_option_menu_set_history (GTK_OPTION_MENU (optionmenu), 3);
2213 gtk_box_pack_start (GTK_BOX (box2), optionmenu, TRUE, TRUE, 0);
2214 gtk_widget_show (optionmenu);
2216 separator = gtk_hseparator_new ();
2217 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2218 gtk_widget_show (separator);
2220 box2 = gtk_vbox_new (FALSE, 10);
2221 gtk_container_border_width (GTK_CONTAINER (box2), 10);
2222 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2223 gtk_widget_show (box2);
2225 button = gtk_button_new_with_label ("close");
2226 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2227 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2228 GTK_OBJECT (window));
2229 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2230 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2231 gtk_widget_grab_default (button);
2232 gtk_widget_show (button);
2235 if (!GTK_WIDGET_VISIBLE (window))
2236 gtk_widget_show (window);
2238 gtk_widget_destroy (window);
2242 gtk_ifactory_cb (gpointer callback_data,
2243 guint callback_action,
2246 g_message ("ItemFactory: activated \"%s\"", gtk_item_factory_path_from_widget (widget));
2249 static GtkItemFactoryEntry menu_items[] =
2251 { "/_File", NULL, gtk_ifactory_cb, 0, "<Branch>" },
2252 { "/File/tearoff1", NULL, gtk_ifactory_cb, 0, "<Tearoff>" },
2253 { "/File/_New", "<control>N", gtk_ifactory_cb, 0 },
2254 { "/File/_Open", "<control>O", gtk_ifactory_cb, 0 },
2255 { "/File/_Save", "<control>S", gtk_ifactory_cb, 0 },
2256 { "/File/Save _As...", NULL, gtk_ifactory_cb, 0 },
2257 { "/File/sep1", NULL, gtk_ifactory_cb, 0, "<Separator>" },
2258 { "/File/_Quit", "<control>Q", gtk_ifactory_cb, 0 },
2260 { "/_Preferences", NULL, gtk_ifactory_cb, 0, "<Branch>" },
2261 { "/_Preferences/_Color", NULL, gtk_ifactory_cb, 0, "<Branch>" },
2262 { "/_Preferences/Color/_Red", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
2263 { "/_Preferences/Color/_Green", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
2264 { "/_Preferences/Color/_Blue", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
2265 { "/_Preferences/_Shape", NULL, gtk_ifactory_cb, 0, "<Branch>" },
2266 { "/_Preferences/Shape/_Square", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
2267 { "/_Preferences/Shape/_Rectangle", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
2268 { "/_Preferences/Shape/_Oval", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
2270 { "/_Help", NULL, gtk_ifactory_cb, 0, "<LastBranch>" },
2271 { "/Help/_About", NULL, gtk_ifactory_cb, 0 },
2274 static int nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]);
2277 create_item_factory (void)
2279 static GtkWidget *window = NULL;
2285 GtkWidget *separator;
2288 GtkAccelGroup *accel_group;
2289 GtkItemFactory *item_factory;
2291 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2293 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2294 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2296 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
2297 GTK_SIGNAL_FUNC (gtk_true),
2300 accel_group = gtk_accel_group_new ();
2301 item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>", accel_group);
2302 gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL);
2303 gtk_accel_group_attach (accel_group, GTK_OBJECT (window));
2304 gtk_window_set_title (GTK_WINDOW (window), "Item Factory");
2305 gtk_container_border_width (GTK_CONTAINER (window), 0);
2307 box1 = gtk_vbox_new (FALSE, 0);
2308 gtk_container_add (GTK_CONTAINER (window), box1);
2310 gtk_box_pack_start (GTK_BOX (box1),
2311 gtk_item_factory_get_widget (item_factory, "<main>"),
2314 label = gtk_label_new ("Type\n<alt>\nto start");
2315 gtk_widget_set_usize (label, 200, 200);
2316 gtk_misc_set_alignment (GTK_MISC (label), 0.5, 0.5);
2317 gtk_box_pack_start (GTK_BOX (box1), label, TRUE, TRUE, 0);
2320 separator = gtk_hseparator_new ();
2321 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2324 box2 = gtk_vbox_new (FALSE, 10);
2325 gtk_container_border_width (GTK_CONTAINER (box2), 10);
2326 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2328 button = gtk_button_new_with_label ("close");
2329 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2330 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2331 GTK_OBJECT (window));
2332 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2333 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2334 gtk_widget_grab_default (button);
2336 gtk_widget_show_all (window);
2339 gtk_widget_destroy (window);
2347 scrolled_windows_remove (GtkWidget *widget, GtkWidget *scrollwin)
2349 static GtkWidget *parent = NULL;
2350 static GtkWidget *float_parent;
2354 gtk_widget_reparent (scrollwin, parent);
2355 gtk_widget_destroy (float_parent);
2356 float_parent = NULL;
2361 parent = widget->parent;
2362 float_parent = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2363 gtk_widget_reparent (scrollwin, float_parent);
2364 gtk_widget_show (float_parent);
2373 cmw_destroy_cb(GtkWidget *widget)
2375 /* This is needed to get out of gtk_main */
2382 cmw_color (GtkWidget *widget)
2386 csd=gtk_color_selection_dialog_new ("This is a modal color selection dialog");
2389 gtk_window_set_modal (GTK_WINDOW(csd),TRUE);
2391 gtk_signal_connect (GTK_OBJECT(csd), "destroy",
2392 GTK_SIGNAL_FUNC(cmw_destroy_cb),NULL);
2394 gtk_signal_connect_object (GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(csd)->ok_button),
2395 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
2397 gtk_signal_connect_object (GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(csd)->cancel_button),
2398 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
2401 /* wait until destroy calls gtk_main_quit */
2402 gtk_widget_show (csd);
2407 cmw_file (GtkWidget *widget)
2411 fs = gtk_file_selection_new("This is a modal file selection dialog");
2414 gtk_window_set_modal (GTK_WINDOW(fs),TRUE);
2416 gtk_signal_connect (GTK_OBJECT(fs), "destroy",
2417 GTK_SIGNAL_FUNC(cmw_destroy_cb),NULL);
2419 gtk_signal_connect_object (GTK_OBJECT(GTK_FILE_SELECTION(fs)->ok_button),
2420 "clicked",GTK_SIGNAL_FUNC(gtk_widget_destroy),
2422 gtk_signal_connect_object (GTK_OBJECT(GTK_FILE_SELECTION(fs)->cancel_button),
2423 "clicked",GTK_SIGNAL_FUNC(gtk_widget_destroy),
2426 /* wait until destroy calls gtk_main_quit */
2427 gtk_widget_show (fs);
2434 create_modal_window (void)
2436 GtkWidget *window = NULL;
2437 GtkWidget *box1,*box2;
2439 GtkWidget *btnColor,*btnFile,*btnClose;
2441 /* Create modal window (Here you can use any window descendent )*/
2442 window=gtk_window_new (GTK_WINDOW_TOPLEVEL);
2443 gtk_window_set_title (GTK_WINDOW(window),"This window is modal");
2445 /* Set window as modal */
2446 gtk_window_set_modal (GTK_WINDOW(window),TRUE);
2448 /* Create widgets */
2449 box1 = gtk_vbox_new (FALSE,5);
2450 frame1 = gtk_frame_new ("Standard dialogs in modal form");
2451 box2 = gtk_vbox_new (TRUE,5);
2452 btnColor = gtk_button_new_with_label ("Color");
2453 btnFile = gtk_button_new_with_label ("File Selection");
2454 btnClose = gtk_button_new_with_label ("Close");
2457 gtk_container_border_width (GTK_CONTAINER(box1),3);
2458 gtk_container_border_width (GTK_CONTAINER(box2),3);
2461 gtk_container_add (GTK_CONTAINER (window), box1);
2462 gtk_box_pack_start (GTK_BOX (box1), frame1, TRUE, TRUE, 4);
2463 gtk_container_add (GTK_CONTAINER (frame1), box2);
2464 gtk_box_pack_start (GTK_BOX (box2), btnColor, FALSE, FALSE, 4);
2465 gtk_box_pack_start (GTK_BOX (box2), btnFile, FALSE, FALSE, 4);
2466 gtk_box_pack_start (GTK_BOX (box1), gtk_hseparator_new (), FALSE, FALSE, 4);
2467 gtk_box_pack_start (GTK_BOX (box1), btnClose, FALSE, FALSE, 4);
2469 /* connect signals */
2470 gtk_signal_connect_object (GTK_OBJECT (btnClose), "clicked",
2471 GTK_SIGNAL_FUNC (gtk_widget_destroy),
2472 GTK_OBJECT (window));
2474 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2475 GTK_SIGNAL_FUNC (cmw_destroy_cb),NULL);
2477 gtk_signal_connect (GTK_OBJECT (btnColor), "clicked",
2478 GTK_SIGNAL_FUNC (cmw_color),NULL);
2479 gtk_signal_connect (GTK_OBJECT (btnFile), "clicked",
2480 GTK_SIGNAL_FUNC (cmw_file),NULL);
2483 gtk_widget_show_all (window);
2485 /* wait until dialog get destroyed */
2494 create_scrolled_windows (void)
2496 static GtkWidget *window;
2497 GtkWidget *scrolled_window;
2505 window = gtk_dialog_new ();
2507 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2508 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2511 gtk_window_set_title (GTK_WINDOW (window), "dialog");
2512 gtk_container_border_width (GTK_CONTAINER (window), 0);
2515 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
2516 gtk_container_border_width (GTK_CONTAINER (scrolled_window), 10);
2517 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
2518 GTK_POLICY_AUTOMATIC,
2519 GTK_POLICY_AUTOMATIC);
2520 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
2521 scrolled_window, TRUE, TRUE, 0);
2522 gtk_widget_show (scrolled_window);
2524 table = gtk_table_new (20, 20, FALSE);
2525 gtk_table_set_row_spacings (GTK_TABLE (table), 10);
2526 gtk_table_set_col_spacings (GTK_TABLE (table), 10);
2527 gtk_container_add (GTK_CONTAINER (scrolled_window), table);
2528 gtk_container_set_focus_hadjustment (GTK_CONTAINER (table),
2529 gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
2530 gtk_container_set_focus_vadjustment (GTK_CONTAINER (table),
2531 gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
2532 gtk_widget_show (table);
2534 for (i = 0; i < 20; i++)
2535 for (j = 0; j < 20; j++)
2537 sprintf (buffer, "button (%d,%d)\n", i, j);
2538 button = gtk_toggle_button_new_with_label (buffer);
2539 gtk_table_attach_defaults (GTK_TABLE (table), button,
2541 gtk_widget_show (button);
2545 button = gtk_button_new_with_label ("close");
2546 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2547 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2548 GTK_OBJECT (window));
2549 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2550 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
2551 button, TRUE, TRUE, 0);
2552 gtk_widget_grab_default (button);
2553 gtk_widget_show (button);
2555 button = gtk_button_new_with_label ("remove");
2556 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2557 GTK_SIGNAL_FUNC(scrolled_windows_remove),
2558 GTK_OBJECT (scrolled_window));
2559 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2560 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
2561 button, TRUE, TRUE, 0);
2562 gtk_widget_grab_default (button);
2563 gtk_widget_show (button);
2567 if (!GTK_WIDGET_VISIBLE (window))
2568 gtk_widget_show (window);
2570 gtk_widget_destroy (window);
2578 entry_toggle_editable (GtkWidget *checkbutton,
2581 gtk_entry_set_editable(GTK_ENTRY(entry),
2582 GTK_TOGGLE_BUTTON(checkbutton)->active);
2586 entry_toggle_sensitive (GtkWidget *checkbutton,
2589 gtk_widget_set_sensitive (entry, GTK_TOGGLE_BUTTON(checkbutton)->active);
2593 entry_toggle_visibility (GtkWidget *checkbutton,
2596 gtk_entry_set_visibility(GTK_ENTRY(entry),
2597 GTK_TOGGLE_BUTTON(checkbutton)->active);
2603 static GtkWidget *window = NULL;
2606 GtkWidget *editable_check;
2607 GtkWidget *sensitive_check;
2608 GtkWidget *entry, *cb;
2610 GtkWidget *separator;
2611 GList *cbitems = NULL;
2615 cbitems = g_list_append(cbitems, "item0");
2616 cbitems = g_list_append(cbitems, "item1 item1");
2617 cbitems = g_list_append(cbitems, "item2 item2 item2");
2618 cbitems = g_list_append(cbitems, "item3 item3 item3 item3");
2619 cbitems = g_list_append(cbitems, "item4 item4 item4 item4 item4");
2620 cbitems = g_list_append(cbitems, "item5 item5 item5 item5 item5 item5");
2621 cbitems = g_list_append(cbitems, "item6 item6 item6 item6 item6");
2622 cbitems = g_list_append(cbitems, "item7 item7 item7 item7");
2623 cbitems = g_list_append(cbitems, "item8 item8 item8");
2624 cbitems = g_list_append(cbitems, "item9 item9");
2626 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2628 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2629 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2632 gtk_window_set_title (GTK_WINDOW (window), "entry");
2633 gtk_container_border_width (GTK_CONTAINER (window), 0);
2636 box1 = gtk_vbox_new (FALSE, 0);
2637 gtk_container_add (GTK_CONTAINER (window), box1);
2638 gtk_widget_show (box1);
2641 box2 = gtk_vbox_new (FALSE, 10);
2642 gtk_container_border_width (GTK_CONTAINER (box2), 10);
2643 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2644 gtk_widget_show (box2);
2646 entry = gtk_entry_new ();
2647 gtk_entry_set_text (GTK_ENTRY (entry), "hello world");
2648 gtk_editable_select_region (GTK_EDITABLE (entry), 0, 5);
2649 gtk_box_pack_start (GTK_BOX (box2), entry, TRUE, TRUE, 0);
2650 gtk_widget_show (entry);
2652 cb = gtk_combo_new ();
2653 gtk_combo_set_popdown_strings (GTK_COMBO (cb), cbitems);
2654 gtk_entry_set_text (GTK_ENTRY (GTK_COMBO(cb)->entry), "hello world");
2655 gtk_editable_select_region (GTK_EDITABLE (GTK_COMBO(cb)->entry),
2657 gtk_box_pack_start (GTK_BOX (box2), cb, TRUE, TRUE, 0);
2658 gtk_widget_show (cb);
2660 editable_check = gtk_check_button_new_with_label("Editable");
2661 gtk_box_pack_start (GTK_BOX (box2), editable_check, FALSE, TRUE, 0);
2662 gtk_signal_connect (GTK_OBJECT(editable_check), "toggled",
2663 GTK_SIGNAL_FUNC(entry_toggle_editable), entry);
2664 gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(editable_check), TRUE);
2665 gtk_widget_show (editable_check);
2667 editable_check = gtk_check_button_new_with_label("Visible");
2668 gtk_box_pack_start (GTK_BOX (box2), editable_check, FALSE, TRUE, 0);
2669 gtk_signal_connect (GTK_OBJECT(editable_check), "toggled",
2670 GTK_SIGNAL_FUNC(entry_toggle_visibility), entry);
2671 gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(editable_check), TRUE);
2672 gtk_widget_show (editable_check);
2674 sensitive_check = gtk_check_button_new_with_label("Sensitive");
2675 gtk_box_pack_start (GTK_BOX (box2), sensitive_check, FALSE, TRUE, 0);
2676 gtk_signal_connect (GTK_OBJECT(sensitive_check), "toggled",
2677 GTK_SIGNAL_FUNC(entry_toggle_sensitive), entry);
2678 gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(sensitive_check), TRUE);
2679 gtk_widget_show (sensitive_check);
2681 separator = gtk_hseparator_new ();
2682 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2683 gtk_widget_show (separator);
2686 box2 = gtk_vbox_new (FALSE, 10);
2687 gtk_container_border_width (GTK_CONTAINER (box2), 10);
2688 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2689 gtk_widget_show (box2);
2692 button = gtk_button_new_with_label ("close");
2693 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2694 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2695 GTK_OBJECT (window));
2696 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2697 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2698 gtk_widget_grab_default (button);
2699 gtk_widget_show (button);
2702 if (!GTK_WIDGET_VISIBLE (window))
2703 gtk_widget_show (window);
2705 gtk_widget_destroy (window);
2712 static GtkWidget *spinner1;
2715 toggle_snap (GtkWidget *widget, GtkSpinButton *spin)
2717 gtk_spin_button_set_snap_to_ticks (spin, GTK_TOGGLE_BUTTON (widget)->active);
2721 toggle_numeric (GtkWidget *widget, GtkSpinButton *spin)
2723 gtk_spin_button_set_numeric (spin, GTK_TOGGLE_BUTTON (widget)->active);
2727 change_digits (GtkWidget *widget, GtkSpinButton *spin)
2729 gtk_spin_button_set_digits (GTK_SPIN_BUTTON (spinner1),
2730 gtk_spin_button_get_value_as_int (spin));
2734 get_value (GtkWidget *widget, gpointer data)
2738 GtkSpinButton *spin;
2740 spin = GTK_SPIN_BUTTON (spinner1);
2741 label = GTK_LABEL (gtk_object_get_user_data (GTK_OBJECT (widget)));
2742 if (GPOINTER_TO_INT (data) == 1)
2743 sprintf (buf, "%d", gtk_spin_button_get_value_as_int (spin));
2745 sprintf (buf, "%0.*f", spin->digits,
2746 gtk_spin_button_get_value_as_float (spin));
2747 gtk_label_set (label, buf);
2753 static GtkWidget *window = NULL;
2756 GtkWidget *main_vbox;
2759 GtkWidget *spinner2;
2763 GtkWidget *val_label;
2768 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2770 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2771 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
2774 gtk_window_set_title (GTK_WINDOW (window), "GtkSpinButton");
2776 main_vbox = gtk_vbox_new (FALSE, 5);
2777 gtk_container_border_width (GTK_CONTAINER (main_vbox), 10);
2778 gtk_container_add (GTK_CONTAINER (window), main_vbox);
2780 frame = gtk_frame_new ("Not accelerated");
2781 gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0);
2783 vbox = gtk_vbox_new (FALSE, 0);
2784 gtk_container_border_width (GTK_CONTAINER (vbox), 5);
2785 gtk_container_add (GTK_CONTAINER (frame), vbox);
2787 /* Day, month, year spinners */
2789 hbox = gtk_hbox_new (FALSE, 0);
2790 gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 5);
2792 vbox2 = gtk_vbox_new (FALSE, 0);
2793 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
2795 label = gtk_label_new ("Day :");
2796 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
2797 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
2799 adj = (GtkAdjustment *) gtk_adjustment_new (1.0, 1.0, 31.0, 1.0,
2801 spinner = gtk_spin_button_new (adj, 0, 0);
2802 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
2803 gtk_spin_button_set_shadow_type (GTK_SPIN_BUTTON (spinner),
2805 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
2807 vbox2 = gtk_vbox_new (FALSE, 0);
2808 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
2810 label = gtk_label_new ("Month :");
2811 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
2812 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
2814 adj = (GtkAdjustment *) gtk_adjustment_new (1.0, 1.0, 12.0, 1.0,
2816 spinner = gtk_spin_button_new (adj, 0, 0);
2817 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
2818 gtk_spin_button_set_shadow_type (GTK_SPIN_BUTTON (spinner),
2819 GTK_SHADOW_ETCHED_IN);
2820 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
2822 vbox2 = gtk_vbox_new (FALSE, 0);
2823 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
2825 label = gtk_label_new ("Year :");
2826 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
2827 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
2829 adj = (GtkAdjustment *) gtk_adjustment_new (1998.0, 0.0, 2100.0,
2831 spinner = gtk_spin_button_new (adj, 0, 0);
2832 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
2833 gtk_spin_button_set_shadow_type (GTK_SPIN_BUTTON (spinner),
2835 gtk_widget_set_usize (spinner, 55, 0);
2836 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
2838 frame = gtk_frame_new ("Accelerated");
2839 gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0);
2841 vbox = gtk_vbox_new (FALSE, 0);
2842 gtk_container_border_width (GTK_CONTAINER (vbox), 5);
2843 gtk_container_add (GTK_CONTAINER (frame), vbox);
2845 hbox = gtk_hbox_new (FALSE, 0);
2846 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
2848 vbox2 = gtk_vbox_new (FALSE, 0);
2849 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
2851 label = gtk_label_new ("Value :");
2852 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
2853 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
2855 adj = (GtkAdjustment *) gtk_adjustment_new (0.0, -10000.0, 10000.0,
2857 spinner1 = gtk_spin_button_new (adj, 1.0, 2);
2858 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner1), TRUE);
2859 gtk_widget_set_usize (spinner1, 100, 0);
2860 gtk_box_pack_start (GTK_BOX (vbox2), spinner1, FALSE, TRUE, 0);
2862 vbox2 = gtk_vbox_new (FALSE, 0);
2863 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
2865 label = gtk_label_new ("Digits :");
2866 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
2867 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
2869 adj = (GtkAdjustment *) gtk_adjustment_new (2, 1, 5, 1, 1, 0);
2870 spinner2 = gtk_spin_button_new (adj, 0.0, 0);
2871 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner2), TRUE);
2872 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
2873 GTK_SIGNAL_FUNC (change_digits),
2874 (gpointer) spinner2);
2875 gtk_box_pack_start (GTK_BOX (vbox2), spinner2, FALSE, TRUE, 0);
2877 hbox = gtk_hbox_new (FALSE, 0);
2878 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
2880 button = gtk_check_button_new_with_label ("Snap to 0.5-ticks");
2881 gtk_signal_connect (GTK_OBJECT (button), "clicked",
2882 GTK_SIGNAL_FUNC (toggle_snap),
2884 gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
2885 gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (button), TRUE);
2887 button = gtk_check_button_new_with_label ("Numeric only input mode");
2888 gtk_signal_connect (GTK_OBJECT (button), "clicked",
2889 GTK_SIGNAL_FUNC (toggle_numeric),
2891 gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
2892 gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (button), TRUE);
2894 val_label = gtk_label_new ("");
2896 hbox = gtk_hbox_new (FALSE, 0);
2897 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
2899 button = gtk_button_new_with_label ("Value as Int");
2900 gtk_object_set_user_data (GTK_OBJECT (button), val_label);
2901 gtk_signal_connect (GTK_OBJECT (button), "clicked",
2902 GTK_SIGNAL_FUNC (get_value),
2903 GINT_TO_POINTER (1));
2904 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
2906 button = gtk_button_new_with_label ("Value as Float");
2907 gtk_object_set_user_data (GTK_OBJECT (button), val_label);
2908 gtk_signal_connect (GTK_OBJECT (button), "clicked",
2909 GTK_SIGNAL_FUNC (get_value),
2910 GINT_TO_POINTER (2));
2911 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
2913 gtk_box_pack_start (GTK_BOX (vbox), val_label, TRUE, TRUE, 0);
2914 gtk_label_set (GTK_LABEL (val_label), "0");
2916 hbox = gtk_hbox_new (FALSE, 0);
2917 gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
2919 button = gtk_button_new_with_label ("Close");
2920 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2921 GTK_SIGNAL_FUNC (gtk_widget_destroy),
2922 GTK_OBJECT (window));
2923 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
2926 if (!GTK_WIDGET_VISIBLE (window))
2927 gtk_widget_show_all (window);
2929 gtk_widget_destroy (window);
2937 cursor_expose_event (GtkWidget *widget,
2941 GtkDrawingArea *darea;
2942 GdkDrawable *drawable;
2949 g_return_val_if_fail (widget != NULL, TRUE);
2950 g_return_val_if_fail (GTK_IS_DRAWING_AREA (widget), TRUE);
2952 darea = GTK_DRAWING_AREA (widget);
2953 drawable = widget->window;
2954 white_gc = widget->style->white_gc;
2955 gray_gc = widget->style->bg_gc[GTK_STATE_NORMAL];
2956 black_gc = widget->style->black_gc;
2957 max_width = widget->allocation.width;
2958 max_height = widget->allocation.height;
2960 gdk_draw_rectangle (drawable, white_gc,
2967 gdk_draw_rectangle (drawable, black_gc,
2974 gdk_draw_rectangle (drawable, gray_gc,
2985 set_cursor (GtkWidget *spinner,
2993 c = CLAMP (gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spinner)), 0, 152);
2996 label = gtk_object_get_user_data (GTK_OBJECT (spinner));
2997 vals = gtk_type_enum_get_values (GTK_TYPE_GDK_CURSOR_TYPE);
2998 while (vals && vals->value != c)
3001 gtk_label_set (GTK_LABEL (label), vals->value_nick);
3003 gtk_label_set (GTK_LABEL (label), "<unknown>");
3005 cursor = gdk_cursor_new (c);
3006 gdk_window_set_cursor (widget->window, cursor);
3007 gdk_cursor_destroy (cursor);
3011 cursor_event (GtkWidget *widget,
3013 GtkSpinButton *spinner)
3015 if ((event->type == GDK_BUTTON_PRESS) &&
3016 ((event->button.button == 1) ||
3017 (event->button.button == 3)))
3019 gtk_spin_button_spin (spinner, event->button.button == 1 ?
3020 GTK_SPIN_STEP_FORWARD : GTK_SPIN_STEP_BACKWARD, 0);
3028 create_cursors (void)
3030 static GtkWidget *window = NULL;
3033 GtkWidget *main_vbox;
3044 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3046 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3047 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
3050 gtk_window_set_title (GTK_WINDOW (window), "Cursors");
3052 main_vbox = gtk_vbox_new (FALSE, 5);
3053 gtk_container_border_width (GTK_CONTAINER (main_vbox), 0);
3054 gtk_container_add (GTK_CONTAINER (window), main_vbox);
3057 gtk_widget_new (gtk_vbox_get_type (),
3058 "GtkBox::homogeneous", FALSE,
3059 "GtkBox::spacing", 5,
3060 "GtkContainer::border_width", 10,
3061 "GtkWidget::parent", main_vbox,
3062 "GtkWidget::visible", TRUE,
3065 hbox = gtk_hbox_new (FALSE, 0);
3066 gtk_container_border_width (GTK_CONTAINER (hbox), 5);
3067 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
3069 label = gtk_label_new ("Cursor Value : ");
3070 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
3071 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
3073 adj = (GtkAdjustment *) gtk_adjustment_new (0,
3077 spinner = gtk_spin_button_new (adj, 0, 0);
3078 gtk_box_pack_start (GTK_BOX (hbox), spinner, TRUE, TRUE, 0);
3081 gtk_widget_new (gtk_frame_get_type (),
3082 "GtkFrame::shadow", GTK_SHADOW_ETCHED_IN,
3083 "GtkFrame::label_xalign", 0.5,
3084 "GtkFrame::label", "Cursor Area",
3085 "GtkContainer::border_width", 10,
3086 "GtkWidget::parent", vbox,
3087 "GtkWidget::visible", TRUE,
3090 darea = gtk_drawing_area_new ();
3091 gtk_widget_set_usize (darea, 80, 80);
3092 gtk_container_add (GTK_CONTAINER (frame), darea);
3093 gtk_signal_connect (GTK_OBJECT (darea),
3095 GTK_SIGNAL_FUNC (cursor_expose_event),
3097 gtk_widget_set_events (darea, GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK);
3098 gtk_signal_connect (GTK_OBJECT (darea),
3099 "button_press_event",
3100 GTK_SIGNAL_FUNC (cursor_event),
3102 gtk_widget_show (darea);
3104 gtk_signal_connect (GTK_OBJECT (spinner), "changed",
3105 GTK_SIGNAL_FUNC (set_cursor),
3108 label = gtk_widget_new (GTK_TYPE_LABEL,
3113 gtk_container_child_set (GTK_CONTAINER (vbox), label,
3116 gtk_object_set_user_data (GTK_OBJECT (spinner), label);
3119 gtk_widget_new (gtk_hseparator_get_type (),
3120 "GtkWidget::visible", TRUE,
3122 gtk_box_pack_start (GTK_BOX (main_vbox), any, FALSE, TRUE, 0);
3124 hbox = gtk_hbox_new (FALSE, 0);
3125 gtk_container_border_width (GTK_CONTAINER (hbox), 10);
3126 gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
3128 button = gtk_button_new_with_label ("Close");
3129 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
3130 GTK_SIGNAL_FUNC (gtk_widget_destroy),
3131 GTK_OBJECT (window));
3132 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
3134 gtk_widget_show_all (window);
3136 set_cursor (spinner, darea);
3139 gtk_widget_destroy (window);
3147 list_add (GtkWidget *widget,
3152 GtkWidget *list_item;
3153 GtkContainer *container;
3155 container = GTK_CONTAINER (list);
3157 sprintf (buffer, "added item %d", i++);
3158 list_item = gtk_list_item_new_with_label (buffer);
3159 gtk_widget_show (list_item);
3161 gtk_container_add (container, list_item);
3165 list_remove (GtkWidget *widget,
3171 tmp_list = GTK_LIST (list)->selection;
3176 clear_list = g_list_prepend (clear_list, tmp_list->data);
3177 tmp_list = tmp_list->next;
3180 clear_list = g_list_reverse (clear_list);
3182 gtk_list_remove_items (GTK_LIST (list), clear_list);
3184 g_list_free (clear_list);
3188 list_clear (GtkWidget *widget,
3191 gtk_list_clear_items (GTK_LIST (list), 0, -1);
3195 list_undo_selection (GtkWidget *widget,
3198 gtk_list_undo_selection (GTK_LIST (list));
3201 #define RADIOMENUTOGGLED(_rmi_, __i) { \
3204 __g = gtk_radio_menu_item_group(_rmi_); \
3205 while( __g && !((GtkCheckMenuItem *)(__g->data))->active) { \
3211 static GtkWidget *list_omenu;
3214 list_toggle_sel_mode (GtkWidget *widget, GtkList *list)
3218 if (!GTK_WIDGET_MAPPED (widget))
3221 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
3222 (((GtkOptionMenu *)list_omenu)->menu_item), i);
3224 gtk_list_set_selection_mode (list, (GtkSelectionMode) (3-i));
3230 static GtkWidget *window = NULL;
3235 GtkWidget *scrolled_win;
3238 GtkWidget *separator;
3240 GtkWidget *menu_item;
3246 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3248 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3249 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
3252 gtk_window_set_title (GTK_WINDOW (window), "list");
3253 gtk_container_border_width (GTK_CONTAINER (window), 0);
3255 box1 = gtk_vbox_new (FALSE, 0);
3256 gtk_container_add (GTK_CONTAINER (window), box1);
3258 box2 = gtk_vbox_new (FALSE, 10);
3259 gtk_container_border_width (GTK_CONTAINER (box2), 10);
3260 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
3262 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
3263 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
3264 GTK_POLICY_AUTOMATIC,
3265 GTK_POLICY_AUTOMATIC);
3266 gtk_box_pack_start (GTK_BOX (box2), scrolled_win, TRUE, TRUE, 0);
3267 gtk_widget_set_usize (scrolled_win, -1, 300);
3269 list = gtk_list_new ();
3270 gtk_list_set_selection_mode (GTK_LIST (list), GTK_SELECTION_EXTENDED);
3271 gtk_container_add (GTK_CONTAINER (scrolled_win), list);
3272 gtk_container_set_focus_vadjustment
3273 (GTK_CONTAINER (list),
3274 gtk_scrolled_window_get_vadjustment
3275 (GTK_SCROLLED_WINDOW (scrolled_win)));
3276 gtk_container_set_focus_hadjustment
3277 (GTK_CONTAINER (list),
3278 gtk_scrolled_window_get_hadjustment
3279 (GTK_SCROLLED_WINDOW (scrolled_win)));
3281 if ((infile = fopen("gtkenums.h", "r")))
3287 while (fgets (buffer, 256, infile))
3289 if ((pos = strchr (buffer, '\n')))
3291 item = gtk_list_item_new_with_label (buffer);
3292 gtk_container_add (GTK_CONTAINER (list), item);
3298 hbox = gtk_hbox_new (TRUE, 10);
3299 gtk_box_pack_start (GTK_BOX (box2), hbox, FALSE, TRUE, 0);
3301 button = gtk_button_new_with_label ("Undo Selection");
3302 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3303 GTK_SIGNAL_FUNC(list_undo_selection),
3305 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
3307 button = gtk_button_new_with_label ("Remove Selection");
3308 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3309 GTK_SIGNAL_FUNC (list_remove),
3311 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
3313 button = gtk_button_new_with_label ("Clear List");
3314 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3315 GTK_SIGNAL_FUNC (list_clear),
3317 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
3319 hbox = gtk_hbox_new (FALSE, 10);
3320 gtk_box_pack_start (GTK_BOX (box2), hbox, FALSE, TRUE, 0);
3322 button = gtk_button_new_with_label ("Insert Row");
3323 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3324 GTK_SIGNAL_FUNC (list_add),
3326 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
3328 label = gtk_label_new ("Selection Mode :");
3329 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3330 GTK_SIGNAL_FUNC(list_remove),
3332 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
3334 list_omenu = gtk_option_menu_new ();
3335 menu = gtk_menu_new ();
3338 menu_item = gtk_radio_menu_item_new_with_label (group, "Single");
3339 gtk_signal_connect (GTK_OBJECT (menu_item), "activate",
3340 GTK_SIGNAL_FUNC (list_toggle_sel_mode), list);
3341 group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menu_item));
3342 gtk_menu_append (GTK_MENU (menu), menu_item);
3343 gtk_widget_show (menu_item);
3345 menu_item = gtk_radio_menu_item_new_with_label (group, "Browse");
3346 gtk_signal_connect (GTK_OBJECT (menu_item), "activate",
3347 GTK_SIGNAL_FUNC (list_toggle_sel_mode), list);
3348 group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menu_item));
3349 gtk_menu_append (GTK_MENU (menu), menu_item);
3350 gtk_widget_show (menu_item);
3352 menu_item = gtk_radio_menu_item_new_with_label (group, "Multiple");
3353 gtk_signal_connect (GTK_OBJECT (menu_item), "activate",
3354 GTK_SIGNAL_FUNC (list_toggle_sel_mode), list);
3355 group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menu_item));
3356 gtk_menu_append (GTK_MENU (menu), menu_item);
3357 gtk_widget_show (menu_item);
3359 menu_item = gtk_radio_menu_item_new_with_label (group, "Extended");
3360 gtk_signal_connect (GTK_OBJECT (menu_item), "activate",
3361 GTK_SIGNAL_FUNC (list_toggle_sel_mode), list);
3362 group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menu_item));
3363 gtk_menu_append (GTK_MENU (menu), menu_item);
3364 gtk_check_menu_item_set_state (GTK_CHECK_MENU_ITEM (menu_item), TRUE);
3365 gtk_widget_show (menu_item);
3367 gtk_option_menu_set_menu (GTK_OPTION_MENU (list_omenu), menu);
3368 gtk_box_pack_start (GTK_BOX (hbox), list_omenu, FALSE, TRUE, 0);
3370 gtk_option_menu_set_history (GTK_OPTION_MENU (list_omenu), 3);
3372 separator = gtk_hseparator_new ();
3373 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
3376 box2 = gtk_vbox_new (FALSE, 10);
3377 gtk_container_border_width (GTK_CONTAINER (box2), 10);
3378 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
3380 button = gtk_button_new_with_label ("close");
3381 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
3382 GTK_SIGNAL_FUNC(gtk_widget_destroy),
3383 GTK_OBJECT (window));
3384 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
3386 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
3387 gtk_widget_grab_default (button);
3390 if (!GTK_WIDGET_VISIBLE (window))
3391 gtk_widget_show_all (window);
3393 gtk_widget_destroy (window);
3400 static char * book_open_xpm[] = {
3423 static char * book_closed_xpm[] = {
3448 static char * mini_page_xpm[] = {
3471 #define TESTGTK_CLIST_COLUMNS 20
3472 static gint clist_rows = 0;
3473 static GtkWidget *clist_omenu;
3476 add1000_clist (GtkWidget *widget, gpointer data)
3479 char text[TESTGTK_CLIST_COLUMNS][50];
3480 char *texts[TESTGTK_CLIST_COLUMNS];
3484 pixmap = gdk_pixmap_create_from_xpm_d (GTK_CLIST (data)->clist_window,
3486 >K_WIDGET (data)->style->white,
3489 for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++)
3492 sprintf (text[i], "Column %d", i);
3496 sprintf (text[1], "Right");
3497 sprintf (text[2], "Center");
3499 gtk_clist_freeze (GTK_CLIST (data));
3500 for (i = 0; i < 1000; i++)
3502 sprintf (text[0], "Row %d", rand() % 10000 /*clist_rows++*/);
3503 row = gtk_clist_append (GTK_CLIST (data), texts);
3504 gtk_clist_set_pixtext (GTK_CLIST (data), row, 3, "Hello World", 5, pixmap, mask);
3507 gtk_clist_thaw (GTK_CLIST (data));
3509 gdk_pixmap_unref (pixmap);
3510 gdk_bitmap_unref (mask);
3514 add10000_clist (GtkWidget *widget, gpointer data)
3517 char text[TESTGTK_CLIST_COLUMNS][50];
3518 char *texts[TESTGTK_CLIST_COLUMNS];
3520 for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++)
3523 sprintf (text[i], "Column %d", i);
3526 sprintf (text[1], "Right");
3527 sprintf (text[2], "Center");
3529 gtk_clist_freeze (GTK_CLIST (data));
3530 for (i = 0; i < 10000; i++)
3532 sprintf (text[0], "Row %d", rand() % 10000 /*clist_rows++*/);
3533 gtk_clist_append (GTK_CLIST (data), texts);
3535 gtk_clist_thaw (GTK_CLIST (data));
3539 clear_clist (GtkWidget *widget, gpointer data)
3541 gtk_clist_clear (GTK_CLIST (data));
3546 remove_row_clist (GtkWidget *widget, gpointer data)
3548 gtk_clist_remove (GTK_CLIST (data), GTK_CLIST (data)->focus_row);
3553 show_titles_clist (GtkWidget *widget, gpointer data)
3555 gtk_clist_column_titles_show (GTK_CLIST (data));
3559 hide_titles_clist (GtkWidget *widget, gpointer data)
3561 gtk_clist_column_titles_hide (GTK_CLIST (data));
3565 select_clist (GtkWidget *widget,
3568 GdkEventButton * bevent,
3578 g_print ("GtkCList Selection: row %d column %d button %d\n",
3579 row, column, bevent ? bevent->button : 0);
3581 for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++)
3583 switch (gtk_clist_get_cell_type (GTK_CLIST (widget), row, i))
3586 g_print ("CELL %d GTK_CELL_TEXT\n", i);
3587 gtk_clist_get_text (GTK_CLIST (widget), row, i, &text);
3588 g_print ("TEXT: %s\n", text);
3591 case GTK_CELL_PIXMAP:
3592 g_print ("CELL %d GTK_CELL_PIXMAP\n", i);
3593 gtk_clist_get_pixmap (GTK_CLIST (widget), row, i, &pixmap, &mask);
3594 g_print ("PIXMAP: %p\n", pixmap);
3595 g_print ("MASK: %p\n", mask);
3598 case GTK_CELL_PIXTEXT:
3599 g_print ("CELL %d GTK_CELL_PIXTEXT\n", i);
3600 gtk_clist_get_pixtext (GTK_CLIST (widget), row, i, &text, &spacing, &pixmap, &mask);
3601 g_print ("TEXT: %s\n", text);
3602 g_print ("SPACING: %d\n", spacing);
3603 g_print ("PIXMAP: %p\n", pixmap);
3604 g_print ("MASK: %p\n", mask);
3612 /* print selections list */
3613 g_print ("\nSelected Rows:");
3614 list = GTK_CLIST (widget)->selection;
3617 g_print (" %d ", GPOINTER_TO_INT (list->data));
3625 unselect_clist (GtkWidget *widget,
3628 GdkEventButton * bevent,
3638 g_print ("GtkCList Unselection: row %d column %d button %d\n",
3639 row, column, bevent ? bevent->button : 0);
3641 for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++)
3643 switch (gtk_clist_get_cell_type (GTK_CLIST (widget), row, i))
3646 g_print ("CELL %d GTK_CELL_TEXT\n", i);
3647 gtk_clist_get_text (GTK_CLIST (widget), row, i, &text);
3648 g_print ("TEXT: %s\n", text);
3651 case GTK_CELL_PIXMAP:
3652 g_print ("CELL %d GTK_CELL_PIXMAP\n", i);
3653 gtk_clist_get_pixmap (GTK_CLIST (widget), row, i, &pixmap, &mask);
3654 g_print ("PIXMAP: %p\n", pixmap);
3655 g_print ("MASK: %p\n", mask);
3658 case GTK_CELL_PIXTEXT:
3659 g_print ("CELL %d GTK_CELL_PIXTEXT\n", i);
3660 gtk_clist_get_pixtext (GTK_CLIST (widget), row, i, &text, &spacing, &pixmap, &mask);
3661 g_print ("TEXT: %s\n", text);
3662 g_print ("SPACING: %d\n", spacing);
3663 g_print ("PIXMAP: %p\n", pixmap);
3664 g_print ("MASK: %p\n", mask);
3672 /* print selections list */
3673 g_print ("\nSelected Rows:");
3674 list = GTK_CLIST (widget)->selection;
3677 g_print (" %d ", GPOINTER_TO_INT (list->data));
3685 insert_row_clist (GtkWidget *widget, gpointer data)
3687 static char *text[] =
3689 "This", "is", "a", "inserted", "row.",
3690 "This", "is", "a", "inserted", "row.",
3691 "This", "is", "a", "inserted", "row.",
3692 "This", "is", "a", "inserted", "row."
3695 if (GTK_CLIST (data)->focus_row >= 0)
3696 gtk_clist_insert (GTK_CLIST (data), GTK_CLIST (data)->focus_row, text);
3698 gtk_clist_insert (GTK_CLIST (data), 0, text);
3704 clist_warning_test (GtkWidget *button,
3708 static gboolean add_remove = FALSE;
3710 add_remove = !add_remove;
3712 child = gtk_label_new ("Test");
3713 gtk_widget_ref (child);
3714 gtk_object_sink (GTK_OBJECT (child));
3717 gtk_container_add (GTK_CONTAINER (clist), child);
3720 child->parent = clist;
3721 gtk_container_remove (GTK_CONTAINER (clist), child);
3722 child->parent = NULL;
3725 gtk_widget_destroy (child);
3726 gtk_widget_unref (child);
3730 undo_selection (GtkWidget *button, GtkCList *clist)
3732 gtk_clist_undo_selection (clist);
3736 clist_toggle_sel_mode (GtkWidget *widget, GtkCList *clist)
3740 if (!GTK_WIDGET_MAPPED (widget))
3743 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
3744 (((GtkOptionMenu *)clist_omenu)->menu_item), i);
3746 gtk_clist_set_selection_mode (clist, (GtkSelectionMode) (3-i));
3750 clist_click_column (GtkCList *clist, gint column, gpointer data)
3752 if (column == clist->sort_column)
3754 if (clist->sort_type == GTK_SORT_ASCENDING)
3755 clist->sort_type = GTK_SORT_DESCENDING;
3757 clist->sort_type = GTK_SORT_ASCENDING;
3760 gtk_clist_set_sort_column (clist, column);
3762 gtk_clist_sort (clist);
3769 static GtkWidget *window = NULL;
3771 static char *titles[] =
3773 "Title 0", "Title 1", "Title 2", "Title 3", "Title 4",
3774 "Title 5", "Title 6", "Title 7", "Title 8", "Title 9",
3775 "Title 10", "Title 11", "Title 12", "Title 13", "Title 14",
3776 "Title 15", "Title 16", "Title 17", "Title 18", "Title 19"
3779 static OptionMenuItem items[] =
3781 { "Single", clist_toggle_sel_mode },
3782 { "Browse", clist_toggle_sel_mode },
3783 { "Multiple", clist_toggle_sel_mode },
3784 { "Extended", clist_toggle_sel_mode }
3787 char text[TESTGTK_CLIST_COLUMNS][50];
3788 char *texts[TESTGTK_CLIST_COLUMNS];
3794 GtkWidget *separator;
3796 GtkWidget *undo_button;
3802 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3804 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3805 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
3808 gtk_window_set_title (GTK_WINDOW (window), "clist");
3809 gtk_container_border_width (GTK_CONTAINER (window), 0);
3811 box1 = gtk_vbox_new (FALSE, 0);
3812 gtk_container_add (GTK_CONTAINER (window), box1);
3814 box2 = gtk_hbox_new (FALSE, 10);
3815 gtk_container_border_width (GTK_CONTAINER (box2), 10);
3816 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0);
3818 /* create GtkCList here so we have a pointer to throw at the
3819 * button callbacks -- more is done with it later */
3820 clist = gtk_clist_new_with_titles (TESTGTK_CLIST_COLUMNS, titles);
3821 /*clist = gtk_clist_new (TESTGTK_CLIST_COLUMNS);*/
3823 gtk_signal_connect (GTK_OBJECT (clist), "click_column",
3824 (GtkSignalFunc) clist_click_column,
3827 /* control buttons */
3828 button = gtk_button_new_with_label ("Add 1,000 Rows With Pixmaps");
3829 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
3831 gtk_signal_connect (GTK_OBJECT (button),
3833 (GtkSignalFunc) add1000_clist,
3836 button = gtk_button_new_with_label ("Add 10,000 Rows");
3837 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
3839 gtk_signal_connect (GTK_OBJECT (button),
3841 (GtkSignalFunc) add10000_clist,
3844 button = gtk_button_new_with_label ("Clear List");
3845 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
3847 gtk_signal_connect (GTK_OBJECT (button),
3849 (GtkSignalFunc) clear_clist,
3852 button = gtk_button_new_with_label ("Remove Row");
3853 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
3855 gtk_signal_connect (GTK_OBJECT (button),
3857 (GtkSignalFunc) remove_row_clist,
3860 /* second layer of buttons */
3861 box2 = gtk_hbox_new (FALSE, 10);
3862 gtk_container_border_width (GTK_CONTAINER (box2), 10);
3863 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0);
3865 button = gtk_button_new_with_label ("Insert Row");
3866 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
3868 gtk_signal_connect (GTK_OBJECT (button),
3870 (GtkSignalFunc) insert_row_clist,
3873 button = gtk_button_new_with_label ("Show Title Buttons");
3874 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
3876 gtk_signal_connect (GTK_OBJECT (button),
3878 (GtkSignalFunc) show_titles_clist,
3881 button = gtk_button_new_with_label ("Hide Title Buttons");
3882 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
3884 gtk_signal_connect (GTK_OBJECT (button),
3886 (GtkSignalFunc) hide_titles_clist,
3889 button = gtk_button_new_with_label ("Warning Test");
3890 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
3892 gtk_signal_connect (GTK_OBJECT (button),
3894 (GtkSignalFunc) clist_warning_test,
3897 box2 = gtk_hbox_new (FALSE, 10);
3898 gtk_container_border_width (GTK_CONTAINER (box2), 10);
3899 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0);
3901 undo_button = gtk_button_new_with_label ("Undo last selection");
3902 gtk_box_pack_start (GTK_BOX (box2), undo_button, TRUE, TRUE, 0);
3903 gtk_signal_connect (GTK_OBJECT (undo_button),
3905 (GtkSignalFunc) undo_selection,
3908 label = gtk_label_new ("Selection Mode :");
3909 gtk_box_pack_start (GTK_BOX (box2), label, FALSE, TRUE, 0);
3911 clist_omenu = build_option_menu (items, 4, 3, clist);
3912 gtk_box_pack_start (GTK_BOX (box2), clist_omenu, FALSE, TRUE, 0);
3914 /* vbox for the list itself */
3915 box2 = gtk_vbox_new (FALSE, 10);
3916 gtk_container_border_width (GTK_CONTAINER (box2), 10);
3917 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
3920 * the rest of the clist configuration
3924 gtk_signal_connect (GTK_OBJECT (clist),
3926 (GtkSignalFunc) select_clist,
3929 gtk_signal_connect (GTK_OBJECT (clist),
3931 (GtkSignalFunc) unselect_clist,
3935 gtk_clist_set_row_height (GTK_CLIST (clist), 18);
3936 gtk_widget_set_usize (clist, -1, 300);
3938 gtk_clist_set_column_width (GTK_CLIST (clist), 0, 100);
3940 for (i = 1; i < TESTGTK_CLIST_COLUMNS; i++)
3941 gtk_clist_set_column_width (GTK_CLIST (clist), i, 80);
3943 gtk_clist_set_selection_mode (GTK_CLIST (clist), GTK_SELECTION_EXTENDED);
3944 gtk_clist_set_policy (GTK_CLIST (clist), GTK_POLICY_AUTOMATIC,
3945 GTK_POLICY_AUTOMATIC);
3947 gtk_clist_set_column_justification (GTK_CLIST (clist), 1,
3949 gtk_clist_set_column_justification (GTK_CLIST (clist), 2,
3950 GTK_JUSTIFY_CENTER);
3952 for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++)
3955 sprintf (text[i], "Column %d", i);
3958 sprintf (text[1], "Right");
3959 sprintf (text[2], "Center");
3961 for (i = 0; i < 10; i++)
3963 sprintf (text[0], "Row %d", clist_rows++);
3964 gtk_clist_append (GTK_CLIST (clist), texts);
3967 gtk_container_border_width (GTK_CONTAINER (clist), 5);
3968 gtk_box_pack_start (GTK_BOX (box2), clist, TRUE, TRUE, 0);
3970 separator = gtk_hseparator_new ();
3971 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
3973 box2 = gtk_vbox_new (FALSE, 10);
3974 gtk_container_border_width (GTK_CONTAINER (box2), 10);
3975 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
3977 button = gtk_button_new_with_label ("close");
3978 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
3979 GTK_SIGNAL_FUNC(gtk_widget_destroy),
3980 GTK_OBJECT (window));
3982 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
3983 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
3984 gtk_widget_grab_default (button);
3987 if (!GTK_WIDGET_VISIBLE (window))
3988 gtk_widget_show_all (window);
3992 gtk_widget_destroy (window);
4007 static gint books = 0;
4008 static gint pages = 0;
4010 static GtkWidget *book_label;
4011 static GtkWidget *page_label;
4012 static GtkWidget *sel_label;
4013 static GtkWidget *vis_label;
4014 static GtkWidget *omenu1;
4015 static GtkWidget *omenu2;
4016 static GtkWidget *omenu3;
4017 static GtkWidget *spin1;
4018 static GtkWidget *spin2;
4019 static GtkWidget *spin3;
4020 static GdkColor *col_bg;
4022 void after_press (GtkCTree *ctree, gpointer data)
4026 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->selection));
4027 gtk_label_set (GTK_LABEL (sel_label), buf);
4029 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->row_list));
4030 gtk_label_set (GTK_LABEL (vis_label), buf);
4032 sprintf (buf, "%d", books);
4033 gtk_label_set (GTK_LABEL (book_label), buf);
4035 sprintf (buf, "%d", pages);
4036 gtk_label_set (GTK_LABEL (page_label), buf);
4039 void after_move (GtkCTree *ctree, GtkCTreeNode *child, GtkCTreeNode *parent,
4040 GtkCTreeNode *sibling, gpointer data)
4046 gtk_ctree_get_node_info (ctree, child, &source,
4047 NULL, NULL, NULL, NULL, NULL, NULL, NULL);
4049 gtk_ctree_get_node_info (ctree, parent, &target1,
4050 NULL, NULL, NULL, NULL, NULL, NULL, NULL);
4052 gtk_ctree_get_node_info (ctree, sibling, &target2,
4053 NULL, NULL, NULL, NULL, NULL, NULL, NULL);
4055 g_print ("Moving \"%s\" to \"%s\" with sibling \"%s\".\n", source,
4056 (parent) ? target1 : "nil", (sibling) ? target2 : "nil");
4059 gint button_press (GtkCTree *ctree, GdkEventButton *event, gpointer data)
4066 res = gtk_clist_get_selection_info (GTK_CLIST (ctree), event->x, event->y,
4068 if (!res && event->button != 3)
4071 work = GTK_CTREE_NODE (g_list_nth (GTK_CLIST (ctree)->row_list, row));
4073 switch (event->button)
4076 if (GTK_CLIST (ctree)->selection_mode == GTK_SELECTION_MULTIPLE &&
4077 event->state & GDK_SHIFT_MASK)
4078 gtk_signal_emit_stop_by_name (GTK_OBJECT (ctree),"button_press_event");
4081 if (GTK_CTREE_ROW (work)->children &&
4082 gtk_ctree_is_hot_spot (ctree, event->x, event->y))
4084 if (GTK_CTREE_ROW (work)->expanded)
4085 gtk_ctree_collapse_recursive (ctree, work);
4087 gtk_ctree_expand_recursive (ctree, work);
4088 after_press (ctree, NULL);
4089 gtk_signal_emit_stop_by_name (GTK_OBJECT (ctree),
4090 "button_press_event");
4099 gint button_release (GtkCTree *ctree, GdkEventButton *event, gpointer data)
4106 res = gtk_clist_get_selection_info (GTK_CLIST (ctree), event->x, event->y,
4108 if (!res || event->button != 1)
4111 work = GTK_CTREE_NODE (g_list_nth (GTK_CLIST (ctree)->row_list, row));
4113 if (GTK_CLIST (ctree)->selection_mode == GTK_SELECTION_MULTIPLE &&
4114 event->state & GDK_SHIFT_MASK)
4116 if (GTK_CTREE_ROW (work)->row.state == GTK_STATE_SELECTED)
4117 gtk_ctree_unselect_recursive (ctree, work);
4119 gtk_ctree_select_recursive (ctree, work);
4120 after_press (ctree, NULL);
4121 gtk_signal_emit_stop_by_name (GTK_OBJECT (ctree),
4122 "button_release_event");
4127 void count_items (GtkCTree *ctree, GtkCTreeNode *list)
4129 if (GTK_CTREE_ROW (list)->is_leaf)
4135 void expand_all (GtkWidget *widget, GtkCTree *ctree)
4137 gtk_ctree_expand_recursive (ctree, NULL);
4138 after_press (ctree, NULL);
4141 void collapse_all (GtkWidget *widget, GtkCTree *ctree)
4143 gtk_ctree_collapse_recursive (ctree, NULL);
4144 after_press (ctree, NULL);
4147 void select_all (GtkWidget *widget, GtkCTree *ctree)
4149 gtk_ctree_select_recursive (ctree, NULL);
4150 after_press (ctree, NULL);
4153 void unselect_all (GtkWidget *widget, GtkCTree *ctree)
4155 gtk_ctree_unselect_recursive (ctree, NULL);
4156 after_press (ctree, NULL);
4159 void remove_selection (GtkWidget *widget, GtkCTree *ctree)
4162 GtkCTreeNode *new_sel;
4165 selection = GTK_CLIST (ctree)->selection;
4168 gtk_clist_freeze (GTK_CLIST (ctree));
4172 work = selection->data;
4173 if (GTK_CTREE_ROW (work)->is_leaf)
4176 gtk_ctree_post_recursive (ctree, work,
4177 (GtkCTreeFunc) count_items, NULL);
4179 if (GTK_CLIST (ctree)->selection_mode == GTK_SELECTION_BROWSE)
4181 if (GTK_CTREE_ROW (work)->children)
4183 new_sel = GTK_CTREE_ROW (work)->sibling;
4185 new_sel = GTK_CTREE_NODE_NEXT (work);
4189 if (GTK_CTREE_NODE_NEXT (work))
4190 new_sel = GTK_CTREE_NODE_NEXT (work);
4192 new_sel = GTK_CTREE_NODE_PREV (work);
4196 gtk_ctree_remove_node (ctree, work);
4197 selection = GTK_CLIST (ctree)->selection;
4201 gtk_ctree_select (ctree, new_sel);
4203 gtk_clist_thaw (GTK_CLIST (ctree));
4204 after_press (ctree, NULL);
4207 void sort_all (GtkWidget *widget, GtkCTree *ctree)
4209 gtk_ctree_sort_recursive (ctree, NULL);
4212 struct _ExportStruct {
4218 typedef struct _ExportStruct ExportStruct;
4221 gnode2ctree (GtkCTree *ctree,
4224 GtkCTreeNode *cnode,
4228 GdkPixmap *pixmap_closed;
4229 GdkBitmap *mask_closed;
4230 GdkPixmap *pixmap_opened;
4231 GdkBitmap *mask_opened;
4233 if (!cnode || !gnode || (!(es = gnode->data)))
4238 pixmap_closed = pixmap3;
4239 mask_closed = mask3;
4240 pixmap_opened = NULL;
4245 pixmap_closed = pixmap1;
4246 mask_closed = mask1;
4247 pixmap_opened = pixmap2;
4248 mask_opened = mask2;
4251 gtk_ctree_set_node_info (ctree, cnode, es->tree, 2, pixmap_closed,
4252 mask_closed, pixmap_opened, mask_opened,
4253 es->is_leaf, (depth < 3));
4254 gtk_ctree_node_set_text (ctree, cnode, 1, es->info);
4262 ctree2gnode (GtkCTree *ctree,
4265 GtkCTreeNode *cnode,
4270 if (!cnode || !gnode)
4273 es = g_new (ExportStruct, 1);
4275 es->is_leaf = GTK_CTREE_ROW (cnode)->is_leaf;
4276 es->tree = GTK_CELL_PIXTEXT (GTK_CTREE_ROW (cnode)->row.cell[0])->text;
4277 es->info = GTK_CELL_PIXTEXT (GTK_CTREE_ROW (cnode)->row.cell[1])->text;
4281 void export_ctree (GtkWidget *widget, GtkCTree *ctree)
4283 char *title[] = { "Tree" , "Info" };
4284 static GtkWidget *export_window = NULL;
4285 static GtkCTree *export_ctree;
4294 export_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
4296 gtk_signal_connect (GTK_OBJECT (export_window), "destroy",
4297 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
4300 gtk_window_set_title (GTK_WINDOW (export_window), "exported ctree");
4301 gtk_container_border_width (GTK_CONTAINER (export_window), 5);
4303 vbox = gtk_vbox_new (FALSE, 0);
4304 gtk_container_add (GTK_CONTAINER (export_window), vbox);
4306 button = gtk_button_new_with_label ("Close");
4307 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, TRUE, 0);
4309 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
4310 (GtkSignalFunc) gtk_widget_destroy,
4311 GTK_OBJECT(export_window));
4313 sep = gtk_hseparator_new ();
4314 gtk_box_pack_end (GTK_BOX (vbox), sep, FALSE, TRUE, 10);
4316 export_ctree = GTK_CTREE (gtk_ctree_new_with_titles (2, 0, title));
4317 gtk_ctree_set_line_style (export_ctree, GTK_CTREE_LINES_DOTTED);
4319 gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (export_ctree),
4321 gtk_clist_set_selection_mode (GTK_CLIST (export_ctree),
4322 GTK_SELECTION_EXTENDED);
4323 gtk_clist_set_policy (GTK_CLIST (export_ctree), GTK_POLICY_ALWAYS,
4324 GTK_POLICY_AUTOMATIC);
4325 gtk_clist_set_column_width (GTK_CLIST (export_ctree), 0, 200);
4326 gtk_clist_set_column_width (GTK_CLIST (export_ctree), 1, 200);
4327 gtk_widget_set_usize (GTK_WIDGET (export_ctree), 300, 200);
4330 if (!GTK_WIDGET_VISIBLE (export_window))
4331 gtk_widget_show_all (export_window);
4333 gtk_clist_clear (GTK_CLIST (export_ctree));
4335 node = GTK_CTREE_NODE (g_list_nth (GTK_CLIST (ctree)->row_list,
4336 GTK_CLIST (ctree)->focus_row));
4340 gnode = gtk_ctree_export_to_gnode (ctree, NULL, NULL, node,
4344 gtk_ctree_insert_gnode (export_ctree, NULL, NULL, gnode,
4346 g_node_destroy (gnode);
4350 void change_indent (GtkWidget *widget, GtkCTree *ctree)
4352 gtk_ctree_set_indent (ctree, GTK_ADJUSTMENT (widget)->value);
4355 void change_row_height (GtkWidget *widget, GtkCList *clist)
4357 gtk_clist_set_row_height (clist, GTK_ADJUSTMENT (widget)->value);
4360 void toggle_reorderable (GtkWidget *widget, GtkCTree *ctree)
4362 gtk_ctree_set_reorderable (ctree, GTK_TOGGLE_BUTTON (widget)->active);
4365 void set_background (GtkCTree *ctree, GtkCTreeNode *node, gpointer data)
4370 if (ctree->line_style != GTK_CTREE_LINES_TABBED)
4372 if (GTK_CTREE_ROW (node)->is_leaf)
4374 if (GTK_CTREE_ROW (node)->parent)
4375 gtk_ctree_node_set_background
4377 GTK_CTREE_ROW (GTK_CTREE_ROW (node)->parent)->row.data);
4380 gtk_ctree_node_set_background (ctree, node,
4381 GTK_CTREE_ROW (node)->row.data);
4384 gtk_ctree_node_set_background (ctree, node, NULL);
4387 void ctree_toggle_line_style (GtkWidget *widget, GtkCTree *ctree)
4391 if (!GTK_WIDGET_MAPPED (widget))
4394 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
4395 (((GtkOptionMenu *)omenu1)->menu_item),i);
4397 if ((ctree->line_style == GTK_CTREE_LINES_TABBED &&
4398 ((GtkCTreeLineStyle) (3-i)) != GTK_CTREE_LINES_TABBED) ||
4399 (ctree->line_style != GTK_CTREE_LINES_TABBED &&
4400 ((GtkCTreeLineStyle) (3-i)) == GTK_CTREE_LINES_TABBED))
4401 gtk_ctree_pre_recursive (ctree, NULL, set_background, NULL);
4402 gtk_ctree_set_line_style (ctree, (GtkCTreeLineStyle) (3-i));
4405 void ctree_toggle_justify (GtkWidget *widget, GtkCTree *ctree)
4409 if (!GTK_WIDGET_MAPPED (widget))
4412 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
4413 (((GtkOptionMenu *)omenu2)->menu_item),i);
4415 gtk_clist_set_column_justification (GTK_CLIST (ctree), ctree->tree_column,
4416 (GtkJustification) (1-i));
4419 void ctree_toggle_sel_mode (GtkWidget *widget, GtkCTree *ctree)
4423 if (!GTK_WIDGET_MAPPED (widget))
4426 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
4427 (((GtkOptionMenu *)omenu3)->menu_item), i);
4429 gtk_clist_set_selection_mode (GTK_CLIST (ctree), (GtkSelectionMode) (3-i));
4430 after_press (ctree, NULL);
4433 void build_recursive (GtkCTree *ctree, gint cur_depth, gint depth,
4434 gint num_books, gint num_pages, GtkCTreeNode *parent)
4439 GtkCTreeNode *sibling;
4446 for (i = num_pages + num_books; i > num_books; i--)
4449 sprintf (buf1, "Page %02d", (gint) rand() % 100);
4450 sprintf (buf2, "Item %d-%d", cur_depth, i);
4451 sibling = gtk_ctree_insert_node (ctree, parent, sibling, text, 5,
4452 pixmap3, mask3, NULL, NULL,
4455 if (ctree->line_style == GTK_CTREE_LINES_TABBED)
4456 gtk_ctree_node_set_background (ctree, sibling, col_bg);
4459 if (cur_depth == depth)
4462 for (i = num_books; i > 0; i--)
4465 sprintf (buf1, "Book %02d", (gint) rand() % 100);
4466 sprintf (buf2, "Item %d-%d", cur_depth, i);
4467 sibling = gtk_ctree_insert_node (ctree, parent, sibling, text, 5,
4468 pixmap1, mask1, pixmap2, mask2,
4471 col_bg = g_new (GdkColor, 1);
4473 if (cur_depth % 3 == 0)
4475 col_bg->red = 10000 * (cur_depth % 6);
4477 col_bg->blue = 65535 - ((i * 10000) % 65535);
4479 else if (cur_depth % 3 == 1)
4481 col_bg->red = 10000 * (cur_depth % 6);
4482 col_bg->green = 65535 - ((i * 10000) % 65535);
4487 col_bg->red = 65535 - ((i * 10000) % 65535);
4489 col_bg->blue = 10000 * (cur_depth % 6);
4492 gdk_color_alloc (gtk_widget_get_colormap (GTK_WIDGET (ctree)), col_bg);
4493 gtk_ctree_node_set_row_data_full (ctree, sibling, col_bg, g_free);
4495 if (ctree->line_style == GTK_CTREE_LINES_TABBED)
4496 gtk_ctree_node_set_background (ctree, sibling, col_bg);
4498 build_recursive (ctree, cur_depth + 1, depth, num_books, num_pages,
4503 void rebuild_tree (GtkWidget *widget, GtkCTree *ctree)
4506 gchar label1[] = "Root";
4507 gchar label2[] = "";
4508 GtkCTreeNode *parent;
4514 d = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin1));
4515 b = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin2));
4516 p = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin3));
4518 n = ((pow (b, d) - 1) / (b - 1)) * (p + 1);
4522 g_print ("%d total items? Try less\n",n);
4526 gtk_clist_freeze (GTK_CLIST (ctree));
4527 gtk_clist_clear (GTK_CLIST (ctree));
4532 parent = gtk_ctree_insert_node (ctree, NULL, NULL, text, 5, pixmap1,
4533 mask1, pixmap2, mask2, FALSE, TRUE);
4535 col_bg = g_new (GdkColor, 1);
4537 col_bg->green = 45000;
4538 col_bg->blue = 55000;
4539 gdk_color_alloc (gtk_widget_get_colormap (GTK_WIDGET (ctree)), col_bg);
4540 gtk_ctree_node_set_row_data_full (ctree, parent, col_bg, g_free);
4541 if (ctree->line_style == GTK_CTREE_LINES_TABBED)
4542 gtk_ctree_node_set_background (ctree, parent, col_bg);
4544 build_recursive (ctree, 1, d, b, p, parent);
4545 gtk_clist_thaw (GTK_CLIST (ctree));
4546 after_press (ctree, NULL);
4550 ctree_click_column (GtkCTree *ctree, gint column, gpointer data)
4554 clist = GTK_CLIST (ctree);
4556 if (column == clist->sort_column)
4558 if (clist->sort_type == GTK_SORT_ASCENDING)
4559 clist->sort_type = GTK_SORT_DESCENDING;
4561 clist->sort_type = GTK_SORT_ASCENDING;
4564 gtk_clist_set_sort_column (clist, column);
4566 gtk_ctree_sort_recursive (ctree, NULL);
4569 void create_ctree (void)
4571 static GtkWidget *window = NULL;
4572 GtkTooltips *tooltips;
4583 GdkColor transparent;
4585 char *title[] = { "Tree" , "Info" };
4588 static OptionMenuItem items1[] =
4590 { "Solid", ctree_toggle_line_style },
4591 { "Dotted", ctree_toggle_line_style },
4592 { "Tabbed", ctree_toggle_line_style },
4593 { "No lines", ctree_toggle_line_style }
4596 static OptionMenuItem items2[] =
4598 { "Left", ctree_toggle_justify },
4599 { "Right", ctree_toggle_justify }
4602 static OptionMenuItem items3[] =
4604 { "Single", ctree_toggle_sel_mode },
4605 { "Browse", ctree_toggle_sel_mode },
4606 { "Multiple", ctree_toggle_sel_mode },
4607 { "Extended", ctree_toggle_sel_mode }
4612 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
4614 gtk_signal_connect (GTK_OBJECT (window), "destroy",
4615 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
4618 gtk_window_set_title (GTK_WINDOW (window), "GtkCTree");
4619 gtk_container_border_width (GTK_CONTAINER (window), 0);
4621 tooltips = gtk_tooltips_new ();
4622 gtk_object_ref (GTK_OBJECT (tooltips));
4623 gtk_object_sink (GTK_OBJECT (tooltips));
4625 gtk_object_set_data_full (GTK_OBJECT (window), "tooltips", tooltips,
4626 (GtkDestroyNotify) gtk_object_unref);
4628 vbox = gtk_vbox_new (FALSE, 0);
4629 gtk_container_add (GTK_CONTAINER (window), vbox);
4631 hbox = gtk_hbox_new (FALSE, 5);
4632 gtk_container_border_width (GTK_CONTAINER (hbox), 5);
4633 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
4635 label = gtk_label_new ("Depth :");
4636 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
4638 adj = (GtkAdjustment *) gtk_adjustment_new (4, 1, 10, 1, 5, 0);
4639 spin1 = gtk_spin_button_new (adj, 0, 0);
4640 gtk_box_pack_start (GTK_BOX (hbox), spin1, FALSE, TRUE, 5);
4642 label = gtk_label_new ("Books :");
4643 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
4645 adj = (GtkAdjustment *) gtk_adjustment_new (3, 1, 20, 1, 5, 0);
4646 spin2 = gtk_spin_button_new (adj, 0, 0);
4647 gtk_box_pack_start (GTK_BOX (hbox), spin2, FALSE, TRUE, 5);
4649 label = gtk_label_new ("Pages :");
4650 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
4652 adj = (GtkAdjustment *) gtk_adjustment_new (5, 1, 20, 1, 5, 0);
4653 spin3 = gtk_spin_button_new (adj, 0, 0);
4654 gtk_box_pack_start (GTK_BOX (hbox), spin3, FALSE, TRUE, 5);
4656 button = gtk_button_new_with_label ("Close");
4657 gtk_box_pack_end (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4659 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
4660 (GtkSignalFunc) gtk_widget_destroy,
4661 GTK_OBJECT(window));
4663 button = gtk_button_new_with_label ("Rebuild tree");
4664 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4666 ctree = GTK_CTREE (gtk_ctree_new_with_titles (2, 0, title));
4667 gtk_ctree_set_line_style (ctree, GTK_CTREE_LINES_DOTTED);
4668 gtk_ctree_set_reorderable (ctree, TRUE);
4669 gtk_signal_connect (GTK_OBJECT (ctree), "click_column",
4670 (GtkSignalFunc) ctree_click_column,
4672 gtk_signal_connect (GTK_OBJECT (ctree), "button_press_event",
4673 GTK_SIGNAL_FUNC (button_press), NULL);
4674 gtk_signal_connect_after (GTK_OBJECT (ctree), "button_press_event",
4675 GTK_SIGNAL_FUNC (after_press), NULL);
4676 gtk_signal_connect (GTK_OBJECT (ctree), "button_release_event",
4677 GTK_SIGNAL_FUNC (button_release), NULL);
4678 gtk_signal_connect_after (GTK_OBJECT (ctree), "button_release_event",
4679 GTK_SIGNAL_FUNC (after_press), NULL);
4680 gtk_signal_connect_after (GTK_OBJECT (ctree), "tree_move",
4681 GTK_SIGNAL_FUNC (after_move), NULL);
4682 gtk_signal_connect_after (GTK_OBJECT (ctree), "end_selection",
4683 GTK_SIGNAL_FUNC (after_press), NULL);
4684 gtk_signal_connect_after (GTK_OBJECT (ctree), "toggle_focus_row",
4685 GTK_SIGNAL_FUNC (after_press), NULL);
4686 gtk_signal_connect_after (GTK_OBJECT (ctree), "select_all",
4687 GTK_SIGNAL_FUNC (after_press), NULL);
4688 gtk_signal_connect_after (GTK_OBJECT (ctree), "unselect_all",
4689 GTK_SIGNAL_FUNC (after_press), NULL);
4690 gtk_signal_connect_after (GTK_OBJECT (ctree), "scroll_vertical",
4691 GTK_SIGNAL_FUNC (after_press), NULL);
4693 gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (ctree), TRUE, TRUE, 0);
4694 gtk_clist_set_selection_mode (GTK_CLIST (ctree), GTK_SELECTION_EXTENDED);
4695 gtk_clist_set_policy (GTK_CLIST (ctree), GTK_POLICY_ALWAYS,
4696 GTK_POLICY_AUTOMATIC);
4697 gtk_clist_set_column_width (GTK_CLIST (ctree), 0, 200);
4698 gtk_clist_set_column_width (GTK_CLIST (ctree), 1, 200);
4700 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4701 GTK_SIGNAL_FUNC (rebuild_tree), ctree);
4703 hbox = gtk_hbox_new (FALSE, 5);
4704 gtk_container_border_width (GTK_CONTAINER (hbox), 5);
4705 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
4707 button = gtk_button_new_with_label ("Expand all");
4708 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4709 GTK_SIGNAL_FUNC (expand_all), ctree);
4710 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4712 button = gtk_button_new_with_label ("Collapse all");
4713 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4714 GTK_SIGNAL_FUNC (collapse_all), ctree);
4715 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4717 button = gtk_button_new_with_label ("Sort tree");
4718 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4719 GTK_SIGNAL_FUNC (sort_all), ctree);
4720 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4722 button = gtk_button_new_with_label ("Export tree");
4723 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4724 GTK_SIGNAL_FUNC (export_ctree), ctree);
4725 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4727 hbox = gtk_hbox_new (FALSE, 5);
4728 gtk_container_border_width (GTK_CONTAINER (hbox), 5);
4729 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
4731 label = gtk_label_new ("Row height :");
4732 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
4734 adj = (GtkAdjustment *) gtk_adjustment_new (20, 12, 100, 1, 10, 0);
4735 spinner = gtk_spin_button_new (adj, 0, 0);
4736 gtk_tooltips_set_tip (tooltips, spinner,
4737 "Row height of list items", NULL);
4738 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
4739 GTK_SIGNAL_FUNC (change_row_height), ctree);
4740 gtk_box_pack_start (GTK_BOX (hbox), spinner, FALSE, TRUE, 5);
4741 gtk_clist_set_row_height ( GTK_CLIST (ctree), adj->value);
4743 button = gtk_button_new_with_label ("Select all");
4744 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4745 GTK_SIGNAL_FUNC (select_all), ctree);
4746 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4748 button = gtk_button_new_with_label ("Unselect all");
4749 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4750 GTK_SIGNAL_FUNC (unselect_all), ctree);
4751 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4753 button = gtk_button_new_with_label ("Remove selection");
4754 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4755 GTK_SIGNAL_FUNC (remove_selection), ctree);
4756 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4758 hbox = gtk_hbox_new (TRUE, 5);
4759 gtk_container_border_width (GTK_CONTAINER (hbox), 5);
4760 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
4762 hbox2 = gtk_hbox_new (FALSE, 0);
4763 gtk_box_pack_start (GTK_BOX (hbox), hbox2, FALSE, TRUE, 0);
4765 label = gtk_label_new ("Indent :");
4766 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
4768 adj = (GtkAdjustment *) gtk_adjustment_new (20, 0, 60, 1, 10, 0);
4769 spinner = gtk_spin_button_new (adj, 0, 0);
4770 gtk_tooltips_set_tip (tooltips, spinner, "Tree indentation.", NULL);
4771 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
4772 GTK_SIGNAL_FUNC (change_indent), ctree);
4773 gtk_box_pack_start (GTK_BOX (hbox2), spinner, FALSE, TRUE, 5);
4775 check = gtk_check_button_new_with_label ("Reorderable");
4776 gtk_tooltips_set_tip (tooltips, check,
4777 "Tree items can be reordered by dragging.", NULL);
4778 gtk_signal_connect (GTK_OBJECT (check), "clicked",
4779 GTK_SIGNAL_FUNC (toggle_reorderable), ctree);
4780 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
4781 gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (check), TRUE);
4783 omenu1 = build_option_menu (items1, 4, 1, ctree);
4784 gtk_tooltips_set_tip (tooltips, omenu1, "The tree's line style.", NULL);
4785 gtk_box_pack_start (GTK_BOX (hbox), omenu1, FALSE, TRUE, 0);
4787 omenu2 = build_option_menu (items2, 2, 0, ctree);
4788 gtk_tooltips_set_tip (tooltips, omenu2, "The tree's justification.",
4790 gtk_box_pack_start (GTK_BOX (hbox), omenu2, FALSE, TRUE, 0);
4792 omenu3 = build_option_menu (items3, 4, 3, ctree);
4793 gtk_tooltips_set_tip (tooltips, omenu3, "The list's selection mode.",
4795 gtk_box_pack_start (GTK_BOX (hbox), omenu3, FALSE, TRUE, 0);
4797 gtk_widget_realize (window);
4799 pixmap1 = gdk_pixmap_create_from_xpm_d (window->window, &mask1,
4800 &transparent, book_closed_xpm);
4801 pixmap2 = gdk_pixmap_create_from_xpm_d (window->window, &mask2,
4802 &transparent, book_open_xpm);
4803 pixmap3 = gdk_pixmap_create_from_xpm_d (window->window, &mask3,
4804 &transparent, mini_page_xpm);
4806 gtk_widget_set_usize (GTK_WIDGET (ctree), 0, 300);
4808 frame = gtk_frame_new (NULL);
4809 gtk_container_border_width (GTK_CONTAINER (frame), 0);
4810 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_OUT);
4811 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
4813 hbox = gtk_hbox_new (TRUE, 2);
4814 gtk_container_border_width (GTK_CONTAINER (hbox), 2);
4815 gtk_container_add (GTK_CONTAINER (frame), hbox);
4817 frame = gtk_frame_new (NULL);
4818 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
4819 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
4821 hbox2 = gtk_hbox_new (FALSE, 0);
4822 gtk_container_border_width (GTK_CONTAINER (hbox2), 2);
4823 gtk_container_add (GTK_CONTAINER (frame), hbox2);
4825 label = gtk_label_new ("Books :");
4826 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
4828 sprintf (buf, "%d", books);
4829 book_label = gtk_label_new (buf);
4830 gtk_box_pack_end (GTK_BOX (hbox2), book_label, FALSE, TRUE, 5);
4832 frame = gtk_frame_new (NULL);
4833 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
4834 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
4836 hbox2 = gtk_hbox_new (FALSE, 0);
4837 gtk_container_border_width (GTK_CONTAINER (hbox2), 2);
4838 gtk_container_add (GTK_CONTAINER (frame), hbox2);
4840 label = gtk_label_new ("Pages :");
4841 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
4843 sprintf (buf, "%d", pages);
4844 page_label = gtk_label_new (buf);
4845 gtk_box_pack_end (GTK_BOX (hbox2), page_label, FALSE, TRUE, 5);
4847 frame = gtk_frame_new (NULL);
4848 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
4849 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
4851 hbox2 = gtk_hbox_new (FALSE, 0);
4852 gtk_container_border_width (GTK_CONTAINER (hbox2), 2);
4853 gtk_container_add (GTK_CONTAINER (frame), hbox2);
4855 label = gtk_label_new ("Selected :");
4856 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
4858 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->selection));
4859 sel_label = gtk_label_new (buf);
4860 gtk_box_pack_end (GTK_BOX (hbox2), sel_label, FALSE, TRUE, 5);
4862 frame = gtk_frame_new (NULL);
4863 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
4864 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
4866 hbox2 = gtk_hbox_new (FALSE, 0);
4867 gtk_container_border_width (GTK_CONTAINER (hbox2), 2);
4868 gtk_container_add (GTK_CONTAINER (frame), hbox2);
4870 label = gtk_label_new ("Visible :");
4871 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
4873 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->row_list));
4874 vis_label = gtk_label_new (buf);
4875 gtk_box_pack_end (GTK_BOX (hbox2), vis_label, FALSE, TRUE, 5);
4877 rebuild_tree (NULL, ctree);
4880 if (!GTK_WIDGET_VISIBLE (window))
4881 gtk_widget_show_all (window);
4883 gtk_widget_destroy (window);
4891 color_selection_ok (GtkWidget *w,
4892 GtkColorSelectionDialog *cs)
4894 GtkColorSelection *colorsel;
4897 colorsel=GTK_COLOR_SELECTION(cs->colorsel);
4899 gtk_color_selection_get_color(colorsel,color);
4900 gtk_color_selection_set_color(colorsel,color);
4904 color_selection_changed (GtkWidget *w,
4905 GtkColorSelectionDialog *cs)
4907 GtkColorSelection *colorsel;
4910 colorsel=GTK_COLOR_SELECTION(cs->colorsel);
4911 gtk_color_selection_get_color(colorsel,color);
4915 create_color_selection (void)
4917 static GtkWidget *window = NULL;
4921 window = gtk_color_selection_dialog_new ("color selection dialog");
4923 gtk_color_selection_set_opacity (
4924 GTK_COLOR_SELECTION (GTK_COLOR_SELECTION_DIALOG (window)->colorsel),
4927 gtk_color_selection_set_update_policy(
4928 GTK_COLOR_SELECTION (GTK_COLOR_SELECTION_DIALOG (window)->colorsel),
4929 GTK_UPDATE_CONTINUOUS);
4931 gtk_window_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
4933 gtk_signal_connect (GTK_OBJECT (window), "destroy",
4934 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
4937 gtk_signal_connect (
4938 GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (window)->colorsel),
4940 GTK_SIGNAL_FUNC(color_selection_changed),
4943 gtk_signal_connect (
4944 GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (window)->ok_button),
4946 GTK_SIGNAL_FUNC(color_selection_ok),
4949 gtk_signal_connect_object (
4950 GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (window)->cancel_button),
4952 GTK_SIGNAL_FUNC(gtk_widget_destroy),
4953 GTK_OBJECT (window));
4956 if (!GTK_WIDGET_VISIBLE (window))
4957 gtk_widget_show (window);
4959 gtk_widget_destroy (window);
4967 file_selection_hide_fileops (GtkWidget *widget,
4968 GtkFileSelection *fs)
4970 gtk_file_selection_hide_fileop_buttons (fs);
4974 file_selection_ok (GtkWidget *w,
4975 GtkFileSelection *fs)
4977 g_print ("%s\n", gtk_file_selection_get_filename (fs));
4978 gtk_widget_destroy (GTK_WIDGET (fs));
4982 create_file_selection (void)
4984 static GtkWidget *window = NULL;
4989 window = gtk_file_selection_new ("file selection dialog");
4991 gtk_file_selection_hide_fileop_buttons (GTK_FILE_SELECTION (window));
4993 gtk_window_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
4995 gtk_signal_connect (GTK_OBJECT (window), "destroy",
4996 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
4999 gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (window)->ok_button),
5000 "clicked", GTK_SIGNAL_FUNC(file_selection_ok),
5002 gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION (window)->cancel_button),
5003 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
5004 GTK_OBJECT (window));
5006 button = gtk_button_new_with_label ("Hide Fileops");
5007 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5008 (GtkSignalFunc) file_selection_hide_fileops,
5010 gtk_box_pack_start (GTK_BOX (GTK_FILE_SELECTION (window)->action_area),
5011 button, FALSE, FALSE, 0);
5012 gtk_widget_show (button);
5014 button = gtk_button_new_with_label ("Show Fileops");
5015 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5016 (GtkSignalFunc) gtk_file_selection_show_fileop_buttons,
5018 gtk_box_pack_start (GTK_BOX (GTK_FILE_SELECTION (window)->action_area),
5019 button, FALSE, FALSE, 0);
5020 gtk_widget_show (button);
5023 if (!GTK_WIDGET_VISIBLE (window))
5024 gtk_widget_show (window);
5026 gtk_widget_destroy (window);
5034 font_selection_ok (GtkWidget *w,
5035 GtkFontSelectionDialog *fs)
5037 g_print ("%s\n", gtk_font_selection_dialog_get_font_name (fs));
5038 gtk_widget_destroy (GTK_WIDGET (fs));
5042 create_font_selection (void)
5044 static GtkWidget *window = NULL;
5048 window = gtk_font_selection_dialog_new ("Font Selection Dialog");
5050 gtk_window_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
5052 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5053 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5056 gtk_signal_connect (GTK_OBJECT (GTK_FONT_SELECTION_DIALOG (window)->ok_button),
5057 "clicked", GTK_SIGNAL_FUNC(font_selection_ok),
5058 GTK_FONT_SELECTION_DIALOG (window));
5059 gtk_signal_connect_object (GTK_OBJECT (GTK_FONT_SELECTION_DIALOG (window)->cancel_button),
5060 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
5061 GTK_OBJECT (window));
5064 if (!GTK_WIDGET_VISIBLE (window))
5065 gtk_widget_show (window);
5067 gtk_widget_destroy (window);
5074 static GtkWidget *dialog_window = NULL;
5077 label_toggle (GtkWidget *widget,
5082 *label = gtk_label_new ("Dialog Test");
5083 gtk_signal_connect (GTK_OBJECT (*label),
5085 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
5087 gtk_misc_set_padding (GTK_MISC (*label), 10, 10);
5088 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->vbox),
5089 *label, TRUE, TRUE, 0);
5090 gtk_widget_show (*label);
5093 gtk_widget_destroy (*label);
5097 create_dialog (void)
5099 static GtkWidget *label;
5104 dialog_window = gtk_dialog_new ();
5106 gtk_signal_connect (GTK_OBJECT (dialog_window), "destroy",
5107 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5110 gtk_window_set_title (GTK_WINDOW (dialog_window), "GtkDialog");
5111 gtk_container_border_width (GTK_CONTAINER (dialog_window), 0);
5112 gtk_widget_set_usize (dialog_window, 200, 110);
5114 button = gtk_button_new_with_label ("OK");
5115 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5116 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->action_area),
5117 button, TRUE, TRUE, 0);
5118 gtk_widget_grab_default (button);
5119 gtk_widget_show (button);
5121 button = gtk_button_new_with_label ("Toggle");
5122 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5123 GTK_SIGNAL_FUNC (label_toggle),
5125 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5126 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->action_area),
5127 button, TRUE, TRUE, 0);
5128 gtk_widget_show (button);
5133 if (!GTK_WIDGET_VISIBLE (dialog_window))
5134 gtk_widget_show (dialog_window);
5136 gtk_widget_destroy (dialog_window);
5144 create_range_controls (void)
5146 static GtkWidget *window = NULL;
5150 GtkWidget *scrollbar;
5152 GtkWidget *separator;
5153 GtkObject *adjustment;
5157 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5159 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5160 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5163 gtk_window_set_title (GTK_WINDOW (window), "range controls");
5164 gtk_container_border_width (GTK_CONTAINER (window), 0);
5167 box1 = gtk_vbox_new (FALSE, 0);
5168 gtk_container_add (GTK_CONTAINER (window), box1);
5169 gtk_widget_show (box1);
5172 box2 = gtk_vbox_new (FALSE, 10);
5173 gtk_container_border_width (GTK_CONTAINER (box2), 10);
5174 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
5175 gtk_widget_show (box2);
5178 adjustment = gtk_adjustment_new (0.0, 0.0, 101.0, 0.1, 1.0, 1.0);
5180 scale = gtk_hscale_new (GTK_ADJUSTMENT (adjustment));
5181 gtk_widget_set_usize (GTK_WIDGET (scale), 150, 30);
5182 gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED);
5183 gtk_scale_set_digits (GTK_SCALE (scale), 1);
5184 gtk_scale_set_draw_value (GTK_SCALE (scale), TRUE);
5185 gtk_box_pack_start (GTK_BOX (box2), scale, TRUE, TRUE, 0);
5186 gtk_widget_show (scale);
5188 scrollbar = gtk_hscrollbar_new (GTK_ADJUSTMENT (adjustment));
5189 gtk_range_set_update_policy (GTK_RANGE (scrollbar),
5190 GTK_UPDATE_CONTINUOUS);
5191 gtk_box_pack_start (GTK_BOX (box2), scrollbar, TRUE, TRUE, 0);
5192 gtk_widget_show (scrollbar);
5195 separator = gtk_hseparator_new ();
5196 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
5197 gtk_widget_show (separator);
5200 box2 = gtk_vbox_new (FALSE, 10);
5201 gtk_container_border_width (GTK_CONTAINER (box2), 10);
5202 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
5203 gtk_widget_show (box2);
5206 button = gtk_button_new_with_label ("close");
5207 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5208 GTK_SIGNAL_FUNC(gtk_widget_destroy),
5209 GTK_OBJECT (window));
5210 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
5211 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5212 gtk_widget_grab_default (button);
5213 gtk_widget_show (button);
5216 if (!GTK_WIDGET_VISIBLE (window))
5217 gtk_widget_show (window);
5219 gtk_widget_destroy (window);
5227 create_rulers (void)
5229 static GtkWidget *window = NULL;
5235 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5236 gtk_window_set_policy (GTK_WINDOW (window), TRUE, TRUE, FALSE);
5238 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5239 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5242 gtk_window_set_title (GTK_WINDOW (window), "rulers");
5243 gtk_widget_set_usize (window, 300, 300);
5244 gtk_widget_set_events (window,
5245 GDK_POINTER_MOTION_MASK
5246 | GDK_POINTER_MOTION_HINT_MASK);
5247 gtk_container_border_width (GTK_CONTAINER (window), 0);
5249 table = gtk_table_new (2, 2, FALSE);
5250 gtk_container_add (GTK_CONTAINER (window), table);
5251 gtk_widget_show (table);
5253 ruler = gtk_hruler_new ();
5254 gtk_ruler_set_metric (GTK_RULER (ruler), GTK_CENTIMETERS);
5255 gtk_ruler_set_range (GTK_RULER (ruler), 100, 0, 0, 20);
5257 gtk_signal_connect_object (
5258 GTK_OBJECT (window),
5259 "motion_notify_event",
5261 GTK_WIDGET_CLASS (GTK_OBJECT (ruler)->klass)->motion_notify_event),
5262 GTK_OBJECT (ruler));
5264 gtk_table_attach (GTK_TABLE (table), ruler, 1, 2, 0, 1,
5265 GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
5266 gtk_widget_show (ruler);
5269 ruler = gtk_vruler_new ();
5270 gtk_ruler_set_range (GTK_RULER (ruler), 5, 15, 0, 20);
5272 gtk_signal_connect_object (
5273 GTK_OBJECT (window),
5274 "motion_notify_event",
5275 GTK_SIGNAL_FUNC (GTK_WIDGET_CLASS (GTK_OBJECT (ruler)->klass)->motion_notify_event),
5276 GTK_OBJECT (ruler));
5278 gtk_table_attach (GTK_TABLE (table), ruler, 0, 1, 1, 2,
5279 GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
5280 gtk_widget_show (ruler);
5283 if (!GTK_WIDGET_VISIBLE (window))
5284 gtk_widget_show (window);
5286 gtk_widget_destroy (window);
5290 text_toggle_editable (GtkWidget *checkbutton,
5293 gtk_text_set_editable(GTK_TEXT(text),
5294 GTK_TOGGLE_BUTTON(checkbutton)->active);
5298 text_toggle_word_wrap (GtkWidget *checkbutton,
5301 gtk_text_set_word_wrap(GTK_TEXT(text),
5302 GTK_TOGGLE_BUTTON(checkbutton)->active);
5309 { { 0, 0x0000, 0x0000, 0x0000 }, "black" },
5310 { { 0, 0xFFFF, 0xFFFF, 0xFFFF }, "white" },
5311 { { 0, 0xFFFF, 0x0000, 0x0000 }, "red" },
5312 { { 0, 0x0000, 0xFFFF, 0x0000 }, "green" },
5313 { { 0, 0x0000, 0x0000, 0xFFFF }, "blue" },
5314 { { 0, 0x0000, 0xFFFF, 0xFFFF }, "cyan" },
5315 { { 0, 0xFFFF, 0x0000, 0xFFFF }, "magenta" },
5316 { { 0, 0xFFFF, 0xFFFF, 0x0000 }, "yellow" }
5319 int ntext_colors = sizeof(text_colors) / sizeof(text_colors[0]);
5325 text_insert_random (GtkWidget *w, GtkText *text)
5329 for (i=0; i<10; i++)
5331 c = 'A' + rand() % ('Z' - 'A');
5332 gtk_text_set_point (text, rand() % gtk_text_get_length (text));
5333 gtk_text_insert (text, NULL, NULL, NULL, &c, 1);
5342 static GtkWidget *window = NULL;
5348 GtkWidget *separator;
5350 GtkWidget *hscrollbar;
5351 GtkWidget *vscrollbar;
5359 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5360 gtk_widget_set_name (window, "text window");
5361 gtk_widget_set_usize (window, 500, 500);
5362 gtk_window_set_policy (GTK_WINDOW(window), TRUE, TRUE, FALSE);
5364 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5365 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5368 gtk_window_set_title (GTK_WINDOW (window), "test");
5369 gtk_container_border_width (GTK_CONTAINER (window), 0);
5372 box1 = gtk_vbox_new (FALSE, 0);
5373 gtk_container_add (GTK_CONTAINER (window), box1);
5374 gtk_widget_show (box1);
5377 box2 = gtk_vbox_new (FALSE, 10);
5378 gtk_container_border_width (GTK_CONTAINER (box2), 10);
5379 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
5380 gtk_widget_show (box2);
5383 table = gtk_table_new (2, 2, FALSE);
5384 gtk_table_set_row_spacing (GTK_TABLE (table), 0, 2);
5385 gtk_table_set_col_spacing (GTK_TABLE (table), 0, 2);
5386 gtk_box_pack_start (GTK_BOX (box2), table, TRUE, TRUE, 0);
5387 gtk_widget_show (table);
5389 text = gtk_text_new (NULL, NULL);
5390 gtk_text_set_editable (GTK_TEXT (text), TRUE);
5391 gtk_table_attach (GTK_TABLE (table), text, 0, 1, 0, 1,
5392 GTK_EXPAND | GTK_SHRINK | GTK_FILL,
5393 GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
5394 gtk_widget_grab_focus (text);
5395 gtk_widget_show (text);
5397 hscrollbar = gtk_hscrollbar_new (GTK_TEXT (text)->hadj);
5398 gtk_table_attach (GTK_TABLE (table), hscrollbar, 0, 1, 1, 2,
5399 GTK_EXPAND | GTK_FILL | GTK_SHRINK, GTK_FILL, 0, 0);
5400 gtk_widget_show (hscrollbar);
5402 vscrollbar = gtk_vscrollbar_new (GTK_TEXT (text)->vadj);
5403 gtk_table_attach (GTK_TABLE (table), vscrollbar, 1, 2, 0, 1,
5404 GTK_FILL, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
5405 gtk_widget_show (vscrollbar);
5407 gtk_text_freeze (GTK_TEXT (text));
5409 font = gdk_font_load ("-adobe-courier-medium-r-normal--*-120-*-*-*-*-*-*");
5411 for (i=0; i<ntext_colors; i++)
5413 gtk_text_insert (GTK_TEXT (text), font, NULL, NULL,
5414 text_colors[i].name, -1);
5415 gtk_text_insert (GTK_TEXT (text), font, NULL, NULL, "\t", -1);
5417 for (j=0; j<ntext_colors; j++)
5419 gtk_text_insert (GTK_TEXT (text), font,
5420 &text_colors[j].color, &text_colors[i].color,
5423 gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL, "\n", -1);
5426 /* The Text widget will reference count the font, so we
5427 * unreference it here
5429 gdk_font_unref (font);
5431 infile = fopen("testgtk.c", "r");
5440 nchars = fread(buffer, 1, 1024, infile);
5441 gtk_text_insert (GTK_TEXT (text), NULL, NULL,
5442 NULL, buffer, nchars);
5451 gtk_text_thaw (GTK_TEXT (text));
5453 hbox = gtk_hbutton_box_new ();
5454 gtk_box_pack_start (GTK_BOX (box2), hbox, FALSE, FALSE, 0);
5455 gtk_widget_show (hbox);
5457 check = gtk_check_button_new_with_label("Editable");
5458 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, FALSE, 0);
5459 gtk_signal_connect (GTK_OBJECT(check), "toggled",
5460 GTK_SIGNAL_FUNC(text_toggle_editable), text);
5461 gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(check), TRUE);
5462 gtk_widget_show (check);
5464 check = gtk_check_button_new_with_label("Wrap Words");
5465 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
5466 gtk_signal_connect (GTK_OBJECT(check), "toggled",
5467 GTK_SIGNAL_FUNC(text_toggle_word_wrap), text);
5468 gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(check), FALSE);
5469 gtk_widget_show (check);
5471 separator = gtk_hseparator_new ();
5472 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
5473 gtk_widget_show (separator);
5476 box2 = gtk_vbox_new (FALSE, 10);
5477 gtk_container_border_width (GTK_CONTAINER (box2), 10);
5478 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
5479 gtk_widget_show (box2);
5482 button = gtk_button_new_with_label ("insert random");
5483 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5484 GTK_SIGNAL_FUNC(text_insert_random),
5486 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
5487 gtk_widget_show (button);
5489 button = gtk_button_new_with_label ("close");
5490 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5491 GTK_SIGNAL_FUNC(gtk_widget_destroy),
5492 GTK_OBJECT (window));
5493 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
5494 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5495 gtk_widget_grab_default (button);
5496 gtk_widget_show (button);
5499 if (!GTK_WIDGET_VISIBLE (window))
5500 gtk_widget_show (window);
5502 gtk_widget_destroy (window);
5509 GdkPixmap *book_open;
5510 GdkPixmap *book_closed;
5511 GdkBitmap *book_open_mask;
5512 GdkBitmap *book_closed_mask;
5515 page_switch (GtkWidget *widget, GtkNotebookPage *page, gint page_num)
5517 GtkNotebookPage *oldpage;
5520 oldpage = GTK_NOTEBOOK (widget)->cur_page;
5522 if (page == oldpage)
5525 pixwid = ((GtkBoxChild*)(GTK_BOX (page->tab_label)->children->data))->widget;
5526 gtk_pixmap_set (GTK_PIXMAP (pixwid), book_open, book_open_mask);
5527 pixwid = ((GtkBoxChild*) (GTK_BOX (page->menu_label)->children->data))->widget;
5528 gtk_pixmap_set (GTK_PIXMAP (pixwid), book_open, book_open_mask);
5532 pixwid = ((GtkBoxChild*) (GTK_BOX
5533 (oldpage->tab_label)->children->data))->widget;
5534 gtk_pixmap_set (GTK_PIXMAP (pixwid), book_closed, book_closed_mask);
5535 pixwid = ((GtkBoxChild*) (GTK_BOX (oldpage->menu_label)->children->data))->widget;
5536 gtk_pixmap_set (GTK_PIXMAP (pixwid), book_closed, book_closed_mask);
5541 create_pages (GtkNotebook *notebook, gint start, gint end)
5543 GtkWidget *child = NULL;
5548 GtkWidget *label_box;
5549 GtkWidget *menu_box;
5555 for (i = start; i <= end; i++)
5557 sprintf (buffer, "Page %d", i);
5562 child = gtk_button_new_with_label (buffer);
5563 gtk_container_border_width (GTK_CONTAINER(child), 10);
5566 child = gtk_label_new (buffer);
5569 child = gtk_frame_new (buffer);
5570 gtk_container_border_width (GTK_CONTAINER (child), 10);
5572 box = gtk_vbox_new (TRUE,0);
5573 gtk_container_border_width (GTK_CONTAINER (box), 10);
5574 gtk_container_add (GTK_CONTAINER (child), box);
5576 label = gtk_label_new (buffer);
5577 gtk_box_pack_start (GTK_BOX(box), label, TRUE, TRUE, 5);
5579 entry = gtk_entry_new ();
5580 gtk_box_pack_start (GTK_BOX(box), entry, TRUE, TRUE, 5);
5582 hbox = gtk_hbox_new (TRUE,0);
5583 gtk_box_pack_start (GTK_BOX(box), hbox, TRUE, TRUE, 5);
5585 button = gtk_button_new_with_label ("Ok");
5586 gtk_box_pack_start (GTK_BOX(hbox), button, TRUE, TRUE, 5);
5588 button = gtk_button_new_with_label ("Cancel");
5589 gtk_box_pack_start (GTK_BOX(hbox), button, TRUE, TRUE, 5);
5592 child = gtk_frame_new (buffer);
5593 gtk_container_border_width (GTK_CONTAINER (child), 10);
5595 label = gtk_label_new (buffer);
5596 gtk_container_add (GTK_CONTAINER (child), label);
5600 gtk_widget_show_all (child);
5602 label_box = gtk_hbox_new (FALSE, 0);
5603 pixwid = gtk_pixmap_new (book_closed, book_closed_mask);
5604 gtk_box_pack_start (GTK_BOX (label_box), pixwid, FALSE, TRUE, 0);
5605 gtk_misc_set_padding (GTK_MISC (pixwid), 3, 1);
5606 label = gtk_label_new (buffer);
5607 gtk_box_pack_start (GTK_BOX (label_box), label, FALSE, TRUE, 0);
5608 gtk_widget_show_all (label_box);
5610 menu_box = gtk_hbox_new (FALSE, 0);
5611 pixwid = gtk_pixmap_new (book_closed, book_closed_mask);
5612 gtk_box_pack_start (GTK_BOX (menu_box), pixwid, FALSE, TRUE, 0);
5613 gtk_misc_set_padding (GTK_MISC (pixwid), 3, 1);
5614 label = gtk_label_new (buffer);
5615 gtk_box_pack_start (GTK_BOX (menu_box), label, FALSE, TRUE, 0);
5616 gtk_widget_show_all (menu_box);
5618 gtk_notebook_append_page_menu (notebook, child, label_box, menu_box);
5623 rotate_notebook (GtkButton *button,
5624 GtkNotebook *notebook)
5626 gtk_notebook_set_tab_pos (notebook, (notebook->tab_pos + 1) % 4);
5630 standard_notebook (GtkButton *button,
5631 GtkNotebook *notebook)
5635 gtk_notebook_set_show_tabs (notebook, TRUE);
5636 gtk_notebook_set_scrollable (notebook, FALSE);
5637 if (g_list_length (notebook->children) == 15)
5638 for (i = 0; i < 10; i++)
5639 gtk_notebook_remove_page (notebook, 5);
5643 notabs_notebook (GtkButton *button,
5644 GtkNotebook *notebook)
5648 gtk_notebook_set_show_tabs (notebook, FALSE);
5649 if (g_list_length (notebook->children) == 15)
5650 for (i = 0; i < 10; i++)
5651 gtk_notebook_remove_page (notebook, 5);
5655 scrollable_notebook (GtkButton *button,
5656 GtkNotebook *notebook)
5658 gtk_notebook_set_show_tabs (notebook, TRUE);
5659 gtk_notebook_set_scrollable (notebook, TRUE);
5660 if (g_list_length (notebook->children) == 5)
5661 create_pages (notebook, 6, 15);
5665 notebook_popup (GtkToggleButton *button,
5666 GtkNotebook *notebook)
5669 gtk_notebook_popup_enable (notebook);
5671 gtk_notebook_popup_disable (notebook);
5675 create_notebook (void)
5677 static GtkWidget *window = NULL;
5681 GtkWidget *separator;
5682 GtkWidget *notebook;
5684 GdkColor *transparent = NULL;
5686 static OptionMenuItem items[] =
5688 { "Standard", standard_notebook },
5689 { "No tabs", notabs_notebook },
5690 { "Scrollable", scrollable_notebook }
5695 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5697 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5698 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5701 gtk_window_set_title (GTK_WINDOW (window), "notebook");
5702 gtk_container_border_width (GTK_CONTAINER (window), 0);
5704 box1 = gtk_vbox_new (FALSE, 0);
5705 gtk_container_add (GTK_CONTAINER (window), box1);
5707 notebook = gtk_notebook_new ();
5708 gtk_signal_connect (GTK_OBJECT (notebook), "switch_page",
5709 GTK_SIGNAL_FUNC (page_switch), NULL);
5710 gtk_notebook_set_tab_pos (GTK_NOTEBOOK (notebook), GTK_POS_TOP);
5711 gtk_box_pack_start (GTK_BOX (box1), notebook, TRUE, TRUE, 0);
5712 gtk_container_border_width (GTK_CONTAINER (notebook), 10);
5714 gtk_widget_realize (notebook);
5715 book_open = gdk_pixmap_create_from_xpm_d (notebook->window,
5719 book_closed = gdk_pixmap_create_from_xpm_d (notebook->window,
5724 create_pages (GTK_NOTEBOOK (notebook), 1, 5);
5726 separator = gtk_hseparator_new ();
5727 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 10);
5729 box2 = gtk_hbox_new (TRUE, 5);
5730 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
5732 omenu = build_option_menu (items, 3, 0, notebook);
5733 gtk_box_pack_start (GTK_BOX (box2), omenu, FALSE, FALSE, 0);
5735 button = gtk_check_button_new_with_label ("enable popup menu");
5736 gtk_box_pack_start (GTK_BOX (box2), button, FALSE, FALSE, 0);
5737 gtk_signal_connect (GTK_OBJECT(button), "clicked",
5738 GTK_SIGNAL_FUNC (notebook_popup),
5739 GTK_OBJECT (notebook));
5741 box2 = gtk_hbox_new (TRUE, 10);
5742 gtk_container_border_width (GTK_CONTAINER (box2), 10);
5743 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
5745 button = gtk_button_new_with_label ("close");
5746 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5747 GTK_SIGNAL_FUNC (gtk_widget_destroy),
5748 GTK_OBJECT (window));
5749 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
5750 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5751 gtk_widget_grab_default (button);
5753 button = gtk_button_new_with_label ("next");
5754 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5755 GTK_SIGNAL_FUNC (gtk_notebook_next_page),
5756 GTK_OBJECT (notebook));
5757 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
5758 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5760 button = gtk_button_new_with_label ("prev");
5761 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5762 GTK_SIGNAL_FUNC (gtk_notebook_prev_page),
5763 GTK_OBJECT (notebook));
5764 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
5765 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5767 button = gtk_button_new_with_label ("rotate");
5768 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5769 GTK_SIGNAL_FUNC (rotate_notebook),
5771 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
5772 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5775 if (!GTK_WIDGET_VISIBLE (window))
5776 gtk_widget_show_all (window);
5778 gtk_widget_destroy (window);
5788 static GtkWidget *window = NULL;
5796 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5798 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5799 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5802 gtk_window_set_title (GTK_WINDOW (window), "Panes");
5803 gtk_container_border_width (GTK_CONTAINER (window), 0);
5805 vpaned = gtk_vpaned_new ();
5806 gtk_container_add (GTK_CONTAINER (window), vpaned);
5807 gtk_container_border_width (GTK_CONTAINER(vpaned), 5);
5808 gtk_widget_show (vpaned);
5810 hpaned = gtk_hpaned_new ();
5811 gtk_paned_add1 (GTK_PANED (vpaned), hpaned);
5813 frame = gtk_frame_new (NULL);
5814 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
5815 gtk_widget_set_usize (frame, 60, 60);
5816 gtk_paned_add1 (GTK_PANED (hpaned), frame);
5817 gtk_widget_show (frame);
5819 button = gtk_button_new_with_label ("Hi there");
5820 gtk_container_add (GTK_CONTAINER(frame), button);
5821 gtk_widget_show (button);
5823 frame = gtk_frame_new (NULL);
5824 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
5825 gtk_widget_set_usize (frame, 80, 60);
5826 gtk_paned_add2 (GTK_PANED (hpaned), frame);
5827 gtk_widget_show (frame);
5829 gtk_widget_show (hpaned);
5831 frame = gtk_frame_new (NULL);
5832 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
5833 gtk_widget_set_usize (frame, 60, 80);
5834 gtk_paned_add2 (GTK_PANED (vpaned), frame);
5835 gtk_widget_show (frame);
5838 if (!GTK_WIDGET_VISIBLE (window))
5839 gtk_widget_show (window);
5841 gtk_widget_destroy (window);
5849 dnd_drop_destroy_popup (GtkWidget *widget, GtkWindow **window)
5851 if(GTK_IS_BUTTON(widget)) /* I.e. they clicked the close button */
5852 gtk_widget_destroy(GTK_WIDGET(*window));
5854 gtk_grab_remove(GTK_WIDGET(*window));
5862 dnd_drop (GtkWidget *button, GdkEvent *event)
5864 static GtkWidget *window = NULL;
5865 GtkWidget *vbox, *lbl, *btn;
5868 /* DND doesn't obey gtk_grab's, so check if we're already displaying
5869 * drop modal dialog first
5874 window = gtk_window_new(GTK_WINDOW_DIALOG);
5875 gtk_container_border_width (GTK_CONTAINER(window), 10);
5877 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5878 GTK_SIGNAL_FUNC(dnd_drop_destroy_popup),
5880 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
5881 GTK_SIGNAL_FUNC(gtk_false),
5884 vbox = gtk_vbox_new(FALSE, 5);
5886 /* Display message that we got from drop source */
5887 msg = g_malloc(strlen(event->dropdataavailable.data)
5888 + strlen(event->dropdataavailable.data_type) + 100);
5889 sprintf(msg, "Drop data of type %s was:\n\n%s",
5890 event->dropdataavailable.data_type,
5891 (char *)event->dropdataavailable.data);
5892 lbl = gtk_label_new(msg);
5893 gtk_label_set_justify(GTK_LABEL(lbl), GTK_JUSTIFY_FILL);
5895 gtk_widget_show(lbl);
5896 gtk_box_pack_start_defaults(GTK_BOX(vbox), lbl);
5898 /* Provide an obvious way out of this heinousness */
5899 btn = gtk_button_new_with_label("Continue with life in\nspite of this oppression");
5900 gtk_signal_connect_object (GTK_OBJECT (btn), "clicked",
5901 GTK_SIGNAL_FUNC(gtk_widget_destroy),
5902 GTK_OBJECT (window));
5903 gtk_widget_show(btn);
5904 gtk_box_pack_start_defaults(GTK_BOX(vbox), btn);
5906 gtk_container_add(GTK_CONTAINER(window), vbox);
5908 gtk_widget_show(vbox);
5909 gtk_grab_add(window);
5910 gtk_widget_show(window);
5914 dnd_drag_request (GtkWidget *button, GdkEvent *event)
5916 #define DND_STRING "Bill Gates demands royalties for\nyour use of his innovation."
5917 gtk_widget_dnd_data_set (button, event, DND_STRING, strlen(DND_STRING) + 1);
5923 static GtkWidget *window = NULL;
5929 GtkWidget *separator;
5931 /* For clarity... */
5932 char *possible_drag_types[] = {"text/plain"};
5933 char *accepted_drop_types[] = {"text/plain"};
5935 static GtkWidget *drag_icon = NULL;
5936 static GtkWidget *drop_icon = NULL;
5940 GdkPoint hotspot = {5,5};
5944 drag_icon = shape_create_icon ("Modeller.xpm",
5945 440, 140, 0,0, GTK_WINDOW_POPUP);
5947 gtk_signal_connect (GTK_OBJECT (drag_icon), "destroy",
5948 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5951 gtk_widget_hide (drag_icon);
5956 drop_icon = shape_create_icon ("3DRings.xpm",
5957 440, 140, 0,0, GTK_WINDOW_POPUP);
5959 gtk_signal_connect (GTK_OBJECT (drop_icon), "destroy",
5960 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5963 gtk_widget_hide (drop_icon);
5966 gdk_dnd_set_drag_shape(drag_icon->window,
5971 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5973 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5974 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5977 gtk_window_set_title (GTK_WINDOW (window), "Drag -N- Drop");
5978 gtk_container_border_width (GTK_CONTAINER (window), 0);
5980 box1 = gtk_vbox_new (FALSE, 0);
5981 gtk_container_add (GTK_CONTAINER (window), box1);
5982 gtk_widget_show (box1);
5984 box2 = gtk_hbox_new (FALSE, 5);
5985 gtk_container_border_width (GTK_CONTAINER (box2), 10);
5986 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
5987 gtk_widget_show (box2);
5989 frame = gtk_frame_new ("Drag");
5990 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
5991 gtk_widget_show (frame);
5993 box3 = gtk_vbox_new (FALSE, 5);
5994 gtk_container_border_width (GTK_CONTAINER (box3), 5);
5995 gtk_container_add (GTK_CONTAINER (frame), box3);
5996 gtk_widget_show (box3);
6001 button = gtk_button_new_with_label ("Drag me!");
6002 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
6003 gtk_widget_show (button);
6006 * currently, the widget has to be realized to
6007 * set dnd on it, this needs to change
6009 gtk_widget_realize (button);
6010 gtk_signal_connect (GTK_OBJECT (button),
6011 "drag_request_event",
6012 GTK_SIGNAL_FUNC(dnd_drag_request),
6015 gtk_widget_dnd_drag_set (button, TRUE, possible_drag_types, 1);
6018 frame = gtk_frame_new ("Drop");
6019 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
6020 gtk_widget_show (frame);
6022 box3 = gtk_vbox_new (FALSE, 5);
6023 gtk_container_border_width (GTK_CONTAINER (box3), 5);
6024 gtk_container_add (GTK_CONTAINER (frame), box3);
6025 gtk_widget_show (box3);
6031 button = gtk_button_new_with_label ("To");
6032 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
6033 gtk_widget_show (button);
6035 gtk_widget_realize (button);
6036 gtk_signal_connect (GTK_OBJECT (button),
6037 "drop_data_available_event",
6038 GTK_SIGNAL_FUNC(dnd_drop),
6041 gtk_widget_dnd_drop_set (button, TRUE, accepted_drop_types, 1, FALSE);
6044 separator = gtk_hseparator_new ();
6045 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
6046 gtk_widget_show (separator);
6049 box2 = gtk_vbox_new (FALSE, 10);
6050 gtk_container_border_width (GTK_CONTAINER (box2), 10);
6051 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6052 gtk_widget_show (box2);
6055 button = gtk_button_new_with_label ("close");
6057 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6058 GTK_SIGNAL_FUNC(gtk_widget_destroy),
6059 GTK_OBJECT (window));
6061 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6062 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6063 gtk_widget_grab_default (button);
6064 gtk_widget_show (button);
6067 if (!GTK_WIDGET_VISIBLE (window))
6068 gtk_widget_show (window);
6070 gtk_widget_destroy (window);
6077 static GdkWindow *root_win = NULL;
6079 typedef struct _cursoroffset {gint x,y;} CursorOffset;
6082 shape_pressed (GtkWidget *widget, GdkEventButton *event)
6086 /* ignore double and triple click */
6087 if (event->type != GDK_BUTTON_PRESS)
6090 p = gtk_object_get_user_data (GTK_OBJECT(widget));
6091 p->x = (int) event->x;
6092 p->y = (int) event->y;
6094 gtk_grab_add (widget);
6095 gdk_pointer_grab (widget->window, TRUE,
6096 GDK_BUTTON_RELEASE_MASK |
6097 GDK_BUTTON_MOTION_MASK |
6098 GDK_POINTER_MOTION_HINT_MASK,
6103 shape_released (GtkWidget *widget)
6105 gtk_grab_remove (widget);
6106 gdk_pointer_ungrab (0);
6110 shape_motion (GtkWidget *widget,
6111 GdkEventMotion *event)
6115 GdkModifierType mask;
6117 p = gtk_object_get_user_data (GTK_OBJECT (widget));
6120 * Can't use event->x / event->y here
6121 * because I need absolute coordinates.
6123 gdk_window_get_pointer (root_win, &xp, &yp, &mask);
6124 gtk_widget_set_uposition (widget, xp - p->x, yp - p->y);
6128 shape_create_icon (char *xpm_file,
6138 CursorOffset* icon_pos;
6140 GdkBitmap *gdk_pixmap_mask;
6141 GdkPixmap *gdk_pixmap;
6144 style = gtk_widget_get_default_style ();
6145 gc = style->black_gc;
6148 * GDK_WINDOW_TOPLEVEL works also, giving you a title border
6150 window = gtk_window_new (window_type);
6152 fixed = gtk_fixed_new ();
6153 gtk_widget_set_usize (fixed, 100,100);
6154 gtk_container_add (GTK_CONTAINER (window), fixed);
6155 gtk_widget_show (fixed);
6157 gtk_widget_set_events (window,
6158 gtk_widget_get_events (window) |
6159 GDK_BUTTON_MOTION_MASK |
6160 GDK_POINTER_MOTION_HINT_MASK |
6161 GDK_BUTTON_PRESS_MASK);
6163 gtk_widget_realize (window);
6164 gdk_pixmap = gdk_pixmap_create_from_xpm (window->window, &gdk_pixmap_mask,
6165 &style->bg[GTK_STATE_NORMAL],
6168 pixmap = gtk_pixmap_new (gdk_pixmap, gdk_pixmap_mask);
6169 gtk_fixed_put (GTK_FIXED (fixed), pixmap, px,py);
6170 gtk_widget_show (pixmap);
6172 gtk_widget_shape_combine_mask (window, gdk_pixmap_mask, px,py);
6175 gtk_signal_connect (GTK_OBJECT (window), "button_press_event",
6176 GTK_SIGNAL_FUNC (shape_pressed),NULL);
6177 gtk_signal_connect (GTK_OBJECT (window), "button_release_event",
6178 GTK_SIGNAL_FUNC (shape_released),NULL);
6179 gtk_signal_connect (GTK_OBJECT (window), "motion_notify_event",
6180 GTK_SIGNAL_FUNC (shape_motion),NULL);
6182 icon_pos = g_new (CursorOffset, 1);
6183 gtk_object_set_user_data(GTK_OBJECT(window), icon_pos);
6185 gtk_widget_set_uposition (window, x, y);
6186 gtk_widget_show (window);
6192 create_shapes (void)
6194 /* Variables used by the Drag/Drop and Shape Window demos */
6195 static GtkWidget *modeller = NULL;
6196 static GtkWidget *sheets = NULL;
6197 static GtkWidget *rings = NULL;
6199 root_win = gdk_window_foreign_new (GDK_ROOT_WINDOW ());
6203 modeller = shape_create_icon ("Modeller.xpm",
6204 440, 140, 0,0, GTK_WINDOW_POPUP);
6206 gtk_signal_connect (GTK_OBJECT (modeller), "destroy",
6207 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6211 gtk_widget_destroy (modeller);
6215 sheets = shape_create_icon ("FilesQueue.xpm",
6216 580, 170, 0,0, GTK_WINDOW_POPUP);
6218 gtk_signal_connect (GTK_OBJECT (sheets), "destroy",
6219 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6224 gtk_widget_destroy (sheets);
6228 rings = shape_create_icon ("3DRings.xpm",
6229 460, 270, 25,25, GTK_WINDOW_TOPLEVEL);
6231 gtk_signal_connect (GTK_OBJECT (rings), "destroy",
6232 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6236 gtk_widget_destroy (rings);
6244 create_wmhints (void)
6246 static GtkWidget *window = NULL;
6248 GtkWidget *separator;
6257 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6259 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6260 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6263 gtk_window_set_title (GTK_WINDOW (window), "WM Hints");
6264 gtk_container_border_width (GTK_CONTAINER (window), 0);
6266 gtk_widget_realize (window);
6268 circles = gdk_bitmap_create_from_data (window->window,
6272 gdk_window_set_icon (window->window, NULL,
6275 gdk_window_set_icon_name (window->window, "WMHints Test Icon");
6277 gdk_window_set_decorations (window->window, GDK_DECOR_ALL | GDK_DECOR_MENU);
6278 gdk_window_set_functions (window->window, GDK_FUNC_ALL | GDK_FUNC_RESIZE);
6280 box1 = gtk_vbox_new (FALSE, 0);
6281 gtk_container_add (GTK_CONTAINER (window), box1);
6282 gtk_widget_show (box1);
6284 label = gtk_label_new ("Try iconizing me!");
6285 gtk_widget_set_usize (label, 150, 50);
6286 gtk_box_pack_start (GTK_BOX (box1), label, TRUE, TRUE, 0);
6287 gtk_widget_show (label);
6290 separator = gtk_hseparator_new ();
6291 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
6292 gtk_widget_show (separator);
6295 box2 = gtk_vbox_new (FALSE, 10);
6296 gtk_container_border_width (GTK_CONTAINER (box2), 10);
6297 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6298 gtk_widget_show (box2);
6301 button = gtk_button_new_with_label ("close");
6303 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6304 GTK_SIGNAL_FUNC(gtk_widget_destroy),
6305 GTK_OBJECT (window));
6307 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6308 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6309 gtk_widget_grab_default (button);
6310 gtk_widget_show (button);
6313 if (!GTK_WIDGET_VISIBLE (window))
6314 gtk_widget_show (window);
6316 gtk_widget_destroy (window);
6323 typedef struct _ProgressData {
6326 GtkWidget *block_spin;
6327 GtkWidget *x_align_spin;
6328 GtkWidget *y_align_spin;
6329 GtkWidget *step_spin;
6330 GtkWidget *act_blocks_spin;
6339 progress_timeout (gpointer data)
6344 adj = GTK_PROGRESS (data)->adjustment;
6346 new_val = adj->value + 1;
6347 if (new_val > adj->upper)
6348 new_val = adj->lower;
6350 gtk_progress_set_value (GTK_PROGRESS (data), new_val);
6356 destroy_progress (GtkWidget *widget,
6357 ProgressData **pdata)
6359 gtk_timeout_remove ((*pdata)->timer);
6360 (*pdata)->timer = 0;
6361 (*pdata)->window = NULL;
6367 progressbar_toggle_orientation (GtkWidget *widget, ProgressData *pdata)
6371 if (!GTK_WIDGET_MAPPED (widget))
6374 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
6375 (((GtkOptionMenu *)(pdata->omenu1))->menu_item), i);
6377 gtk_progress_bar_set_orientation (GTK_PROGRESS_BAR (pdata->pbar),
6378 (GtkProgressBarOrientation) (3-i));
6382 toggle_show_text (GtkWidget *widget, ProgressData *pdata)
6384 gtk_progress_set_show_text (GTK_PROGRESS (pdata->pbar),
6385 GTK_TOGGLE_BUTTON (widget)->active);
6386 gtk_widget_set_sensitive (pdata->entry, GTK_TOGGLE_BUTTON (widget)->active);
6387 gtk_widget_set_sensitive (pdata->x_align_spin,
6388 GTK_TOGGLE_BUTTON (widget)->active);
6389 gtk_widget_set_sensitive (pdata->y_align_spin,
6390 GTK_TOGGLE_BUTTON (widget)->active);
6394 progressbar_toggle_bar_style (GtkWidget *widget, ProgressData *pdata)
6398 if (!GTK_WIDGET_MAPPED (widget))
6401 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
6402 (((GtkOptionMenu *)(pdata->omenu2))->menu_item), i);
6407 gtk_widget_set_sensitive (pdata->block_spin, TRUE);
6409 gtk_widget_set_sensitive (pdata->block_spin, FALSE);
6411 gtk_progress_bar_set_bar_style (GTK_PROGRESS_BAR (pdata->pbar),
6412 (GtkProgressBarStyle) i);
6416 progress_value_changed (GtkAdjustment *adj, ProgressData *pdata)
6420 if (GTK_PROGRESS (pdata->pbar)->activity_mode)
6421 sprintf (buf, "???");
6423 sprintf (buf, "%.0f%%", 100 *
6424 gtk_progress_get_current_percentage (GTK_PROGRESS (pdata->pbar)));
6425 gtk_label_set (GTK_LABEL (pdata->label), buf);
6429 adjust_blocks (GtkAdjustment *adj, ProgressData *pdata)
6431 gtk_progress_set_percentage (GTK_PROGRESS (pdata->pbar), 0);
6432 gtk_progress_bar_set_discrete_blocks (GTK_PROGRESS_BAR (pdata->pbar),
6433 gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (pdata->block_spin)));
6437 adjust_step (GtkAdjustment *adj, ProgressData *pdata)
6439 gtk_progress_bar_set_activity_step (GTK_PROGRESS_BAR (pdata->pbar),
6440 gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (pdata->step_spin)));
6444 adjust_act_blocks (GtkAdjustment *adj, ProgressData *pdata)
6446 gtk_progress_bar_set_activity_blocks (GTK_PROGRESS_BAR (pdata->pbar),
6447 gtk_spin_button_get_value_as_int
6448 (GTK_SPIN_BUTTON (pdata->act_blocks_spin)));
6452 adjust_align (GtkAdjustment *adj, ProgressData *pdata)
6454 gtk_progress_set_text_alignment (GTK_PROGRESS (pdata->pbar),
6455 gtk_spin_button_get_value_as_float
6456 (GTK_SPIN_BUTTON (pdata->x_align_spin)),
6457 gtk_spin_button_get_value_as_float
6458 (GTK_SPIN_BUTTON (pdata->y_align_spin)));
6462 toggle_activity_mode (GtkWidget *widget, ProgressData *pdata)
6464 gtk_progress_set_activity_mode (GTK_PROGRESS (pdata->pbar),
6465 GTK_TOGGLE_BUTTON (widget)->active);
6466 gtk_widget_set_sensitive (pdata->step_spin,
6467 GTK_TOGGLE_BUTTON (widget)->active);
6468 gtk_widget_set_sensitive (pdata->act_blocks_spin,
6469 GTK_TOGGLE_BUTTON (widget)->active);
6473 entry_changed (GtkWidget *widget, ProgressData *pdata)
6475 gtk_progress_set_format_string (GTK_PROGRESS (pdata->pbar),
6476 gtk_entry_get_text (GTK_ENTRY (pdata->entry)));
6480 create_progress_bar (void)
6492 static ProgressData *pdata = NULL;
6494 static OptionMenuItem items1[] =
6496 { "Left-Right", progressbar_toggle_orientation },
6497 { "Right-Left", progressbar_toggle_orientation },
6498 { "Bottom-Top", progressbar_toggle_orientation },
6499 { "Top-Bottom", progressbar_toggle_orientation }
6502 static OptionMenuItem items2[] =
6504 { "Continuous", progressbar_toggle_bar_style },
6505 { "Discrete", progressbar_toggle_bar_style }
6509 pdata = g_new0 (ProgressData, 1);
6513 pdata->window = gtk_dialog_new ();
6515 gtk_window_set_policy (GTK_WINDOW (pdata->window), FALSE, FALSE, TRUE);
6517 gtk_signal_connect (GTK_OBJECT (pdata->window), "destroy",
6518 GTK_SIGNAL_FUNC (destroy_progress),
6523 gtk_window_set_title (GTK_WINDOW (pdata->window), "GtkProgressBar");
6524 gtk_container_border_width (GTK_CONTAINER (pdata->window), 0);
6526 vbox = gtk_vbox_new (FALSE, 5);
6527 gtk_container_border_width (GTK_CONTAINER (vbox), 10);
6528 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (pdata->window)->vbox),
6529 vbox, FALSE, TRUE, 0);
6531 frame = gtk_frame_new ("Progress");
6532 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
6534 vbox2 = gtk_vbox_new (FALSE, 5);
6535 gtk_container_add (GTK_CONTAINER (frame), vbox2);
6537 align = gtk_alignment_new (0.5, 0.5, 0, 0);
6538 gtk_box_pack_start (GTK_BOX (vbox2), align, FALSE, FALSE, 5);
6540 adj = (GtkAdjustment *) gtk_adjustment_new (0, 1, 300, 0, 0, 0);
6541 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
6542 GTK_SIGNAL_FUNC (progress_value_changed), pdata);
6544 pdata->pbar = gtk_progress_bar_new_with_adjustment (adj);
6545 gtk_progress_set_format_string (GTK_PROGRESS (pdata->pbar),
6546 "%v from [%l,%u] (=%p%%)");
6547 gtk_container_add (GTK_CONTAINER (align), pdata->pbar);
6548 pdata->timer = gtk_timeout_add (100, progress_timeout, pdata->pbar);
6550 align = gtk_alignment_new (0.5, 0.5, 0, 0);
6551 gtk_box_pack_start (GTK_BOX (vbox2), align, FALSE, FALSE, 5);
6553 hbox = gtk_hbox_new (FALSE, 5);
6554 gtk_container_add (GTK_CONTAINER (align), hbox);
6555 label = gtk_label_new ("Label updated by user :");
6556 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
6557 pdata->label = gtk_label_new ("");
6558 gtk_box_pack_start (GTK_BOX (hbox), pdata->label, FALSE, TRUE, 0);
6560 frame = gtk_frame_new ("Options");
6561 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
6563 vbox2 = gtk_vbox_new (FALSE, 5);
6564 gtk_container_add (GTK_CONTAINER (frame), vbox2);
6566 tab = gtk_table_new (7, 2, FALSE);
6567 gtk_box_pack_start (GTK_BOX (vbox2), tab, FALSE, TRUE, 0);
6569 label = gtk_label_new ("Orientation :");
6570 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 0, 1,
6571 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
6573 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
6575 pdata->omenu1 = build_option_menu (items1, 4, 0, pdata);
6576 hbox = gtk_hbox_new (FALSE, 0);
6577 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 0, 1,
6578 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
6580 gtk_box_pack_start (GTK_BOX (hbox), pdata->omenu1, TRUE, TRUE, 0);
6582 check = gtk_check_button_new_with_label ("Show text");
6583 gtk_signal_connect (GTK_OBJECT (check), "clicked",
6584 GTK_SIGNAL_FUNC (toggle_show_text),
6586 gtk_table_attach (GTK_TABLE (tab), check, 0, 1, 1, 2,
6587 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
6590 hbox = gtk_hbox_new (FALSE, 0);
6591 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 1, 2,
6592 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
6595 label = gtk_label_new ("Format : ");
6596 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
6598 pdata->entry = gtk_entry_new ();
6599 gtk_signal_connect (GTK_OBJECT (pdata->entry), "changed",
6600 GTK_SIGNAL_FUNC (entry_changed),
6602 gtk_box_pack_start (GTK_BOX (hbox), pdata->entry, TRUE, TRUE, 0);
6603 gtk_entry_set_text (GTK_ENTRY (pdata->entry), "%v from [%l,%u] (=%p%%)");
6604 gtk_widget_set_usize (pdata->entry, 100, -1);
6605 gtk_widget_set_sensitive (pdata->entry, FALSE);
6607 label = gtk_label_new ("Text align :");
6608 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 2, 3,
6609 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
6611 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
6613 hbox = gtk_hbox_new (FALSE, 0);
6614 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 2, 3,
6615 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
6618 label = gtk_label_new ("x :");
6619 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 5);
6621 adj = (GtkAdjustment *) gtk_adjustment_new (0.5, 0, 1, 0.1, 0.1, 0);
6622 pdata->x_align_spin = gtk_spin_button_new (adj, 0, 1);
6623 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
6624 GTK_SIGNAL_FUNC (adjust_align), pdata);
6625 gtk_box_pack_start (GTK_BOX (hbox), pdata->x_align_spin, FALSE, TRUE, 0);
6626 gtk_widget_set_sensitive (pdata->x_align_spin, FALSE);
6628 label = gtk_label_new ("y :");
6629 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 5);
6631 adj = (GtkAdjustment *) gtk_adjustment_new (0.5, 0, 1, 0.1, 0.1, 0);
6632 pdata->y_align_spin = gtk_spin_button_new (adj, 0, 1);
6633 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
6634 GTK_SIGNAL_FUNC (adjust_align), pdata);
6635 gtk_box_pack_start (GTK_BOX (hbox), pdata->y_align_spin, FALSE, TRUE, 0);
6636 gtk_widget_set_sensitive (pdata->y_align_spin, FALSE);
6638 label = gtk_label_new ("Bar Style :");
6639 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 3, 4,
6640 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
6642 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
6644 pdata->omenu2 = build_option_menu (items2, 2, 0, pdata);
6645 hbox = gtk_hbox_new (FALSE, 0);
6646 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 3, 4,
6647 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
6649 gtk_box_pack_start (GTK_BOX (hbox), pdata->omenu2, TRUE, TRUE, 0);
6651 label = gtk_label_new ("Block count :");
6652 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 4, 5,
6653 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
6655 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
6657 hbox = gtk_hbox_new (FALSE, 0);
6658 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 4, 5,
6659 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
6661 adj = (GtkAdjustment *) gtk_adjustment_new (10, 2, 20, 1, 5, 0);
6662 pdata->block_spin = gtk_spin_button_new (adj, 0, 0);
6663 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
6664 GTK_SIGNAL_FUNC (adjust_blocks), pdata);
6665 gtk_box_pack_start (GTK_BOX (hbox), pdata->block_spin, FALSE, TRUE, 0);
6666 gtk_widget_set_sensitive (pdata->block_spin, FALSE);
6668 check = gtk_check_button_new_with_label ("Activity mode");
6669 gtk_signal_connect (GTK_OBJECT (check), "clicked",
6670 GTK_SIGNAL_FUNC (toggle_activity_mode),
6672 gtk_table_attach (GTK_TABLE (tab), check, 0, 1, 5, 6,
6673 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
6676 hbox = gtk_hbox_new (FALSE, 0);
6677 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 5, 6,
6678 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
6680 label = gtk_label_new ("Step size : ");
6681 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
6682 adj = (GtkAdjustment *) gtk_adjustment_new (3, 1, 20, 1, 5, 0);
6683 pdata->step_spin = gtk_spin_button_new (adj, 0, 0);
6684 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
6685 GTK_SIGNAL_FUNC (adjust_step), pdata);
6686 gtk_box_pack_start (GTK_BOX (hbox), pdata->step_spin, FALSE, TRUE, 0);
6687 gtk_widget_set_sensitive (pdata->step_spin, FALSE);
6689 hbox = gtk_hbox_new (FALSE, 0);
6690 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 6, 7,
6691 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
6693 label = gtk_label_new ("Blocks : ");
6694 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
6695 adj = (GtkAdjustment *) gtk_adjustment_new (5, 2, 10, 1, 5, 0);
6696 pdata->act_blocks_spin = gtk_spin_button_new (adj, 0, 0);
6697 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
6698 GTK_SIGNAL_FUNC (adjust_act_blocks), pdata);
6699 gtk_box_pack_start (GTK_BOX (hbox), pdata->act_blocks_spin, FALSE, TRUE,
6701 gtk_widget_set_sensitive (pdata->act_blocks_spin, FALSE);
6703 button = gtk_button_new_with_label ("close");
6704 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6705 GTK_SIGNAL_FUNC (gtk_widget_destroy),
6706 GTK_OBJECT (pdata->window));
6707 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6708 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (pdata->window)->action_area),
6709 button, TRUE, TRUE, 0);
6710 gtk_widget_grab_default (button);
6713 if (!GTK_WIDGET_VISIBLE (pdata->window))
6714 gtk_widget_show_all (pdata->window);
6716 gtk_widget_destroy (pdata->window);
6723 static int color_idle = 0;
6726 color_idle_func (GtkWidget *preview)
6728 static int count = 1;
6732 for (i = 0; i < 256; i++)
6734 for (j = 0, k = 0; j < 256; j++)
6736 buf[k+0] = i + count;
6738 buf[k+2] = j + count;
6742 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
6747 gtk_widget_draw (preview, NULL);
6753 color_preview_destroy (GtkWidget *widget,
6756 gtk_idle_remove (color_idle);
6763 create_color_preview (void)
6765 static GtkWidget *window = NULL;
6772 gtk_widget_push_visual (gdk_rgb_get_visual ());
6773 gtk_widget_push_colormap (gdk_rgb_get_cmap ());
6774 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6775 gtk_widget_pop_colormap ();
6776 gtk_widget_pop_visual ();
6778 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6779 GTK_SIGNAL_FUNC(color_preview_destroy),
6782 gtk_window_set_title (GTK_WINDOW (window), "test");
6783 gtk_container_border_width (GTK_CONTAINER (window), 10);
6785 preview = gtk_preview_new (GTK_PREVIEW_COLOR);
6786 gtk_preview_size (GTK_PREVIEW (preview), 256, 256);
6787 gtk_container_add (GTK_CONTAINER (window), preview);
6789 for (i = 0; i < 256; i++)
6791 for (j = 0, k = 0; j < 256; j++)
6799 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
6802 color_idle = gtk_idle_add ((GtkFunction) color_idle_func, preview);
6805 if (!GTK_WIDGET_VISIBLE (window))
6806 gtk_widget_show_all (window);
6808 gtk_widget_destroy (window);
6815 static int gray_idle = 0;
6818 gray_idle_func (GtkWidget *preview)
6820 static int count = 1;
6824 for (i = 0; i < 256; i++)
6826 for (j = 0; j < 256; j++)
6827 buf[j] = i + j + count;
6829 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
6834 gtk_widget_draw (preview, NULL);
6840 gray_preview_destroy (GtkWidget *widget,
6843 gtk_idle_remove (gray_idle);
6850 create_gray_preview (void)
6852 static GtkWidget *window = NULL;
6859 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6861 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6862 GTK_SIGNAL_FUNC(gray_preview_destroy),
6865 gtk_window_set_title (GTK_WINDOW (window), "test");
6866 gtk_container_border_width (GTK_CONTAINER (window), 10);
6868 preview = gtk_preview_new (GTK_PREVIEW_GRAYSCALE);
6869 gtk_preview_size (GTK_PREVIEW (preview), 256, 256);
6870 gtk_container_add (GTK_CONTAINER (window), preview);
6872 for (i = 0; i < 256; i++)
6874 for (j = 0; j < 256; j++)
6877 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
6880 gray_idle = gtk_idle_add ((GtkFunction) gray_idle_func, preview);
6883 if (!GTK_WIDGET_VISIBLE (window))
6884 gtk_widget_show_all (window);
6886 gtk_widget_destroy (window);
6895 selection_test_received (GtkWidget *list, GtkSelectionData *data)
6898 GtkWidget *list_item;
6902 if (data->length < 0)
6904 g_print ("Selection retrieval failed\n");
6907 if (data->type != GDK_SELECTION_TYPE_ATOM)
6909 g_print ("Selection \"TARGETS\" was not returned as atoms!\n");
6913 /* Clear out any current list items */
6915 gtk_list_clear_items (GTK_LIST(list), 0, -1);
6917 /* Add new items to list */
6919 atoms = (GdkAtom *)data->data;
6922 l = data->length / sizeof (GdkAtom);
6923 for (i = 0; i < l; i++)
6926 name = gdk_atom_name (atoms[i]);
6929 list_item = gtk_list_item_new_with_label (name);
6933 list_item = gtk_list_item_new_with_label ("(bad atom)");
6935 gtk_widget_show (list_item);
6936 item_list = g_list_append (item_list, list_item);
6939 gtk_list_append_items (GTK_LIST (list), item_list);
6945 selection_test_get_targets (GtkWidget *widget, GtkWidget *list)
6947 static GdkAtom targets_atom = GDK_NONE;
6949 if (targets_atom == GDK_NONE)
6950 targets_atom = gdk_atom_intern ("TARGETS", FALSE);
6952 gtk_selection_convert (list, GDK_SELECTION_PRIMARY, targets_atom,
6957 create_selection_test (void)
6959 static GtkWidget *window = NULL;
6962 GtkWidget *scrolled_win;
6968 window = gtk_dialog_new ();
6970 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6971 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6974 gtk_window_set_title (GTK_WINDOW (window), "Selection Test");
6975 gtk_container_border_width (GTK_CONTAINER (window), 0);
6977 /* Create the list */
6979 vbox = gtk_vbox_new (FALSE, 5);
6980 gtk_container_border_width (GTK_CONTAINER (vbox), 10);
6981 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), vbox,
6984 label = gtk_label_new ("Gets available targets for current selection");
6985 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
6987 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
6988 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
6989 GTK_POLICY_AUTOMATIC,
6990 GTK_POLICY_AUTOMATIC);
6991 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
6992 gtk_widget_set_usize (scrolled_win, 100, 200);
6994 list = gtk_list_new ();
6995 gtk_container_add (GTK_CONTAINER (scrolled_win), list);
6997 gtk_signal_connect (GTK_OBJECT(list), "selection_received",
6998 GTK_SIGNAL_FUNC (selection_test_received), NULL);
7000 /* .. And create some buttons */
7001 button = gtk_button_new_with_label ("Get Targets");
7002 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7003 button, TRUE, TRUE, 0);
7005 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7006 GTK_SIGNAL_FUNC (selection_test_get_targets), list);
7008 button = gtk_button_new_with_label ("Quit");
7009 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7010 button, TRUE, TRUE, 0);
7012 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7013 GTK_SIGNAL_FUNC (gtk_widget_destroy),
7014 GTK_OBJECT (window));
7017 if (!GTK_WIDGET_VISIBLE (window))
7018 gtk_widget_show_all (window);
7020 gtk_widget_destroy (window);
7028 create_gamma_curve (void)
7030 static GtkWidget *window = NULL, *curve;
7031 static int count = 0;
7038 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7039 gtk_window_set_title (GTK_WINDOW (window), "test");
7040 gtk_container_border_width (GTK_CONTAINER (window), 10);
7042 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7043 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7046 curve = gtk_gamma_curve_new ();
7047 gtk_container_add (GTK_CONTAINER (window), curve);
7048 gtk_widget_show (curve);
7051 max = 127 + (count % 2)*128;
7052 gtk_curve_set_range (GTK_CURVE (GTK_GAMMA_CURVE (curve)->curve),
7054 for (i = 0; i < max; ++i)
7055 vec[i] = (127 / sqrt (max)) * sqrt (i);
7056 gtk_curve_set_vector (GTK_CURVE (GTK_GAMMA_CURVE (curve)->curve),
7059 if (!GTK_WIDGET_VISIBLE (window))
7060 gtk_widget_show (window);
7061 else if (count % 4 == 3)
7063 gtk_widget_destroy (window);
7074 static int scroll_test_pos = 0.0;
7075 static GdkGC *scroll_test_gc = NULL;
7078 scroll_test_expose (GtkWidget *widget, GdkEventExpose *event,
7082 gint imin, imax, jmin, jmax;
7084 imin = (event->area.x) / 10;
7085 imax = (event->area.x + event->area.width + 9) / 10;
7087 jmin = ((int)adj->value + event->area.y) / 10;
7088 jmax = ((int)adj->value + event->area.y + event->area.height + 9) / 10;
7090 gdk_window_clear_area (widget->window,
7091 event->area.x, event->area.y,
7092 event->area.width, event->area.height);
7094 for (i=imin; i<imax; i++)
7095 for (j=jmin; j<jmax; j++)
7097 gdk_draw_rectangle (widget->window,
7098 widget->style->black_gc,
7100 10*i, 10*j - (int)adj->value, 1+i%10, 1+j%10);
7106 scroll_test_configure (GtkWidget *widget, GdkEventConfigure *event,
7109 adj->page_increment = 0.9 * widget->allocation.height;
7110 adj->page_size = widget->allocation.height;
7112 gtk_signal_emit_by_name (GTK_OBJECT (adj), "changed");
7116 scroll_test_adjustment_changed (GtkAdjustment *adj, GtkWidget *widget)
7118 gint source_min = (int)adj->value - scroll_test_pos;
7119 gint source_max = source_min + widget->allocation.height;
7121 gint dest_max = widget->allocation.height;
7125 scroll_test_pos = adj->value;
7127 if (!GTK_WIDGET_DRAWABLE (widget))
7134 rect.width = widget->allocation.width;
7135 rect.height = -source_min;
7136 if (rect.height > widget->allocation.height)
7137 rect.height = widget->allocation.height;
7140 dest_min = rect.height;
7145 rect.y = 2*widget->allocation.height - source_max;
7148 rect.width = widget->allocation.width;
7149 rect.height = widget->allocation.height - rect.y;
7151 source_max = widget->allocation.height;
7155 if (source_min != source_max)
7157 if (scroll_test_gc == NULL)
7159 scroll_test_gc = gdk_gc_new (widget->window);
7160 gdk_gc_set_exposures (scroll_test_gc, TRUE);
7163 gdk_draw_pixmap (widget->window,
7168 widget->allocation.width,
7169 source_max - source_min);
7171 /* Make sure graphics expose events are processed before scrolling
7174 while ((event = gdk_event_get_graphics_expose (widget->window)) != NULL)
7176 gtk_widget_event (widget, event);
7177 if (event->expose.count == 0)
7179 gdk_event_free (event);
7182 gdk_event_free (event);
7186 if (rect.height != 0)
7187 gtk_widget_draw (widget, &rect);
7192 create_scroll_test (void)
7194 static GtkWidget *window = NULL;
7196 GtkWidget *drawing_area;
7197 GtkWidget *scrollbar;
7203 window = gtk_dialog_new ();
7205 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7206 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7209 gtk_window_set_title (GTK_WINDOW (window), "Scroll Test");
7210 gtk_container_border_width (GTK_CONTAINER (window), 0);
7212 hbox = gtk_hbox_new (FALSE, 0);
7213 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), hbox,
7215 gtk_widget_show (hbox);
7217 drawing_area = gtk_drawing_area_new ();
7218 gtk_drawing_area_size (GTK_DRAWING_AREA (drawing_area), 200, 200);
7219 gtk_box_pack_start (GTK_BOX (hbox), drawing_area, TRUE, TRUE, 0);
7220 gtk_widget_show (drawing_area);
7222 gtk_widget_set_events (drawing_area, GDK_EXPOSURE_MASK);
7224 adj = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.0, 1000.0, 1.0, 180.0, 200.0));
7225 scroll_test_pos = 0.0;
7227 scrollbar = gtk_vscrollbar_new (adj);
7228 gtk_box_pack_start (GTK_BOX (hbox), scrollbar, FALSE, FALSE, 0);
7229 gtk_widget_show (scrollbar);
7231 gtk_signal_connect (GTK_OBJECT (drawing_area), "expose_event",
7232 GTK_SIGNAL_FUNC (scroll_test_expose), adj);
7233 gtk_signal_connect (GTK_OBJECT (drawing_area), "configure_event",
7234 GTK_SIGNAL_FUNC (scroll_test_configure), adj);
7237 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
7238 GTK_SIGNAL_FUNC (scroll_test_adjustment_changed),
7241 /* .. And create some buttons */
7243 button = gtk_button_new_with_label ("Quit");
7244 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7245 button, TRUE, TRUE, 0);
7247 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7248 GTK_SIGNAL_FUNC (gtk_widget_destroy),
7249 GTK_OBJECT (window));
7250 gtk_widget_show (button);
7253 if (!GTK_WIDGET_VISIBLE (window))
7254 gtk_widget_show (window);
7256 gtk_widget_destroy (window);
7263 static int timer = 0;
7266 timeout_test (GtkWidget *label)
7268 static int count = 0;
7269 static char buffer[32];
7271 sprintf (buffer, "count: %d", ++count);
7272 gtk_label_set (GTK_LABEL (label), buffer);
7278 start_timeout_test (GtkWidget *widget,
7283 timer = gtk_timeout_add (100, (GtkFunction) timeout_test, label);
7288 stop_timeout_test (GtkWidget *widget,
7293 gtk_timeout_remove (timer);
7299 destroy_timeout_test (GtkWidget *widget,
7302 stop_timeout_test (NULL, NULL);
7308 create_timeout_test (void)
7310 static GtkWidget *window = NULL;
7316 window = gtk_dialog_new ();
7318 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7319 GTK_SIGNAL_FUNC(destroy_timeout_test),
7322 gtk_window_set_title (GTK_WINDOW (window), "Timeout Test");
7323 gtk_container_border_width (GTK_CONTAINER (window), 0);
7325 label = gtk_label_new ("count: 0");
7326 gtk_misc_set_padding (GTK_MISC (label), 10, 10);
7327 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
7328 label, TRUE, TRUE, 0);
7329 gtk_widget_show (label);
7331 button = gtk_button_new_with_label ("close");
7332 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7333 GTK_SIGNAL_FUNC(gtk_widget_destroy),
7334 GTK_OBJECT (window));
7335 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7336 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7337 button, TRUE, TRUE, 0);
7338 gtk_widget_grab_default (button);
7339 gtk_widget_show (button);
7341 button = gtk_button_new_with_label ("start");
7342 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7343 GTK_SIGNAL_FUNC(start_timeout_test),
7345 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7346 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7347 button, TRUE, TRUE, 0);
7348 gtk_widget_show (button);
7350 button = gtk_button_new_with_label ("stop");
7351 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7352 GTK_SIGNAL_FUNC(stop_timeout_test),
7354 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7355 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7356 button, TRUE, TRUE, 0);
7357 gtk_widget_show (button);
7360 if (!GTK_WIDGET_VISIBLE (window))
7361 gtk_widget_show (window);
7363 gtk_widget_destroy (window);
7370 static int idle = 0;
7373 idle_test (GtkWidget *label)
7375 static int count = 0;
7376 static char buffer[32];
7378 sprintf (buffer, "count: %d", ++count);
7379 gtk_label_set (GTK_LABEL (label), buffer);
7385 start_idle_test (GtkWidget *widget,
7390 idle = gtk_idle_add ((GtkFunction) idle_test, label);
7395 stop_idle_test (GtkWidget *widget,
7400 gtk_idle_remove (idle);
7406 destroy_idle_test (GtkWidget *widget,
7409 stop_idle_test (NULL, NULL);
7415 toggle_idle_container (GtkObject *button,
7416 GtkContainer *container)
7418 gtk_container_set_resize_mode (container, (guint) gtk_object_get_user_data (button));
7422 create_idle_test (void)
7424 static GtkWidget *window = NULL;
7427 GtkWidget *container;
7434 window = gtk_dialog_new ();
7436 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7437 GTK_SIGNAL_FUNC(destroy_idle_test),
7440 gtk_window_set_title (GTK_WINDOW (window), "Idle Test");
7441 gtk_container_border_width (GTK_CONTAINER (window), 0);
7443 label = gtk_label_new ("count: 0");
7444 gtk_misc_set_padding (GTK_MISC (label), 10, 10);
7445 gtk_widget_show (label);
7448 gtk_widget_new (GTK_TYPE_HBOX,
7449 "GtkWidget::visible", TRUE,
7450 /* "GtkContainer::child", gtk_widget_new (GTK_TYPE_HBOX,
7451 * "GtkWidget::visible", TRUE,
7453 "GtkContainer::child", label,
7456 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
7457 container, TRUE, TRUE, 0);
7460 gtk_widget_new (GTK_TYPE_FRAME,
7461 "GtkContainer::border_width", 5,
7462 "GtkFrame::label", "Label Container",
7463 "GtkWidget::visible", TRUE,
7464 "GtkWidget::parent", GTK_DIALOG (window)->vbox,
7467 gtk_widget_new (GTK_TYPE_VBOX,
7468 "GtkWidget::visible", TRUE,
7469 "GtkWidget::parent", frame,
7472 gtk_widget_new (GTK_TYPE_RADIO_BUTTON,
7473 "GtkButton::label", "Resize-Parent",
7474 "GtkObject::user_data", (void*)GTK_RESIZE_PARENT,
7475 "GtkObject::signal::clicked", toggle_idle_container, container,
7476 "GtkWidget::visible", TRUE,
7477 "GtkWidget::parent", box,
7480 gtk_widget_new (GTK_TYPE_RADIO_BUTTON,
7481 "GtkButton::label", "Resize-Queue",
7482 "GtkObject::user_data", (void*)GTK_RESIZE_QUEUE,
7483 "GtkObject::signal::clicked", toggle_idle_container, container,
7484 "GtkRadioButton::group", button,
7485 "GtkWidget::visible", TRUE,
7486 "GtkWidget::parent", box,
7489 gtk_widget_new (GTK_TYPE_RADIO_BUTTON,
7490 "GtkButton::label", "Resize-Immediate",
7491 "GtkObject::user_data", (void*)GTK_RESIZE_IMMEDIATE,
7492 "GtkObject::signal::clicked", toggle_idle_container, container,
7493 "GtkRadioButton::group", button,
7494 "GtkWidget::visible", TRUE,
7495 "GtkWidget::parent", box,
7499 button = gtk_button_new_with_label ("close");
7500 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7501 GTK_SIGNAL_FUNC(gtk_widget_destroy),
7502 GTK_OBJECT (window));
7503 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7504 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7505 button, TRUE, TRUE, 0);
7506 gtk_widget_grab_default (button);
7507 gtk_widget_show (button);
7509 button = gtk_button_new_with_label ("start");
7510 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7511 GTK_SIGNAL_FUNC(start_idle_test),
7513 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7514 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7515 button, TRUE, TRUE, 0);
7516 gtk_widget_show (button);
7518 button = gtk_button_new_with_label ("stop");
7519 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7520 GTK_SIGNAL_FUNC(stop_idle_test),
7522 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7523 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7524 button, TRUE, TRUE, 0);
7525 gtk_widget_show (button);
7528 if (!GTK_WIDGET_VISIBLE (window))
7529 gtk_widget_show (window);
7531 gtk_widget_destroy (window);
7539 reload_rc_file (void)
7543 if (gtk_rc_reparse_all ())
7545 toplevels = gdk_window_get_toplevels();
7549 gdk_window_get_user_data (toplevels->data, (gpointer *)&widget);
7552 gtk_widget_reset_rc_styles (widget);
7554 toplevels = toplevels->next;
7556 g_list_free (toplevels);
7561 reload_all_rc_files (void)
7563 static GdkAtom atom_rcfiles = GDK_NONE;
7569 atom_rcfiles = gdk_atom_intern("_GTK_READ_RCFILES", FALSE);
7571 for(i = 0; i < 5; i++)
7573 sev.data_format = 32;
7574 sev.message_type = atom_rcfiles;
7575 gdk_event_send_clientmessage_toall ((GdkEvent *) &sev);
7579 create_rc_file (void)
7581 static GtkWidget *window = NULL;
7586 window = gtk_dialog_new ();
7588 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7589 GTK_SIGNAL_FUNC(destroy_idle_test),
7592 gtk_window_set_title (GTK_WINDOW (window), "Reload Rc file");
7593 gtk_container_border_width (GTK_CONTAINER (window), 0);
7595 button = gtk_button_new_with_label ("Reload");
7596 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7597 GTK_SIGNAL_FUNC(reload_rc_file), NULL);
7598 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7599 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7600 button, TRUE, TRUE, 0);
7601 gtk_widget_grab_default (button);
7602 gtk_widget_show (button);
7604 button = gtk_button_new_with_label ("Reload All");
7605 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7606 GTK_SIGNAL_FUNC(reload_all_rc_files), NULL);
7607 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7608 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7609 button, TRUE, TRUE, 0);
7610 gtk_widget_show (button);
7612 button = gtk_button_new_with_label ("Close");
7613 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7614 GTK_SIGNAL_FUNC(gtk_widget_destroy),
7615 GTK_OBJECT (window));
7616 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7617 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7618 button, TRUE, TRUE, 0);
7619 gtk_widget_show (button);
7623 if (!GTK_WIDGET_VISIBLE (window))
7624 gtk_widget_show (window);
7626 gtk_widget_destroy (window);
7630 * Test of recursive mainloop
7634 mainloop_destroyed (GtkWidget *w, GtkWidget **window)
7641 create_mainloop (void)
7643 static GtkWidget *window = NULL;
7649 window = gtk_dialog_new ();
7651 gtk_window_set_title (GTK_WINDOW (window), "Test Main Loop");
7653 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7654 GTK_SIGNAL_FUNC(mainloop_destroyed),
7657 label = gtk_label_new ("In recursive main loop...");
7658 gtk_misc_set_padding (GTK_MISC(label), 20, 20);
7660 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), label,
7662 gtk_widget_show (label);
7664 button = gtk_button_new_with_label ("Leave");
7665 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area), button,
7668 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7669 GTK_SIGNAL_FUNC (gtk_widget_destroy),
7670 GTK_OBJECT (window));
7672 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7673 gtk_widget_grab_default (button);
7675 gtk_widget_show (button);
7678 if (!GTK_WIDGET_VISIBLE (window))
7680 gtk_widget_show (window);
7682 g_print ("create_mainloop: start\n");
7684 g_print ("create_mainloop: done\n");
7687 gtk_widget_destroy (window);
7691 * Main Window and Exit
7695 do_exit (GtkWidget *widget, GtkWidget *window)
7697 gtk_widget_destroy (window);
7702 create_main_window (void)
7709 { "button box", create_button_box },
7710 { "buttons", create_buttons },
7711 { "check buttons", create_check_buttons },
7712 { "clist", create_clist},
7713 { "color selection", create_color_selection },
7714 { "ctree", create_ctree },
7715 { "cursors", create_cursors },
7716 { "dialog", create_dialog },
7717 { "dnd", create_dnd },
7718 { "entry", create_entry },
7719 { "file selection", create_file_selection },
7720 { "font selection", create_font_selection },
7721 { "gamma curve", create_gamma_curve },
7722 { "handle box", create_handle_box },
7723 { "item factory", create_item_factory },
7724 { "list", create_list },
7725 { "menus", create_menus },
7726 { "modal window", create_modal_window },
7727 { "notebook", create_notebook },
7728 { "panes", create_panes },
7729 { "pixmap", create_pixmap },
7730 { "preview color", create_color_preview },
7731 { "preview gray", create_gray_preview },
7732 { "progress bar", create_progress_bar },
7733 { "radio buttons", create_radio_buttons },
7734 { "range controls", create_range_controls },
7735 { "rc file", create_rc_file },
7736 { "reparent", create_reparent },
7737 { "rulers", create_rulers },
7738 { "saved position", create_saved_position },
7739 { "scrolled windows", create_scrolled_windows },
7740 { "shapes", create_shapes },
7741 { "spinbutton", create_spins },
7742 { "statusbar", create_statusbar },
7743 { "test idle", create_idle_test },
7744 { "test mainloop", create_mainloop },
7745 { "test scrolling", create_scroll_test },
7746 { "test selection", create_selection_test },
7747 { "test timeout", create_timeout_test },
7748 { "text", create_text },
7749 { "toggle buttons", create_toggle_buttons },
7750 { "toolbar", create_toolbar },
7751 { "tooltips", create_tooltips },
7752 { "tree", create_tree_mode_window},
7753 { "WM hints", create_wmhints },
7755 int nbuttons = sizeof (buttons) / sizeof (buttons[0]);
7759 GtkWidget *scrolled_window;
7763 GtkWidget *separator;
7766 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7767 gtk_window_set_policy (GTK_WINDOW (window), FALSE, FALSE, FALSE);
7768 gtk_widget_set_name (window, "main window");
7769 gtk_widget_set_usize (window, 200, 400);
7770 gtk_widget_set_uposition (window, 20, 20);
7772 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7773 GTK_SIGNAL_FUNC(gtk_main_quit),
7775 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
7776 GTK_SIGNAL_FUNC (gtk_false),
7779 box1 = gtk_vbox_new (FALSE, 0);
7780 gtk_container_add (GTK_CONTAINER (window), box1);
7782 if (gtk_micro_version > 0)
7794 label = gtk_label_new (buffer);
7795 gtk_box_pack_start (GTK_BOX (box1), label, FALSE, FALSE, 0);
7797 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
7798 gtk_container_border_width (GTK_CONTAINER (scrolled_window), 10);
7799 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
7800 GTK_POLICY_AUTOMATIC,
7801 GTK_POLICY_AUTOMATIC);
7802 GTK_WIDGET_UNSET_FLAGS (GTK_SCROLLED_WINDOW (scrolled_window)->vscrollbar, GTK_CAN_FOCUS);
7803 gtk_box_pack_start (GTK_BOX (box1), scrolled_window, TRUE, TRUE, 0);
7805 box2 = gtk_vbox_new (FALSE, 0);
7806 gtk_container_border_width (GTK_CONTAINER (box2), 10);
7807 gtk_container_add (GTK_CONTAINER (scrolled_window), box2);
7808 gtk_container_set_focus_vadjustment (GTK_CONTAINER (box2),
7809 gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
7810 gtk_widget_show (box2);
7812 for (i = 0; i < nbuttons; i++)
7814 button = gtk_button_new_with_label (buttons[i].label);
7815 if (buttons[i].func)
7816 gtk_signal_connect (GTK_OBJECT (button),
7818 GTK_SIGNAL_FUNC(buttons[i].func),
7821 gtk_widget_set_sensitive (button, FALSE);
7822 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
7825 separator = gtk_hseparator_new ();
7826 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
7828 box2 = gtk_vbox_new (FALSE, 10);
7829 gtk_container_border_width (GTK_CONTAINER (box2), 10);
7830 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
7832 button = gtk_button_new_with_label ("close");
7833 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7834 GTK_SIGNAL_FUNC (do_exit),
7836 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
7837 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7838 gtk_widget_grab_default (button);
7840 gtk_widget_show_all (window);
7844 main (int argc, char *argv[])
7846 GtkBindingSet *binding_set;
7848 srand (time (NULL));
7852 gtk_init (&argc, &argv);
7858 binding_set = gtk_binding_set_by_class (gtk_type_class (GTK_TYPE_WIDGET));
7859 gtk_binding_entry_add_signal (binding_set,
7860 '9', GDK_CONTROL_MASK | GDK_RELEASE_MASK,
7863 GTK_TYPE_STRING, "GtkWidgetClass <ctrl><release>9 test");
7865 gtk_rc_parse ("testgtkrc");
7867 create_main_window ();