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));
1017 g_free (tree_buttons);
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 pixmap = gdk_pixmap_create_from_xpm (window->window, &mask, NULL,
1872 pixmapwid = gtk_pixmap_new (pixmap, mask);
1873 gdk_pixmap_unref (pixmap);
1874 gdk_pixmap_unref (mask);
1876 label = gtk_label_new ("Pixmap\ntest");
1877 box3 = gtk_hbox_new (FALSE, 0);
1878 gtk_container_border_width (GTK_CONTAINER (box3), 2);
1879 gtk_container_add (GTK_CONTAINER (box3), pixmapwid);
1880 gtk_container_add (GTK_CONTAINER (box3), label);
1881 gtk_container_add (GTK_CONTAINER (button), box3);
1883 separator = gtk_hseparator_new ();
1884 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
1886 box2 = gtk_vbox_new (FALSE, 10);
1887 gtk_container_border_width (GTK_CONTAINER (box2), 10);
1888 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
1890 button = gtk_button_new_with_label ("close");
1891 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
1892 GTK_SIGNAL_FUNC(gtk_widget_destroy),
1893 GTK_OBJECT (window));
1894 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
1895 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
1896 gtk_widget_grab_default (button);
1899 if (!GTK_WIDGET_VISIBLE (window))
1900 gtk_widget_show_all (window);
1902 gtk_widget_destroy (window);
1906 tips_query_widget_entered (GtkTipsQuery *tips_query,
1908 const gchar *tip_text,
1909 const gchar *tip_private,
1912 if (GTK_TOGGLE_BUTTON (toggle)->active)
1914 gtk_label_set (GTK_LABEL (tips_query), tip_text ? "There is a Tip!" : "There is no Tip!");
1915 /* don't let GtkTipsQuery reset it's label */
1916 gtk_signal_emit_stop_by_name (GTK_OBJECT (tips_query), "widget_entered");
1921 tips_query_widget_selected (GtkWidget *tips_query,
1923 const gchar *tip_text,
1924 const gchar *tip_private,
1925 GdkEventButton *event,
1929 g_print ("Help \"%s\" requested for <%s>\n",
1930 tip_private ? tip_private : "None",
1931 gtk_type_name (GTK_OBJECT_TYPE (widget)));
1936 create_tooltips (void)
1938 static GtkWidget *window = NULL;
1945 GtkWidget *tips_query;
1946 GtkWidget *separator;
1947 GtkTooltips *tooltips;
1952 gtk_widget_new (gtk_window_get_type (),
1953 "GtkWindow::type", GTK_WINDOW_TOPLEVEL,
1954 "GtkContainer::border_width", 0,
1955 "GtkWindow::title", "Tooltips",
1956 "GtkWindow::allow_shrink", TRUE,
1957 "GtkWindow::allow_grow", FALSE,
1958 "GtkWindow::auto_shrink", TRUE,
1959 "GtkWidget::width", 200,
1962 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1963 GTK_SIGNAL_FUNC (destroy_tooltips),
1966 tooltips=gtk_tooltips_new();
1967 gtk_object_set_data (GTK_OBJECT (window), "tooltips", tooltips);
1969 box1 = gtk_vbox_new (FALSE, 0);
1970 gtk_container_add (GTK_CONTAINER (window), box1);
1972 box2 = gtk_vbox_new (FALSE, 10);
1973 gtk_container_border_width (GTK_CONTAINER (box2), 10);
1974 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
1976 button = gtk_toggle_button_new_with_label ("button1");
1977 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
1979 gtk_tooltips_set_tip (tooltips,button,"This is button 1", "ContextHelp/buttons/1");
1981 button = gtk_toggle_button_new_with_label ("button2");
1982 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
1984 gtk_tooltips_set_tip (tooltips,
1986 "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.",
1987 "ContextHelp/buttons/2_long");
1989 toggle = gtk_toggle_button_new_with_label ("Override TipsQuery Label");
1990 gtk_box_pack_start (GTK_BOX (box2), toggle, TRUE, TRUE, 0);
1992 gtk_tooltips_set_tip (tooltips, toggle, "Toggle TipsQuery view.", "Hi msw! ;)");
1995 gtk_widget_new (gtk_vbox_get_type (),
1996 "GtkBox::homogeneous", FALSE,
1997 "GtkBox::spacing", 5,
1998 "GtkContainer::border_width", 5,
1999 "GtkWidget::visible", TRUE,
2002 tips_query = gtk_tips_query_new ();
2005 gtk_widget_new (gtk_button_get_type (),
2006 "GtkButton::label", "[?]",
2007 "GtkWidget::visible", TRUE,
2008 "GtkWidget::parent", box3,
2009 "GtkObject::object_signal::clicked", gtk_tips_query_start_query, tips_query,
2011 gtk_box_set_child_packing (GTK_BOX (box3), button, FALSE, FALSE, 0, GTK_PACK_START);
2012 gtk_tooltips_set_tip (tooltips,
2014 "Start the Tooltips Inspector",
2015 "ContextHelp/buttons/?");
2018 gtk_widget_set (tips_query,
2019 "GtkWidget::visible", TRUE,
2020 "GtkWidget::parent", box3,
2021 "GtkTipsQuery::caller", button,
2022 "GtkObject::signal::widget_entered", tips_query_widget_entered, toggle,
2023 "GtkObject::signal::widget_selected", tips_query_widget_selected, NULL,
2027 gtk_widget_new (gtk_frame_get_type (),
2028 "GtkFrame::label", "ToolTips Inspector",
2029 "GtkFrame::label_xalign", (double) 0.5,
2030 "GtkContainer::border_width", 0,
2031 "GtkWidget::visible", TRUE,
2032 "GtkWidget::parent", box2,
2033 "GtkContainer::child", box3,
2035 gtk_box_set_child_packing (GTK_BOX (box2), frame, TRUE, TRUE, 10, GTK_PACK_START);
2037 separator = gtk_hseparator_new ();
2038 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2040 box2 = gtk_vbox_new (FALSE, 10);
2041 gtk_container_border_width (GTK_CONTAINER (box2), 10);
2042 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2044 button = gtk_button_new_with_label ("close");
2045 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2046 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2047 GTK_OBJECT (window));
2048 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2049 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2050 gtk_widget_grab_default (button);
2052 gtk_tooltips_set_tip (tooltips, button, "Push this button to close window", "ContextHelp/buttons/Close");
2055 if (!GTK_WIDGET_VISIBLE (window))
2056 gtk_widget_show_all (window);
2058 gtk_widget_destroy (window);
2066 create_menu (gint depth, gboolean tearoff)
2069 GtkWidget *menuitem;
2077 menu = gtk_menu_new ();
2082 menuitem = gtk_tearoff_menu_item_new ();
2083 gtk_menu_append (GTK_MENU (menu), menuitem);
2084 gtk_widget_show (menuitem);
2087 for (i = 0, j = 1; i < 5; i++, j++)
2089 sprintf (buf, "item %2d - %d", depth, j);
2090 menuitem = gtk_radio_menu_item_new_with_label (group, buf);
2091 group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menuitem));
2093 gtk_check_menu_item_set_show_toggle (GTK_CHECK_MENU_ITEM (menuitem), TRUE);
2094 gtk_menu_append (GTK_MENU (menu), menuitem);
2095 gtk_widget_show (menuitem);
2097 gtk_widget_set_sensitive (menuitem, FALSE);
2099 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (depth - 1, TRUE));
2108 static GtkWidget *window = NULL;
2112 GtkWidget *optionmenu;
2113 GtkWidget *separator;
2119 GtkWidget *menuitem;
2120 GtkAccelGroup *accel_group;
2122 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2124 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2125 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2127 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
2128 GTK_SIGNAL_FUNC (gtk_true),
2131 accel_group = gtk_accel_group_new ();
2132 gtk_accel_group_attach (accel_group, GTK_OBJECT (window));
2134 gtk_window_set_title (GTK_WINDOW (window), "menus");
2135 gtk_container_border_width (GTK_CONTAINER (window), 0);
2138 box1 = gtk_vbox_new (FALSE, 0);
2139 gtk_container_add (GTK_CONTAINER (window), box1);
2140 gtk_widget_show (box1);
2142 menubar = gtk_menu_bar_new ();
2143 gtk_box_pack_start (GTK_BOX (box1), menubar, FALSE, TRUE, 0);
2144 gtk_widget_show (menubar);
2146 menu = create_menu (2, TRUE);
2148 menuitem = gtk_menu_item_new_with_label ("test\nline2");
2149 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), menu);
2150 gtk_menu_bar_append (GTK_MENU_BAR (menubar), menuitem);
2151 gtk_widget_show (menuitem);
2153 menuitem = gtk_menu_item_new_with_label ("foo");
2154 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (3, TRUE));
2155 gtk_menu_bar_append (GTK_MENU_BAR (menubar), menuitem);
2156 gtk_widget_show (menuitem);
2158 menuitem = gtk_menu_item_new_with_label ("bar");
2159 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (4, TRUE));
2160 gtk_menu_item_right_justify (GTK_MENU_ITEM (menuitem));
2161 gtk_menu_bar_append (GTK_MENU_BAR (menubar), menuitem);
2162 gtk_widget_show (menuitem);
2164 box2 = gtk_vbox_new (FALSE, 10);
2165 gtk_container_border_width (GTK_CONTAINER (box2), 10);
2166 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2167 gtk_widget_show (box2);
2169 menu = create_menu (1, FALSE);
2170 gtk_menu_set_accel_group (GTK_MENU (menu), accel_group);
2172 menuitem = gtk_check_menu_item_new_with_label ("Accelerate Me");
2173 gtk_menu_append (GTK_MENU (menu), menuitem);
2174 gtk_widget_show (menuitem);
2175 gtk_widget_add_accelerator (menuitem,
2180 GTK_ACCEL_VISIBLE | GTK_ACCEL_SIGNAL_VISIBLE);
2181 menuitem = gtk_check_menu_item_new_with_label ("Accelerator Locked");
2182 gtk_menu_append (GTK_MENU (menu), menuitem);
2183 gtk_widget_show (menuitem);
2184 gtk_widget_add_accelerator (menuitem,
2189 GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
2190 menuitem = gtk_check_menu_item_new_with_label ("Accelerators Frozen");
2191 gtk_menu_append (GTK_MENU (menu), menuitem);
2192 gtk_widget_show (menuitem);
2193 gtk_widget_add_accelerator (menuitem,
2199 gtk_widget_add_accelerator (menuitem,
2205 gtk_widget_freeze_accelerators (menuitem);
2207 optionmenu = gtk_option_menu_new ();
2208 gtk_option_menu_set_menu (GTK_OPTION_MENU (optionmenu), menu);
2209 gtk_option_menu_set_history (GTK_OPTION_MENU (optionmenu), 3);
2210 gtk_box_pack_start (GTK_BOX (box2), optionmenu, TRUE, TRUE, 0);
2211 gtk_widget_show (optionmenu);
2213 separator = gtk_hseparator_new ();
2214 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2215 gtk_widget_show (separator);
2217 box2 = gtk_vbox_new (FALSE, 10);
2218 gtk_container_border_width (GTK_CONTAINER (box2), 10);
2219 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2220 gtk_widget_show (box2);
2222 button = gtk_button_new_with_label ("close");
2223 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2224 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2225 GTK_OBJECT (window));
2226 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2227 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2228 gtk_widget_grab_default (button);
2229 gtk_widget_show (button);
2232 if (!GTK_WIDGET_VISIBLE (window))
2233 gtk_widget_show (window);
2235 gtk_widget_destroy (window);
2239 gtk_ifactory_cb (gpointer callback_data,
2240 guint callback_action,
2243 g_message ("ItemFactory: activated \"%s\"", gtk_item_factory_path_from_widget (widget));
2246 static GtkItemFactoryEntry menu_items[] =
2248 { "/_File", NULL, gtk_ifactory_cb, 0, "<Branch>" },
2249 { "/File/tearoff1", NULL, gtk_ifactory_cb, 0, "<Tearoff>" },
2250 { "/File/_New", "<control>N", gtk_ifactory_cb, 0 },
2251 { "/File/_Open", "<control>O", gtk_ifactory_cb, 0 },
2252 { "/File/_Save", "<control>S", gtk_ifactory_cb, 0 },
2253 { "/File/Save _As...", NULL, gtk_ifactory_cb, 0 },
2254 { "/File/sep1", NULL, gtk_ifactory_cb, 0, "<Separator>" },
2255 { "/File/_Quit", "<control>Q", gtk_ifactory_cb, 0 },
2257 { "/_Preferences", NULL, gtk_ifactory_cb, 0, "<Branch>" },
2258 { "/_Preferences/_Color", NULL, gtk_ifactory_cb, 0, "<Branch>" },
2259 { "/_Preferences/Color/_Red", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
2260 { "/_Preferences/Color/_Green", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
2261 { "/_Preferences/Color/_Blue", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
2262 { "/_Preferences/_Shape", NULL, gtk_ifactory_cb, 0, "<Branch>" },
2263 { "/_Preferences/Shape/_Square", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
2264 { "/_Preferences/Shape/_Rectangle", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
2265 { "/_Preferences/Shape/_Oval", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
2267 { "/_Help", NULL, gtk_ifactory_cb, 0, "<LastBranch>" },
2268 { "/Help/_About", NULL, gtk_ifactory_cb, 0 },
2271 static int nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]);
2274 create_item_factory (void)
2276 static GtkWidget *window = NULL;
2282 GtkWidget *separator;
2285 GtkAccelGroup *accel_group;
2286 GtkItemFactory *item_factory;
2288 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2290 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2291 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2293 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
2294 GTK_SIGNAL_FUNC (gtk_true),
2297 accel_group = gtk_accel_group_new ();
2298 item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>", accel_group);
2299 gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL);
2300 gtk_accel_group_attach (accel_group, GTK_OBJECT (window));
2301 gtk_window_set_title (GTK_WINDOW (window), "Item Factory");
2302 gtk_container_border_width (GTK_CONTAINER (window), 0);
2304 box1 = gtk_vbox_new (FALSE, 0);
2305 gtk_container_add (GTK_CONTAINER (window), box1);
2307 gtk_box_pack_start (GTK_BOX (box1),
2308 gtk_item_factory_get_widget (item_factory, "<main>"),
2311 label = gtk_label_new ("Type\n<alt>\nto start");
2312 gtk_widget_set_usize (label, 200, 200);
2313 gtk_misc_set_alignment (GTK_MISC (label), 0.5, 0.5);
2314 gtk_box_pack_start (GTK_BOX (box1), label, TRUE, TRUE, 0);
2317 separator = gtk_hseparator_new ();
2318 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2321 box2 = gtk_vbox_new (FALSE, 10);
2322 gtk_container_border_width (GTK_CONTAINER (box2), 10);
2323 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2325 button = gtk_button_new_with_label ("close");
2326 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2327 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2328 GTK_OBJECT (window));
2329 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2330 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2331 gtk_widget_grab_default (button);
2333 gtk_widget_show_all (window);
2336 gtk_widget_destroy (window);
2344 scrolled_windows_remove (GtkWidget *widget, GtkWidget *scrollwin)
2346 static GtkWidget *parent = NULL;
2347 static GtkWidget *float_parent;
2351 gtk_widget_reparent (scrollwin, parent);
2352 gtk_widget_destroy (float_parent);
2353 float_parent = NULL;
2358 parent = widget->parent;
2359 float_parent = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2360 gtk_widget_reparent (scrollwin, float_parent);
2361 gtk_widget_show (float_parent);
2370 cmw_destroy_cb(GtkWidget *widget)
2372 /* This is needed to get out of gtk_main */
2379 cmw_color (GtkWidget *widget)
2383 csd=gtk_color_selection_dialog_new ("This is a modal color selection dialog");
2386 gtk_window_set_modal (GTK_WINDOW(csd),TRUE);
2388 gtk_signal_connect (GTK_OBJECT(csd), "destroy",
2389 GTK_SIGNAL_FUNC(cmw_destroy_cb),NULL);
2391 gtk_signal_connect_object (GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(csd)->ok_button),
2392 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
2394 gtk_signal_connect_object (GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(csd)->cancel_button),
2395 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
2398 /* wait until destroy calls gtk_main_quit */
2399 gtk_widget_show (csd);
2404 cmw_file (GtkWidget *widget)
2408 fs = gtk_file_selection_new("This is a modal file selection dialog");
2411 gtk_window_set_modal (GTK_WINDOW(fs),TRUE);
2413 gtk_signal_connect (GTK_OBJECT(fs), "destroy",
2414 GTK_SIGNAL_FUNC(cmw_destroy_cb),NULL);
2416 gtk_signal_connect_object (GTK_OBJECT(GTK_FILE_SELECTION(fs)->ok_button),
2417 "clicked",GTK_SIGNAL_FUNC(gtk_widget_destroy),
2419 gtk_signal_connect_object (GTK_OBJECT(GTK_FILE_SELECTION(fs)->cancel_button),
2420 "clicked",GTK_SIGNAL_FUNC(gtk_widget_destroy),
2423 /* wait until destroy calls gtk_main_quit */
2424 gtk_widget_show (fs);
2431 create_modal_window (void)
2433 GtkWidget *window = NULL;
2434 GtkWidget *box1,*box2;
2436 GtkWidget *btnColor,*btnFile,*btnClose;
2438 /* Create modal window (Here you can use any window descendent )*/
2439 window=gtk_window_new (GTK_WINDOW_TOPLEVEL);
2440 gtk_window_set_title (GTK_WINDOW(window),"This window is modal");
2442 /* Set window as modal */
2443 gtk_window_set_modal (GTK_WINDOW(window),TRUE);
2445 /* Create widgets */
2446 box1 = gtk_vbox_new (FALSE,5);
2447 frame1 = gtk_frame_new ("Standard dialogs in modal form");
2448 box2 = gtk_vbox_new (TRUE,5);
2449 btnColor = gtk_button_new_with_label ("Color");
2450 btnFile = gtk_button_new_with_label ("File Selection");
2451 btnClose = gtk_button_new_with_label ("Close");
2454 gtk_container_border_width (GTK_CONTAINER(box1),3);
2455 gtk_container_border_width (GTK_CONTAINER(box2),3);
2458 gtk_container_add (GTK_CONTAINER (window), box1);
2459 gtk_box_pack_start (GTK_BOX (box1), frame1, TRUE, TRUE, 4);
2460 gtk_container_add (GTK_CONTAINER (frame1), box2);
2461 gtk_box_pack_start (GTK_BOX (box2), btnColor, FALSE, FALSE, 4);
2462 gtk_box_pack_start (GTK_BOX (box2), btnFile, FALSE, FALSE, 4);
2463 gtk_box_pack_start (GTK_BOX (box1), gtk_hseparator_new (), FALSE, FALSE, 4);
2464 gtk_box_pack_start (GTK_BOX (box1), btnClose, FALSE, FALSE, 4);
2466 /* connect signals */
2467 gtk_signal_connect_object (GTK_OBJECT (btnClose), "clicked",
2468 GTK_SIGNAL_FUNC (gtk_widget_destroy),
2469 GTK_OBJECT (window));
2471 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2472 GTK_SIGNAL_FUNC (cmw_destroy_cb),NULL);
2474 gtk_signal_connect (GTK_OBJECT (btnColor), "clicked",
2475 GTK_SIGNAL_FUNC (cmw_color),NULL);
2476 gtk_signal_connect (GTK_OBJECT (btnFile), "clicked",
2477 GTK_SIGNAL_FUNC (cmw_file),NULL);
2480 gtk_widget_show_all (window);
2482 /* wait until dialog get destroyed */
2491 create_scrolled_windows (void)
2493 static GtkWidget *window;
2494 GtkWidget *scrolled_window;
2502 window = gtk_dialog_new ();
2504 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2505 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2508 gtk_window_set_title (GTK_WINDOW (window), "dialog");
2509 gtk_container_border_width (GTK_CONTAINER (window), 0);
2512 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
2513 gtk_container_border_width (GTK_CONTAINER (scrolled_window), 10);
2514 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
2515 GTK_POLICY_AUTOMATIC,
2516 GTK_POLICY_AUTOMATIC);
2517 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
2518 scrolled_window, TRUE, TRUE, 0);
2519 gtk_widget_show (scrolled_window);
2521 table = gtk_table_new (20, 20, FALSE);
2522 gtk_table_set_row_spacings (GTK_TABLE (table), 10);
2523 gtk_table_set_col_spacings (GTK_TABLE (table), 10);
2524 gtk_container_add (GTK_CONTAINER (scrolled_window), table);
2525 gtk_container_set_focus_hadjustment (GTK_CONTAINER (table),
2526 gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
2527 gtk_container_set_focus_vadjustment (GTK_CONTAINER (table),
2528 gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
2529 gtk_widget_show (table);
2531 for (i = 0; i < 20; i++)
2532 for (j = 0; j < 20; j++)
2534 sprintf (buffer, "button (%d,%d)\n", i, j);
2535 button = gtk_toggle_button_new_with_label (buffer);
2536 gtk_table_attach_defaults (GTK_TABLE (table), button,
2538 gtk_widget_show (button);
2542 button = gtk_button_new_with_label ("close");
2543 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2544 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2545 GTK_OBJECT (window));
2546 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2547 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
2548 button, TRUE, TRUE, 0);
2549 gtk_widget_grab_default (button);
2550 gtk_widget_show (button);
2552 button = gtk_button_new_with_label ("remove");
2553 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2554 GTK_SIGNAL_FUNC(scrolled_windows_remove),
2555 GTK_OBJECT (scrolled_window));
2556 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2557 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
2558 button, TRUE, TRUE, 0);
2559 gtk_widget_grab_default (button);
2560 gtk_widget_show (button);
2564 if (!GTK_WIDGET_VISIBLE (window))
2565 gtk_widget_show (window);
2567 gtk_widget_destroy (window);
2575 entry_toggle_editable (GtkWidget *checkbutton,
2578 gtk_entry_set_editable(GTK_ENTRY(entry),
2579 GTK_TOGGLE_BUTTON(checkbutton)->active);
2583 entry_toggle_sensitive (GtkWidget *checkbutton,
2586 gtk_widget_set_sensitive (entry, GTK_TOGGLE_BUTTON(checkbutton)->active);
2590 entry_toggle_visibility (GtkWidget *checkbutton,
2593 gtk_entry_set_visibility(GTK_ENTRY(entry),
2594 GTK_TOGGLE_BUTTON(checkbutton)->active);
2600 static GtkWidget *window = NULL;
2603 GtkWidget *editable_check;
2604 GtkWidget *sensitive_check;
2605 GtkWidget *entry, *cb;
2607 GtkWidget *separator;
2608 GList *cbitems = NULL;
2612 cbitems = g_list_append(cbitems, "item0");
2613 cbitems = g_list_append(cbitems, "item1 item1");
2614 cbitems = g_list_append(cbitems, "item2 item2 item2");
2615 cbitems = g_list_append(cbitems, "item3 item3 item3 item3");
2616 cbitems = g_list_append(cbitems, "item4 item4 item4 item4 item4");
2617 cbitems = g_list_append(cbitems, "item5 item5 item5 item5 item5 item5");
2618 cbitems = g_list_append(cbitems, "item6 item6 item6 item6 item6");
2619 cbitems = g_list_append(cbitems, "item7 item7 item7 item7");
2620 cbitems = g_list_append(cbitems, "item8 item8 item8");
2621 cbitems = g_list_append(cbitems, "item9 item9");
2623 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2625 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2626 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2629 gtk_window_set_title (GTK_WINDOW (window), "entry");
2630 gtk_container_border_width (GTK_CONTAINER (window), 0);
2633 box1 = gtk_vbox_new (FALSE, 0);
2634 gtk_container_add (GTK_CONTAINER (window), box1);
2635 gtk_widget_show (box1);
2638 box2 = gtk_vbox_new (FALSE, 10);
2639 gtk_container_border_width (GTK_CONTAINER (box2), 10);
2640 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2641 gtk_widget_show (box2);
2643 entry = gtk_entry_new ();
2644 gtk_entry_set_text (GTK_ENTRY (entry), "hello world");
2645 gtk_editable_select_region (GTK_EDITABLE (entry), 0, 5);
2646 gtk_box_pack_start (GTK_BOX (box2), entry, TRUE, TRUE, 0);
2647 gtk_widget_show (entry);
2649 cb = gtk_combo_new ();
2650 gtk_combo_set_popdown_strings (GTK_COMBO (cb), cbitems);
2651 gtk_entry_set_text (GTK_ENTRY (GTK_COMBO(cb)->entry), "hello world");
2652 gtk_editable_select_region (GTK_EDITABLE (GTK_COMBO(cb)->entry),
2654 gtk_box_pack_start (GTK_BOX (box2), cb, TRUE, TRUE, 0);
2655 gtk_widget_show (cb);
2657 editable_check = gtk_check_button_new_with_label("Editable");
2658 gtk_box_pack_start (GTK_BOX (box2), editable_check, FALSE, TRUE, 0);
2659 gtk_signal_connect (GTK_OBJECT(editable_check), "toggled",
2660 GTK_SIGNAL_FUNC(entry_toggle_editable), entry);
2661 gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(editable_check), TRUE);
2662 gtk_widget_show (editable_check);
2664 editable_check = gtk_check_button_new_with_label("Visible");
2665 gtk_box_pack_start (GTK_BOX (box2), editable_check, FALSE, TRUE, 0);
2666 gtk_signal_connect (GTK_OBJECT(editable_check), "toggled",
2667 GTK_SIGNAL_FUNC(entry_toggle_visibility), entry);
2668 gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(editable_check), TRUE);
2669 gtk_widget_show (editable_check);
2671 sensitive_check = gtk_check_button_new_with_label("Sensitive");
2672 gtk_box_pack_start (GTK_BOX (box2), sensitive_check, FALSE, TRUE, 0);
2673 gtk_signal_connect (GTK_OBJECT(sensitive_check), "toggled",
2674 GTK_SIGNAL_FUNC(entry_toggle_sensitive), entry);
2675 gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(sensitive_check), TRUE);
2676 gtk_widget_show (sensitive_check);
2678 separator = gtk_hseparator_new ();
2679 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2680 gtk_widget_show (separator);
2683 box2 = gtk_vbox_new (FALSE, 10);
2684 gtk_container_border_width (GTK_CONTAINER (box2), 10);
2685 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2686 gtk_widget_show (box2);
2689 button = gtk_button_new_with_label ("close");
2690 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2691 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2692 GTK_OBJECT (window));
2693 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2694 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2695 gtk_widget_grab_default (button);
2696 gtk_widget_show (button);
2699 if (!GTK_WIDGET_VISIBLE (window))
2700 gtk_widget_show (window);
2702 gtk_widget_destroy (window);
2709 static GtkWidget *spinner1;
2712 toggle_snap (GtkWidget *widget, GtkSpinButton *spin)
2714 gtk_spin_button_set_snap_to_ticks (spin, GTK_TOGGLE_BUTTON (widget)->active);
2718 toggle_numeric (GtkWidget *widget, GtkSpinButton *spin)
2720 gtk_spin_button_set_numeric (spin, GTK_TOGGLE_BUTTON (widget)->active);
2724 change_digits (GtkWidget *widget, GtkSpinButton *spin)
2726 gtk_spin_button_set_digits (GTK_SPIN_BUTTON (spinner1),
2727 gtk_spin_button_get_value_as_int (spin));
2731 get_value (GtkWidget *widget, gpointer data)
2735 GtkSpinButton *spin;
2737 spin = GTK_SPIN_BUTTON (spinner1);
2738 label = GTK_LABEL (gtk_object_get_user_data (GTK_OBJECT (widget)));
2739 if (GPOINTER_TO_INT (data) == 1)
2740 sprintf (buf, "%d", gtk_spin_button_get_value_as_int (spin));
2742 sprintf (buf, "%0.*f", spin->digits,
2743 gtk_spin_button_get_value_as_float (spin));
2744 gtk_label_set (label, buf);
2750 static GtkWidget *window = NULL;
2753 GtkWidget *main_vbox;
2756 GtkWidget *spinner2;
2760 GtkWidget *val_label;
2765 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2767 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2768 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
2771 gtk_window_set_title (GTK_WINDOW (window), "GtkSpinButton");
2773 main_vbox = gtk_vbox_new (FALSE, 5);
2774 gtk_container_border_width (GTK_CONTAINER (main_vbox), 10);
2775 gtk_container_add (GTK_CONTAINER (window), main_vbox);
2777 frame = gtk_frame_new ("Not accelerated");
2778 gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0);
2780 vbox = gtk_vbox_new (FALSE, 0);
2781 gtk_container_border_width (GTK_CONTAINER (vbox), 5);
2782 gtk_container_add (GTK_CONTAINER (frame), vbox);
2784 /* Day, month, year spinners */
2786 hbox = gtk_hbox_new (FALSE, 0);
2787 gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 5);
2789 vbox2 = gtk_vbox_new (FALSE, 0);
2790 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
2792 label = gtk_label_new ("Day :");
2793 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
2794 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
2796 adj = (GtkAdjustment *) gtk_adjustment_new (1.0, 1.0, 31.0, 1.0,
2798 spinner = gtk_spin_button_new (adj, 0, 0);
2799 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
2800 gtk_spin_button_set_shadow_type (GTK_SPIN_BUTTON (spinner),
2802 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
2804 vbox2 = gtk_vbox_new (FALSE, 0);
2805 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
2807 label = gtk_label_new ("Month :");
2808 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
2809 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
2811 adj = (GtkAdjustment *) gtk_adjustment_new (1.0, 1.0, 12.0, 1.0,
2813 spinner = gtk_spin_button_new (adj, 0, 0);
2814 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
2815 gtk_spin_button_set_shadow_type (GTK_SPIN_BUTTON (spinner),
2816 GTK_SHADOW_ETCHED_IN);
2817 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
2819 vbox2 = gtk_vbox_new (FALSE, 0);
2820 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
2822 label = gtk_label_new ("Year :");
2823 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
2824 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
2826 adj = (GtkAdjustment *) gtk_adjustment_new (1998.0, 0.0, 2100.0,
2828 spinner = gtk_spin_button_new (adj, 0, 0);
2829 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
2830 gtk_spin_button_set_shadow_type (GTK_SPIN_BUTTON (spinner),
2832 gtk_widget_set_usize (spinner, 55, 0);
2833 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
2835 frame = gtk_frame_new ("Accelerated");
2836 gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0);
2838 vbox = gtk_vbox_new (FALSE, 0);
2839 gtk_container_border_width (GTK_CONTAINER (vbox), 5);
2840 gtk_container_add (GTK_CONTAINER (frame), vbox);
2842 hbox = gtk_hbox_new (FALSE, 0);
2843 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
2845 vbox2 = gtk_vbox_new (FALSE, 0);
2846 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
2848 label = gtk_label_new ("Value :");
2849 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
2850 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
2852 adj = (GtkAdjustment *) gtk_adjustment_new (0.0, -10000.0, 10000.0,
2854 spinner1 = gtk_spin_button_new (adj, 1.0, 2);
2855 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner1), TRUE);
2856 gtk_widget_set_usize (spinner1, 100, 0);
2857 gtk_box_pack_start (GTK_BOX (vbox2), spinner1, FALSE, TRUE, 0);
2859 vbox2 = gtk_vbox_new (FALSE, 0);
2860 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
2862 label = gtk_label_new ("Digits :");
2863 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
2864 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
2866 adj = (GtkAdjustment *) gtk_adjustment_new (2, 1, 5, 1, 1, 0);
2867 spinner2 = gtk_spin_button_new (adj, 0.0, 0);
2868 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner2), TRUE);
2869 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
2870 GTK_SIGNAL_FUNC (change_digits),
2871 (gpointer) spinner2);
2872 gtk_box_pack_start (GTK_BOX (vbox2), spinner2, FALSE, TRUE, 0);
2874 hbox = gtk_hbox_new (FALSE, 0);
2875 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
2877 button = gtk_check_button_new_with_label ("Snap to 0.5-ticks");
2878 gtk_signal_connect (GTK_OBJECT (button), "clicked",
2879 GTK_SIGNAL_FUNC (toggle_snap),
2881 gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
2882 gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (button), TRUE);
2884 button = gtk_check_button_new_with_label ("Numeric only input mode");
2885 gtk_signal_connect (GTK_OBJECT (button), "clicked",
2886 GTK_SIGNAL_FUNC (toggle_numeric),
2888 gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
2889 gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (button), TRUE);
2891 val_label = gtk_label_new ("");
2893 hbox = gtk_hbox_new (FALSE, 0);
2894 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
2896 button = gtk_button_new_with_label ("Value as Int");
2897 gtk_object_set_user_data (GTK_OBJECT (button), val_label);
2898 gtk_signal_connect (GTK_OBJECT (button), "clicked",
2899 GTK_SIGNAL_FUNC (get_value),
2900 GINT_TO_POINTER (1));
2901 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
2903 button = gtk_button_new_with_label ("Value as Float");
2904 gtk_object_set_user_data (GTK_OBJECT (button), val_label);
2905 gtk_signal_connect (GTK_OBJECT (button), "clicked",
2906 GTK_SIGNAL_FUNC (get_value),
2907 GINT_TO_POINTER (2));
2908 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
2910 gtk_box_pack_start (GTK_BOX (vbox), val_label, TRUE, TRUE, 0);
2911 gtk_label_set (GTK_LABEL (val_label), "0");
2913 hbox = gtk_hbox_new (FALSE, 0);
2914 gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
2916 button = gtk_button_new_with_label ("Close");
2917 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2918 GTK_SIGNAL_FUNC (gtk_widget_destroy),
2919 GTK_OBJECT (window));
2920 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
2923 if (!GTK_WIDGET_VISIBLE (window))
2924 gtk_widget_show_all (window);
2926 gtk_widget_destroy (window);
2934 cursor_expose_event (GtkWidget *widget,
2938 GtkDrawingArea *darea;
2939 GdkDrawable *drawable;
2946 g_return_val_if_fail (widget != NULL, TRUE);
2947 g_return_val_if_fail (GTK_IS_DRAWING_AREA (widget), TRUE);
2949 darea = GTK_DRAWING_AREA (widget);
2950 drawable = widget->window;
2951 white_gc = widget->style->white_gc;
2952 gray_gc = widget->style->bg_gc[GTK_STATE_NORMAL];
2953 black_gc = widget->style->black_gc;
2954 max_width = widget->allocation.width;
2955 max_height = widget->allocation.height;
2957 gdk_draw_rectangle (drawable, white_gc,
2964 gdk_draw_rectangle (drawable, black_gc,
2971 gdk_draw_rectangle (drawable, gray_gc,
2982 set_cursor (GtkWidget *spinner,
2990 c = CLAMP (gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spinner)), 0, 152);
2993 label = gtk_object_get_user_data (GTK_OBJECT (spinner));
2994 vals = gtk_type_enum_get_values (GTK_TYPE_GDK_CURSOR_TYPE);
2995 while (vals && vals->value != c)
2998 gtk_label_set (GTK_LABEL (label), vals->value_nick);
3000 gtk_label_set (GTK_LABEL (label), "<unknown>");
3002 cursor = gdk_cursor_new (c);
3003 gdk_window_set_cursor (widget->window, cursor);
3004 gdk_cursor_destroy (cursor);
3008 cursor_event (GtkWidget *widget,
3010 GtkSpinButton *spinner)
3012 if ((event->type == GDK_BUTTON_PRESS) &&
3013 ((event->button.button == 1) ||
3014 (event->button.button == 3)))
3016 gtk_spin_button_spin (spinner, event->button.button == 1 ?
3017 GTK_SPIN_STEP_FORWARD : GTK_SPIN_STEP_BACKWARD, 0);
3025 create_cursors (void)
3027 static GtkWidget *window = NULL;
3030 GtkWidget *main_vbox;
3041 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3043 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3044 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
3047 gtk_window_set_title (GTK_WINDOW (window), "Cursors");
3049 main_vbox = gtk_vbox_new (FALSE, 5);
3050 gtk_container_border_width (GTK_CONTAINER (main_vbox), 0);
3051 gtk_container_add (GTK_CONTAINER (window), main_vbox);
3054 gtk_widget_new (gtk_vbox_get_type (),
3055 "GtkBox::homogeneous", FALSE,
3056 "GtkBox::spacing", 5,
3057 "GtkContainer::border_width", 10,
3058 "GtkWidget::parent", main_vbox,
3059 "GtkWidget::visible", TRUE,
3062 hbox = gtk_hbox_new (FALSE, 0);
3063 gtk_container_border_width (GTK_CONTAINER (hbox), 5);
3064 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
3066 label = gtk_label_new ("Cursor Value : ");
3067 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
3068 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
3070 adj = (GtkAdjustment *) gtk_adjustment_new (0,
3074 spinner = gtk_spin_button_new (adj, 0, 0);
3075 gtk_box_pack_start (GTK_BOX (hbox), spinner, TRUE, TRUE, 0);
3078 gtk_widget_new (gtk_frame_get_type (),
3079 "GtkFrame::shadow", GTK_SHADOW_ETCHED_IN,
3080 "GtkFrame::label_xalign", 0.5,
3081 "GtkFrame::label", "Cursor Area",
3082 "GtkContainer::border_width", 10,
3083 "GtkWidget::parent", vbox,
3084 "GtkWidget::visible", TRUE,
3087 darea = gtk_drawing_area_new ();
3088 gtk_widget_set_usize (darea, 80, 80);
3089 gtk_container_add (GTK_CONTAINER (frame), darea);
3090 gtk_signal_connect (GTK_OBJECT (darea),
3092 GTK_SIGNAL_FUNC (cursor_expose_event),
3094 gtk_widget_set_events (darea, GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK);
3095 gtk_signal_connect (GTK_OBJECT (darea),
3096 "button_press_event",
3097 GTK_SIGNAL_FUNC (cursor_event),
3099 gtk_widget_show (darea);
3101 gtk_signal_connect (GTK_OBJECT (spinner), "changed",
3102 GTK_SIGNAL_FUNC (set_cursor),
3105 label = gtk_widget_new (GTK_TYPE_LABEL,
3110 gtk_container_child_set (GTK_CONTAINER (vbox), label,
3113 gtk_object_set_user_data (GTK_OBJECT (spinner), label);
3116 gtk_widget_new (gtk_hseparator_get_type (),
3117 "GtkWidget::visible", TRUE,
3119 gtk_box_pack_start (GTK_BOX (main_vbox), any, FALSE, TRUE, 0);
3121 hbox = gtk_hbox_new (FALSE, 0);
3122 gtk_container_border_width (GTK_CONTAINER (hbox), 10);
3123 gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
3125 button = gtk_button_new_with_label ("Close");
3126 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
3127 GTK_SIGNAL_FUNC (gtk_widget_destroy),
3128 GTK_OBJECT (window));
3129 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
3131 gtk_widget_show_all (window);
3133 set_cursor (spinner, darea);
3136 gtk_widget_destroy (window);
3144 list_add (GtkWidget *widget,
3149 GtkWidget *list_item;
3150 GtkContainer *container;
3152 container = GTK_CONTAINER (list);
3154 sprintf (buffer, "added item %d", i++);
3155 list_item = gtk_list_item_new_with_label (buffer);
3156 gtk_widget_show (list_item);
3158 gtk_container_add (container, list_item);
3162 list_remove (GtkWidget *widget,
3168 tmp_list = GTK_LIST (list)->selection;
3173 clear_list = g_list_prepend (clear_list, tmp_list->data);
3174 tmp_list = tmp_list->next;
3177 clear_list = g_list_reverse (clear_list);
3179 gtk_list_remove_items (GTK_LIST (list), clear_list);
3181 g_list_free (clear_list);
3185 list_clear (GtkWidget *widget,
3188 gtk_list_clear_items (GTK_LIST (list), 0, -1);
3192 list_undo_selection (GtkWidget *widget,
3195 gtk_list_undo_selection (GTK_LIST (list));
3198 #define RADIOMENUTOGGLED(_rmi_, __i) { \
3201 __g = gtk_radio_menu_item_group(_rmi_); \
3202 while( __g && !((GtkCheckMenuItem *)(__g->data))->active) { \
3208 static GtkWidget *list_omenu;
3211 list_toggle_sel_mode (GtkWidget *widget, GtkList *list)
3215 if (!GTK_WIDGET_MAPPED (widget))
3218 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
3219 (((GtkOptionMenu *)list_omenu)->menu_item), i);
3221 gtk_list_set_selection_mode (list, (GtkSelectionMode) (3-i));
3227 static GtkWidget *window = NULL;
3232 GtkWidget *scrolled_win;
3235 GtkWidget *separator;
3237 GtkWidget *menu_item;
3243 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3245 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3246 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
3249 gtk_window_set_title (GTK_WINDOW (window), "list");
3250 gtk_container_border_width (GTK_CONTAINER (window), 0);
3252 box1 = gtk_vbox_new (FALSE, 0);
3253 gtk_container_add (GTK_CONTAINER (window), box1);
3255 box2 = gtk_vbox_new (FALSE, 10);
3256 gtk_container_border_width (GTK_CONTAINER (box2), 10);
3257 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
3259 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
3260 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
3261 GTK_POLICY_AUTOMATIC,
3262 GTK_POLICY_AUTOMATIC);
3263 gtk_box_pack_start (GTK_BOX (box2), scrolled_win, TRUE, TRUE, 0);
3264 gtk_widget_set_usize (scrolled_win, -1, 300);
3266 list = gtk_list_new ();
3267 gtk_list_set_selection_mode (GTK_LIST (list), GTK_SELECTION_EXTENDED);
3268 gtk_container_add (GTK_CONTAINER (scrolled_win), list);
3269 gtk_container_set_focus_vadjustment
3270 (GTK_CONTAINER (list),
3271 gtk_scrolled_window_get_vadjustment
3272 (GTK_SCROLLED_WINDOW (scrolled_win)));
3273 gtk_container_set_focus_hadjustment
3274 (GTK_CONTAINER (list),
3275 gtk_scrolled_window_get_hadjustment
3276 (GTK_SCROLLED_WINDOW (scrolled_win)));
3278 if ((infile = fopen("gtkenums.h", "r")))
3284 while (fgets (buffer, 256, infile))
3286 if ((pos = strchr (buffer, '\n')))
3288 item = gtk_list_item_new_with_label (buffer);
3289 gtk_container_add (GTK_CONTAINER (list), item);
3295 hbox = gtk_hbox_new (TRUE, 10);
3296 gtk_box_pack_start (GTK_BOX (box2), hbox, FALSE, TRUE, 0);
3298 button = gtk_button_new_with_label ("Undo Selection");
3299 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3300 GTK_SIGNAL_FUNC(list_undo_selection),
3302 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
3304 button = gtk_button_new_with_label ("Remove Selection");
3305 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3306 GTK_SIGNAL_FUNC (list_remove),
3308 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
3310 button = gtk_button_new_with_label ("Clear List");
3311 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3312 GTK_SIGNAL_FUNC (list_clear),
3314 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
3316 hbox = gtk_hbox_new (FALSE, 10);
3317 gtk_box_pack_start (GTK_BOX (box2), hbox, FALSE, TRUE, 0);
3319 button = gtk_button_new_with_label ("Insert Row");
3320 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3321 GTK_SIGNAL_FUNC (list_add),
3323 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
3325 label = gtk_label_new ("Selection Mode :");
3326 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3327 GTK_SIGNAL_FUNC(list_remove),
3329 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
3331 list_omenu = gtk_option_menu_new ();
3332 menu = gtk_menu_new ();
3335 menu_item = gtk_radio_menu_item_new_with_label (group, "Single");
3336 gtk_signal_connect (GTK_OBJECT (menu_item), "activate",
3337 GTK_SIGNAL_FUNC (list_toggle_sel_mode), list);
3338 group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menu_item));
3339 gtk_menu_append (GTK_MENU (menu), menu_item);
3340 gtk_widget_show (menu_item);
3342 menu_item = gtk_radio_menu_item_new_with_label (group, "Browse");
3343 gtk_signal_connect (GTK_OBJECT (menu_item), "activate",
3344 GTK_SIGNAL_FUNC (list_toggle_sel_mode), list);
3345 group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menu_item));
3346 gtk_menu_append (GTK_MENU (menu), menu_item);
3347 gtk_widget_show (menu_item);
3349 menu_item = gtk_radio_menu_item_new_with_label (group, "Multiple");
3350 gtk_signal_connect (GTK_OBJECT (menu_item), "activate",
3351 GTK_SIGNAL_FUNC (list_toggle_sel_mode), list);
3352 group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menu_item));
3353 gtk_menu_append (GTK_MENU (menu), menu_item);
3354 gtk_widget_show (menu_item);
3356 menu_item = gtk_radio_menu_item_new_with_label (group, "Extended");
3357 gtk_signal_connect (GTK_OBJECT (menu_item), "activate",
3358 GTK_SIGNAL_FUNC (list_toggle_sel_mode), list);
3359 group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menu_item));
3360 gtk_menu_append (GTK_MENU (menu), menu_item);
3361 gtk_check_menu_item_set_state (GTK_CHECK_MENU_ITEM (menu_item), TRUE);
3362 gtk_widget_show (menu_item);
3364 gtk_option_menu_set_menu (GTK_OPTION_MENU (list_omenu), menu);
3365 gtk_box_pack_start (GTK_BOX (hbox), list_omenu, FALSE, TRUE, 0);
3367 gtk_option_menu_set_history (GTK_OPTION_MENU (list_omenu), 3);
3369 separator = gtk_hseparator_new ();
3370 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
3373 box2 = gtk_vbox_new (FALSE, 10);
3374 gtk_container_border_width (GTK_CONTAINER (box2), 10);
3375 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
3377 button = gtk_button_new_with_label ("close");
3378 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
3379 GTK_SIGNAL_FUNC(gtk_widget_destroy),
3380 GTK_OBJECT (window));
3381 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
3383 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
3384 gtk_widget_grab_default (button);
3387 if (!GTK_WIDGET_VISIBLE (window))
3388 gtk_widget_show_all (window);
3390 gtk_widget_destroy (window);
3397 static char * book_open_xpm[] = {
3420 static char * book_closed_xpm[] = {
3445 static char * mini_page_xpm[] = {
3468 static char * gtk_mini_xpm[] = {
3508 #define TESTGTK_CLIST_COLUMNS 20
3509 static gint clist_rows = 0;
3510 static GtkWidget *clist_omenu;
3513 add1000_clist (GtkWidget *widget, gpointer data)
3516 char text[TESTGTK_CLIST_COLUMNS][50];
3517 char *texts[TESTGTK_CLIST_COLUMNS];
3522 clist = GTK_CLIST (data);
3524 pixmap = gdk_pixmap_create_from_xpm_d (clist->clist_window,
3526 >K_WIDGET (data)->style->white,
3529 for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++)
3532 sprintf (text[i], "Column %d", i);
3536 sprintf (text[1], "Right");
3537 sprintf (text[2], "Center");
3539 gtk_clist_freeze (GTK_CLIST (data));
3540 for (i = 0; i < 1000; i++)
3542 sprintf (text[0], "CListRow %d", rand() % 10000);
3543 row = gtk_clist_append (clist, texts);
3544 gtk_clist_set_pixtext (clist, row, 3, "gtk+", 5, pixmap, mask);
3547 gtk_clist_thaw (GTK_CLIST (data));
3549 gdk_pixmap_unref (pixmap);
3550 gdk_bitmap_unref (mask);
3554 add10000_clist (GtkWidget *widget, gpointer data)
3557 char text[TESTGTK_CLIST_COLUMNS][50];
3558 char *texts[TESTGTK_CLIST_COLUMNS];
3560 for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++)
3563 sprintf (text[i], "Column %d", i);
3566 sprintf (text[1], "Right");
3567 sprintf (text[2], "Center");
3569 gtk_clist_freeze (GTK_CLIST (data));
3570 for (i = 0; i < 10000; i++)
3572 sprintf (text[0], "CListRow %d", rand() % 10000);
3573 gtk_clist_append (GTK_CLIST (data), texts);
3575 gtk_clist_thaw (GTK_CLIST (data));
3579 clear_clist (GtkWidget *widget, gpointer data)
3581 gtk_clist_clear (GTK_CLIST (data));
3586 remove_row_clist (GtkWidget *widget, gpointer data)
3588 gtk_clist_remove (GTK_CLIST (data), GTK_CLIST (data)->focus_row);
3593 show_titles_clist (GtkWidget *widget, gpointer data)
3595 gtk_clist_column_titles_show (GTK_CLIST (data));
3599 hide_titles_clist (GtkWidget *widget, gpointer data)
3601 gtk_clist_column_titles_hide (GTK_CLIST (data));
3605 select_clist (GtkWidget *widget,
3608 GdkEventButton * bevent,
3618 g_print ("GtkCList Selection: row %d column %d button %d\n",
3619 row, column, bevent ? bevent->button : 0);
3621 for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++)
3623 switch (gtk_clist_get_cell_type (GTK_CLIST (widget), row, i))
3626 g_print ("CELL %d GTK_CELL_TEXT\n", i);
3627 gtk_clist_get_text (GTK_CLIST (widget), row, i, &text);
3628 g_print ("TEXT: %s\n", text);
3631 case GTK_CELL_PIXMAP:
3632 g_print ("CELL %d GTK_CELL_PIXMAP\n", i);
3633 gtk_clist_get_pixmap (GTK_CLIST (widget), row, i, &pixmap, &mask);
3634 g_print ("PIXMAP: %p\n", pixmap);
3635 g_print ("MASK: %p\n", mask);
3638 case GTK_CELL_PIXTEXT:
3639 g_print ("CELL %d GTK_CELL_PIXTEXT\n", i);
3640 gtk_clist_get_pixtext (GTK_CLIST (widget), row, i, &text, &spacing, &pixmap, &mask);
3641 g_print ("TEXT: %s\n", text);
3642 g_print ("SPACING: %d\n", spacing);
3643 g_print ("PIXMAP: %p\n", pixmap);
3644 g_print ("MASK: %p\n", mask);
3652 /* print selections list */
3653 g_print ("\nSelected Rows:");
3654 list = GTK_CLIST (widget)->selection;
3657 g_print (" %d ", GPOINTER_TO_INT (list->data));
3665 unselect_clist (GtkWidget *widget,
3668 GdkEventButton * bevent,
3678 g_print ("GtkCList Unselection: row %d column %d button %d\n",
3679 row, column, bevent ? bevent->button : 0);
3681 for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++)
3683 switch (gtk_clist_get_cell_type (GTK_CLIST (widget), row, i))
3686 g_print ("CELL %d GTK_CELL_TEXT\n", i);
3687 gtk_clist_get_text (GTK_CLIST (widget), row, i, &text);
3688 g_print ("TEXT: %s\n", text);
3691 case GTK_CELL_PIXMAP:
3692 g_print ("CELL %d GTK_CELL_PIXMAP\n", i);
3693 gtk_clist_get_pixmap (GTK_CLIST (widget), row, i, &pixmap, &mask);
3694 g_print ("PIXMAP: %p\n", pixmap);
3695 g_print ("MASK: %p\n", mask);
3698 case GTK_CELL_PIXTEXT:
3699 g_print ("CELL %d GTK_CELL_PIXTEXT\n", i);
3700 gtk_clist_get_pixtext (GTK_CLIST (widget), row, i, &text, &spacing, &pixmap, &mask);
3701 g_print ("TEXT: %s\n", text);
3702 g_print ("SPACING: %d\n", spacing);
3703 g_print ("PIXMAP: %p\n", pixmap);
3704 g_print ("MASK: %p\n", mask);
3712 /* print selections list */
3713 g_print ("\nSelected Rows:");
3714 list = GTK_CLIST (widget)->selection;
3717 g_print (" %d ", GPOINTER_TO_INT (list->data));
3725 insert_row_clist (GtkWidget *widget, gpointer data)
3727 static char *text[] =
3729 "This", "is", "a", "inserted", "row.",
3730 "This", "is", "a", "inserted", "row.",
3731 "This", "is", "a", "inserted", "row.",
3732 "This", "is", "a", "inserted", "row."
3735 static GtkStyle *style1 = NULL;
3736 static GtkStyle *style2 = NULL;
3737 static GtkStyle *style3 = NULL;
3740 if (GTK_CLIST (data)->focus_row >= 0)
3741 row = gtk_clist_insert (GTK_CLIST (data), GTK_CLIST (data)->focus_row,
3744 row = gtk_clist_prepend (GTK_CLIST (data), text);
3758 style1 = gtk_style_copy (GTK_WIDGET (data)->style);
3759 style1->bg[GTK_STATE_PRELIGHT] = col1;
3760 style1->bg[GTK_STATE_SELECTED] = col2;
3762 style2 = gtk_style_copy (GTK_WIDGET (data)->style);
3763 style2->fg[GTK_STATE_PRELIGHT] = col1;
3764 style2->fg[GTK_STATE_SELECTED] = col2;
3766 style3 = gtk_style_copy (GTK_WIDGET (data)->style);
3767 style3->fg[GTK_STATE_PRELIGHT] = col1;
3768 style3->bg[GTK_STATE_PRELIGHT] = col2;
3769 gdk_font_unref (style3->font);
3771 gdk_font_load ("-*-courier-medium-*-*-*-*-120-*-*-*-*-*-*");
3774 gtk_clist_set_cell_style (GTK_CLIST (data), row, 3, style1);
3775 gtk_clist_set_cell_style (GTK_CLIST (data), row, 4, style2);
3776 gtk_clist_set_cell_style (GTK_CLIST (data), row, 0, style3);
3782 clist_warning_test (GtkWidget *button,
3786 static gboolean add_remove = FALSE;
3788 add_remove = !add_remove;
3790 child = gtk_label_new ("Test");
3791 gtk_widget_ref (child);
3792 gtk_object_sink (GTK_OBJECT (child));
3795 gtk_container_add (GTK_CONTAINER (clist), child);
3798 child->parent = clist;
3799 gtk_container_remove (GTK_CONTAINER (clist), child);
3800 child->parent = NULL;
3803 gtk_widget_destroy (child);
3804 gtk_widget_unref (child);
3808 undo_selection (GtkWidget *button, GtkCList *clist)
3810 gtk_clist_undo_selection (clist);
3814 clist_toggle_sel_mode (GtkWidget *widget, GtkCList *clist)
3818 if (!GTK_WIDGET_MAPPED (widget))
3821 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
3822 (((GtkOptionMenu *)clist_omenu)->menu_item), i);
3824 gtk_clist_set_selection_mode (clist, (GtkSelectionMode) (3-i));
3828 clist_click_column (GtkCList *clist, gint column, gpointer data)
3831 gtk_clist_set_column_visibility (clist, column, FALSE);
3832 else if (column == clist->sort_column)
3834 if (clist->sort_type == GTK_SORT_ASCENDING)
3835 clist->sort_type = GTK_SORT_DESCENDING;
3837 clist->sort_type = GTK_SORT_ASCENDING;
3840 gtk_clist_set_sort_column (clist, column);
3842 gtk_clist_sort (clist);
3849 static GtkWidget *window = NULL;
3851 static char *titles[] =
3853 "auto resize", "not resizeable", "max width 100", "min width 50",
3854 "hide column", "Title 5", "Title 6", "Title 7",
3855 "Title 8", "Title 9", "Title 10", "Title 11", "Title 12",
3856 "Title 13", "Title 14", "Title 15", "Title 16", "Title 17",
3857 "Title 18", "Title 19"
3860 static OptionMenuItem items[] =
3862 { "Single", clist_toggle_sel_mode },
3863 { "Browse", clist_toggle_sel_mode },
3864 { "Multiple", clist_toggle_sel_mode },
3865 { "Extended", clist_toggle_sel_mode }
3868 char text[TESTGTK_CLIST_COLUMNS][50];
3869 char *texts[TESTGTK_CLIST_COLUMNS];
3875 GtkWidget *separator;
3876 GtkWidget *scrolled_win;
3878 GtkWidget *undo_button;
3888 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3890 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3891 GTK_SIGNAL_FUNC (gtk_widget_destroyed), &window);
3893 gtk_window_set_title (GTK_WINDOW (window), "clist");
3894 gtk_container_border_width (GTK_CONTAINER (window), 0);
3896 box1 = gtk_vbox_new (FALSE, 0);
3897 gtk_container_add (GTK_CONTAINER (window), box1);
3899 box2 = gtk_hbox_new (FALSE, 10);
3900 gtk_container_border_width (GTK_CONTAINER (box2), 10);
3901 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0);
3903 /* create GtkCList here so we have a pointer to throw at the
3904 * button callbacks -- more is done with it later */
3905 clist = gtk_clist_new_with_titles (TESTGTK_CLIST_COLUMNS, titles);
3906 gtk_widget_show (clist);
3907 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
3908 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
3909 GTK_POLICY_AUTOMATIC,
3910 GTK_POLICY_AUTOMATIC);
3911 gtk_container_add (GTK_CONTAINER (scrolled_win), clist);
3912 /*clist = gtk_clist_new (TESTGTK_CLIST_COLUMNS);*/
3914 gtk_signal_connect (GTK_OBJECT (clist), "click_column",
3915 (GtkSignalFunc) clist_click_column, NULL);
3917 /* control buttons */
3918 button = gtk_button_new_with_label ("Add 1,000 Rows With Pixmaps");
3919 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
3921 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3922 (GtkSignalFunc) add1000_clist, (gpointer) clist);
3924 button = gtk_button_new_with_label ("Add 10,000 Rows");
3925 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
3927 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3928 (GtkSignalFunc) add10000_clist, (gpointer) clist);
3930 button = gtk_button_new_with_label ("Clear List");
3931 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
3933 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3934 (GtkSignalFunc) clear_clist, (gpointer) clist);
3936 button = gtk_button_new_with_label ("Remove Row");
3937 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
3939 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3940 (GtkSignalFunc) remove_row_clist, (gpointer) clist);
3942 /* second layer of buttons */
3943 box2 = gtk_hbox_new (FALSE, 10);
3944 gtk_container_border_width (GTK_CONTAINER (box2), 10);
3945 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0);
3947 button = gtk_button_new_with_label ("Insert Row");
3948 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
3950 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3951 (GtkSignalFunc) insert_row_clist, (gpointer) clist);
3953 button = gtk_button_new_with_label ("Show Title Buttons");
3954 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
3956 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3957 (GtkSignalFunc) show_titles_clist, (gpointer) clist);
3959 button = gtk_button_new_with_label ("Hide Title Buttons");
3960 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
3962 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3963 (GtkSignalFunc) hide_titles_clist, (gpointer) clist);
3965 button = gtk_button_new_with_label ("Warning Test");
3966 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
3968 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3969 (GtkSignalFunc) clist_warning_test,(gpointer) clist);
3971 box2 = gtk_hbox_new (FALSE, 10);
3972 gtk_container_border_width (GTK_CONTAINER (box2), 10);
3973 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0);
3975 undo_button = gtk_button_new_with_label ("Undo last selection");
3976 gtk_box_pack_start (GTK_BOX (box2), undo_button, TRUE, TRUE, 0);
3977 gtk_signal_connect (GTK_OBJECT (undo_button), "clicked",
3978 (GtkSignalFunc) undo_selection, (gpointer) clist);
3980 label = gtk_label_new ("Selection Mode :");
3981 gtk_box_pack_start (GTK_BOX (box2), label, FALSE, TRUE, 0);
3983 clist_omenu = build_option_menu (items, 4, 3, clist);
3984 gtk_box_pack_start (GTK_BOX (box2), clist_omenu, FALSE, TRUE, 0);
3986 /* vbox for the list itself */
3987 box2 = gtk_vbox_new (FALSE, 10);
3988 gtk_container_border_width (GTK_CONTAINER (box2), 10);
3989 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
3992 * the rest of the clist configuration
3996 gtk_signal_connect (GTK_OBJECT (clist),
3998 (GtkSignalFunc) select_clist,
4001 gtk_signal_connect (GTK_OBJECT (clist),
4003 (GtkSignalFunc) unselect_clist,
4007 gtk_clist_set_row_height (GTK_CLIST (clist), 18);
4008 gtk_widget_set_usize (clist, -1, 300);
4010 gtk_clist_set_column_width (GTK_CLIST (clist), 0, 100);
4012 for (i = 1; i < TESTGTK_CLIST_COLUMNS; i++)
4013 gtk_clist_set_column_width (GTK_CLIST (clist), i, 80);
4015 gtk_clist_set_column_auto_resize (GTK_CLIST (clist), 0, TRUE);
4016 gtk_clist_set_column_resizeable (GTK_CLIST (clist), 1, FALSE);
4017 gtk_clist_set_column_max_width (GTK_CLIST (clist), 2, 100);
4018 gtk_clist_set_column_min_width (GTK_CLIST (clist), 3, 50);
4020 gtk_clist_set_selection_mode (GTK_CLIST (clist), GTK_SELECTION_EXTENDED);
4022 gtk_clist_set_column_justification (GTK_CLIST (clist), 1,
4024 gtk_clist_set_column_justification (GTK_CLIST (clist), 2,
4025 GTK_JUSTIFY_CENTER);
4027 for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++)
4030 sprintf (text[i], "Column %d", i);
4033 sprintf (text[1], "Right");
4034 sprintf (text[2], "Center");
4043 style = gtk_style_new ();
4044 style->fg[GTK_STATE_PRELIGHT] = col1;
4045 style->bg[GTK_STATE_PRELIGHT] = col2;
4047 gdk_font_unref (style->font);
4049 gdk_font_load ("-adobe-helvetica-bold-r-*-*-*-140-*-*-*-*-*-*");
4051 for (i = 0; i < 10; i++)
4053 sprintf (text[0], "CListRow %d", clist_rows++);
4054 gtk_clist_append (GTK_CLIST (clist), texts);
4059 gtk_clist_set_row_style (GTK_CLIST (clist), i, style);
4062 gtk_clist_set_cell_style (GTK_CLIST (clist), i, i % 4, style);
4067 gtk_container_border_width (GTK_CONTAINER (scrolled_win), 5);
4068 gtk_box_pack_start (GTK_BOX (box2), scrolled_win, TRUE, TRUE, 0);
4070 separator = gtk_hseparator_new ();
4071 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
4073 box2 = gtk_vbox_new (FALSE, 10);
4074 gtk_container_border_width (GTK_CONTAINER (box2), 10);
4075 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
4077 button = gtk_button_new_with_label ("close");
4078 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
4079 GTK_SIGNAL_FUNC(gtk_widget_destroy),
4080 GTK_OBJECT (window));
4082 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
4083 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
4084 gtk_widget_grab_default (button);
4087 if (!GTK_WIDGET_VISIBLE (window))
4088 gtk_widget_show_all (window);
4092 gtk_widget_destroy (window);
4107 static gint books = 0;
4108 static gint pages = 0;
4110 static GtkWidget *book_label;
4111 static GtkWidget *page_label;
4112 static GtkWidget *sel_label;
4113 static GtkWidget *vis_label;
4114 static GtkWidget *omenu1;
4115 static GtkWidget *omenu2;
4116 static GtkWidget *omenu3;
4117 static GtkWidget *omenu4;
4118 static GtkWidget *spin1;
4119 static GtkWidget *spin2;
4120 static GtkWidget *spin3;
4121 static gint line_style;
4123 void after_press (GtkCTree *ctree, gpointer data)
4127 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->selection));
4128 gtk_label_set (GTK_LABEL (sel_label), buf);
4130 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->row_list));
4131 gtk_label_set (GTK_LABEL (vis_label), buf);
4133 sprintf (buf, "%d", books);
4134 gtk_label_set (GTK_LABEL (book_label), buf);
4136 sprintf (buf, "%d", pages);
4137 gtk_label_set (GTK_LABEL (page_label), buf);
4140 void after_move (GtkCTree *ctree, GtkCTreeNode *child, GtkCTreeNode *parent,
4141 GtkCTreeNode *sibling, gpointer data)
4147 gtk_ctree_get_node_info (ctree, child, &source,
4148 NULL, NULL, NULL, NULL, NULL, NULL, NULL);
4150 gtk_ctree_get_node_info (ctree, parent, &target1,
4151 NULL, NULL, NULL, NULL, NULL, NULL, NULL);
4153 gtk_ctree_get_node_info (ctree, sibling, &target2,
4154 NULL, NULL, NULL, NULL, NULL, NULL, NULL);
4156 g_print ("Moving \"%s\" to \"%s\" with sibling \"%s\".\n", source,
4157 (parent) ? target1 : "nil", (sibling) ? target2 : "nil");
4160 gint button_press (GtkCTree *ctree, GdkEventButton *event, gpointer data)
4167 res = gtk_clist_get_selection_info (GTK_CLIST (ctree), event->x, event->y,
4169 if (!res && event->button != 3)
4172 work = GTK_CTREE_NODE (g_list_nth (GTK_CLIST (ctree)->row_list, row));
4174 switch (event->button)
4177 if (GTK_CLIST (ctree)->selection_mode == GTK_SELECTION_MULTIPLE &&
4178 event->state & GDK_SHIFT_MASK)
4179 gtk_signal_emit_stop_by_name (GTK_OBJECT (ctree),"button_press_event");
4182 if (GTK_CTREE_ROW (work)->children &&
4183 gtk_ctree_is_hot_spot (ctree, event->x, event->y))
4185 if (GTK_CTREE_ROW (work)->expanded)
4186 gtk_ctree_collapse_recursive (ctree, work);
4188 gtk_ctree_expand_recursive (ctree, work);
4189 after_press (ctree, NULL);
4190 gtk_signal_emit_stop_by_name (GTK_OBJECT (ctree),
4191 "button_press_event");
4200 gint button_release (GtkCTree *ctree, GdkEventButton *event, gpointer data)
4207 res = gtk_clist_get_selection_info (GTK_CLIST (ctree), event->x, event->y,
4209 if (!res || event->button != 1)
4212 work = GTK_CTREE_NODE (g_list_nth (GTK_CLIST (ctree)->row_list, row));
4214 if (GTK_CLIST (ctree)->selection_mode == GTK_SELECTION_MULTIPLE &&
4215 event->state & GDK_SHIFT_MASK)
4217 if (GTK_CTREE_ROW (work)->row.state == GTK_STATE_SELECTED)
4218 gtk_ctree_unselect_recursive (ctree, work);
4220 gtk_ctree_select_recursive (ctree, work);
4221 after_press (ctree, NULL);
4222 gtk_signal_emit_stop_by_name (GTK_OBJECT (ctree),
4223 "button_release_event");
4228 void count_items (GtkCTree *ctree, GtkCTreeNode *list)
4230 if (GTK_CTREE_ROW (list)->is_leaf)
4236 void expand_all (GtkWidget *widget, GtkCTree *ctree)
4238 gtk_ctree_expand_recursive (ctree, NULL);
4239 after_press (ctree, NULL);
4242 void collapse_all (GtkWidget *widget, GtkCTree *ctree)
4244 gtk_ctree_collapse_recursive (ctree, NULL);
4245 after_press (ctree, NULL);
4248 void select_all (GtkWidget *widget, GtkCTree *ctree)
4250 gtk_ctree_select_recursive (ctree, NULL);
4251 after_press (ctree, NULL);
4254 void change_style (GtkWidget *widget, GtkCTree *ctree)
4256 static GtkStyle *style1 = NULL;
4257 static GtkStyle *style2 = NULL;
4263 if (GTK_CLIST (ctree)->focus_row >= 0)
4264 node = GTK_CTREE_NODE
4265 (g_list_nth (GTK_CLIST (ctree)->row_list,GTK_CLIST (ctree)->focus_row));
4267 node = GTK_CTREE_NODE (GTK_CLIST (ctree)->row_list);
4281 style1 = gtk_style_new ();
4282 style1->bg[GTK_STATE_PRELIGHT] = col1;
4283 style1->fg[GTK_STATE_SELECTED] = col2;
4285 style2 = gtk_style_new ();
4286 style2->bg[GTK_STATE_SELECTED] = col2;
4287 style2->fg[GTK_STATE_PRELIGHT] = col1;
4288 style2->bg[GTK_STATE_PRELIGHT] = col2;
4289 gdk_font_unref (style2->font);
4291 gdk_font_load ("-*-courier-medium-*-*-*-*-300-*-*-*-*-*-*");
4294 gtk_ctree_node_set_cell_style (ctree, node, 1, style1);
4295 gtk_ctree_node_set_cell_style (ctree, node, 0, style2);
4297 if (GTK_CTREE_ROW (node)->children)
4298 gtk_ctree_node_set_row_style (ctree, GTK_CTREE_ROW (node)->children,
4303 void unselect_all (GtkWidget *widget, GtkCTree *ctree)
4305 gtk_ctree_unselect_recursive (ctree, NULL);
4306 after_press (ctree, NULL);
4309 void remove_selection (GtkWidget *widget, GtkCTree *ctree)
4312 GtkCTreeNode *new_sel;
4315 selection = GTK_CLIST (ctree)->selection;
4318 gtk_clist_freeze (GTK_CLIST (ctree));
4322 work = selection->data;
4323 if (GTK_CTREE_ROW (work)->is_leaf)
4326 gtk_ctree_post_recursive (ctree, work,
4327 (GtkCTreeFunc) count_items, NULL);
4329 if (GTK_CLIST (ctree)->selection_mode == GTK_SELECTION_BROWSE)
4331 if (GTK_CTREE_ROW (work)->children)
4333 new_sel = GTK_CTREE_ROW (work)->sibling;
4335 new_sel = GTK_CTREE_NODE_NEXT (work);
4339 if (GTK_CTREE_NODE_NEXT (work))
4340 new_sel = GTK_CTREE_NODE_NEXT (work);
4342 new_sel = GTK_CTREE_NODE_PREV (work);
4346 gtk_ctree_remove_node (ctree, work);
4347 selection = GTK_CLIST (ctree)->selection;
4351 gtk_ctree_select (ctree, new_sel);
4353 gtk_clist_thaw (GTK_CLIST (ctree));
4354 after_press (ctree, NULL);
4357 struct _ExportStruct {
4363 typedef struct _ExportStruct ExportStruct;
4366 gnode2ctree (GtkCTree *ctree,
4369 GtkCTreeNode *cnode,
4373 GdkPixmap *pixmap_closed;
4374 GdkBitmap *mask_closed;
4375 GdkPixmap *pixmap_opened;
4376 GdkBitmap *mask_opened;
4378 if (!cnode || !gnode || (!(es = gnode->data)))
4383 pixmap_closed = pixmap3;
4384 mask_closed = mask3;
4385 pixmap_opened = NULL;
4390 pixmap_closed = pixmap1;
4391 mask_closed = mask1;
4392 pixmap_opened = pixmap2;
4393 mask_opened = mask2;
4396 gtk_ctree_set_node_info (ctree, cnode, es->tree, 2, pixmap_closed,
4397 mask_closed, pixmap_opened, mask_opened,
4398 es->is_leaf, (depth < 3));
4399 gtk_ctree_node_set_text (ctree, cnode, 1, es->info);
4407 ctree2gnode (GtkCTree *ctree,
4410 GtkCTreeNode *cnode,
4415 if (!cnode || !gnode)
4418 es = g_new (ExportStruct, 1);
4420 es->is_leaf = GTK_CTREE_ROW (cnode)->is_leaf;
4421 es->tree = GTK_CELL_PIXTEXT (GTK_CTREE_ROW (cnode)->row.cell[0])->text;
4422 es->info = GTK_CELL_PIXTEXT (GTK_CTREE_ROW (cnode)->row.cell[1])->text;
4426 void export_ctree (GtkWidget *widget, GtkCTree *ctree)
4428 char *title[] = { "Tree" , "Info" };
4429 static GtkWidget *export_window = NULL;
4430 static GtkCTree *export_ctree;
4432 GtkWidget *scrolled_win;
4440 export_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
4442 gtk_signal_connect (GTK_OBJECT (export_window), "destroy",
4443 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
4446 gtk_window_set_title (GTK_WINDOW (export_window), "exported ctree");
4447 gtk_container_border_width (GTK_CONTAINER (export_window), 5);
4449 vbox = gtk_vbox_new (FALSE, 0);
4450 gtk_container_add (GTK_CONTAINER (export_window), vbox);
4452 button = gtk_button_new_with_label ("Close");
4453 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, TRUE, 0);
4455 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
4456 (GtkSignalFunc) gtk_widget_destroy,
4457 GTK_OBJECT(export_window));
4459 sep = gtk_hseparator_new ();
4460 gtk_box_pack_end (GTK_BOX (vbox), sep, FALSE, TRUE, 10);
4462 export_ctree = GTK_CTREE (gtk_ctree_new_with_titles (2, 0, title));
4463 gtk_ctree_set_line_style (export_ctree, GTK_CTREE_LINES_DOTTED);
4465 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
4466 gtk_container_add (GTK_CONTAINER (scrolled_win),
4467 GTK_WIDGET (export_ctree));
4468 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
4469 GTK_POLICY_AUTOMATIC,
4470 GTK_POLICY_AUTOMATIC);
4471 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
4472 gtk_clist_set_selection_mode (GTK_CLIST (export_ctree),
4473 GTK_SELECTION_EXTENDED);
4474 gtk_clist_set_column_width (GTK_CLIST (export_ctree), 0, 200);
4475 gtk_clist_set_column_width (GTK_CLIST (export_ctree), 1, 200);
4476 gtk_widget_set_usize (GTK_WIDGET (export_ctree), 300, 200);
4479 if (!GTK_WIDGET_VISIBLE (export_window))
4480 gtk_widget_show_all (export_window);
4482 gtk_clist_clear (GTK_CLIST (export_ctree));
4484 node = GTK_CTREE_NODE (g_list_nth (GTK_CLIST (ctree)->row_list,
4485 GTK_CLIST (ctree)->focus_row));
4489 gnode = gtk_ctree_export_to_gnode (ctree, NULL, NULL, node,
4493 gtk_ctree_insert_gnode (export_ctree, NULL, NULL, gnode,
4495 g_node_destroy (gnode);
4499 void change_indent (GtkWidget *widget, GtkCTree *ctree)
4501 gtk_ctree_set_indent (ctree, GTK_ADJUSTMENT (widget)->value);
4504 void change_spacing (GtkWidget *widget, GtkCTree *ctree)
4506 gtk_ctree_set_spacing (ctree, GTK_ADJUSTMENT (widget)->value);
4509 void change_row_height (GtkWidget *widget, GtkCList *clist)
4511 gtk_clist_set_row_height (clist, GTK_ADJUSTMENT (widget)->value);
4514 void toggle_reorderable (GtkWidget *widget, GtkCTree *ctree)
4516 gtk_ctree_set_reorderable (ctree, GTK_TOGGLE_BUTTON (widget)->active);
4519 void set_background (GtkCTree *ctree, GtkCTreeNode *node, gpointer data)
4521 GtkStyle *style = NULL;
4526 if (ctree->line_style != GTK_CTREE_LINES_TABBED)
4528 if (!GTK_CTREE_ROW (node)->is_leaf)
4529 style = GTK_CTREE_ROW (node)->row.data;
4530 else if (GTK_CTREE_ROW (node)->parent)
4531 style = GTK_CTREE_ROW (GTK_CTREE_ROW (node)->parent)->row.data;
4534 gtk_ctree_node_set_row_style (ctree, node, style);
4537 void ctree_toggle_line_style (GtkWidget *widget, GtkCTree *ctree)
4541 if (!GTK_WIDGET_MAPPED (widget))
4544 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
4545 (((GtkOptionMenu *)omenu1)->menu_item), i);
4547 if ((ctree->line_style == GTK_CTREE_LINES_TABBED &&
4548 ((GtkCTreeLineStyle) (3 - i)) != GTK_CTREE_LINES_TABBED) ||
4549 (ctree->line_style != GTK_CTREE_LINES_TABBED &&
4550 ((GtkCTreeLineStyle) (3 - i)) == GTK_CTREE_LINES_TABBED))
4551 gtk_ctree_pre_recursive (ctree, NULL, set_background, NULL);
4552 gtk_ctree_set_line_style (ctree, 3 - i);
4556 void ctree_toggle_expander_style (GtkWidget *widget, GtkCTree *ctree)
4560 if (!GTK_WIDGET_MAPPED (widget))
4563 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
4564 (((GtkOptionMenu *)omenu2)->menu_item), i);
4566 gtk_ctree_set_expander_style (ctree, (GtkCTreeExpanderStyle) (3 - i));
4569 void ctree_toggle_justify (GtkWidget *widget, GtkCTree *ctree)
4573 if (!GTK_WIDGET_MAPPED (widget))
4576 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
4577 (((GtkOptionMenu *)omenu3)->menu_item), i);
4579 gtk_clist_set_column_justification (GTK_CLIST (ctree), ctree->tree_column,
4580 (GtkJustification) (1 - i));
4583 void ctree_toggle_sel_mode (GtkWidget *widget, GtkCTree *ctree)
4587 if (!GTK_WIDGET_MAPPED (widget))
4590 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
4591 (((GtkOptionMenu *)omenu4)->menu_item), i);
4593 gtk_clist_set_selection_mode (GTK_CLIST (ctree), (GtkSelectionMode) (3 - i));
4594 after_press (ctree, NULL);
4597 void build_recursive (GtkCTree *ctree, gint cur_depth, gint depth,
4598 gint num_books, gint num_pages, GtkCTreeNode *parent)
4603 GtkCTreeNode *sibling;
4610 for (i = num_pages + num_books; i > num_books; i--)
4613 sprintf (buf1, "Page %02d", (gint) rand() % 100);
4614 sprintf (buf2, "Item %d-%d", cur_depth, i);
4615 sibling = gtk_ctree_insert_node (ctree, parent, sibling, text, 5,
4616 pixmap3, mask3, NULL, NULL,
4619 if (parent && ctree->line_style == GTK_CTREE_LINES_TABBED)
4620 gtk_ctree_node_set_row_style (ctree, sibling,
4621 GTK_CTREE_ROW (parent)->row.style);
4624 if (cur_depth == depth)
4627 for (i = num_books; i > 0; i--)
4632 sprintf (buf1, "Book %02d", (gint) rand() % 100);
4633 sprintf (buf2, "Item %d-%d", cur_depth, i);
4634 sibling = gtk_ctree_insert_node (ctree, parent, sibling, text, 5,
4635 pixmap1, mask1, pixmap2, mask2,
4638 style = gtk_style_new();
4639 switch (cur_depth % 3)
4642 style->bg[GTK_STATE_PRELIGHT].red = 10000 * (cur_depth % 6);
4643 style->bg[GTK_STATE_PRELIGHT].green = 0;
4644 style->bg[GTK_STATE_PRELIGHT].blue = 65535 - ((i * 10000) % 65535);
4647 style->bg[GTK_STATE_PRELIGHT].red = 10000 * (cur_depth % 6);
4648 style->bg[GTK_STATE_PRELIGHT].green = 65535 - ((i * 10000) % 65535);
4649 style->bg[GTK_STATE_PRELIGHT].blue = 0;
4652 style->bg[GTK_STATE_PRELIGHT].red = 65535 - ((i * 10000) % 65535);
4653 style->bg[GTK_STATE_PRELIGHT].green = 0;
4654 style->bg[GTK_STATE_PRELIGHT].blue = 10000 * (cur_depth % 6);
4657 gtk_ctree_node_set_row_data_full (ctree, sibling, style,
4658 (GtkDestroyNotify) gtk_style_unref);
4660 if (ctree->line_style == GTK_CTREE_LINES_TABBED)
4661 gtk_ctree_node_set_row_style (ctree, sibling, style);
4663 build_recursive (ctree, cur_depth + 1, depth, num_books, num_pages,
4668 void rebuild_tree (GtkWidget *widget, GtkCTree *ctree)
4671 gchar label1[] = "Root";
4672 gchar label2[] = "";
4673 GtkCTreeNode *parent;
4680 d = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin1));
4681 b = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin2));
4682 p = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin3));
4684 n = ((pow (b, d) - 1) / (b - 1)) * (p + 1);
4688 g_print ("%d total items? Try less\n",n);
4692 gtk_clist_freeze (GTK_CLIST (ctree));
4693 gtk_clist_clear (GTK_CLIST (ctree));
4698 parent = gtk_ctree_insert_node (ctree, NULL, NULL, text, 5, pixmap1,
4699 mask1, pixmap2, mask2, FALSE, TRUE);
4701 style = gtk_style_new ();
4702 style->bg[GTK_STATE_PRELIGHT].red = 0;
4703 style->bg[GTK_STATE_PRELIGHT].green = 45000;
4704 style->bg[GTK_STATE_PRELIGHT].blue = 55000;
4705 gtk_ctree_node_set_row_data_full (ctree, parent, style,
4706 (GtkDestroyNotify) gtk_style_unref);
4708 if (ctree->line_style == GTK_CTREE_LINES_TABBED)
4709 gtk_ctree_node_set_row_style (ctree, parent, style);
4711 build_recursive (ctree, 1, d, b, p, parent);
4712 gtk_clist_thaw (GTK_CLIST (ctree));
4713 after_press (ctree, NULL);
4717 ctree_click_column (GtkCTree *ctree, gint column, gpointer data)
4721 clist = GTK_CLIST (ctree);
4723 if (column == clist->sort_column)
4725 if (clist->sort_type == GTK_SORT_ASCENDING)
4726 clist->sort_type = GTK_SORT_DESCENDING;
4728 clist->sort_type = GTK_SORT_ASCENDING;
4731 gtk_clist_set_sort_column (clist, column);
4733 gtk_ctree_sort_recursive (ctree, NULL);
4736 void create_ctree (void)
4738 static GtkWidget *window = NULL;
4739 GtkTooltips *tooltips;
4741 GtkWidget *scrolled_win;
4753 GdkColor transparent;
4755 char *title[] = { "Tree" , "Info" };
4758 static OptionMenuItem items1[] =
4760 { "No lines", ctree_toggle_line_style },
4761 { "Solid", ctree_toggle_line_style },
4762 { "Dotted", ctree_toggle_line_style },
4763 { "Tabbed", ctree_toggle_line_style }
4766 static OptionMenuItem items2[] =
4768 { "None", ctree_toggle_expander_style },
4769 { "Square", ctree_toggle_expander_style },
4770 { "Triangle", ctree_toggle_expander_style },
4771 { "Circular", ctree_toggle_expander_style }
4774 static OptionMenuItem items3[] =
4776 { "Left", ctree_toggle_justify },
4777 { "Right", ctree_toggle_justify }
4780 static OptionMenuItem items4[] =
4782 { "Single", ctree_toggle_sel_mode },
4783 { "Browse", ctree_toggle_sel_mode },
4784 { "Multiple", ctree_toggle_sel_mode },
4785 { "Extended", ctree_toggle_sel_mode }
4790 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
4792 gtk_signal_connect (GTK_OBJECT (window), "destroy",
4793 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
4796 gtk_window_set_title (GTK_WINDOW (window), "GtkCTree");
4797 gtk_container_border_width (GTK_CONTAINER (window), 0);
4799 tooltips = gtk_tooltips_new ();
4800 gtk_object_ref (GTK_OBJECT (tooltips));
4801 gtk_object_sink (GTK_OBJECT (tooltips));
4803 gtk_object_set_data_full (GTK_OBJECT (window), "tooltips", tooltips,
4804 (GtkDestroyNotify) gtk_object_unref);
4806 vbox = gtk_vbox_new (FALSE, 0);
4807 gtk_container_add (GTK_CONTAINER (window), vbox);
4809 hbox = gtk_hbox_new (FALSE, 5);
4810 gtk_container_border_width (GTK_CONTAINER (hbox), 5);
4811 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
4813 label = gtk_label_new ("Depth :");
4814 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
4816 adj = (GtkAdjustment *) gtk_adjustment_new (4, 1, 10, 1, 5, 0);
4817 spin1 = gtk_spin_button_new (adj, 0, 0);
4818 gtk_box_pack_start (GTK_BOX (hbox), spin1, FALSE, TRUE, 5);
4820 label = gtk_label_new ("Books :");
4821 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
4823 adj = (GtkAdjustment *) gtk_adjustment_new (3, 1, 20, 1, 5, 0);
4824 spin2 = gtk_spin_button_new (adj, 0, 0);
4825 gtk_box_pack_start (GTK_BOX (hbox), spin2, FALSE, TRUE, 5);
4827 label = gtk_label_new ("Pages :");
4828 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
4830 adj = (GtkAdjustment *) gtk_adjustment_new (5, 1, 20, 1, 5, 0);
4831 spin3 = gtk_spin_button_new (adj, 0, 0);
4832 gtk_box_pack_start (GTK_BOX (hbox), spin3, FALSE, TRUE, 5);
4834 button = gtk_button_new_with_label ("Close");
4835 gtk_box_pack_end (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4837 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
4838 (GtkSignalFunc) gtk_widget_destroy,
4839 GTK_OBJECT(window));
4841 button = gtk_button_new_with_label ("Rebuild tree");
4842 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4844 ctree = GTK_CTREE (gtk_ctree_new_with_titles (2, 0, title));
4845 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4846 GTK_SIGNAL_FUNC (rebuild_tree), ctree);
4848 gtk_ctree_set_line_style (ctree, GTK_CTREE_LINES_DOTTED);
4849 line_style = GTK_CTREE_LINES_DOTTED;
4851 gtk_ctree_set_reorderable (ctree, TRUE);
4852 gtk_signal_connect (GTK_OBJECT (ctree), "click_column",
4853 (GtkSignalFunc) ctree_click_column,
4855 gtk_signal_connect (GTK_OBJECT (ctree), "button_press_event",
4856 GTK_SIGNAL_FUNC (button_press), NULL);
4857 gtk_signal_connect_after (GTK_OBJECT (ctree), "button_press_event",
4858 GTK_SIGNAL_FUNC (after_press), NULL);
4859 gtk_signal_connect (GTK_OBJECT (ctree), "button_release_event",
4860 GTK_SIGNAL_FUNC (button_release), NULL);
4861 gtk_signal_connect_after (GTK_OBJECT (ctree), "button_release_event",
4862 GTK_SIGNAL_FUNC (after_press), NULL);
4863 gtk_signal_connect_after (GTK_OBJECT (ctree), "tree_move",
4864 GTK_SIGNAL_FUNC (after_move), NULL);
4865 gtk_signal_connect_after (GTK_OBJECT (ctree), "end_selection",
4866 GTK_SIGNAL_FUNC (after_press), NULL);
4867 gtk_signal_connect_after (GTK_OBJECT (ctree), "toggle_focus_row",
4868 GTK_SIGNAL_FUNC (after_press), NULL);
4869 gtk_signal_connect_after (GTK_OBJECT (ctree), "select_all",
4870 GTK_SIGNAL_FUNC (after_press), NULL);
4871 gtk_signal_connect_after (GTK_OBJECT (ctree), "unselect_all",
4872 GTK_SIGNAL_FUNC (after_press), NULL);
4873 gtk_signal_connect_after (GTK_OBJECT (ctree), "scroll_vertical",
4874 GTK_SIGNAL_FUNC (after_press), NULL);
4876 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
4877 gtk_container_add (GTK_CONTAINER (scrolled_win), GTK_WIDGET (ctree));
4878 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
4879 GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
4880 gtk_container_border_width (GTK_CONTAINER (scrolled_win), 5);
4881 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
4882 gtk_clist_set_selection_mode (GTK_CLIST (ctree), GTK_SELECTION_EXTENDED);
4883 gtk_clist_set_column_min_width (GTK_CLIST (ctree), 0, 50);
4884 gtk_clist_set_column_auto_resize (GTK_CLIST (ctree), 0, TRUE);
4885 gtk_clist_set_column_width (GTK_CLIST (ctree), 1, 200);
4887 bbox = gtk_hbox_new (FALSE, 5);
4888 gtk_container_border_width (GTK_CONTAINER (bbox), 5);
4889 gtk_box_pack_start (GTK_BOX (vbox), bbox, FALSE, TRUE, 0);
4891 mbox = gtk_vbox_new (TRUE, 5);
4892 gtk_box_pack_start (GTK_BOX (bbox), mbox, FALSE, TRUE, 0);
4894 label = gtk_label_new ("Row height :");
4895 gtk_box_pack_start (GTK_BOX (mbox), label, FALSE, FALSE, 0);
4897 label = gtk_label_new ("Indent :");
4898 gtk_box_pack_start (GTK_BOX (mbox), label, FALSE, FALSE, 0);
4900 label = gtk_label_new ("Spacing :");
4901 gtk_box_pack_start (GTK_BOX (mbox), label, FALSE, FALSE, 0);
4903 mbox = gtk_vbox_new (TRUE, 5);
4904 gtk_box_pack_start (GTK_BOX (bbox), mbox, FALSE, TRUE, 0);
4906 adj = (GtkAdjustment *) gtk_adjustment_new (20, 12, 100, 1, 10, 0);
4907 spinner = gtk_spin_button_new (adj, 0, 0);
4908 gtk_tooltips_set_tip (tooltips, spinner,
4909 "Row height of list items", NULL);
4910 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
4911 GTK_SIGNAL_FUNC (change_row_height), ctree);
4912 gtk_box_pack_start (GTK_BOX (mbox), spinner, FALSE, FALSE, 5);
4913 gtk_clist_set_row_height ( GTK_CLIST (ctree), adj->value);
4915 adj = (GtkAdjustment *) gtk_adjustment_new (20, 0, 60, 1, 10, 0);
4916 spinner = gtk_spin_button_new (adj, 0, 0);
4917 gtk_tooltips_set_tip (tooltips, spinner, "Tree indentation.", NULL);
4918 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
4919 GTK_SIGNAL_FUNC (change_indent), ctree);
4920 gtk_box_pack_start (GTK_BOX (mbox), spinner, FALSE, FALSE, 5);
4922 adj = (GtkAdjustment *) gtk_adjustment_new (5, 0, 60, 1, 10, 0);
4923 spinner = gtk_spin_button_new (adj, 0, 0);
4924 gtk_tooltips_set_tip (tooltips, spinner, "Tree spacing.", NULL);
4925 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
4926 GTK_SIGNAL_FUNC (change_spacing), ctree);
4927 gtk_box_pack_start (GTK_BOX (mbox), spinner, FALSE, FALSE, 5);
4929 mbox = gtk_vbox_new (TRUE, 5);
4930 gtk_box_pack_start (GTK_BOX (bbox), mbox, FALSE, TRUE, 0);
4932 hbox = gtk_hbox_new (FALSE, 5);
4933 gtk_box_pack_start (GTK_BOX (mbox), hbox, FALSE, FALSE, 0);
4935 button = gtk_button_new_with_label ("Expand all");
4936 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4937 GTK_SIGNAL_FUNC (expand_all), ctree);
4938 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4940 button = gtk_button_new_with_label ("Collapse all");
4941 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4942 GTK_SIGNAL_FUNC (collapse_all), ctree);
4943 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4945 button = gtk_button_new_with_label ("Change Style");
4946 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4947 GTK_SIGNAL_FUNC (change_style), ctree);
4948 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4950 button = gtk_button_new_with_label ("Export tree");
4951 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4952 GTK_SIGNAL_FUNC (export_ctree), ctree);
4953 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4955 hbox = gtk_hbox_new (FALSE, 5);
4956 gtk_box_pack_start (GTK_BOX (mbox), hbox, FALSE, FALSE, 0);
4958 button = gtk_button_new_with_label ("Select all");
4959 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4960 GTK_SIGNAL_FUNC (select_all), ctree);
4961 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4963 button = gtk_button_new_with_label ("Unselect all");
4964 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4965 GTK_SIGNAL_FUNC (unselect_all), ctree);
4966 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4968 button = gtk_button_new_with_label ("Remove selection");
4969 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4970 GTK_SIGNAL_FUNC (remove_selection), ctree);
4971 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4973 check = gtk_check_button_new_with_label ("Reorderable");
4974 gtk_tooltips_set_tip (tooltips, check,
4975 "Tree items can be reordered by dragging.", NULL);
4976 gtk_signal_connect (GTK_OBJECT (check), "clicked",
4977 GTK_SIGNAL_FUNC (toggle_reorderable), ctree);
4978 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
4979 gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (check), TRUE);
4981 hbox = gtk_hbox_new (TRUE, 5);
4982 gtk_box_pack_start (GTK_BOX (mbox), hbox, FALSE, FALSE, 0);
4984 omenu1 = build_option_menu (items1, 4, 2, ctree);
4985 gtk_tooltips_set_tip (tooltips, omenu1, "The tree's line style.", NULL);
4986 gtk_box_pack_start (GTK_BOX (hbox), omenu1, FALSE, TRUE, 0);
4988 omenu2 = build_option_menu (items2, 4, 1, ctree);
4989 gtk_tooltips_set_tip (tooltips, omenu2, "The tree's expander style.",
4991 gtk_box_pack_start (GTK_BOX (hbox), omenu2, FALSE, TRUE, 0);
4993 omenu3 = build_option_menu (items3, 2, 0, ctree);
4994 gtk_tooltips_set_tip (tooltips, omenu3, "The tree's justification.",
4996 gtk_box_pack_start (GTK_BOX (hbox), omenu3, FALSE, TRUE, 0);
4998 omenu4 = build_option_menu (items4, 4, 3, ctree);
4999 gtk_tooltips_set_tip (tooltips, omenu4, "The list's selection mode.",
5001 gtk_box_pack_start (GTK_BOX (hbox), omenu4, FALSE, TRUE, 0);
5003 gtk_widget_realize (window);
5005 pixmap1 = gdk_pixmap_create_from_xpm_d (window->window, &mask1,
5006 &transparent, book_closed_xpm);
5007 pixmap2 = gdk_pixmap_create_from_xpm_d (window->window, &mask2,
5008 &transparent, book_open_xpm);
5009 pixmap3 = gdk_pixmap_create_from_xpm_d (window->window, &mask3,
5010 &transparent, mini_page_xpm);
5012 gtk_widget_set_usize (GTK_WIDGET (ctree), 0, 300);
5014 frame = gtk_frame_new (NULL);
5015 gtk_container_border_width (GTK_CONTAINER (frame), 0);
5016 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_OUT);
5017 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
5019 hbox = gtk_hbox_new (TRUE, 2);
5020 gtk_container_border_width (GTK_CONTAINER (hbox), 2);
5021 gtk_container_add (GTK_CONTAINER (frame), hbox);
5023 frame = gtk_frame_new (NULL);
5024 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
5025 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
5027 hbox2 = gtk_hbox_new (FALSE, 0);
5028 gtk_container_border_width (GTK_CONTAINER (hbox2), 2);
5029 gtk_container_add (GTK_CONTAINER (frame), hbox2);
5031 label = gtk_label_new ("Books :");
5032 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
5034 sprintf (buf, "%d", books);
5035 book_label = gtk_label_new (buf);
5036 gtk_box_pack_end (GTK_BOX (hbox2), book_label, FALSE, TRUE, 5);
5038 frame = gtk_frame_new (NULL);
5039 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
5040 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
5042 hbox2 = gtk_hbox_new (FALSE, 0);
5043 gtk_container_border_width (GTK_CONTAINER (hbox2), 2);
5044 gtk_container_add (GTK_CONTAINER (frame), hbox2);
5046 label = gtk_label_new ("Pages :");
5047 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
5049 sprintf (buf, "%d", pages);
5050 page_label = gtk_label_new (buf);
5051 gtk_box_pack_end (GTK_BOX (hbox2), page_label, FALSE, TRUE, 5);
5053 frame = gtk_frame_new (NULL);
5054 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
5055 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
5057 hbox2 = gtk_hbox_new (FALSE, 0);
5058 gtk_container_border_width (GTK_CONTAINER (hbox2), 2);
5059 gtk_container_add (GTK_CONTAINER (frame), hbox2);
5061 label = gtk_label_new ("Selected :");
5062 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
5064 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->selection));
5065 sel_label = gtk_label_new (buf);
5066 gtk_box_pack_end (GTK_BOX (hbox2), sel_label, FALSE, TRUE, 5);
5068 frame = gtk_frame_new (NULL);
5069 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
5070 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
5072 hbox2 = gtk_hbox_new (FALSE, 0);
5073 gtk_container_border_width (GTK_CONTAINER (hbox2), 2);
5074 gtk_container_add (GTK_CONTAINER (frame), hbox2);
5076 label = gtk_label_new ("Visible :");
5077 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
5079 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->row_list));
5080 vis_label = gtk_label_new (buf);
5081 gtk_box_pack_end (GTK_BOX (hbox2), vis_label, FALSE, TRUE, 5);
5083 rebuild_tree (NULL, ctree);
5086 if (!GTK_WIDGET_VISIBLE (window))
5087 gtk_widget_show_all (window);
5089 gtk_widget_destroy (window);
5097 color_selection_ok (GtkWidget *w,
5098 GtkColorSelectionDialog *cs)
5100 GtkColorSelection *colorsel;
5103 colorsel=GTK_COLOR_SELECTION(cs->colorsel);
5105 gtk_color_selection_get_color(colorsel,color);
5106 gtk_color_selection_set_color(colorsel,color);
5110 color_selection_changed (GtkWidget *w,
5111 GtkColorSelectionDialog *cs)
5113 GtkColorSelection *colorsel;
5116 colorsel=GTK_COLOR_SELECTION(cs->colorsel);
5117 gtk_color_selection_get_color(colorsel,color);
5121 create_color_selection (void)
5123 static GtkWidget *window = NULL;
5127 window = gtk_color_selection_dialog_new ("color selection dialog");
5129 gtk_color_selection_set_opacity (
5130 GTK_COLOR_SELECTION (GTK_COLOR_SELECTION_DIALOG (window)->colorsel),
5133 gtk_color_selection_set_update_policy(
5134 GTK_COLOR_SELECTION (GTK_COLOR_SELECTION_DIALOG (window)->colorsel),
5135 GTK_UPDATE_CONTINUOUS);
5137 gtk_window_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
5139 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5140 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5143 gtk_signal_connect (
5144 GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (window)->colorsel),
5146 GTK_SIGNAL_FUNC(color_selection_changed),
5149 gtk_signal_connect (
5150 GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (window)->ok_button),
5152 GTK_SIGNAL_FUNC(color_selection_ok),
5155 gtk_signal_connect_object (
5156 GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (window)->cancel_button),
5158 GTK_SIGNAL_FUNC(gtk_widget_destroy),
5159 GTK_OBJECT (window));
5162 if (!GTK_WIDGET_VISIBLE (window))
5163 gtk_widget_show (window);
5165 gtk_widget_destroy (window);
5173 file_selection_hide_fileops (GtkWidget *widget,
5174 GtkFileSelection *fs)
5176 gtk_file_selection_hide_fileop_buttons (fs);
5180 file_selection_ok (GtkWidget *w,
5181 GtkFileSelection *fs)
5183 g_print ("%s\n", gtk_file_selection_get_filename (fs));
5184 gtk_widget_destroy (GTK_WIDGET (fs));
5188 create_file_selection (void)
5190 static GtkWidget *window = NULL;
5195 window = gtk_file_selection_new ("file selection dialog");
5197 gtk_file_selection_hide_fileop_buttons (GTK_FILE_SELECTION (window));
5199 gtk_window_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
5201 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5202 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5205 gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (window)->ok_button),
5206 "clicked", GTK_SIGNAL_FUNC(file_selection_ok),
5208 gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION (window)->cancel_button),
5209 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
5210 GTK_OBJECT (window));
5212 button = gtk_button_new_with_label ("Hide Fileops");
5213 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5214 (GtkSignalFunc) file_selection_hide_fileops,
5216 gtk_box_pack_start (GTK_BOX (GTK_FILE_SELECTION (window)->action_area),
5217 button, FALSE, FALSE, 0);
5218 gtk_widget_show (button);
5220 button = gtk_button_new_with_label ("Show Fileops");
5221 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5222 (GtkSignalFunc) gtk_file_selection_show_fileop_buttons,
5224 gtk_box_pack_start (GTK_BOX (GTK_FILE_SELECTION (window)->action_area),
5225 button, FALSE, FALSE, 0);
5226 gtk_widget_show (button);
5229 if (!GTK_WIDGET_VISIBLE (window))
5230 gtk_widget_show (window);
5232 gtk_widget_destroy (window);
5240 font_selection_ok (GtkWidget *w,
5241 GtkFontSelectionDialog *fs)
5243 g_print ("%s\n", gtk_font_selection_dialog_get_font_name (fs));
5244 gtk_widget_destroy (GTK_WIDGET (fs));
5248 create_font_selection (void)
5250 static GtkWidget *window = NULL;
5254 window = gtk_font_selection_dialog_new ("Font Selection Dialog");
5256 gtk_window_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
5258 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5259 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5262 gtk_signal_connect (GTK_OBJECT (GTK_FONT_SELECTION_DIALOG (window)->ok_button),
5263 "clicked", GTK_SIGNAL_FUNC(font_selection_ok),
5264 GTK_FONT_SELECTION_DIALOG (window));
5265 gtk_signal_connect_object (GTK_OBJECT (GTK_FONT_SELECTION_DIALOG (window)->cancel_button),
5266 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
5267 GTK_OBJECT (window));
5270 if (!GTK_WIDGET_VISIBLE (window))
5271 gtk_widget_show (window);
5273 gtk_widget_destroy (window);
5280 static GtkWidget *dialog_window = NULL;
5283 label_toggle (GtkWidget *widget,
5288 *label = gtk_label_new ("Dialog Test");
5289 gtk_signal_connect (GTK_OBJECT (*label),
5291 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
5293 gtk_misc_set_padding (GTK_MISC (*label), 10, 10);
5294 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->vbox),
5295 *label, TRUE, TRUE, 0);
5296 gtk_widget_show (*label);
5299 gtk_widget_destroy (*label);
5303 create_dialog (void)
5305 static GtkWidget *label;
5310 dialog_window = gtk_dialog_new ();
5312 gtk_signal_connect (GTK_OBJECT (dialog_window), "destroy",
5313 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5316 gtk_window_set_title (GTK_WINDOW (dialog_window), "GtkDialog");
5317 gtk_container_border_width (GTK_CONTAINER (dialog_window), 0);
5318 gtk_widget_set_usize (dialog_window, 200, 110);
5320 button = gtk_button_new_with_label ("OK");
5321 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5322 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->action_area),
5323 button, TRUE, TRUE, 0);
5324 gtk_widget_grab_default (button);
5325 gtk_widget_show (button);
5327 button = gtk_button_new_with_label ("Toggle");
5328 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5329 GTK_SIGNAL_FUNC (label_toggle),
5331 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5332 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->action_area),
5333 button, TRUE, TRUE, 0);
5334 gtk_widget_show (button);
5339 if (!GTK_WIDGET_VISIBLE (dialog_window))
5340 gtk_widget_show (dialog_window);
5342 gtk_widget_destroy (dialog_window);
5350 create_range_controls (void)
5352 static GtkWidget *window = NULL;
5356 GtkWidget *scrollbar;
5358 GtkWidget *separator;
5359 GtkObject *adjustment;
5363 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5365 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5366 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5369 gtk_window_set_title (GTK_WINDOW (window), "range controls");
5370 gtk_container_border_width (GTK_CONTAINER (window), 0);
5373 box1 = gtk_vbox_new (FALSE, 0);
5374 gtk_container_add (GTK_CONTAINER (window), box1);
5375 gtk_widget_show (box1);
5378 box2 = gtk_vbox_new (FALSE, 10);
5379 gtk_container_border_width (GTK_CONTAINER (box2), 10);
5380 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
5381 gtk_widget_show (box2);
5384 adjustment = gtk_adjustment_new (0.0, 0.0, 101.0, 0.1, 1.0, 1.0);
5386 scale = gtk_hscale_new (GTK_ADJUSTMENT (adjustment));
5387 gtk_widget_set_usize (GTK_WIDGET (scale), 150, 30);
5388 gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED);
5389 gtk_scale_set_digits (GTK_SCALE (scale), 1);
5390 gtk_scale_set_draw_value (GTK_SCALE (scale), TRUE);
5391 gtk_box_pack_start (GTK_BOX (box2), scale, TRUE, TRUE, 0);
5392 gtk_widget_show (scale);
5394 scrollbar = gtk_hscrollbar_new (GTK_ADJUSTMENT (adjustment));
5395 gtk_range_set_update_policy (GTK_RANGE (scrollbar),
5396 GTK_UPDATE_CONTINUOUS);
5397 gtk_box_pack_start (GTK_BOX (box2), scrollbar, TRUE, TRUE, 0);
5398 gtk_widget_show (scrollbar);
5401 separator = gtk_hseparator_new ();
5402 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
5403 gtk_widget_show (separator);
5406 box2 = gtk_vbox_new (FALSE, 10);
5407 gtk_container_border_width (GTK_CONTAINER (box2), 10);
5408 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
5409 gtk_widget_show (box2);
5412 button = gtk_button_new_with_label ("close");
5413 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5414 GTK_SIGNAL_FUNC(gtk_widget_destroy),
5415 GTK_OBJECT (window));
5416 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
5417 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5418 gtk_widget_grab_default (button);
5419 gtk_widget_show (button);
5422 if (!GTK_WIDGET_VISIBLE (window))
5423 gtk_widget_show (window);
5425 gtk_widget_destroy (window);
5433 create_rulers (void)
5435 static GtkWidget *window = NULL;
5441 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5442 gtk_window_set_policy (GTK_WINDOW (window), TRUE, TRUE, FALSE);
5444 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5445 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5448 gtk_window_set_title (GTK_WINDOW (window), "rulers");
5449 gtk_widget_set_usize (window, 300, 300);
5450 gtk_widget_set_events (window,
5451 GDK_POINTER_MOTION_MASK
5452 | GDK_POINTER_MOTION_HINT_MASK);
5453 gtk_container_border_width (GTK_CONTAINER (window), 0);
5455 table = gtk_table_new (2, 2, FALSE);
5456 gtk_container_add (GTK_CONTAINER (window), table);
5457 gtk_widget_show (table);
5459 ruler = gtk_hruler_new ();
5460 gtk_ruler_set_metric (GTK_RULER (ruler), GTK_CENTIMETERS);
5461 gtk_ruler_set_range (GTK_RULER (ruler), 100, 0, 0, 20);
5463 gtk_signal_connect_object (
5464 GTK_OBJECT (window),
5465 "motion_notify_event",
5467 GTK_WIDGET_CLASS (GTK_OBJECT (ruler)->klass)->motion_notify_event),
5468 GTK_OBJECT (ruler));
5470 gtk_table_attach (GTK_TABLE (table), ruler, 1, 2, 0, 1,
5471 GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
5472 gtk_widget_show (ruler);
5475 ruler = gtk_vruler_new ();
5476 gtk_ruler_set_range (GTK_RULER (ruler), 5, 15, 0, 20);
5478 gtk_signal_connect_object (
5479 GTK_OBJECT (window),
5480 "motion_notify_event",
5481 GTK_SIGNAL_FUNC (GTK_WIDGET_CLASS (GTK_OBJECT (ruler)->klass)->motion_notify_event),
5482 GTK_OBJECT (ruler));
5484 gtk_table_attach (GTK_TABLE (table), ruler, 0, 1, 1, 2,
5485 GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
5486 gtk_widget_show (ruler);
5489 if (!GTK_WIDGET_VISIBLE (window))
5490 gtk_widget_show (window);
5492 gtk_widget_destroy (window);
5496 text_toggle_editable (GtkWidget *checkbutton,
5499 gtk_text_set_editable(GTK_TEXT(text),
5500 GTK_TOGGLE_BUTTON(checkbutton)->active);
5504 text_toggle_word_wrap (GtkWidget *checkbutton,
5507 gtk_text_set_word_wrap(GTK_TEXT(text),
5508 GTK_TOGGLE_BUTTON(checkbutton)->active);
5515 { { 0, 0x0000, 0x0000, 0x0000 }, "black" },
5516 { { 0, 0xFFFF, 0xFFFF, 0xFFFF }, "white" },
5517 { { 0, 0xFFFF, 0x0000, 0x0000 }, "red" },
5518 { { 0, 0x0000, 0xFFFF, 0x0000 }, "green" },
5519 { { 0, 0x0000, 0x0000, 0xFFFF }, "blue" },
5520 { { 0, 0x0000, 0xFFFF, 0xFFFF }, "cyan" },
5521 { { 0, 0xFFFF, 0x0000, 0xFFFF }, "magenta" },
5522 { { 0, 0xFFFF, 0xFFFF, 0x0000 }, "yellow" }
5525 int ntext_colors = sizeof(text_colors) / sizeof(text_colors[0]);
5531 text_insert_random (GtkWidget *w, GtkText *text)
5535 for (i=0; i<10; i++)
5537 c = 'A' + rand() % ('Z' - 'A');
5538 gtk_text_set_point (text, rand() % gtk_text_get_length (text));
5539 gtk_text_insert (text, NULL, NULL, NULL, &c, 1);
5548 static GtkWidget *window = NULL;
5554 GtkWidget *separator;
5556 GtkWidget *hscrollbar;
5557 GtkWidget *vscrollbar;
5565 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5566 gtk_widget_set_name (window, "text window");
5567 gtk_widget_set_usize (window, 500, 500);
5568 gtk_window_set_policy (GTK_WINDOW(window), TRUE, TRUE, FALSE);
5570 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5571 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5574 gtk_window_set_title (GTK_WINDOW (window), "test");
5575 gtk_container_border_width (GTK_CONTAINER (window), 0);
5578 box1 = gtk_vbox_new (FALSE, 0);
5579 gtk_container_add (GTK_CONTAINER (window), box1);
5580 gtk_widget_show (box1);
5583 box2 = gtk_vbox_new (FALSE, 10);
5584 gtk_container_border_width (GTK_CONTAINER (box2), 10);
5585 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
5586 gtk_widget_show (box2);
5589 table = gtk_table_new (2, 2, FALSE);
5590 gtk_table_set_row_spacing (GTK_TABLE (table), 0, 2);
5591 gtk_table_set_col_spacing (GTK_TABLE (table), 0, 2);
5592 gtk_box_pack_start (GTK_BOX (box2), table, TRUE, TRUE, 0);
5593 gtk_widget_show (table);
5595 text = gtk_text_new (NULL, NULL);
5596 gtk_text_set_editable (GTK_TEXT (text), TRUE);
5597 gtk_table_attach (GTK_TABLE (table), text, 0, 1, 0, 1,
5598 GTK_EXPAND | GTK_SHRINK | GTK_FILL,
5599 GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
5600 gtk_widget_grab_focus (text);
5601 gtk_widget_show (text);
5603 hscrollbar = gtk_hscrollbar_new (GTK_TEXT (text)->hadj);
5604 gtk_table_attach (GTK_TABLE (table), hscrollbar, 0, 1, 1, 2,
5605 GTK_EXPAND | GTK_FILL | GTK_SHRINK, GTK_FILL, 0, 0);
5606 gtk_widget_show (hscrollbar);
5608 vscrollbar = gtk_vscrollbar_new (GTK_TEXT (text)->vadj);
5609 gtk_table_attach (GTK_TABLE (table), vscrollbar, 1, 2, 0, 1,
5610 GTK_FILL, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
5611 gtk_widget_show (vscrollbar);
5613 gtk_text_freeze (GTK_TEXT (text));
5615 font = gdk_font_load ("-adobe-courier-medium-r-normal--*-120-*-*-*-*-*-*");
5617 for (i=0; i<ntext_colors; i++)
5619 gtk_text_insert (GTK_TEXT (text), font, NULL, NULL,
5620 text_colors[i].name, -1);
5621 gtk_text_insert (GTK_TEXT (text), font, NULL, NULL, "\t", -1);
5623 for (j=0; j<ntext_colors; j++)
5625 gtk_text_insert (GTK_TEXT (text), font,
5626 &text_colors[j].color, &text_colors[i].color,
5629 gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL, "\n", -1);
5632 /* The Text widget will reference count the font, so we
5633 * unreference it here
5635 gdk_font_unref (font);
5637 infile = fopen("testgtk.c", "r");
5646 nchars = fread(buffer, 1, 1024, infile);
5647 gtk_text_insert (GTK_TEXT (text), NULL, NULL,
5648 NULL, buffer, nchars);
5657 gtk_text_thaw (GTK_TEXT (text));
5659 hbox = gtk_hbutton_box_new ();
5660 gtk_box_pack_start (GTK_BOX (box2), hbox, FALSE, FALSE, 0);
5661 gtk_widget_show (hbox);
5663 check = gtk_check_button_new_with_label("Editable");
5664 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, FALSE, 0);
5665 gtk_signal_connect (GTK_OBJECT(check), "toggled",
5666 GTK_SIGNAL_FUNC(text_toggle_editable), text);
5667 gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(check), TRUE);
5668 gtk_widget_show (check);
5670 check = gtk_check_button_new_with_label("Wrap Words");
5671 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
5672 gtk_signal_connect (GTK_OBJECT(check), "toggled",
5673 GTK_SIGNAL_FUNC(text_toggle_word_wrap), text);
5674 gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(check), FALSE);
5675 gtk_widget_show (check);
5677 separator = gtk_hseparator_new ();
5678 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
5679 gtk_widget_show (separator);
5682 box2 = gtk_vbox_new (FALSE, 10);
5683 gtk_container_border_width (GTK_CONTAINER (box2), 10);
5684 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
5685 gtk_widget_show (box2);
5688 button = gtk_button_new_with_label ("insert random");
5689 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5690 GTK_SIGNAL_FUNC(text_insert_random),
5692 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
5693 gtk_widget_show (button);
5695 button = gtk_button_new_with_label ("close");
5696 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5697 GTK_SIGNAL_FUNC(gtk_widget_destroy),
5698 GTK_OBJECT (window));
5699 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
5700 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5701 gtk_widget_grab_default (button);
5702 gtk_widget_show (button);
5705 if (!GTK_WIDGET_VISIBLE (window))
5706 gtk_widget_show (window);
5708 gtk_widget_destroy (window);
5715 GdkPixmap *book_open;
5716 GdkPixmap *book_closed;
5717 GdkBitmap *book_open_mask;
5718 GdkBitmap *book_closed_mask;
5721 page_switch (GtkWidget *widget, GtkNotebookPage *page, gint page_num)
5723 GtkNotebookPage *oldpage;
5726 oldpage = GTK_NOTEBOOK (widget)->cur_page;
5728 if (page == oldpage)
5731 pixwid = ((GtkBoxChild*)(GTK_BOX (page->tab_label)->children->data))->widget;
5732 gtk_pixmap_set (GTK_PIXMAP (pixwid), book_open, book_open_mask);
5733 pixwid = ((GtkBoxChild*) (GTK_BOX (page->menu_label)->children->data))->widget;
5734 gtk_pixmap_set (GTK_PIXMAP (pixwid), book_open, book_open_mask);
5738 pixwid = ((GtkBoxChild*) (GTK_BOX
5739 (oldpage->tab_label)->children->data))->widget;
5740 gtk_pixmap_set (GTK_PIXMAP (pixwid), book_closed, book_closed_mask);
5741 pixwid = ((GtkBoxChild*) (GTK_BOX (oldpage->menu_label)->children->data))->widget;
5742 gtk_pixmap_set (GTK_PIXMAP (pixwid), book_closed, book_closed_mask);
5747 create_pages (GtkNotebook *notebook, gint start, gint end)
5749 GtkWidget *child = NULL;
5754 GtkWidget *label_box;
5755 GtkWidget *menu_box;
5761 for (i = start; i <= end; i++)
5763 sprintf (buffer, "Page %d", i);
5768 child = gtk_button_new_with_label (buffer);
5769 gtk_container_border_width (GTK_CONTAINER(child), 10);
5772 child = gtk_label_new (buffer);
5775 child = gtk_frame_new (buffer);
5776 gtk_container_border_width (GTK_CONTAINER (child), 10);
5778 box = gtk_vbox_new (TRUE,0);
5779 gtk_container_border_width (GTK_CONTAINER (box), 10);
5780 gtk_container_add (GTK_CONTAINER (child), box);
5782 label = gtk_label_new (buffer);
5783 gtk_box_pack_start (GTK_BOX(box), label, TRUE, TRUE, 5);
5785 entry = gtk_entry_new ();
5786 gtk_box_pack_start (GTK_BOX(box), entry, TRUE, TRUE, 5);
5788 hbox = gtk_hbox_new (TRUE,0);
5789 gtk_box_pack_start (GTK_BOX(box), hbox, TRUE, TRUE, 5);
5791 button = gtk_button_new_with_label ("Ok");
5792 gtk_box_pack_start (GTK_BOX(hbox), button, TRUE, TRUE, 5);
5794 button = gtk_button_new_with_label ("Cancel");
5795 gtk_box_pack_start (GTK_BOX(hbox), button, TRUE, TRUE, 5);
5798 child = gtk_frame_new (buffer);
5799 gtk_container_border_width (GTK_CONTAINER (child), 10);
5801 label = gtk_label_new (buffer);
5802 gtk_container_add (GTK_CONTAINER (child), label);
5806 gtk_widget_show_all (child);
5808 label_box = gtk_hbox_new (FALSE, 0);
5809 pixwid = gtk_pixmap_new (book_closed, book_closed_mask);
5810 gtk_box_pack_start (GTK_BOX (label_box), pixwid, FALSE, TRUE, 0);
5811 gtk_misc_set_padding (GTK_MISC (pixwid), 3, 1);
5812 label = gtk_label_new (buffer);
5813 gtk_box_pack_start (GTK_BOX (label_box), label, FALSE, TRUE, 0);
5814 gtk_widget_show_all (label_box);
5816 menu_box = gtk_hbox_new (FALSE, 0);
5817 pixwid = gtk_pixmap_new (book_closed, book_closed_mask);
5818 gtk_box_pack_start (GTK_BOX (menu_box), pixwid, FALSE, TRUE, 0);
5819 gtk_misc_set_padding (GTK_MISC (pixwid), 3, 1);
5820 label = gtk_label_new (buffer);
5821 gtk_box_pack_start (GTK_BOX (menu_box), label, FALSE, TRUE, 0);
5822 gtk_widget_show_all (menu_box);
5824 gtk_notebook_append_page_menu (notebook, child, label_box, menu_box);
5829 rotate_notebook (GtkButton *button,
5830 GtkNotebook *notebook)
5832 gtk_notebook_set_tab_pos (notebook, (notebook->tab_pos + 1) % 4);
5836 standard_notebook (GtkButton *button,
5837 GtkNotebook *notebook)
5841 gtk_notebook_set_show_tabs (notebook, TRUE);
5842 gtk_notebook_set_scrollable (notebook, FALSE);
5843 if (g_list_length (notebook->children) == 15)
5844 for (i = 0; i < 10; i++)
5845 gtk_notebook_remove_page (notebook, 5);
5849 notabs_notebook (GtkButton *button,
5850 GtkNotebook *notebook)
5854 gtk_notebook_set_show_tabs (notebook, FALSE);
5855 if (g_list_length (notebook->children) == 15)
5856 for (i = 0; i < 10; i++)
5857 gtk_notebook_remove_page (notebook, 5);
5861 scrollable_notebook (GtkButton *button,
5862 GtkNotebook *notebook)
5864 gtk_notebook_set_show_tabs (notebook, TRUE);
5865 gtk_notebook_set_scrollable (notebook, TRUE);
5866 if (g_list_length (notebook->children) == 5)
5867 create_pages (notebook, 6, 15);
5871 notebook_popup (GtkToggleButton *button,
5872 GtkNotebook *notebook)
5875 gtk_notebook_popup_enable (notebook);
5877 gtk_notebook_popup_disable (notebook);
5881 create_notebook (void)
5883 static GtkWidget *window = NULL;
5887 GtkWidget *separator;
5888 GtkWidget *notebook;
5890 GdkColor *transparent = NULL;
5892 static OptionMenuItem items[] =
5894 { "Standard", standard_notebook },
5895 { "No tabs", notabs_notebook },
5896 { "Scrollable", scrollable_notebook }
5901 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5903 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5904 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5907 gtk_window_set_title (GTK_WINDOW (window), "notebook");
5908 gtk_container_border_width (GTK_CONTAINER (window), 0);
5910 box1 = gtk_vbox_new (FALSE, 0);
5911 gtk_container_add (GTK_CONTAINER (window), box1);
5913 notebook = gtk_notebook_new ();
5914 gtk_signal_connect (GTK_OBJECT (notebook), "switch_page",
5915 GTK_SIGNAL_FUNC (page_switch), NULL);
5916 gtk_notebook_set_tab_pos (GTK_NOTEBOOK (notebook), GTK_POS_TOP);
5917 gtk_box_pack_start (GTK_BOX (box1), notebook, TRUE, TRUE, 0);
5918 gtk_container_border_width (GTK_CONTAINER (notebook), 10);
5920 gtk_widget_realize (notebook);
5921 book_open = gdk_pixmap_create_from_xpm_d (notebook->window,
5925 book_closed = gdk_pixmap_create_from_xpm_d (notebook->window,
5930 create_pages (GTK_NOTEBOOK (notebook), 1, 5);
5932 separator = gtk_hseparator_new ();
5933 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 10);
5935 box2 = gtk_hbox_new (TRUE, 5);
5936 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
5938 omenu = build_option_menu (items, 3, 0, notebook);
5939 gtk_box_pack_start (GTK_BOX (box2), omenu, FALSE, FALSE, 0);
5941 button = gtk_check_button_new_with_label ("enable popup menu");
5942 gtk_box_pack_start (GTK_BOX (box2), button, FALSE, FALSE, 0);
5943 gtk_signal_connect (GTK_OBJECT(button), "clicked",
5944 GTK_SIGNAL_FUNC (notebook_popup),
5945 GTK_OBJECT (notebook));
5947 box2 = gtk_hbox_new (TRUE, 10);
5948 gtk_container_border_width (GTK_CONTAINER (box2), 10);
5949 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
5951 button = gtk_button_new_with_label ("close");
5952 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5953 GTK_SIGNAL_FUNC (gtk_widget_destroy),
5954 GTK_OBJECT (window));
5955 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
5956 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5957 gtk_widget_grab_default (button);
5959 button = gtk_button_new_with_label ("next");
5960 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5961 GTK_SIGNAL_FUNC (gtk_notebook_next_page),
5962 GTK_OBJECT (notebook));
5963 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
5964 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5966 button = gtk_button_new_with_label ("prev");
5967 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5968 GTK_SIGNAL_FUNC (gtk_notebook_prev_page),
5969 GTK_OBJECT (notebook));
5970 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
5971 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5973 button = gtk_button_new_with_label ("rotate");
5974 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5975 GTK_SIGNAL_FUNC (rotate_notebook),
5977 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
5978 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5981 if (!GTK_WIDGET_VISIBLE (window))
5982 gtk_widget_show_all (window);
5984 gtk_widget_destroy (window);
5994 static GtkWidget *window = NULL;
6002 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6004 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6005 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6008 gtk_window_set_title (GTK_WINDOW (window), "Panes");
6009 gtk_container_border_width (GTK_CONTAINER (window), 0);
6011 vpaned = gtk_vpaned_new ();
6012 gtk_container_add (GTK_CONTAINER (window), vpaned);
6013 gtk_container_border_width (GTK_CONTAINER(vpaned), 5);
6014 gtk_widget_show (vpaned);
6016 hpaned = gtk_hpaned_new ();
6017 gtk_paned_add1 (GTK_PANED (vpaned), hpaned);
6019 frame = gtk_frame_new (NULL);
6020 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
6021 gtk_widget_set_usize (frame, 60, 60);
6022 gtk_paned_add1 (GTK_PANED (hpaned), frame);
6023 gtk_widget_show (frame);
6025 button = gtk_button_new_with_label ("Hi there");
6026 gtk_container_add (GTK_CONTAINER(frame), button);
6027 gtk_widget_show (button);
6029 frame = gtk_frame_new (NULL);
6030 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
6031 gtk_widget_set_usize (frame, 80, 60);
6032 gtk_paned_add2 (GTK_PANED (hpaned), frame);
6033 gtk_widget_show (frame);
6035 gtk_widget_show (hpaned);
6037 frame = gtk_frame_new (NULL);
6038 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
6039 gtk_widget_set_usize (frame, 60, 80);
6040 gtk_paned_add2 (GTK_PANED (vpaned), frame);
6041 gtk_widget_show (frame);
6044 if (!GTK_WIDGET_VISIBLE (window))
6045 gtk_widget_show (window);
6047 gtk_widget_destroy (window);
6056 dnd_drop_destroy_popup (GtkWidget *widget, GtkWindow **window)
6058 if(GTK_IS_BUTTON(widget)) /* I.e. they clicked the close button */
6059 gtk_widget_destroy(GTK_WIDGET(*window));
6061 gtk_grab_remove(GTK_WIDGET(*window));
6069 dnd_drop (GtkWidget *button, GdkEvent *event)
6071 static GtkWidget *window = NULL;
6072 GtkWidget *vbox, *lbl, *btn;
6075 /* DND doesn't obey gtk_grab's, so check if we're already displaying
6076 * drop modal dialog first
6081 window = gtk_window_new(GTK_WINDOW_DIALOG);
6082 gtk_container_border_width (GTK_CONTAINER(window), 10);
6084 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6085 GTK_SIGNAL_FUNC(dnd_drop_destroy_popup),
6087 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
6088 GTK_SIGNAL_FUNC(gtk_false),
6091 vbox = gtk_vbox_new(FALSE, 5);
6093 /* Display message that we got from drop source */
6094 msg = g_malloc(strlen(event->dropdataavailable.data)
6095 + strlen(event->dropdataavailable.data_type) + 100);
6096 sprintf(msg, "Drop data of type %s was:\n\n%s",
6097 event->dropdataavailable.data_type,
6098 (char *)event->dropdataavailable.data);
6099 lbl = gtk_label_new(msg);
6100 gtk_label_set_justify(GTK_LABEL(lbl), GTK_JUSTIFY_FILL);
6102 gtk_widget_show(lbl);
6103 gtk_box_pack_start_defaults(GTK_BOX(vbox), lbl);
6105 /* Provide an obvious way out of this heinousness */
6106 btn = gtk_button_new_with_label("Continue with life in\nspite of this oppression");
6107 gtk_signal_connect_object (GTK_OBJECT (btn), "clicked",
6108 GTK_SIGNAL_FUNC(gtk_widget_destroy),
6109 GTK_OBJECT (window));
6110 gtk_widget_show(btn);
6111 gtk_box_pack_start_defaults(GTK_BOX(vbox), btn);
6113 gtk_container_add(GTK_CONTAINER(window), vbox);
6115 gtk_widget_show(vbox);
6116 gtk_grab_add(window);
6117 gtk_widget_show(window);
6121 dnd_drag_request (GtkWidget *button, GdkEvent *event)
6123 #define DND_STRING "Bill Gates demands royalties for\nyour use of his innovation."
6124 gtk_widget_dnd_data_set (button, event, DND_STRING, strlen(DND_STRING) + 1);
6130 static GtkWidget *window = NULL;
6136 GtkWidget *separator;
6138 /* For clarity... */
6139 char *possible_drag_types[] = {"text/plain"};
6140 char *accepted_drop_types[] = {"text/plain"};
6142 static GtkWidget *drag_icon = NULL;
6143 static GtkWidget *drop_icon = NULL;
6147 GdkPoint hotspot = {5,5};
6151 drag_icon = shape_create_icon ("Modeller.xpm",
6152 440, 140, 0,0, GTK_WINDOW_POPUP);
6154 gtk_signal_connect (GTK_OBJECT (drag_icon), "destroy",
6155 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6158 gtk_widget_hide (drag_icon);
6163 drop_icon = shape_create_icon ("3DRings.xpm",
6164 440, 140, 0,0, GTK_WINDOW_POPUP);
6166 gtk_signal_connect (GTK_OBJECT (drop_icon), "destroy",
6167 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6170 gtk_widget_hide (drop_icon);
6173 gdk_dnd_set_drag_shape(drag_icon->window,
6178 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6180 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6181 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6184 gtk_window_set_title (GTK_WINDOW (window), "Drag -N- Drop");
6185 gtk_container_border_width (GTK_CONTAINER (window), 0);
6187 box1 = gtk_vbox_new (FALSE, 0);
6188 gtk_container_add (GTK_CONTAINER (window), box1);
6189 gtk_widget_show (box1);
6191 box2 = gtk_hbox_new (FALSE, 5);
6192 gtk_container_border_width (GTK_CONTAINER (box2), 10);
6193 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
6194 gtk_widget_show (box2);
6196 frame = gtk_frame_new ("Drag");
6197 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
6198 gtk_widget_show (frame);
6200 box3 = gtk_vbox_new (FALSE, 5);
6201 gtk_container_border_width (GTK_CONTAINER (box3), 5);
6202 gtk_container_add (GTK_CONTAINER (frame), box3);
6203 gtk_widget_show (box3);
6208 button = gtk_button_new_with_label ("Drag me!");
6209 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
6210 gtk_widget_show (button);
6213 * currently, the widget has to be realized to
6214 * set dnd on it, this needs to change
6216 gtk_widget_realize (button);
6217 gtk_signal_connect (GTK_OBJECT (button),
6218 "drag_request_event",
6219 GTK_SIGNAL_FUNC(dnd_drag_request),
6222 gtk_widget_dnd_drag_set (button, TRUE, possible_drag_types, 1);
6225 frame = gtk_frame_new ("Drop");
6226 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
6227 gtk_widget_show (frame);
6229 box3 = gtk_vbox_new (FALSE, 5);
6230 gtk_container_border_width (GTK_CONTAINER (box3), 5);
6231 gtk_container_add (GTK_CONTAINER (frame), box3);
6232 gtk_widget_show (box3);
6238 button = gtk_button_new_with_label ("To");
6239 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
6240 gtk_widget_show (button);
6242 gtk_widget_realize (button);
6243 gtk_signal_connect (GTK_OBJECT (button),
6244 "drop_data_available_event",
6245 GTK_SIGNAL_FUNC(dnd_drop),
6248 gtk_widget_dnd_drop_set (button, TRUE, accepted_drop_types, 1, FALSE);
6251 separator = gtk_hseparator_new ();
6252 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
6253 gtk_widget_show (separator);
6256 box2 = gtk_vbox_new (FALSE, 10);
6257 gtk_container_border_width (GTK_CONTAINER (box2), 10);
6258 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6259 gtk_widget_show (box2);
6262 button = gtk_button_new_with_label ("close");
6264 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6265 GTK_SIGNAL_FUNC(gtk_widget_destroy),
6266 GTK_OBJECT (window));
6268 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6269 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6270 gtk_widget_grab_default (button);
6271 gtk_widget_show (button);
6274 if (!GTK_WIDGET_VISIBLE (window))
6275 gtk_widget_show (window);
6277 gtk_widget_destroy (window);
6285 static GdkWindow *root_win = NULL;
6287 typedef struct _cursoroffset {gint x,y;} CursorOffset;
6290 shape_pressed (GtkWidget *widget, GdkEventButton *event)
6294 /* ignore double and triple click */
6295 if (event->type != GDK_BUTTON_PRESS)
6298 p = gtk_object_get_user_data (GTK_OBJECT(widget));
6299 p->x = (int) event->x;
6300 p->y = (int) event->y;
6302 gtk_grab_add (widget);
6303 gdk_pointer_grab (widget->window, TRUE,
6304 GDK_BUTTON_RELEASE_MASK |
6305 GDK_BUTTON_MOTION_MASK |
6306 GDK_POINTER_MOTION_HINT_MASK,
6311 shape_released (GtkWidget *widget)
6313 gtk_grab_remove (widget);
6314 gdk_pointer_ungrab (0);
6318 shape_motion (GtkWidget *widget,
6319 GdkEventMotion *event)
6323 GdkModifierType mask;
6325 p = gtk_object_get_user_data (GTK_OBJECT (widget));
6328 * Can't use event->x / event->y here
6329 * because I need absolute coordinates.
6331 gdk_window_get_pointer (root_win, &xp, &yp, &mask);
6332 gtk_widget_set_uposition (widget, xp - p->x, yp - p->y);
6336 shape_create_icon (char *xpm_file,
6346 CursorOffset* icon_pos;
6348 GdkBitmap *gdk_pixmap_mask;
6349 GdkPixmap *gdk_pixmap;
6352 style = gtk_widget_get_default_style ();
6353 gc = style->black_gc;
6356 * GDK_WINDOW_TOPLEVEL works also, giving you a title border
6358 window = gtk_window_new (window_type);
6360 fixed = gtk_fixed_new ();
6361 gtk_widget_set_usize (fixed, 100,100);
6362 gtk_container_add (GTK_CONTAINER (window), fixed);
6363 gtk_widget_show (fixed);
6365 gtk_widget_set_events (window,
6366 gtk_widget_get_events (window) |
6367 GDK_BUTTON_MOTION_MASK |
6368 GDK_POINTER_MOTION_HINT_MASK |
6369 GDK_BUTTON_PRESS_MASK);
6371 gtk_widget_realize (window);
6372 gdk_pixmap = gdk_pixmap_create_from_xpm (window->window, &gdk_pixmap_mask,
6373 &style->bg[GTK_STATE_NORMAL],
6376 pixmap = gtk_pixmap_new (gdk_pixmap, gdk_pixmap_mask);
6377 gtk_fixed_put (GTK_FIXED (fixed), pixmap, px,py);
6378 gtk_widget_show (pixmap);
6380 gtk_widget_shape_combine_mask (window, gdk_pixmap_mask, px,py);
6383 gtk_signal_connect (GTK_OBJECT (window), "button_press_event",
6384 GTK_SIGNAL_FUNC (shape_pressed),NULL);
6385 gtk_signal_connect (GTK_OBJECT (window), "button_release_event",
6386 GTK_SIGNAL_FUNC (shape_released),NULL);
6387 gtk_signal_connect (GTK_OBJECT (window), "motion_notify_event",
6388 GTK_SIGNAL_FUNC (shape_motion),NULL);
6390 icon_pos = g_new (CursorOffset, 1);
6391 gtk_object_set_user_data(GTK_OBJECT(window), icon_pos);
6393 gtk_widget_set_uposition (window, x, y);
6394 gtk_widget_show (window);
6400 create_shapes (void)
6402 /* Variables used by the Drag/Drop and Shape Window demos */
6403 static GtkWidget *modeller = NULL;
6404 static GtkWidget *sheets = NULL;
6405 static GtkWidget *rings = NULL;
6407 root_win = gdk_window_foreign_new (GDK_ROOT_WINDOW ());
6411 modeller = shape_create_icon ("Modeller.xpm",
6412 440, 140, 0,0, GTK_WINDOW_POPUP);
6414 gtk_signal_connect (GTK_OBJECT (modeller), "destroy",
6415 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6419 gtk_widget_destroy (modeller);
6423 sheets = shape_create_icon ("FilesQueue.xpm",
6424 580, 170, 0,0, GTK_WINDOW_POPUP);
6426 gtk_signal_connect (GTK_OBJECT (sheets), "destroy",
6427 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6432 gtk_widget_destroy (sheets);
6436 rings = shape_create_icon ("3DRings.xpm",
6437 460, 270, 25,25, GTK_WINDOW_TOPLEVEL);
6439 gtk_signal_connect (GTK_OBJECT (rings), "destroy",
6440 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6444 gtk_widget_destroy (rings);
6452 create_wmhints (void)
6454 static GtkWidget *window = NULL;
6456 GtkWidget *separator;
6465 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6467 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6468 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6471 gtk_window_set_title (GTK_WINDOW (window), "WM Hints");
6472 gtk_container_border_width (GTK_CONTAINER (window), 0);
6474 gtk_widget_realize (window);
6476 circles = gdk_bitmap_create_from_data (window->window,
6480 gdk_window_set_icon (window->window, NULL,
6483 gdk_window_set_icon_name (window->window, "WMHints Test Icon");
6485 gdk_window_set_decorations (window->window, GDK_DECOR_ALL | GDK_DECOR_MENU);
6486 gdk_window_set_functions (window->window, GDK_FUNC_ALL | GDK_FUNC_RESIZE);
6488 box1 = gtk_vbox_new (FALSE, 0);
6489 gtk_container_add (GTK_CONTAINER (window), box1);
6490 gtk_widget_show (box1);
6492 label = gtk_label_new ("Try iconizing me!");
6493 gtk_widget_set_usize (label, 150, 50);
6494 gtk_box_pack_start (GTK_BOX (box1), label, TRUE, TRUE, 0);
6495 gtk_widget_show (label);
6498 separator = gtk_hseparator_new ();
6499 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
6500 gtk_widget_show (separator);
6503 box2 = gtk_vbox_new (FALSE, 10);
6504 gtk_container_border_width (GTK_CONTAINER (box2), 10);
6505 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6506 gtk_widget_show (box2);
6509 button = gtk_button_new_with_label ("close");
6511 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6512 GTK_SIGNAL_FUNC(gtk_widget_destroy),
6513 GTK_OBJECT (window));
6515 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6516 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6517 gtk_widget_grab_default (button);
6518 gtk_widget_show (button);
6521 if (!GTK_WIDGET_VISIBLE (window))
6522 gtk_widget_show (window);
6524 gtk_widget_destroy (window);
6531 typedef struct _ProgressData {
6534 GtkWidget *block_spin;
6535 GtkWidget *x_align_spin;
6536 GtkWidget *y_align_spin;
6537 GtkWidget *step_spin;
6538 GtkWidget *act_blocks_spin;
6547 progress_timeout (gpointer data)
6552 adj = GTK_PROGRESS (data)->adjustment;
6554 new_val = adj->value + 1;
6555 if (new_val > adj->upper)
6556 new_val = adj->lower;
6558 gtk_progress_set_value (GTK_PROGRESS (data), new_val);
6564 destroy_progress (GtkWidget *widget,
6565 ProgressData **pdata)
6567 gtk_timeout_remove ((*pdata)->timer);
6568 (*pdata)->timer = 0;
6569 (*pdata)->window = NULL;
6575 progressbar_toggle_orientation (GtkWidget *widget, ProgressData *pdata)
6579 if (!GTK_WIDGET_MAPPED (widget))
6582 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
6583 (((GtkOptionMenu *)(pdata->omenu1))->menu_item), i);
6585 gtk_progress_bar_set_orientation (GTK_PROGRESS_BAR (pdata->pbar),
6586 (GtkProgressBarOrientation) (3-i));
6590 toggle_show_text (GtkWidget *widget, ProgressData *pdata)
6592 gtk_progress_set_show_text (GTK_PROGRESS (pdata->pbar),
6593 GTK_TOGGLE_BUTTON (widget)->active);
6594 gtk_widget_set_sensitive (pdata->entry, GTK_TOGGLE_BUTTON (widget)->active);
6595 gtk_widget_set_sensitive (pdata->x_align_spin,
6596 GTK_TOGGLE_BUTTON (widget)->active);
6597 gtk_widget_set_sensitive (pdata->y_align_spin,
6598 GTK_TOGGLE_BUTTON (widget)->active);
6602 progressbar_toggle_bar_style (GtkWidget *widget, ProgressData *pdata)
6606 if (!GTK_WIDGET_MAPPED (widget))
6609 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
6610 (((GtkOptionMenu *)(pdata->omenu2))->menu_item), i);
6615 gtk_widget_set_sensitive (pdata->block_spin, TRUE);
6617 gtk_widget_set_sensitive (pdata->block_spin, FALSE);
6619 gtk_progress_bar_set_bar_style (GTK_PROGRESS_BAR (pdata->pbar),
6620 (GtkProgressBarStyle) i);
6624 progress_value_changed (GtkAdjustment *adj, ProgressData *pdata)
6628 if (GTK_PROGRESS (pdata->pbar)->activity_mode)
6629 sprintf (buf, "???");
6631 sprintf (buf, "%.0f%%", 100 *
6632 gtk_progress_get_current_percentage (GTK_PROGRESS (pdata->pbar)));
6633 gtk_label_set (GTK_LABEL (pdata->label), buf);
6637 adjust_blocks (GtkAdjustment *adj, ProgressData *pdata)
6639 gtk_progress_set_percentage (GTK_PROGRESS (pdata->pbar), 0);
6640 gtk_progress_bar_set_discrete_blocks (GTK_PROGRESS_BAR (pdata->pbar),
6641 gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (pdata->block_spin)));
6645 adjust_step (GtkAdjustment *adj, ProgressData *pdata)
6647 gtk_progress_bar_set_activity_step (GTK_PROGRESS_BAR (pdata->pbar),
6648 gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (pdata->step_spin)));
6652 adjust_act_blocks (GtkAdjustment *adj, ProgressData *pdata)
6654 gtk_progress_bar_set_activity_blocks (GTK_PROGRESS_BAR (pdata->pbar),
6655 gtk_spin_button_get_value_as_int
6656 (GTK_SPIN_BUTTON (pdata->act_blocks_spin)));
6660 adjust_align (GtkAdjustment *adj, ProgressData *pdata)
6662 gtk_progress_set_text_alignment (GTK_PROGRESS (pdata->pbar),
6663 gtk_spin_button_get_value_as_float
6664 (GTK_SPIN_BUTTON (pdata->x_align_spin)),
6665 gtk_spin_button_get_value_as_float
6666 (GTK_SPIN_BUTTON (pdata->y_align_spin)));
6670 toggle_activity_mode (GtkWidget *widget, ProgressData *pdata)
6672 gtk_progress_set_activity_mode (GTK_PROGRESS (pdata->pbar),
6673 GTK_TOGGLE_BUTTON (widget)->active);
6674 gtk_widget_set_sensitive (pdata->step_spin,
6675 GTK_TOGGLE_BUTTON (widget)->active);
6676 gtk_widget_set_sensitive (pdata->act_blocks_spin,
6677 GTK_TOGGLE_BUTTON (widget)->active);
6681 entry_changed (GtkWidget *widget, ProgressData *pdata)
6683 gtk_progress_set_format_string (GTK_PROGRESS (pdata->pbar),
6684 gtk_entry_get_text (GTK_ENTRY (pdata->entry)));
6688 create_progress_bar (void)
6700 static ProgressData *pdata = NULL;
6702 static OptionMenuItem items1[] =
6704 { "Left-Right", progressbar_toggle_orientation },
6705 { "Right-Left", progressbar_toggle_orientation },
6706 { "Bottom-Top", progressbar_toggle_orientation },
6707 { "Top-Bottom", progressbar_toggle_orientation }
6710 static OptionMenuItem items2[] =
6712 { "Continuous", progressbar_toggle_bar_style },
6713 { "Discrete", progressbar_toggle_bar_style }
6717 pdata = g_new0 (ProgressData, 1);
6721 pdata->window = gtk_dialog_new ();
6723 gtk_window_set_policy (GTK_WINDOW (pdata->window), FALSE, FALSE, TRUE);
6725 gtk_signal_connect (GTK_OBJECT (pdata->window), "destroy",
6726 GTK_SIGNAL_FUNC (destroy_progress),
6731 gtk_window_set_title (GTK_WINDOW (pdata->window), "GtkProgressBar");
6732 gtk_container_border_width (GTK_CONTAINER (pdata->window), 0);
6734 vbox = gtk_vbox_new (FALSE, 5);
6735 gtk_container_border_width (GTK_CONTAINER (vbox), 10);
6736 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (pdata->window)->vbox),
6737 vbox, FALSE, TRUE, 0);
6739 frame = gtk_frame_new ("Progress");
6740 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
6742 vbox2 = gtk_vbox_new (FALSE, 5);
6743 gtk_container_add (GTK_CONTAINER (frame), vbox2);
6745 align = gtk_alignment_new (0.5, 0.5, 0, 0);
6746 gtk_box_pack_start (GTK_BOX (vbox2), align, FALSE, FALSE, 5);
6748 adj = (GtkAdjustment *) gtk_adjustment_new (0, 1, 300, 0, 0, 0);
6749 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
6750 GTK_SIGNAL_FUNC (progress_value_changed), pdata);
6752 pdata->pbar = gtk_progress_bar_new_with_adjustment (adj);
6753 gtk_progress_set_format_string (GTK_PROGRESS (pdata->pbar),
6754 "%v from [%l,%u] (=%p%%)");
6755 gtk_container_add (GTK_CONTAINER (align), pdata->pbar);
6756 pdata->timer = gtk_timeout_add (100, progress_timeout, pdata->pbar);
6758 align = gtk_alignment_new (0.5, 0.5, 0, 0);
6759 gtk_box_pack_start (GTK_BOX (vbox2), align, FALSE, FALSE, 5);
6761 hbox = gtk_hbox_new (FALSE, 5);
6762 gtk_container_add (GTK_CONTAINER (align), hbox);
6763 label = gtk_label_new ("Label updated by user :");
6764 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
6765 pdata->label = gtk_label_new ("");
6766 gtk_box_pack_start (GTK_BOX (hbox), pdata->label, FALSE, TRUE, 0);
6768 frame = gtk_frame_new ("Options");
6769 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
6771 vbox2 = gtk_vbox_new (FALSE, 5);
6772 gtk_container_add (GTK_CONTAINER (frame), vbox2);
6774 tab = gtk_table_new (7, 2, FALSE);
6775 gtk_box_pack_start (GTK_BOX (vbox2), tab, FALSE, TRUE, 0);
6777 label = gtk_label_new ("Orientation :");
6778 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 0, 1,
6779 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
6781 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
6783 pdata->omenu1 = build_option_menu (items1, 4, 0, pdata);
6784 hbox = gtk_hbox_new (FALSE, 0);
6785 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 0, 1,
6786 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
6788 gtk_box_pack_start (GTK_BOX (hbox), pdata->omenu1, TRUE, TRUE, 0);
6790 check = gtk_check_button_new_with_label ("Show text");
6791 gtk_signal_connect (GTK_OBJECT (check), "clicked",
6792 GTK_SIGNAL_FUNC (toggle_show_text),
6794 gtk_table_attach (GTK_TABLE (tab), check, 0, 1, 1, 2,
6795 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
6798 hbox = gtk_hbox_new (FALSE, 0);
6799 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 1, 2,
6800 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
6803 label = gtk_label_new ("Format : ");
6804 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
6806 pdata->entry = gtk_entry_new ();
6807 gtk_signal_connect (GTK_OBJECT (pdata->entry), "changed",
6808 GTK_SIGNAL_FUNC (entry_changed),
6810 gtk_box_pack_start (GTK_BOX (hbox), pdata->entry, TRUE, TRUE, 0);
6811 gtk_entry_set_text (GTK_ENTRY (pdata->entry), "%v from [%l,%u] (=%p%%)");
6812 gtk_widget_set_usize (pdata->entry, 100, -1);
6813 gtk_widget_set_sensitive (pdata->entry, FALSE);
6815 label = gtk_label_new ("Text align :");
6816 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 2, 3,
6817 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
6819 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
6821 hbox = gtk_hbox_new (FALSE, 0);
6822 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 2, 3,
6823 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
6826 label = gtk_label_new ("x :");
6827 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 5);
6829 adj = (GtkAdjustment *) gtk_adjustment_new (0.5, 0, 1, 0.1, 0.1, 0);
6830 pdata->x_align_spin = gtk_spin_button_new (adj, 0, 1);
6831 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
6832 GTK_SIGNAL_FUNC (adjust_align), pdata);
6833 gtk_box_pack_start (GTK_BOX (hbox), pdata->x_align_spin, FALSE, TRUE, 0);
6834 gtk_widget_set_sensitive (pdata->x_align_spin, FALSE);
6836 label = gtk_label_new ("y :");
6837 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 5);
6839 adj = (GtkAdjustment *) gtk_adjustment_new (0.5, 0, 1, 0.1, 0.1, 0);
6840 pdata->y_align_spin = gtk_spin_button_new (adj, 0, 1);
6841 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
6842 GTK_SIGNAL_FUNC (adjust_align), pdata);
6843 gtk_box_pack_start (GTK_BOX (hbox), pdata->y_align_spin, FALSE, TRUE, 0);
6844 gtk_widget_set_sensitive (pdata->y_align_spin, FALSE);
6846 label = gtk_label_new ("Bar Style :");
6847 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 3, 4,
6848 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
6850 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
6852 pdata->omenu2 = build_option_menu (items2, 2, 0, pdata);
6853 hbox = gtk_hbox_new (FALSE, 0);
6854 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 3, 4,
6855 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
6857 gtk_box_pack_start (GTK_BOX (hbox), pdata->omenu2, TRUE, TRUE, 0);
6859 label = gtk_label_new ("Block count :");
6860 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 4, 5,
6861 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
6863 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
6865 hbox = gtk_hbox_new (FALSE, 0);
6866 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 4, 5,
6867 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
6869 adj = (GtkAdjustment *) gtk_adjustment_new (10, 2, 20, 1, 5, 0);
6870 pdata->block_spin = gtk_spin_button_new (adj, 0, 0);
6871 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
6872 GTK_SIGNAL_FUNC (adjust_blocks), pdata);
6873 gtk_box_pack_start (GTK_BOX (hbox), pdata->block_spin, FALSE, TRUE, 0);
6874 gtk_widget_set_sensitive (pdata->block_spin, FALSE);
6876 check = gtk_check_button_new_with_label ("Activity mode");
6877 gtk_signal_connect (GTK_OBJECT (check), "clicked",
6878 GTK_SIGNAL_FUNC (toggle_activity_mode),
6880 gtk_table_attach (GTK_TABLE (tab), check, 0, 1, 5, 6,
6881 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
6884 hbox = gtk_hbox_new (FALSE, 0);
6885 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 5, 6,
6886 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
6888 label = gtk_label_new ("Step size : ");
6889 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
6890 adj = (GtkAdjustment *) gtk_adjustment_new (3, 1, 20, 1, 5, 0);
6891 pdata->step_spin = gtk_spin_button_new (adj, 0, 0);
6892 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
6893 GTK_SIGNAL_FUNC (adjust_step), pdata);
6894 gtk_box_pack_start (GTK_BOX (hbox), pdata->step_spin, FALSE, TRUE, 0);
6895 gtk_widget_set_sensitive (pdata->step_spin, FALSE);
6897 hbox = gtk_hbox_new (FALSE, 0);
6898 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 6, 7,
6899 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
6901 label = gtk_label_new ("Blocks : ");
6902 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
6903 adj = (GtkAdjustment *) gtk_adjustment_new (5, 2, 10, 1, 5, 0);
6904 pdata->act_blocks_spin = gtk_spin_button_new (adj, 0, 0);
6905 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
6906 GTK_SIGNAL_FUNC (adjust_act_blocks), pdata);
6907 gtk_box_pack_start (GTK_BOX (hbox), pdata->act_blocks_spin, FALSE, TRUE,
6909 gtk_widget_set_sensitive (pdata->act_blocks_spin, FALSE);
6911 button = gtk_button_new_with_label ("close");
6912 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6913 GTK_SIGNAL_FUNC (gtk_widget_destroy),
6914 GTK_OBJECT (pdata->window));
6915 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6916 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (pdata->window)->action_area),
6917 button, TRUE, TRUE, 0);
6918 gtk_widget_grab_default (button);
6921 if (!GTK_WIDGET_VISIBLE (pdata->window))
6922 gtk_widget_show_all (pdata->window);
6924 gtk_widget_destroy (pdata->window);
6931 static int color_idle = 0;
6934 color_idle_func (GtkWidget *preview)
6936 static int count = 1;
6940 for (i = 0; i < 256; i++)
6942 for (j = 0, k = 0; j < 256; j++)
6944 buf[k+0] = i + count;
6946 buf[k+2] = j + count;
6950 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
6955 gtk_widget_draw (preview, NULL);
6961 color_preview_destroy (GtkWidget *widget,
6964 gtk_idle_remove (color_idle);
6971 create_color_preview (void)
6973 static GtkWidget *window = NULL;
6980 gtk_widget_push_visual (gdk_rgb_get_visual ());
6981 gtk_widget_push_colormap (gdk_rgb_get_cmap ());
6982 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6983 gtk_widget_pop_colormap ();
6984 gtk_widget_pop_visual ();
6986 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6987 GTK_SIGNAL_FUNC(color_preview_destroy),
6990 gtk_window_set_title (GTK_WINDOW (window), "test");
6991 gtk_container_border_width (GTK_CONTAINER (window), 10);
6993 preview = gtk_preview_new (GTK_PREVIEW_COLOR);
6994 gtk_preview_size (GTK_PREVIEW (preview), 256, 256);
6995 gtk_container_add (GTK_CONTAINER (window), preview);
6997 for (i = 0; i < 256; i++)
6999 for (j = 0, k = 0; j < 256; j++)
7007 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
7010 color_idle = gtk_idle_add ((GtkFunction) color_idle_func, preview);
7013 if (!GTK_WIDGET_VISIBLE (window))
7014 gtk_widget_show_all (window);
7016 gtk_widget_destroy (window);
7023 static int gray_idle = 0;
7026 gray_idle_func (GtkWidget *preview)
7028 static int count = 1;
7032 for (i = 0; i < 256; i++)
7034 for (j = 0; j < 256; j++)
7035 buf[j] = i + j + count;
7037 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
7042 gtk_widget_draw (preview, NULL);
7048 gray_preview_destroy (GtkWidget *widget,
7051 gtk_idle_remove (gray_idle);
7058 create_gray_preview (void)
7060 static GtkWidget *window = NULL;
7067 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7069 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7070 GTK_SIGNAL_FUNC(gray_preview_destroy),
7073 gtk_window_set_title (GTK_WINDOW (window), "test");
7074 gtk_container_border_width (GTK_CONTAINER (window), 10);
7076 preview = gtk_preview_new (GTK_PREVIEW_GRAYSCALE);
7077 gtk_preview_size (GTK_PREVIEW (preview), 256, 256);
7078 gtk_container_add (GTK_CONTAINER (window), preview);
7080 for (i = 0; i < 256; i++)
7082 for (j = 0; j < 256; j++)
7085 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
7088 gray_idle = gtk_idle_add ((GtkFunction) gray_idle_func, preview);
7091 if (!GTK_WIDGET_VISIBLE (window))
7092 gtk_widget_show_all (window);
7094 gtk_widget_destroy (window);
7103 selection_test_received (GtkWidget *list, GtkSelectionData *data)
7106 GtkWidget *list_item;
7110 if (data->length < 0)
7112 g_print ("Selection retrieval failed\n");
7115 if (data->type != GDK_SELECTION_TYPE_ATOM)
7117 g_print ("Selection \"TARGETS\" was not returned as atoms!\n");
7121 /* Clear out any current list items */
7123 gtk_list_clear_items (GTK_LIST(list), 0, -1);
7125 /* Add new items to list */
7127 atoms = (GdkAtom *)data->data;
7130 l = data->length / sizeof (GdkAtom);
7131 for (i = 0; i < l; i++)
7134 name = gdk_atom_name (atoms[i]);
7137 list_item = gtk_list_item_new_with_label (name);
7141 list_item = gtk_list_item_new_with_label ("(bad atom)");
7143 gtk_widget_show (list_item);
7144 item_list = g_list_append (item_list, list_item);
7147 gtk_list_append_items (GTK_LIST (list), item_list);
7153 selection_test_get_targets (GtkWidget *widget, GtkWidget *list)
7155 static GdkAtom targets_atom = GDK_NONE;
7157 if (targets_atom == GDK_NONE)
7158 targets_atom = gdk_atom_intern ("TARGETS", FALSE);
7160 gtk_selection_convert (list, GDK_SELECTION_PRIMARY, targets_atom,
7165 create_selection_test (void)
7167 static GtkWidget *window = NULL;
7170 GtkWidget *scrolled_win;
7176 window = gtk_dialog_new ();
7178 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7179 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7182 gtk_window_set_title (GTK_WINDOW (window), "Selection Test");
7183 gtk_container_border_width (GTK_CONTAINER (window), 0);
7185 /* Create the list */
7187 vbox = gtk_vbox_new (FALSE, 5);
7188 gtk_container_border_width (GTK_CONTAINER (vbox), 10);
7189 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), vbox,
7192 label = gtk_label_new ("Gets available targets for current selection");
7193 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
7195 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
7196 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
7197 GTK_POLICY_AUTOMATIC,
7198 GTK_POLICY_AUTOMATIC);
7199 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
7200 gtk_widget_set_usize (scrolled_win, 100, 200);
7202 list = gtk_list_new ();
7203 gtk_container_add (GTK_CONTAINER (scrolled_win), list);
7205 gtk_signal_connect (GTK_OBJECT(list), "selection_received",
7206 GTK_SIGNAL_FUNC (selection_test_received), NULL);
7208 /* .. And create some buttons */
7209 button = gtk_button_new_with_label ("Get Targets");
7210 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7211 button, TRUE, TRUE, 0);
7213 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7214 GTK_SIGNAL_FUNC (selection_test_get_targets), list);
7216 button = gtk_button_new_with_label ("Quit");
7217 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7218 button, TRUE, TRUE, 0);
7220 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7221 GTK_SIGNAL_FUNC (gtk_widget_destroy),
7222 GTK_OBJECT (window));
7225 if (!GTK_WIDGET_VISIBLE (window))
7226 gtk_widget_show_all (window);
7228 gtk_widget_destroy (window);
7236 create_gamma_curve (void)
7238 static GtkWidget *window = NULL, *curve;
7239 static int count = 0;
7246 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7247 gtk_window_set_title (GTK_WINDOW (window), "test");
7248 gtk_container_border_width (GTK_CONTAINER (window), 10);
7250 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7251 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7254 curve = gtk_gamma_curve_new ();
7255 gtk_container_add (GTK_CONTAINER (window), curve);
7256 gtk_widget_show (curve);
7259 max = 127 + (count % 2)*128;
7260 gtk_curve_set_range (GTK_CURVE (GTK_GAMMA_CURVE (curve)->curve),
7262 for (i = 0; i < max; ++i)
7263 vec[i] = (127 / sqrt (max)) * sqrt (i);
7264 gtk_curve_set_vector (GTK_CURVE (GTK_GAMMA_CURVE (curve)->curve),
7267 if (!GTK_WIDGET_VISIBLE (window))
7268 gtk_widget_show (window);
7269 else if (count % 4 == 3)
7271 gtk_widget_destroy (window);
7282 static int scroll_test_pos = 0.0;
7283 static GdkGC *scroll_test_gc = NULL;
7286 scroll_test_expose (GtkWidget *widget, GdkEventExpose *event,
7290 gint imin, imax, jmin, jmax;
7292 imin = (event->area.x) / 10;
7293 imax = (event->area.x + event->area.width + 9) / 10;
7295 jmin = ((int)adj->value + event->area.y) / 10;
7296 jmax = ((int)adj->value + event->area.y + event->area.height + 9) / 10;
7298 gdk_window_clear_area (widget->window,
7299 event->area.x, event->area.y,
7300 event->area.width, event->area.height);
7302 for (i=imin; i<imax; i++)
7303 for (j=jmin; j<jmax; j++)
7305 gdk_draw_rectangle (widget->window,
7306 widget->style->black_gc,
7308 10*i, 10*j - (int)adj->value, 1+i%10, 1+j%10);
7314 scroll_test_configure (GtkWidget *widget, GdkEventConfigure *event,
7317 adj->page_increment = 0.9 * widget->allocation.height;
7318 adj->page_size = widget->allocation.height;
7320 gtk_signal_emit_by_name (GTK_OBJECT (adj), "changed");
7324 scroll_test_adjustment_changed (GtkAdjustment *adj, GtkWidget *widget)
7326 gint source_min = (int)adj->value - scroll_test_pos;
7327 gint source_max = source_min + widget->allocation.height;
7329 gint dest_max = widget->allocation.height;
7333 scroll_test_pos = adj->value;
7335 if (!GTK_WIDGET_DRAWABLE (widget))
7342 rect.width = widget->allocation.width;
7343 rect.height = -source_min;
7344 if (rect.height > widget->allocation.height)
7345 rect.height = widget->allocation.height;
7348 dest_min = rect.height;
7353 rect.y = 2*widget->allocation.height - source_max;
7356 rect.width = widget->allocation.width;
7357 rect.height = widget->allocation.height - rect.y;
7359 source_max = widget->allocation.height;
7363 if (source_min != source_max)
7365 if (scroll_test_gc == NULL)
7367 scroll_test_gc = gdk_gc_new (widget->window);
7368 gdk_gc_set_exposures (scroll_test_gc, TRUE);
7371 gdk_draw_pixmap (widget->window,
7376 widget->allocation.width,
7377 source_max - source_min);
7379 /* Make sure graphics expose events are processed before scrolling
7382 while ((event = gdk_event_get_graphics_expose (widget->window)) != NULL)
7384 gtk_widget_event (widget, event);
7385 if (event->expose.count == 0)
7387 gdk_event_free (event);
7390 gdk_event_free (event);
7394 if (rect.height != 0)
7395 gtk_widget_draw (widget, &rect);
7400 create_scroll_test (void)
7402 static GtkWidget *window = NULL;
7404 GtkWidget *drawing_area;
7405 GtkWidget *scrollbar;
7411 window = gtk_dialog_new ();
7413 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7414 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7417 gtk_window_set_title (GTK_WINDOW (window), "Scroll Test");
7418 gtk_container_border_width (GTK_CONTAINER (window), 0);
7420 hbox = gtk_hbox_new (FALSE, 0);
7421 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), hbox,
7423 gtk_widget_show (hbox);
7425 drawing_area = gtk_drawing_area_new ();
7426 gtk_drawing_area_size (GTK_DRAWING_AREA (drawing_area), 200, 200);
7427 gtk_box_pack_start (GTK_BOX (hbox), drawing_area, TRUE, TRUE, 0);
7428 gtk_widget_show (drawing_area);
7430 gtk_widget_set_events (drawing_area, GDK_EXPOSURE_MASK);
7432 adj = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.0, 1000.0, 1.0, 180.0, 200.0));
7433 scroll_test_pos = 0.0;
7435 scrollbar = gtk_vscrollbar_new (adj);
7436 gtk_box_pack_start (GTK_BOX (hbox), scrollbar, FALSE, FALSE, 0);
7437 gtk_widget_show (scrollbar);
7439 gtk_signal_connect (GTK_OBJECT (drawing_area), "expose_event",
7440 GTK_SIGNAL_FUNC (scroll_test_expose), adj);
7441 gtk_signal_connect (GTK_OBJECT (drawing_area), "configure_event",
7442 GTK_SIGNAL_FUNC (scroll_test_configure), adj);
7445 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
7446 GTK_SIGNAL_FUNC (scroll_test_adjustment_changed),
7449 /* .. And create some buttons */
7451 button = gtk_button_new_with_label ("Quit");
7452 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7453 button, TRUE, TRUE, 0);
7455 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7456 GTK_SIGNAL_FUNC (gtk_widget_destroy),
7457 GTK_OBJECT (window));
7458 gtk_widget_show (button);
7461 if (!GTK_WIDGET_VISIBLE (window))
7462 gtk_widget_show (window);
7464 gtk_widget_destroy (window);
7471 static int timer = 0;
7474 timeout_test (GtkWidget *label)
7476 static int count = 0;
7477 static char buffer[32];
7479 sprintf (buffer, "count: %d", ++count);
7480 gtk_label_set (GTK_LABEL (label), buffer);
7486 start_timeout_test (GtkWidget *widget,
7491 timer = gtk_timeout_add (100, (GtkFunction) timeout_test, label);
7496 stop_timeout_test (GtkWidget *widget,
7501 gtk_timeout_remove (timer);
7507 destroy_timeout_test (GtkWidget *widget,
7510 stop_timeout_test (NULL, NULL);
7516 create_timeout_test (void)
7518 static GtkWidget *window = NULL;
7524 window = gtk_dialog_new ();
7526 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7527 GTK_SIGNAL_FUNC(destroy_timeout_test),
7530 gtk_window_set_title (GTK_WINDOW (window), "Timeout Test");
7531 gtk_container_border_width (GTK_CONTAINER (window), 0);
7533 label = gtk_label_new ("count: 0");
7534 gtk_misc_set_padding (GTK_MISC (label), 10, 10);
7535 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
7536 label, TRUE, TRUE, 0);
7537 gtk_widget_show (label);
7539 button = gtk_button_new_with_label ("close");
7540 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7541 GTK_SIGNAL_FUNC(gtk_widget_destroy),
7542 GTK_OBJECT (window));
7543 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7544 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7545 button, TRUE, TRUE, 0);
7546 gtk_widget_grab_default (button);
7547 gtk_widget_show (button);
7549 button = gtk_button_new_with_label ("start");
7550 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7551 GTK_SIGNAL_FUNC(start_timeout_test),
7553 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7554 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7555 button, TRUE, TRUE, 0);
7556 gtk_widget_show (button);
7558 button = gtk_button_new_with_label ("stop");
7559 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7560 GTK_SIGNAL_FUNC(stop_timeout_test),
7562 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7563 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7564 button, TRUE, TRUE, 0);
7565 gtk_widget_show (button);
7568 if (!GTK_WIDGET_VISIBLE (window))
7569 gtk_widget_show (window);
7571 gtk_widget_destroy (window);
7578 static int idle = 0;
7581 idle_test (GtkWidget *label)
7583 static int count = 0;
7584 static char buffer[32];
7586 sprintf (buffer, "count: %d", ++count);
7587 gtk_label_set (GTK_LABEL (label), buffer);
7593 start_idle_test (GtkWidget *widget,
7598 idle = gtk_idle_add ((GtkFunction) idle_test, label);
7603 stop_idle_test (GtkWidget *widget,
7608 gtk_idle_remove (idle);
7614 destroy_idle_test (GtkWidget *widget,
7617 stop_idle_test (NULL, NULL);
7623 toggle_idle_container (GtkObject *button,
7624 GtkContainer *container)
7626 gtk_container_set_resize_mode (container, (guint) gtk_object_get_user_data (button));
7630 create_idle_test (void)
7632 static GtkWidget *window = NULL;
7635 GtkWidget *container;
7642 window = gtk_dialog_new ();
7644 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7645 GTK_SIGNAL_FUNC(destroy_idle_test),
7648 gtk_window_set_title (GTK_WINDOW (window), "Idle Test");
7649 gtk_container_border_width (GTK_CONTAINER (window), 0);
7651 label = gtk_label_new ("count: 0");
7652 gtk_misc_set_padding (GTK_MISC (label), 10, 10);
7653 gtk_widget_show (label);
7656 gtk_widget_new (GTK_TYPE_HBOX,
7657 "GtkWidget::visible", TRUE,
7658 /* "GtkContainer::child", gtk_widget_new (GTK_TYPE_HBOX,
7659 * "GtkWidget::visible", TRUE,
7661 "GtkContainer::child", label,
7664 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
7665 container, TRUE, TRUE, 0);
7668 gtk_widget_new (GTK_TYPE_FRAME,
7669 "GtkContainer::border_width", 5,
7670 "GtkFrame::label", "Label Container",
7671 "GtkWidget::visible", TRUE,
7672 "GtkWidget::parent", GTK_DIALOG (window)->vbox,
7675 gtk_widget_new (GTK_TYPE_VBOX,
7676 "GtkWidget::visible", TRUE,
7677 "GtkWidget::parent", frame,
7680 gtk_widget_new (GTK_TYPE_RADIO_BUTTON,
7681 "GtkButton::label", "Resize-Parent",
7682 "GtkObject::user_data", (void*)GTK_RESIZE_PARENT,
7683 "GtkObject::signal::clicked", toggle_idle_container, container,
7684 "GtkWidget::visible", TRUE,
7685 "GtkWidget::parent", box,
7688 gtk_widget_new (GTK_TYPE_RADIO_BUTTON,
7689 "GtkButton::label", "Resize-Queue",
7690 "GtkObject::user_data", (void*)GTK_RESIZE_QUEUE,
7691 "GtkObject::signal::clicked", toggle_idle_container, container,
7692 "GtkRadioButton::group", button,
7693 "GtkWidget::visible", TRUE,
7694 "GtkWidget::parent", box,
7697 gtk_widget_new (GTK_TYPE_RADIO_BUTTON,
7698 "GtkButton::label", "Resize-Immediate",
7699 "GtkObject::user_data", (void*)GTK_RESIZE_IMMEDIATE,
7700 "GtkObject::signal::clicked", toggle_idle_container, container,
7701 "GtkRadioButton::group", button,
7702 "GtkWidget::visible", TRUE,
7703 "GtkWidget::parent", box,
7707 button = gtk_button_new_with_label ("close");
7708 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7709 GTK_SIGNAL_FUNC(gtk_widget_destroy),
7710 GTK_OBJECT (window));
7711 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7712 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7713 button, TRUE, TRUE, 0);
7714 gtk_widget_grab_default (button);
7715 gtk_widget_show (button);
7717 button = gtk_button_new_with_label ("start");
7718 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7719 GTK_SIGNAL_FUNC(start_idle_test),
7721 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7722 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7723 button, TRUE, TRUE, 0);
7724 gtk_widget_show (button);
7726 button = gtk_button_new_with_label ("stop");
7727 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7728 GTK_SIGNAL_FUNC(stop_idle_test),
7730 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7731 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7732 button, TRUE, TRUE, 0);
7733 gtk_widget_show (button);
7736 if (!GTK_WIDGET_VISIBLE (window))
7737 gtk_widget_show (window);
7739 gtk_widget_destroy (window);
7747 reload_rc_file (void)
7751 if (gtk_rc_reparse_all ())
7753 toplevels = gdk_window_get_toplevels();
7757 gdk_window_get_user_data (toplevels->data, (gpointer *)&widget);
7760 gtk_widget_reset_rc_styles (widget);
7762 toplevels = toplevels->next;
7764 g_list_free (toplevels);
7769 reload_all_rc_files (void)
7771 static GdkAtom atom_rcfiles = GDK_NONE;
7777 atom_rcfiles = gdk_atom_intern("_GTK_READ_RCFILES", FALSE);
7779 for(i = 0; i < 5; i++)
7781 sev.data_format = 32;
7782 sev.message_type = atom_rcfiles;
7783 gdk_event_send_clientmessage_toall ((GdkEvent *) &sev);
7787 create_rc_file (void)
7789 static GtkWidget *window = NULL;
7794 window = gtk_dialog_new ();
7796 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7797 GTK_SIGNAL_FUNC(destroy_idle_test),
7800 gtk_window_set_title (GTK_WINDOW (window), "Reload Rc file");
7801 gtk_container_border_width (GTK_CONTAINER (window), 0);
7803 button = gtk_button_new_with_label ("Reload");
7804 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7805 GTK_SIGNAL_FUNC(reload_rc_file), NULL);
7806 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7807 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7808 button, TRUE, TRUE, 0);
7809 gtk_widget_grab_default (button);
7810 gtk_widget_show (button);
7812 button = gtk_button_new_with_label ("Reload All");
7813 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7814 GTK_SIGNAL_FUNC(reload_all_rc_files), NULL);
7815 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7816 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7817 button, TRUE, TRUE, 0);
7818 gtk_widget_show (button);
7820 button = gtk_button_new_with_label ("Close");
7821 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7822 GTK_SIGNAL_FUNC(gtk_widget_destroy),
7823 GTK_OBJECT (window));
7824 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7825 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7826 button, TRUE, TRUE, 0);
7827 gtk_widget_show (button);
7831 if (!GTK_WIDGET_VISIBLE (window))
7832 gtk_widget_show (window);
7834 gtk_widget_destroy (window);
7838 * Test of recursive mainloop
7842 mainloop_destroyed (GtkWidget *w, GtkWidget **window)
7849 create_mainloop (void)
7851 static GtkWidget *window = NULL;
7857 window = gtk_dialog_new ();
7859 gtk_window_set_title (GTK_WINDOW (window), "Test Main Loop");
7861 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7862 GTK_SIGNAL_FUNC(mainloop_destroyed),
7865 label = gtk_label_new ("In recursive main loop...");
7866 gtk_misc_set_padding (GTK_MISC(label), 20, 20);
7868 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), label,
7870 gtk_widget_show (label);
7872 button = gtk_button_new_with_label ("Leave");
7873 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area), button,
7876 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7877 GTK_SIGNAL_FUNC (gtk_widget_destroy),
7878 GTK_OBJECT (window));
7880 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7881 gtk_widget_grab_default (button);
7883 gtk_widget_show (button);
7886 if (!GTK_WIDGET_VISIBLE (window))
7888 gtk_widget_show (window);
7890 g_print ("create_mainloop: start\n");
7892 g_print ("create_mainloop: done\n");
7895 gtk_widget_destroy (window);
7899 * Main Window and Exit
7903 do_exit (GtkWidget *widget, GtkWidget *window)
7905 gtk_widget_destroy (window);
7910 create_main_window (void)
7917 { "button box", create_button_box },
7918 { "buttons", create_buttons },
7919 { "check buttons", create_check_buttons },
7920 { "clist", create_clist},
7921 { "color selection", create_color_selection },
7922 { "ctree", create_ctree },
7923 { "cursors", create_cursors },
7924 { "dialog", create_dialog },
7925 /* { "dnd", create_dnd }, */
7926 { "entry", create_entry },
7927 { "file selection", create_file_selection },
7928 { "font selection", create_font_selection },
7929 { "gamma curve", create_gamma_curve },
7930 { "handle box", create_handle_box },
7931 { "item factory", create_item_factory },
7932 { "list", create_list },
7933 { "menus", create_menus },
7934 { "modal window", create_modal_window },
7935 { "notebook", create_notebook },
7936 { "panes", create_panes },
7937 { "pixmap", create_pixmap },
7938 { "preview color", create_color_preview },
7939 { "preview gray", create_gray_preview },
7940 { "progress bar", create_progress_bar },
7941 { "radio buttons", create_radio_buttons },
7942 { "range controls", create_range_controls },
7943 { "rc file", create_rc_file },
7944 { "reparent", create_reparent },
7945 { "rulers", create_rulers },
7946 { "saved position", create_saved_position },
7947 { "scrolled windows", create_scrolled_windows },
7948 { "shapes", create_shapes },
7949 { "spinbutton", create_spins },
7950 { "statusbar", create_statusbar },
7951 { "test idle", create_idle_test },
7952 { "test mainloop", create_mainloop },
7953 { "test scrolling", create_scroll_test },
7954 { "test selection", create_selection_test },
7955 { "test timeout", create_timeout_test },
7956 { "text", create_text },
7957 { "toggle buttons", create_toggle_buttons },
7958 { "toolbar", create_toolbar },
7959 { "tooltips", create_tooltips },
7960 { "tree", create_tree_mode_window},
7961 { "WM hints", create_wmhints },
7963 int nbuttons = sizeof (buttons) / sizeof (buttons[0]);
7967 GtkWidget *scrolled_window;
7971 GtkWidget *separator;
7974 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7975 gtk_window_set_policy (GTK_WINDOW (window), FALSE, FALSE, FALSE);
7976 gtk_widget_set_name (window, "main window");
7977 gtk_widget_set_usize (window, 200, 400);
7978 gtk_widget_set_uposition (window, 20, 20);
7980 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7981 GTK_SIGNAL_FUNC(gtk_main_quit),
7983 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
7984 GTK_SIGNAL_FUNC (gtk_false),
7987 box1 = gtk_vbox_new (FALSE, 0);
7988 gtk_container_add (GTK_CONTAINER (window), box1);
7990 if (gtk_micro_version > 0)
8002 label = gtk_label_new (buffer);
8003 gtk_box_pack_start (GTK_BOX (box1), label, FALSE, FALSE, 0);
8005 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
8006 gtk_container_border_width (GTK_CONTAINER (scrolled_window), 10);
8007 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
8008 GTK_POLICY_AUTOMATIC,
8009 GTK_POLICY_AUTOMATIC);
8010 gtk_box_pack_start (GTK_BOX (box1), scrolled_window, TRUE, TRUE, 0);
8012 box2 = gtk_vbox_new (FALSE, 0);
8013 gtk_container_border_width (GTK_CONTAINER (box2), 10);
8014 gtk_container_add (GTK_CONTAINER (scrolled_window), box2);
8015 gtk_container_set_focus_vadjustment (GTK_CONTAINER (box2),
8016 gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
8017 gtk_widget_show (box2);
8019 for (i = 0; i < nbuttons; i++)
8021 button = gtk_button_new_with_label (buttons[i].label);
8022 if (buttons[i].func)
8023 gtk_signal_connect (GTK_OBJECT (button),
8025 GTK_SIGNAL_FUNC(buttons[i].func),
8028 gtk_widget_set_sensitive (button, FALSE);
8029 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
8032 separator = gtk_hseparator_new ();
8033 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
8035 box2 = gtk_vbox_new (FALSE, 10);
8036 gtk_container_border_width (GTK_CONTAINER (box2), 10);
8037 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
8039 button = gtk_button_new_with_label ("close");
8040 gtk_signal_connect (GTK_OBJECT (button), "clicked",
8041 GTK_SIGNAL_FUNC (do_exit),
8043 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
8044 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8045 gtk_widget_grab_default (button);
8047 gtk_widget_show_all (window);
8051 main (int argc, char *argv[])
8053 GtkBindingSet *binding_set;
8055 srand (time (NULL));
8059 gtk_init (&argc, &argv);
8065 binding_set = gtk_binding_set_by_class (gtk_type_class (GTK_TYPE_WIDGET));
8066 gtk_binding_entry_add_signal (binding_set,
8067 '9', GDK_CONTROL_MASK | GDK_RELEASE_MASK,
8070 GTK_TYPE_STRING, "GtkWidgetClass <ctrl><release>9 test");
8072 gtk_rc_parse ("testgtkrc");
8074 create_main_window ();