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.
26 #include "../gdk/gdk.h"
27 #include "../gdk/gdkx.h"
28 #include "../gdk/gdkkeysyms.h"
30 #include "circles.xbm"
32 typedef struct _OptionMenuItem
39 shape_create_icon (char *xpm_file,
47 build_option_menu (OptionMenuItem items[],
52 /* macro, structure and variables used by tree window demos */
53 #define DEFAULT_NUMBER_OF_ITEM 3
54 #define DEFAULT_RECURSION_LEVEL 3
57 GSList* selection_mode_group;
58 GtkWidget* single_button;
59 GtkWidget* browse_button;
60 GtkWidget* multiple_button;
61 GtkWidget* draw_line_button;
62 GtkWidget* view_line_button;
63 GtkWidget* no_root_item_button;
64 GtkWidget* nb_item_spinner;
65 GtkWidget* recursion_spinner;
66 } sTreeSampleSelection;
68 typedef struct sTreeButtons {
70 GtkWidget* add_button;
71 GtkWidget* remove_button;
72 GtkWidget* subtree_button;
74 /* end of tree section */
77 build_option_menu (OptionMenuItem items[],
88 omenu = gtk_option_menu_new ();
90 menu = gtk_menu_new ();
93 for (i = 0; i < num_items; i++)
95 menu_item = gtk_radio_menu_item_new_with_label (group, items[i].name);
96 gtk_signal_connect (GTK_OBJECT (menu_item), "activate",
97 (GtkSignalFunc) items[i].func, data);
98 group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menu_item));
99 gtk_menu_append (GTK_MENU (menu), menu_item);
101 gtk_check_menu_item_set_state (GTK_CHECK_MENU_ITEM (menu_item), TRUE);
102 gtk_widget_show (menu_item);
105 gtk_option_menu_set_menu (GTK_OPTION_MENU (omenu), menu);
106 gtk_option_menu_set_history (GTK_OPTION_MENU (omenu), history);
112 destroy_tooltips (GtkWidget *widget, GtkWindow **window)
114 GtkTooltips *tt = gtk_object_get_data (GTK_OBJECT (*window), "tooltips");
115 gtk_object_unref (GTK_OBJECT (tt));
124 button_window (GtkWidget *widget,
127 if (!GTK_WIDGET_VISIBLE (button))
128 gtk_widget_show (button);
130 gtk_widget_hide (button);
134 create_buttons (void)
136 static GtkWidget *window = NULL;
140 GtkWidget *button[10];
141 GtkWidget *separator;
145 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
147 gtk_signal_connect (GTK_OBJECT (window), "destroy",
148 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
151 gtk_window_set_title (GTK_WINDOW (window), "GtkButton");
152 gtk_container_border_width (GTK_CONTAINER (window), 0);
154 box1 = gtk_vbox_new (FALSE, 0);
155 gtk_container_add (GTK_CONTAINER (window), box1);
157 table = gtk_table_new (3, 3, FALSE);
158 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
159 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
160 gtk_container_border_width (GTK_CONTAINER (table), 10);
161 gtk_box_pack_start (GTK_BOX (box1), table, TRUE, TRUE, 0);
163 button[0] = gtk_button_new_with_label ("button1");
164 button[1] = gtk_button_new_with_label ("button2");
165 button[2] = gtk_button_new_with_label ("button3");
166 button[3] = gtk_button_new_with_label ("button4");
167 button[4] = gtk_button_new_with_label ("button5");
168 button[5] = gtk_button_new_with_label ("button6");
169 button[6] = gtk_button_new_with_label ("button7");
170 button[7] = gtk_button_new_with_label ("button8");
171 button[8] = gtk_button_new_with_label ("button9");
173 gtk_signal_connect (GTK_OBJECT (button[0]), "clicked",
174 GTK_SIGNAL_FUNC(button_window),
177 gtk_table_attach (GTK_TABLE (table), button[0], 0, 1, 0, 1,
178 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
180 gtk_signal_connect (GTK_OBJECT (button[1]), "clicked",
181 GTK_SIGNAL_FUNC(button_window),
184 gtk_table_attach (GTK_TABLE (table), button[1], 1, 2, 1, 2,
185 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
187 gtk_signal_connect (GTK_OBJECT (button[2]), "clicked",
188 GTK_SIGNAL_FUNC(button_window),
190 gtk_table_attach (GTK_TABLE (table), button[2], 2, 3, 2, 3,
191 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
193 gtk_signal_connect (GTK_OBJECT (button[3]), "clicked",
194 GTK_SIGNAL_FUNC(button_window),
196 gtk_table_attach (GTK_TABLE (table), button[3], 0, 1, 2, 3,
197 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
199 gtk_signal_connect (GTK_OBJECT (button[4]), "clicked",
200 GTK_SIGNAL_FUNC(button_window),
202 gtk_table_attach (GTK_TABLE (table), button[4], 2, 3, 0, 1,
203 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
205 gtk_signal_connect (GTK_OBJECT (button[5]), "clicked",
206 GTK_SIGNAL_FUNC(button_window),
208 gtk_table_attach (GTK_TABLE (table), button[5], 1, 2, 2, 3,
209 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
211 gtk_signal_connect (GTK_OBJECT (button[6]), "clicked",
212 GTK_SIGNAL_FUNC(button_window),
214 gtk_table_attach (GTK_TABLE (table), button[6], 1, 2, 0, 1,
215 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
217 gtk_signal_connect (GTK_OBJECT (button[7]), "clicked",
218 GTK_SIGNAL_FUNC(button_window),
220 gtk_table_attach (GTK_TABLE (table), button[7], 2, 3, 1, 2,
221 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
223 gtk_signal_connect (GTK_OBJECT (button[8]), "clicked",
224 GTK_SIGNAL_FUNC(button_window),
226 gtk_table_attach (GTK_TABLE (table), button[8], 0, 1, 1, 2,
227 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
229 separator = gtk_hseparator_new ();
230 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
232 box2 = gtk_vbox_new (FALSE, 10);
233 gtk_container_border_width (GTK_CONTAINER (box2), 10);
234 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
236 button[9] = gtk_button_new_with_label ("close");
237 gtk_signal_connect_object (GTK_OBJECT (button[9]), "clicked",
238 GTK_SIGNAL_FUNC(gtk_widget_destroy),
239 GTK_OBJECT (window));
240 gtk_box_pack_start (GTK_BOX (box2), button[9], TRUE, TRUE, 0);
241 GTK_WIDGET_SET_FLAGS (button[9], GTK_CAN_DEFAULT);
242 gtk_widget_grab_default (button[9]);
245 if (!GTK_WIDGET_VISIBLE (window))
246 gtk_widget_show_all (window);
248 gtk_widget_destroy (window);
256 create_toggle_buttons (void)
258 static GtkWidget *window = NULL;
262 GtkWidget *separator;
266 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
268 gtk_signal_connect (GTK_OBJECT (window), "destroy",
269 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
272 gtk_window_set_title (GTK_WINDOW (window), "GtkToggleButton");
273 gtk_container_border_width (GTK_CONTAINER (window), 0);
275 box1 = gtk_vbox_new (FALSE, 0);
276 gtk_container_add (GTK_CONTAINER (window), box1);
278 box2 = gtk_vbox_new (FALSE, 10);
279 gtk_container_border_width (GTK_CONTAINER (box2), 10);
280 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
282 button = gtk_toggle_button_new_with_label ("button1");
283 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
285 button = gtk_toggle_button_new_with_label ("button2");
286 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
288 button = gtk_toggle_button_new_with_label ("button3");
289 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
291 separator = gtk_hseparator_new ();
292 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
294 box2 = gtk_vbox_new (FALSE, 10);
295 gtk_container_border_width (GTK_CONTAINER (box2), 10);
296 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
298 button = gtk_button_new_with_label ("close");
299 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
300 GTK_SIGNAL_FUNC(gtk_widget_destroy),
301 GTK_OBJECT (window));
302 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
303 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
304 gtk_widget_grab_default (button);
307 if (!GTK_WIDGET_VISIBLE (window))
308 gtk_widget_show_all (window);
310 gtk_widget_destroy (window);
318 create_check_buttons (void)
320 static GtkWidget *window = NULL;
324 GtkWidget *separator;
328 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
330 gtk_signal_connect (GTK_OBJECT (window), "destroy",
331 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
334 gtk_window_set_title (GTK_WINDOW (window), "GtkCheckButton");
335 gtk_container_border_width (GTK_CONTAINER (window), 0);
337 box1 = gtk_vbox_new (FALSE, 0);
338 gtk_container_add (GTK_CONTAINER (window), box1);
340 box2 = gtk_vbox_new (FALSE, 10);
341 gtk_container_border_width (GTK_CONTAINER (box2), 10);
342 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
344 button = gtk_check_button_new_with_label ("button1");
345 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
347 button = gtk_check_button_new_with_label ("button2");
348 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
350 button = gtk_check_button_new_with_label ("button3");
351 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
353 separator = gtk_hseparator_new ();
354 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
356 box2 = gtk_vbox_new (FALSE, 10);
357 gtk_container_border_width (GTK_CONTAINER (box2), 10);
358 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
360 button = gtk_button_new_with_label ("close");
361 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
362 GTK_SIGNAL_FUNC(gtk_widget_destroy),
363 GTK_OBJECT (window));
364 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
365 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
366 gtk_widget_grab_default (button);
369 if (!GTK_WIDGET_VISIBLE (window))
370 gtk_widget_show_all (window);
372 gtk_widget_destroy (window);
380 create_radio_buttons (void)
382 static GtkWidget *window = NULL;
386 GtkWidget *separator;
390 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
392 gtk_signal_connect (GTK_OBJECT (window), "destroy",
393 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
396 gtk_window_set_title (GTK_WINDOW (window), "radio buttons");
397 gtk_container_border_width (GTK_CONTAINER (window), 0);
399 box1 = gtk_vbox_new (FALSE, 0);
400 gtk_container_add (GTK_CONTAINER (window), box1);
402 box2 = gtk_vbox_new (FALSE, 10);
403 gtk_container_border_width (GTK_CONTAINER (box2), 10);
404 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
406 button = gtk_radio_button_new_with_label (NULL, "button1");
407 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
409 button = gtk_radio_button_new_with_label (
410 gtk_radio_button_group (GTK_RADIO_BUTTON (button)),
412 gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (button), TRUE);
413 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
415 button = gtk_radio_button_new_with_label (
416 gtk_radio_button_group (GTK_RADIO_BUTTON (button)),
418 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
420 separator = gtk_hseparator_new ();
421 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
423 box2 = gtk_vbox_new (FALSE, 10);
424 gtk_container_border_width (GTK_CONTAINER (box2), 10);
425 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
427 button = gtk_button_new_with_label ("close");
428 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
429 GTK_SIGNAL_FUNC(gtk_widget_destroy),
430 GTK_OBJECT (window));
431 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
432 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
433 gtk_widget_grab_default (button);
436 if (!GTK_WIDGET_VISIBLE (window))
437 gtk_widget_show_all (window);
439 gtk_widget_destroy (window);
447 create_bbox (gint horizontal,
458 frame = gtk_frame_new (title);
461 bbox = gtk_hbutton_box_new ();
463 bbox = gtk_vbutton_box_new ();
465 gtk_container_border_width (GTK_CONTAINER (bbox), 5);
466 gtk_container_add (GTK_CONTAINER (frame), bbox);
468 gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), layout);
469 gtk_button_box_set_spacing (GTK_BUTTON_BOX (bbox), spacing);
470 gtk_button_box_set_child_size (GTK_BUTTON_BOX (bbox), child_w, child_h);
472 button = gtk_button_new_with_label ("OK");
473 gtk_container_add (GTK_CONTAINER (bbox), button);
475 button = gtk_button_new_with_label ("Cancel");
476 gtk_container_add (GTK_CONTAINER (bbox), button);
478 button = gtk_button_new_with_label ("Help");
479 gtk_container_add (GTK_CONTAINER (bbox), button);
485 create_button_box (void)
487 static GtkWidget* window = NULL;
488 GtkWidget *main_vbox;
491 GtkWidget *frame_horz;
492 GtkWidget *frame_vert;
496 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
497 gtk_window_set_title (GTK_WINDOW (window), "Button Boxes");
499 gtk_signal_connect (GTK_OBJECT (window), "destroy",
500 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
503 gtk_container_border_width (GTK_CONTAINER (window), 10);
505 main_vbox = gtk_vbox_new (FALSE, 0);
506 gtk_container_add (GTK_CONTAINER (window), main_vbox);
508 frame_horz = gtk_frame_new ("Horizontal Button Boxes");
509 gtk_box_pack_start (GTK_BOX (main_vbox), frame_horz, TRUE, TRUE, 10);
511 vbox = gtk_vbox_new (FALSE, 0);
512 gtk_container_border_width (GTK_CONTAINER (vbox), 10);
513 gtk_container_add (GTK_CONTAINER (frame_horz), vbox);
515 gtk_box_pack_start (GTK_BOX (vbox),
516 create_bbox (TRUE, "Spread", 40, 85, 20, GTK_BUTTONBOX_SPREAD),
519 gtk_box_pack_start (GTK_BOX (vbox),
520 create_bbox (TRUE, "Edge", 40, 85, 20, GTK_BUTTONBOX_EDGE),
523 gtk_box_pack_start (GTK_BOX (vbox),
524 create_bbox (TRUE, "Start", 40, 85, 20, GTK_BUTTONBOX_START),
527 gtk_box_pack_start (GTK_BOX (vbox),
528 create_bbox (TRUE, "End", 40, 85, 20, GTK_BUTTONBOX_END),
531 frame_vert = gtk_frame_new ("Vertical Button Boxes");
532 gtk_box_pack_start (GTK_BOX (main_vbox), frame_vert, TRUE, TRUE, 10);
534 hbox = gtk_hbox_new (FALSE, 0);
535 gtk_container_border_width (GTK_CONTAINER (hbox), 10);
536 gtk_container_add (GTK_CONTAINER (frame_vert), hbox);
538 gtk_box_pack_start (GTK_BOX (hbox),
539 create_bbox (FALSE, "Spread", 30, 85, 20, GTK_BUTTONBOX_SPREAD),
542 gtk_box_pack_start (GTK_BOX (hbox),
543 create_bbox (FALSE, "Edge", 30, 85, 20, GTK_BUTTONBOX_EDGE),
546 gtk_box_pack_start (GTK_BOX (hbox),
547 create_bbox (FALSE, "Start", 30, 85, 20, GTK_BUTTONBOX_START),
550 gtk_box_pack_start (GTK_BOX (hbox),
551 create_bbox (FALSE, "End", 30, 85, 20, GTK_BUTTONBOX_END),
555 if (!GTK_WIDGET_VISIBLE (window))
556 gtk_widget_show_all (window);
558 gtk_widget_destroy (window);
566 new_pixmap (char *filename,
568 GdkColor *background)
574 pixmap = gdk_pixmap_create_from_xpm (window, &mask,
577 wpixmap = gtk_pixmap_new (pixmap, mask);
583 set_toolbar_horizontal (GtkWidget *widget,
586 gtk_toolbar_set_orientation (GTK_TOOLBAR (data), GTK_ORIENTATION_HORIZONTAL);
590 set_toolbar_vertical (GtkWidget *widget,
593 gtk_toolbar_set_orientation (GTK_TOOLBAR (data), GTK_ORIENTATION_VERTICAL);
597 set_toolbar_icons (GtkWidget *widget,
600 gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_ICONS);
604 set_toolbar_text (GtkWidget *widget,
607 gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_TEXT);
611 set_toolbar_both (GtkWidget *widget,
614 gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_BOTH);
618 set_toolbar_small_space (GtkWidget *widget,
621 gtk_toolbar_set_space_size (GTK_TOOLBAR (data), 5);
625 set_toolbar_big_space (GtkWidget *widget,
628 gtk_toolbar_set_space_size (GTK_TOOLBAR (data), 10);
632 set_toolbar_enable (GtkWidget *widget,
635 gtk_toolbar_set_tooltips (GTK_TOOLBAR (data), TRUE);
639 set_toolbar_disable (GtkWidget *widget,
642 gtk_toolbar_set_tooltips (GTK_TOOLBAR (data), FALSE);
646 set_toolbar_borders (GtkWidget *widget,
649 gtk_toolbar_set_button_relief (GTK_TOOLBAR (data), GTK_RELIEF_NORMAL);
653 set_toolbar_borderless (GtkWidget *widget,
656 gtk_toolbar_set_button_relief (GTK_TOOLBAR (data), GTK_RELIEF_NONE);
660 create_toolbar (void)
662 static GtkWidget *window = NULL;
668 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
669 gtk_window_set_title (GTK_WINDOW (window), "Toolbar test");
670 gtk_window_set_policy (GTK_WINDOW (window), FALSE, TRUE, TRUE);
672 gtk_signal_connect (GTK_OBJECT (window), "destroy",
673 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
676 gtk_container_border_width (GTK_CONTAINER (window), 0);
677 gtk_widget_realize (window);
679 toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_BOTH);
680 gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NONE);
682 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
683 "Horizontal", "Horizontal toolbar layout", "Toolbar/Horizontal",
684 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
685 (GtkSignalFunc) set_toolbar_horizontal, toolbar);
686 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
687 "Vertical", "Vertical toolbar layout", "Toolbar/Vertical",
688 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
689 (GtkSignalFunc) set_toolbar_vertical, toolbar);
691 gtk_toolbar_append_space (GTK_TOOLBAR(toolbar));
693 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
694 "Icons", "Only show toolbar icons", "Toolbar/IconsOnly",
695 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
696 (GtkSignalFunc) set_toolbar_icons, toolbar);
697 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
698 "Text", "Only show toolbar text", "Toolbar/TextOnly",
699 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
700 (GtkSignalFunc) set_toolbar_text, toolbar);
701 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
702 "Both", "Show toolbar icons and text", "Toolbar/Both",
703 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
704 (GtkSignalFunc) set_toolbar_both, toolbar);
706 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
708 entry = gtk_entry_new ();
710 gtk_toolbar_append_widget (GTK_TOOLBAR (toolbar), entry, "This is an unusable GtkEntry ;)", "Hey don't click me!!!");
712 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
714 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
715 "Small", "Use small spaces", "Toolbar/Small",
716 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
717 (GtkSignalFunc) set_toolbar_small_space, toolbar);
718 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
719 "Big", "Use big spaces", "Toolbar/Big",
720 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
721 (GtkSignalFunc) set_toolbar_big_space, toolbar);
723 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
725 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
726 "Enable", "Enable tooltips", NULL,
727 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
728 (GtkSignalFunc) set_toolbar_enable, toolbar);
729 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
730 "Disable", "Disable tooltips", NULL,
731 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
732 (GtkSignalFunc) set_toolbar_disable, toolbar);
734 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
736 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
737 "Borders", "Show Borders", NULL,
738 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
739 (GtkSignalFunc) set_toolbar_borders, toolbar);
740 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
741 "Borderless", "Hide Borders", NULL,
742 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
743 (GtkSignalFunc) set_toolbar_borderless, toolbar);
745 gtk_container_add (GTK_CONTAINER (window), toolbar);
748 if (!GTK_WIDGET_VISIBLE (window))
749 gtk_widget_show_all (window);
751 gtk_widget_destroy (window);
755 make_toolbar (GtkWidget *window)
759 if (!GTK_WIDGET_REALIZED (window))
760 gtk_widget_realize (window);
762 toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_BOTH);
763 gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NONE);
765 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
766 "Horizontal", "Horizontal toolbar layout", NULL,
767 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
768 (GtkSignalFunc) set_toolbar_horizontal, toolbar);
769 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
770 "Vertical", "Vertical toolbar layout", NULL,
771 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
772 (GtkSignalFunc) set_toolbar_vertical, toolbar);
774 gtk_toolbar_append_space (GTK_TOOLBAR(toolbar));
776 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
777 "Icons", "Only show toolbar icons", NULL,
778 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
779 (GtkSignalFunc) set_toolbar_icons, toolbar);
780 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
781 "Text", "Only show toolbar text", NULL,
782 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
783 (GtkSignalFunc) set_toolbar_text, toolbar);
784 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
785 "Both", "Show toolbar icons and text", NULL,
786 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
787 (GtkSignalFunc) set_toolbar_both, toolbar);
789 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
791 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
792 "Small", "Use small spaces", NULL,
793 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
794 (GtkSignalFunc) set_toolbar_small_space, toolbar);
795 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
796 "Big", "Use big spaces", "Toolbar/Big",
797 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
798 (GtkSignalFunc) set_toolbar_big_space, toolbar);
800 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
802 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
803 "Enable", "Enable tooltips", NULL,
804 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
805 (GtkSignalFunc) set_toolbar_enable, toolbar);
806 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
807 "Disable", "Disable tooltips", NULL,
808 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
809 (GtkSignalFunc) set_toolbar_disable, toolbar);
811 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
813 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
814 "Borders", "Show Borders", NULL,
815 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
816 (GtkSignalFunc) set_toolbar_borders, toolbar);
817 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
818 "Borderless", "Hide Borders", NULL,
819 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
820 (GtkSignalFunc) set_toolbar_borderless, toolbar);
829 static guint statusbar_counter = 1;
832 statusbar_push (GtkWidget *button,
833 GtkStatusbar *statusbar)
837 sprintf (text, "something %d", statusbar_counter++);
839 gtk_statusbar_push (statusbar, 1, text);
843 statusbar_pop (GtkWidget *button,
844 GtkStatusbar *statusbar)
846 gtk_statusbar_pop (statusbar, 1);
850 statusbar_steal (GtkWidget *button,
851 GtkStatusbar *statusbar)
853 gtk_statusbar_remove (statusbar, 1, 4);
857 statusbar_popped (GtkStatusbar *statusbar,
861 if (!statusbar->messages)
862 statusbar_counter = 1;
866 statusbar_contexts (GtkStatusbar *statusbar)
870 string = "any context";
871 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
873 gtk_statusbar_get_context_id (statusbar, string));
875 string = "idle messages";
876 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
878 gtk_statusbar_get_context_id (statusbar, string));
880 string = "some text";
881 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
883 gtk_statusbar_get_context_id (statusbar, string));
885 string = "hit the mouse";
886 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
888 gtk_statusbar_get_context_id (statusbar, string));
890 string = "hit the mouse2";
891 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
893 gtk_statusbar_get_context_id (statusbar, string));
897 statusbar_dump_stack (GtkStatusbar *statusbar)
901 for (list = statusbar->messages; list; list = list->next)
903 GtkStatusbarMsg *msg;
906 g_print ("context_id: %d, message_id: %d, status_text: \"%s\"\n",
914 create_statusbar (void)
916 static GtkWidget *window = NULL;
920 GtkWidget *separator;
921 GtkWidget *statusbar;
925 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
927 gtk_signal_connect (GTK_OBJECT (window), "destroy",
928 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
931 gtk_window_set_title (GTK_WINDOW (window), "statusbar");
932 gtk_container_border_width (GTK_CONTAINER (window), 0);
934 box1 = gtk_vbox_new (FALSE, 0);
935 gtk_container_add (GTK_CONTAINER (window), box1);
937 box2 = gtk_vbox_new (FALSE, 10);
938 gtk_container_border_width (GTK_CONTAINER (box2), 10);
939 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
941 statusbar = gtk_statusbar_new ();
942 gtk_box_pack_end (GTK_BOX (box1), statusbar, TRUE, TRUE, 0);
943 gtk_signal_connect (GTK_OBJECT (statusbar),
945 GTK_SIGNAL_FUNC (statusbar_popped),
948 button = gtk_widget_new (gtk_button_get_type (),
949 "label", "push something",
952 "signal::clicked", statusbar_push, statusbar,
955 button = gtk_widget_new (gtk_button_get_type (),
959 "signal_after::clicked", statusbar_pop, statusbar,
962 button = gtk_widget_new (gtk_button_get_type (),
966 "signal_after::clicked", statusbar_steal, statusbar,
969 button = gtk_widget_new (gtk_button_get_type (),
970 "label", "dump stack",
973 "object_signal::clicked", statusbar_dump_stack, statusbar,
976 button = gtk_widget_new (gtk_button_get_type (),
977 "label", "test contexts",
980 "object_signal_after::clicked", statusbar_contexts, statusbar,
983 separator = gtk_hseparator_new ();
984 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
986 box2 = gtk_vbox_new (FALSE, 10);
987 gtk_container_border_width (GTK_CONTAINER (box2), 10);
988 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
990 button = gtk_button_new_with_label ("close");
991 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
992 GTK_SIGNAL_FUNC(gtk_widget_destroy),
993 GTK_OBJECT (window));
994 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
995 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
996 gtk_widget_grab_default (button);
999 if (!GTK_WIDGET_VISIBLE (window))
1000 gtk_widget_show_all (window);
1002 gtk_widget_destroy (window);
1010 cb_tree_destroy_event(GtkWidget* w)
1012 sTreeButtons* tree_buttons;
1014 /* free buttons structure associate at this tree */
1015 tree_buttons = gtk_object_get_user_data(GTK_OBJECT(w));
1020 cb_add_new_item(GtkWidget* w, GtkTree* tree)
1022 sTreeButtons* tree_buttons;
1023 GList* selected_list;
1024 GtkWidget* selected_item;
1026 GtkWidget* item_new;
1029 tree_buttons = gtk_object_get_user_data(GTK_OBJECT(tree));
1031 selected_list = GTK_TREE_SELECTION(tree);
1033 if(selected_list == NULL)
1035 /* there is no item in tree */
1036 subtree = GTK_WIDGET(tree);
1040 /* list can have only one element */
1041 selected_item = GTK_WIDGET(selected_list->data);
1043 subtree = GTK_TREE_ITEM_SUBTREE(selected_item);
1047 /* current selected item have not subtree ... create it */
1048 subtree = gtk_tree_new();
1049 gtk_tree_item_set_subtree(GTK_TREE_ITEM(selected_item),
1054 /* at this point, we know which subtree will be used to add new item */
1055 /* create a new item */
1056 sprintf(buffer, "item add %d", tree_buttons->nb_item_add);
1057 item_new = gtk_tree_item_new_with_label(buffer);
1058 gtk_tree_append(GTK_TREE(subtree), item_new);
1059 gtk_widget_show(item_new);
1061 tree_buttons->nb_item_add++;
1065 cb_remove_item(GtkWidget*w, GtkTree* tree)
1067 GList* selected_list;
1070 selected_list = GTK_TREE_SELECTION(tree);
1074 while (selected_list)
1076 clear_list = g_list_prepend (clear_list, selected_list->data);
1077 selected_list = selected_list->next;
1080 clear_list = g_list_reverse (clear_list);
1081 gtk_tree_remove_items(tree, clear_list);
1083 g_list_free (clear_list);
1087 cb_remove_subtree(GtkWidget*w, GtkTree* tree)
1089 GList* selected_list;
1092 selected_list = GTK_TREE_SELECTION(tree);
1096 item = GTK_TREE_ITEM (selected_list->data);
1098 gtk_tree_item_remove_subtree (item);
1103 cb_tree_changed(GtkTree* tree)
1105 sTreeButtons* tree_buttons;
1106 GList* selected_list;
1109 tree_buttons = gtk_object_get_user_data(GTK_OBJECT(tree));
1111 selected_list = GTK_TREE_SELECTION(tree);
1112 nb_selected = g_list_length(selected_list);
1114 if(nb_selected == 0)
1116 if(tree->children == NULL)
1117 gtk_widget_set_sensitive(tree_buttons->add_button, TRUE);
1119 gtk_widget_set_sensitive(tree_buttons->add_button, FALSE);
1120 gtk_widget_set_sensitive(tree_buttons->remove_button, FALSE);
1121 gtk_widget_set_sensitive(tree_buttons->subtree_button, FALSE);
1125 gtk_widget_set_sensitive(tree_buttons->remove_button, TRUE);
1126 gtk_widget_set_sensitive(tree_buttons->add_button, (nb_selected == 1));
1127 gtk_widget_set_sensitive(tree_buttons->subtree_button, (nb_selected == 1));
1132 create_subtree(GtkWidget* item, guint level, guint nb_item_max, guint recursion_level_max)
1134 GtkWidget* item_subtree;
1135 GtkWidget* item_new;
1140 if(level == recursion_level_max) return;
1144 /* query with no root item */
1146 item_subtree = item;
1151 /* query with no root item */
1152 /* create subtree and associate it with current item */
1153 item_subtree = gtk_tree_new();
1157 for(nb_item = 0; nb_item < nb_item_max; nb_item++)
1159 sprintf(buffer, "item %d-%d", level, nb_item);
1160 item_new = gtk_tree_item_new_with_label(buffer);
1161 gtk_tree_append(GTK_TREE(item_subtree), item_new);
1162 create_subtree(item_new, level+1, nb_item_max, recursion_level_max);
1163 gtk_widget_show(item_new);
1167 gtk_tree_item_set_subtree(GTK_TREE_ITEM(item), item_subtree);
1171 create_tree_sample(guint selection_mode,
1172 guint draw_line, guint view_line, guint no_root_item,
1173 guint nb_item_max, guint recursion_level_max)
1178 GtkWidget* separator;
1180 GtkWidget* scrolled_win;
1181 GtkWidget* root_tree;
1182 GtkWidget* root_item;
1183 sTreeButtons* tree_buttons;
1185 /* create tree buttons struct */
1186 if((tree_buttons = g_malloc(sizeof(sTreeButtons))) == NULL)
1188 g_error("can't allocate memory for tree structure !\n");
1191 tree_buttons->nb_item_add = 0;
1193 /* create top level window */
1194 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
1195 gtk_window_set_title(GTK_WINDOW(window), "Tree Sample");
1196 gtk_signal_connect(GTK_OBJECT(window), "destroy",
1197 (GtkSignalFunc) cb_tree_destroy_event, NULL);
1198 gtk_object_set_user_data(GTK_OBJECT(window), tree_buttons);
1200 box1 = gtk_vbox_new(FALSE, 0);
1201 gtk_container_add(GTK_CONTAINER(window), box1);
1202 gtk_widget_show(box1);
1204 /* create tree box */
1205 box2 = gtk_vbox_new(FALSE, 0);
1206 gtk_box_pack_start(GTK_BOX(box1), box2, TRUE, TRUE, 0);
1207 gtk_container_border_width(GTK_CONTAINER(box2), 5);
1208 gtk_widget_show(box2);
1210 /* create scrolled window */
1211 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
1212 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
1213 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1214 gtk_box_pack_start (GTK_BOX (box2), scrolled_win, TRUE, TRUE, 0);
1215 gtk_widget_set_usize (scrolled_win, 200, 200);
1216 gtk_widget_show (scrolled_win);
1218 /* create root tree widget */
1219 root_tree = gtk_tree_new();
1220 gtk_signal_connect(GTK_OBJECT(root_tree), "selection_changed",
1221 (GtkSignalFunc)cb_tree_changed,
1223 gtk_object_set_user_data(GTK_OBJECT(root_tree), tree_buttons);
1224 gtk_container_add(GTK_CONTAINER(scrolled_win), root_tree);
1225 gtk_tree_set_selection_mode(GTK_TREE(root_tree), selection_mode);
1226 gtk_tree_set_view_lines(GTK_TREE(root_tree), draw_line);
1227 gtk_tree_set_view_mode(GTK_TREE(root_tree), !view_line);
1228 gtk_widget_show(root_tree);
1232 /* set root tree to subtree function with root item variable */
1233 root_item = GTK_WIDGET(root_tree);
1237 /* create root tree item widget */
1238 root_item = gtk_tree_item_new_with_label("root item");
1239 gtk_tree_append(GTK_TREE(root_tree), root_item);
1240 gtk_widget_show(root_item);
1242 create_subtree(root_item, -no_root_item, nb_item_max, recursion_level_max);
1244 box2 = gtk_vbox_new(FALSE, 0);
1245 gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, FALSE, 0);
1246 gtk_container_border_width(GTK_CONTAINER(box2), 5);
1247 gtk_widget_show(box2);
1249 button = gtk_button_new_with_label("Add Item");
1250 gtk_widget_set_sensitive(button, FALSE);
1251 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1252 (GtkSignalFunc) cb_add_new_item,
1253 (gpointer)root_tree);
1254 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1255 gtk_widget_show(button);
1256 tree_buttons->add_button = button;
1258 button = gtk_button_new_with_label("Remove Item(s)");
1259 gtk_widget_set_sensitive(button, FALSE);
1260 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1261 (GtkSignalFunc) cb_remove_item,
1262 (gpointer)root_tree);
1263 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1264 gtk_widget_show(button);
1265 tree_buttons->remove_button = button;
1267 button = gtk_button_new_with_label("Remove Subtree");
1268 gtk_widget_set_sensitive(button, FALSE);
1269 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1270 (GtkSignalFunc) cb_remove_subtree,
1271 (gpointer)root_tree);
1272 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1273 gtk_widget_show(button);
1274 tree_buttons->subtree_button = button;
1276 /* create separator */
1277 separator = gtk_hseparator_new();
1278 gtk_box_pack_start(GTK_BOX(box1), separator, FALSE, FALSE, 0);
1279 gtk_widget_show(separator);
1281 /* create button box */
1282 box2 = gtk_vbox_new(FALSE, 0);
1283 gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, FALSE, 0);
1284 gtk_container_border_width(GTK_CONTAINER(box2), 5);
1285 gtk_widget_show(box2);
1287 button = gtk_button_new_with_label("Close");
1288 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1289 gtk_signal_connect_object(GTK_OBJECT (button), "clicked",
1290 (GtkSignalFunc) gtk_widget_destroy,
1291 GTK_OBJECT(window));
1292 gtk_widget_show(button);
1294 gtk_widget_show(window);
1298 cb_create_tree(GtkWidget* w)
1300 guint selection_mode = GTK_SELECTION_SINGLE;
1305 guint recursion_level;
1307 /* get selection mode choice */
1308 if(GTK_TOGGLE_BUTTON(sTreeSampleSelection.single_button)->active)
1309 selection_mode = GTK_SELECTION_SINGLE;
1311 if(GTK_TOGGLE_BUTTON(sTreeSampleSelection.browse_button)->active)
1312 selection_mode = GTK_SELECTION_BROWSE;
1314 selection_mode = GTK_SELECTION_MULTIPLE;
1316 /* get options choice */
1317 draw_line = GTK_TOGGLE_BUTTON(sTreeSampleSelection.draw_line_button)->active;
1318 view_line = GTK_TOGGLE_BUTTON(sTreeSampleSelection.view_line_button)->active;
1319 no_root_item = GTK_TOGGLE_BUTTON(sTreeSampleSelection.no_root_item_button)->active;
1322 nb_item = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(sTreeSampleSelection.nb_item_spinner));
1323 recursion_level = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(sTreeSampleSelection.recursion_spinner));
1325 if (pow (nb_item, recursion_level) > 10000)
1327 g_print ("%g total items? That will take a very long time. Try less\n",
1328 pow (nb_item, recursion_level));
1332 create_tree_sample(selection_mode, draw_line, view_line, no_root_item, nb_item, recursion_level);
1336 create_tree_mode_window(void)
1338 static GtkWidget* window;
1346 GtkWidget* separator;
1353 /* create toplevel window */
1354 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
1355 gtk_window_set_title(GTK_WINDOW(window), "Set Tree Parameters");
1356 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1357 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
1359 box1 = gtk_vbox_new(FALSE, 0);
1360 gtk_container_add(GTK_CONTAINER(window), box1);
1362 /* create upper box - selection box */
1363 box2 = gtk_vbox_new(FALSE, 5);
1364 gtk_box_pack_start(GTK_BOX(box1), box2, TRUE, TRUE, 0);
1365 gtk_container_border_width(GTK_CONTAINER(box2), 5);
1367 box3 = gtk_hbox_new(FALSE, 5);
1368 gtk_box_pack_start(GTK_BOX(box2), box3, TRUE, TRUE, 0);
1370 /* create selection mode frame */
1371 frame = gtk_frame_new("Selection Mode");
1372 gtk_box_pack_start(GTK_BOX(box3), frame, TRUE, TRUE, 0);
1374 box4 = gtk_vbox_new(FALSE, 0);
1375 gtk_container_add(GTK_CONTAINER(frame), box4);
1376 gtk_container_border_width(GTK_CONTAINER(box4), 5);
1378 /* create radio button */
1379 button = gtk_radio_button_new_with_label(NULL, "SINGLE");
1380 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1381 sTreeSampleSelection.single_button = button;
1383 button = gtk_radio_button_new_with_label(gtk_radio_button_group (GTK_RADIO_BUTTON (button)),
1385 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1386 sTreeSampleSelection.browse_button = button;
1388 button = gtk_radio_button_new_with_label(gtk_radio_button_group (GTK_RADIO_BUTTON (button)),
1390 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1391 sTreeSampleSelection.multiple_button = button;
1393 sTreeSampleSelection.selection_mode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (button));
1395 /* create option mode frame */
1396 frame = gtk_frame_new("Options");
1397 gtk_box_pack_start(GTK_BOX(box3), frame, TRUE, TRUE, 0);
1399 box4 = gtk_vbox_new(FALSE, 0);
1400 gtk_container_add(GTK_CONTAINER(frame), box4);
1401 gtk_container_border_width(GTK_CONTAINER(box4), 5);
1403 /* create check button */
1404 button = gtk_check_button_new_with_label("Draw line");
1405 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1406 gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(button), TRUE);
1407 sTreeSampleSelection.draw_line_button = button;
1409 button = gtk_check_button_new_with_label("View Line mode");
1410 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1411 gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(button), TRUE);
1412 sTreeSampleSelection.view_line_button = button;
1414 button = gtk_check_button_new_with_label("Without Root item");
1415 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1416 sTreeSampleSelection.no_root_item_button = button;
1418 /* create recursion parameter */
1419 frame = gtk_frame_new("Size Parameters");
1420 gtk_box_pack_start(GTK_BOX(box2), frame, TRUE, TRUE, 0);
1422 box4 = gtk_hbox_new(FALSE, 5);
1423 gtk_container_add(GTK_CONTAINER(frame), box4);
1424 gtk_container_border_width(GTK_CONTAINER(box4), 5);
1426 /* create number of item spin button */
1427 box5 = gtk_hbox_new(FALSE, 5);
1428 gtk_box_pack_start(GTK_BOX(box4), box5, FALSE, FALSE, 0);
1430 label = gtk_label_new("Number of items : ");
1431 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
1432 gtk_box_pack_start (GTK_BOX (box5), label, FALSE, TRUE, 0);
1434 adj = (GtkAdjustment *) gtk_adjustment_new ((gfloat)DEFAULT_NUMBER_OF_ITEM, 1.0, 255.0, 1.0,
1436 spinner = gtk_spin_button_new (adj, 0, 0);
1437 gtk_box_pack_start (GTK_BOX (box5), spinner, FALSE, TRUE, 0);
1438 sTreeSampleSelection.nb_item_spinner = spinner;
1440 /* create recursion level spin button */
1441 box5 = gtk_hbox_new(FALSE, 5);
1442 gtk_box_pack_start(GTK_BOX(box4), box5, FALSE, FALSE, 0);
1444 label = gtk_label_new("Depth : ");
1445 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
1446 gtk_box_pack_start (GTK_BOX (box5), label, FALSE, TRUE, 0);
1448 adj = (GtkAdjustment *) gtk_adjustment_new ((gfloat)DEFAULT_RECURSION_LEVEL, 0.0, 255.0, 1.0,
1450 spinner = gtk_spin_button_new (adj, 0, 0);
1451 gtk_box_pack_start (GTK_BOX (box5), spinner, FALSE, TRUE, 0);
1452 sTreeSampleSelection.recursion_spinner = spinner;
1454 /* create horizontal separator */
1455 separator = gtk_hseparator_new();
1456 gtk_box_pack_start(GTK_BOX(box1), separator, FALSE, FALSE, 0);
1458 /* create bottom button box */
1459 box2 = gtk_hbox_new(TRUE, 10);
1460 gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, FALSE, 0);
1461 gtk_container_border_width(GTK_CONTAINER(box2), 5);
1463 button = gtk_button_new_with_label("Create Tree");
1464 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1465 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1466 (GtkSignalFunc) cb_create_tree, NULL);
1468 button = gtk_button_new_with_label("Close");
1469 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1470 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
1471 GTK_SIGNAL_FUNC(gtk_widget_destroy),
1472 GTK_OBJECT (window));
1474 if (!GTK_WIDGET_VISIBLE (window))
1475 gtk_widget_show_all (window);
1477 gtk_widget_destroy (window);
1485 handle_box_child_signal (GtkHandleBox *hb,
1487 const gchar *action)
1489 printf ("%s: child <%s> %sed\n",
1490 gtk_type_name (GTK_OBJECT_TYPE (hb)),
1491 gtk_type_name (GTK_OBJECT_TYPE (child)),
1496 create_handle_box (void)
1498 static GtkWidget* window = NULL;
1499 GtkWidget *handle_box;
1500 GtkWidget *handle_box2;
1505 GtkWidget *separator;
1509 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1510 gtk_window_set_title (GTK_WINDOW (window),
1512 gtk_window_set_policy (GTK_WINDOW (window),
1517 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1518 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
1521 gtk_container_border_width (GTK_CONTAINER (window), 20);
1523 vbox = gtk_vbox_new (FALSE, 0);
1524 gtk_container_add (GTK_CONTAINER (window), vbox);
1525 gtk_widget_show (vbox);
1527 label = gtk_label_new ("Above");
1528 gtk_container_add (GTK_CONTAINER (vbox), label);
1529 gtk_widget_show (label);
1531 separator = gtk_hseparator_new ();
1532 gtk_container_add (GTK_CONTAINER (vbox), separator);
1533 gtk_widget_show (separator);
1535 hbox = gtk_hbox_new (FALSE, 10);
1536 gtk_container_add (GTK_CONTAINER (vbox), hbox);
1537 gtk_widget_show (hbox);
1539 separator = gtk_hseparator_new ();
1540 gtk_container_add (GTK_CONTAINER (vbox), separator);
1541 gtk_widget_show (separator);
1543 label = gtk_label_new ("Below");
1544 gtk_container_add (GTK_CONTAINER (vbox), label);
1545 gtk_widget_show (label);
1547 handle_box = gtk_handle_box_new ();
1548 gtk_container_add (GTK_CONTAINER (hbox), handle_box);
1549 gtk_signal_connect (GTK_OBJECT (handle_box),
1551 GTK_SIGNAL_FUNC (handle_box_child_signal),
1553 gtk_signal_connect (GTK_OBJECT (handle_box),
1555 GTK_SIGNAL_FUNC (handle_box_child_signal),
1557 gtk_widget_show (handle_box);
1559 toolbar = make_toolbar (window);
1560 gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NORMAL);
1561 gtk_container_add (GTK_CONTAINER (handle_box), toolbar);
1562 gtk_widget_show (toolbar);
1564 handle_box = gtk_handle_box_new ();
1565 gtk_container_add (GTK_CONTAINER (hbox), handle_box);
1566 gtk_signal_connect (GTK_OBJECT (handle_box),
1568 GTK_SIGNAL_FUNC (handle_box_child_signal),
1570 gtk_signal_connect (GTK_OBJECT (handle_box),
1572 GTK_SIGNAL_FUNC (handle_box_child_signal),
1574 gtk_widget_show (handle_box);
1576 handle_box2 = gtk_handle_box_new ();
1577 gtk_container_add (GTK_CONTAINER (handle_box), handle_box2);
1578 gtk_signal_connect (GTK_OBJECT (handle_box2),
1580 GTK_SIGNAL_FUNC (handle_box_child_signal),
1582 gtk_signal_connect (GTK_OBJECT (handle_box2),
1584 GTK_SIGNAL_FUNC (handle_box_child_signal),
1586 gtk_widget_show (handle_box2);
1588 label = gtk_label_new ("Fooo!");
1589 gtk_container_add (GTK_CONTAINER (handle_box2), label);
1590 gtk_widget_show (label);
1593 if (!GTK_WIDGET_VISIBLE (window))
1594 gtk_widget_show (window);
1596 gtk_widget_destroy (window);
1604 reparent_label (GtkWidget *widget,
1605 GtkWidget *new_parent)
1609 label = gtk_object_get_user_data (GTK_OBJECT (widget));
1611 gtk_widget_reparent (label, new_parent);
1615 set_parent_signal (GtkWidget *child,
1616 GtkWidget *old_parent,
1619 g_print ("set_parent for \"%s\": new parent: \"%s\", old parent: \"%s\", data: %d\n",
1620 gtk_type_name (GTK_OBJECT_TYPE (child)),
1621 child->parent ? gtk_type_name (GTK_OBJECT_TYPE (child->parent)) : "NULL",
1622 old_parent ? gtk_type_name (GTK_OBJECT_TYPE (old_parent)) : "NULL",
1623 GPOINTER_TO_INT (func_data));
1627 create_reparent (void)
1629 static GtkWidget *window = NULL;
1636 GtkWidget *separator;
1640 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1642 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1643 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
1646 gtk_window_set_title (GTK_WINDOW (window), "reparent");
1647 gtk_container_border_width (GTK_CONTAINER (window), 0);
1649 box1 = gtk_vbox_new (FALSE, 0);
1650 gtk_container_add (GTK_CONTAINER (window), box1);
1652 box2 = gtk_hbox_new (FALSE, 5);
1653 gtk_container_border_width (GTK_CONTAINER (box2), 10);
1654 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
1656 label = gtk_label_new ("Hello World");
1658 frame = gtk_frame_new ("Frame 1");
1659 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
1661 box3 = gtk_vbox_new (FALSE, 5);
1662 gtk_container_border_width (GTK_CONTAINER (box3), 5);
1663 gtk_container_add (GTK_CONTAINER (frame), box3);
1665 button = gtk_button_new_with_label ("switch");
1666 gtk_signal_connect (GTK_OBJECT (button), "clicked",
1667 GTK_SIGNAL_FUNC(reparent_label),
1669 gtk_object_set_user_data (GTK_OBJECT (button), label);
1670 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
1672 gtk_box_pack_start (GTK_BOX (box3), label, FALSE, TRUE, 0);
1673 gtk_signal_connect (GTK_OBJECT (label),
1675 GTK_SIGNAL_FUNC (set_parent_signal),
1676 GINT_TO_POINTER (42));
1678 frame = gtk_frame_new ("Frame 2");
1679 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
1681 box3 = gtk_vbox_new (FALSE, 5);
1682 gtk_container_border_width (GTK_CONTAINER (box3), 5);
1683 gtk_container_add (GTK_CONTAINER (frame), box3);
1685 button = gtk_button_new_with_label ("switch");
1686 gtk_signal_connect (GTK_OBJECT (button), "clicked",
1687 GTK_SIGNAL_FUNC(reparent_label),
1689 gtk_object_set_user_data (GTK_OBJECT (button), label);
1690 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
1692 separator = gtk_hseparator_new ();
1693 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
1695 box2 = gtk_vbox_new (FALSE, 10);
1696 gtk_container_border_width (GTK_CONTAINER (box2), 10);
1697 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
1699 button = gtk_button_new_with_label ("close");
1700 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
1701 GTK_SIGNAL_FUNC(gtk_widget_destroy),
1702 GTK_OBJECT (window));
1703 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
1704 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
1705 gtk_widget_grab_default (button);
1708 if (!GTK_WIDGET_VISIBLE (window))
1709 gtk_widget_show_all (window);
1711 gtk_widget_destroy (window);
1719 create_pixmap (void)
1721 static GtkWidget *window = NULL;
1727 GtkWidget *separator;
1728 GtkWidget *pixmapwid;
1735 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1737 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1738 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
1741 gtk_window_set_title (GTK_WINDOW (window), "GtkPixmap");
1742 gtk_container_border_width (GTK_CONTAINER (window), 0);
1743 gtk_widget_realize(window);
1745 box1 = gtk_vbox_new (FALSE, 0);
1746 gtk_container_add (GTK_CONTAINER (window), box1);
1748 box2 = gtk_vbox_new (FALSE, 10);
1749 gtk_container_border_width (GTK_CONTAINER (box2), 10);
1750 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
1752 button = gtk_button_new ();
1753 gtk_box_pack_start (GTK_BOX (box2), button, FALSE, FALSE, 0);
1755 style = gtk_widget_get_style(button);
1757 pixmap = gdk_pixmap_create_from_xpm (window->window, &mask,
1758 &style->bg[GTK_STATE_NORMAL],
1760 pixmapwid = gtk_pixmap_new (pixmap, mask);
1762 label = gtk_label_new ("Pixmap\ntest");
1763 box3 = gtk_hbox_new (FALSE, 0);
1764 gtk_container_border_width (GTK_CONTAINER (box3), 2);
1765 gtk_container_add (GTK_CONTAINER (box3), pixmapwid);
1766 gtk_container_add (GTK_CONTAINER (box3), label);
1767 gtk_container_add (GTK_CONTAINER (button), box3);
1769 separator = gtk_hseparator_new ();
1770 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
1772 box2 = gtk_vbox_new (FALSE, 10);
1773 gtk_container_border_width (GTK_CONTAINER (box2), 10);
1774 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
1776 button = gtk_button_new_with_label ("close");
1777 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
1778 GTK_SIGNAL_FUNC(gtk_widget_destroy),
1779 GTK_OBJECT (window));
1780 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
1781 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
1782 gtk_widget_grab_default (button);
1785 if (!GTK_WIDGET_VISIBLE (window))
1786 gtk_widget_show_all (window);
1788 gtk_widget_destroy (window);
1792 tips_query_widget_entered (GtkTipsQuery *tips_query,
1794 const gchar *tip_text,
1795 const gchar *tip_private,
1798 if (GTK_TOGGLE_BUTTON (toggle)->active)
1800 gtk_label_set (GTK_LABEL (tips_query), tip_text ? "There is a Tip!" : "There is no Tip!");
1801 /* don't let GtkTipsQuery reset it's label */
1802 gtk_signal_emit_stop_by_name (GTK_OBJECT (tips_query), "widget_entered");
1807 tips_query_widget_selected (GtkWidget *tips_query,
1809 const gchar *tip_text,
1810 const gchar *tip_private,
1811 GdkEventButton *event,
1815 g_print ("Help \"%s\" requested for <%s>\n",
1816 tip_private ? tip_private : "None",
1817 gtk_type_name (GTK_OBJECT_TYPE (widget)));
1822 create_tooltips (void)
1824 static GtkWidget *window = NULL;
1831 GtkWidget *tips_query;
1832 GtkWidget *separator;
1833 GtkTooltips *tooltips;
1838 gtk_widget_new (gtk_window_get_type (),
1839 "GtkWindow::type", GTK_WINDOW_TOPLEVEL,
1840 "GtkContainer::border_width", 0,
1841 "GtkWindow::title", "Tooltips",
1842 "GtkWindow::allow_shrink", TRUE,
1843 "GtkWindow::allow_grow", FALSE,
1844 "GtkWindow::auto_shrink", TRUE,
1845 "GtkWidget::width", 200,
1848 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1849 GTK_SIGNAL_FUNC (destroy_tooltips),
1852 tooltips=gtk_tooltips_new();
1853 gtk_object_set_data (GTK_OBJECT (window), "tooltips", tooltips);
1855 box1 = gtk_vbox_new (FALSE, 0);
1856 gtk_container_add (GTK_CONTAINER (window), box1);
1858 box2 = gtk_vbox_new (FALSE, 10);
1859 gtk_container_border_width (GTK_CONTAINER (box2), 10);
1860 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
1862 button = gtk_toggle_button_new_with_label ("button1");
1863 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
1865 gtk_tooltips_set_tip (tooltips,button,"This is button 1", "ContextHelp/buttons/1");
1867 button = gtk_toggle_button_new_with_label ("button2");
1868 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
1870 gtk_tooltips_set_tip (tooltips,
1872 "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.",
1873 "ContextHelp/buttons/2_long");
1875 toggle = gtk_toggle_button_new_with_label ("Override TipsQuery Label");
1876 gtk_box_pack_start (GTK_BOX (box2), toggle, TRUE, TRUE, 0);
1878 gtk_tooltips_set_tip (tooltips, toggle, "Toggle TipsQuery view.", "Hi msw! ;)");
1881 gtk_widget_new (gtk_vbox_get_type (),
1882 "GtkBox::homogeneous", FALSE,
1883 "GtkBox::spacing", 5,
1884 "GtkContainer::border_width", 5,
1885 "GtkWidget::visible", TRUE,
1888 tips_query = gtk_tips_query_new ();
1891 gtk_widget_new (gtk_button_get_type (),
1892 "GtkButton::label", "[?]",
1893 "GtkWidget::visible", TRUE,
1894 "GtkWidget::parent", box3,
1895 "GtkObject::object_signal::clicked", gtk_tips_query_start_query, tips_query,
1897 gtk_box_set_child_packing (GTK_BOX (box3), button, FALSE, FALSE, 0, GTK_PACK_START);
1898 gtk_tooltips_set_tip (tooltips,
1900 "Start the Tooltips Inspector",
1901 "ContextHelp/buttons/?");
1904 gtk_widget_set (tips_query,
1905 "GtkWidget::visible", TRUE,
1906 "GtkWidget::parent", box3,
1907 "GtkTipsQuery::caller", button,
1908 "GtkObject::signal::widget_entered", tips_query_widget_entered, toggle,
1909 "GtkObject::signal::widget_selected", tips_query_widget_selected, NULL,
1913 gtk_widget_new (gtk_frame_get_type (),
1914 "GtkFrame::label", "ToolTips Inspector",
1915 "GtkFrame::label_xalign", (double) 0.5,
1916 "GtkContainer::border_width", 0,
1917 "GtkWidget::visible", TRUE,
1918 "GtkWidget::parent", box2,
1919 "GtkContainer::child", box3,
1921 gtk_box_set_child_packing (GTK_BOX (box2), frame, TRUE, TRUE, 10, GTK_PACK_START);
1923 separator = gtk_hseparator_new ();
1924 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
1926 box2 = gtk_vbox_new (FALSE, 10);
1927 gtk_container_border_width (GTK_CONTAINER (box2), 10);
1928 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
1930 button = gtk_button_new_with_label ("close");
1931 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
1932 GTK_SIGNAL_FUNC(gtk_widget_destroy),
1933 GTK_OBJECT (window));
1934 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
1935 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
1936 gtk_widget_grab_default (button);
1938 gtk_tooltips_set_tip (tooltips, button, "Push this button to close window", "ContextHelp/buttons/Close");
1941 if (!GTK_WIDGET_VISIBLE (window))
1942 gtk_widget_show_all (window);
1944 gtk_widget_destroy (window);
1952 create_menu (gint depth, gboolean tearoff)
1955 GtkWidget *menuitem;
1963 menu = gtk_menu_new ();
1968 menuitem = gtk_tearoff_menu_item_new ();
1969 gtk_menu_append (GTK_MENU (menu), menuitem);
1970 gtk_widget_show (menuitem);
1973 for (i = 0, j = 1; i < 5; i++, j++)
1975 sprintf (buf, "item %2d - %d", depth, j);
1976 menuitem = gtk_radio_menu_item_new_with_label (group, buf);
1977 group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menuitem));
1979 gtk_check_menu_item_set_show_toggle (GTK_CHECK_MENU_ITEM (menuitem), TRUE);
1980 gtk_menu_append (GTK_MENU (menu), menuitem);
1981 gtk_widget_show (menuitem);
1983 gtk_widget_set_sensitive (menuitem, FALSE);
1985 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (depth - 1, TRUE));
1994 static GtkWidget *window = NULL;
1998 GtkWidget *optionmenu;
1999 GtkWidget *separator;
2005 GtkWidget *menuitem;
2006 GtkAccelGroup *accel_group;
2008 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2010 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2011 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2013 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
2014 GTK_SIGNAL_FUNC (gtk_true),
2017 accel_group = gtk_accel_group_new ();
2018 gtk_accel_group_attach (accel_group, GTK_OBJECT (window));
2020 gtk_window_set_title (GTK_WINDOW (window), "menus");
2021 gtk_container_border_width (GTK_CONTAINER (window), 0);
2024 box1 = gtk_vbox_new (FALSE, 0);
2025 gtk_container_add (GTK_CONTAINER (window), box1);
2026 gtk_widget_show (box1);
2028 menubar = gtk_menu_bar_new ();
2029 gtk_box_pack_start (GTK_BOX (box1), menubar, FALSE, TRUE, 0);
2030 gtk_widget_show (menubar);
2032 menu = create_menu (2, TRUE);
2034 menuitem = gtk_menu_item_new_with_label ("test\nline2");
2035 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), menu);
2036 gtk_menu_bar_append (GTK_MENU_BAR (menubar), menuitem);
2037 gtk_widget_show (menuitem);
2039 menuitem = gtk_menu_item_new_with_label ("foo");
2040 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (3, TRUE));
2041 gtk_menu_bar_append (GTK_MENU_BAR (menubar), menuitem);
2042 gtk_widget_show (menuitem);
2044 menuitem = gtk_menu_item_new_with_label ("bar");
2045 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (4, TRUE));
2046 gtk_menu_item_right_justify (GTK_MENU_ITEM (menuitem));
2047 gtk_menu_bar_append (GTK_MENU_BAR (menubar), menuitem);
2048 gtk_widget_show (menuitem);
2050 box2 = gtk_vbox_new (FALSE, 10);
2051 gtk_container_border_width (GTK_CONTAINER (box2), 10);
2052 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2053 gtk_widget_show (box2);
2055 menu = create_menu (1, FALSE);
2056 gtk_menu_set_accel_group (GTK_MENU (menu), accel_group);
2058 menuitem = gtk_check_menu_item_new_with_label ("Accelerate Me");
2059 gtk_menu_append (GTK_MENU (menu), menuitem);
2060 gtk_widget_show (menuitem);
2061 gtk_widget_add_accelerator (menuitem,
2066 GTK_ACCEL_VISIBLE | GTK_ACCEL_SIGNAL_VISIBLE);
2067 menuitem = gtk_check_menu_item_new_with_label ("Accelerator Locked");
2068 gtk_menu_append (GTK_MENU (menu), menuitem);
2069 gtk_widget_show (menuitem);
2070 gtk_widget_add_accelerator (menuitem,
2075 GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
2076 menuitem = gtk_check_menu_item_new_with_label ("Accelerators Frozen");
2077 gtk_menu_append (GTK_MENU (menu), menuitem);
2078 gtk_widget_show (menuitem);
2079 gtk_widget_add_accelerator (menuitem,
2085 gtk_widget_add_accelerator (menuitem,
2091 gtk_widget_freeze_accelerators (menuitem);
2093 optionmenu = gtk_option_menu_new ();
2094 gtk_option_menu_set_menu (GTK_OPTION_MENU (optionmenu), menu);
2095 gtk_option_menu_set_history (GTK_OPTION_MENU (optionmenu), 3);
2096 gtk_box_pack_start (GTK_BOX (box2), optionmenu, TRUE, TRUE, 0);
2097 gtk_widget_show (optionmenu);
2099 separator = gtk_hseparator_new ();
2100 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2101 gtk_widget_show (separator);
2103 box2 = gtk_vbox_new (FALSE, 10);
2104 gtk_container_border_width (GTK_CONTAINER (box2), 10);
2105 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2106 gtk_widget_show (box2);
2108 button = gtk_button_new_with_label ("close");
2109 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2110 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2111 GTK_OBJECT (window));
2112 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2113 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2114 gtk_widget_grab_default (button);
2115 gtk_widget_show (button);
2118 if (!GTK_WIDGET_VISIBLE (window))
2119 gtk_widget_show (window);
2121 gtk_widget_destroy (window);
2124 static GtkItemFactoryEntry menu_items[] =
2126 { "/_File", NULL, NULL, 0, "<Branch>" },
2127 { "/File/tearoff1", NULL, NULL, 0, "<Tearoff>" },
2128 { "/File/_New", "<control>N", NULL, 0 },
2129 { "/File/_Open", "<control>O", NULL, 0 },
2130 { "/File/_Save", "<control>S", NULL, 0 },
2131 { "/File/Save _As...", NULL, NULL, 0 },
2132 { "/File/sep1", NULL, NULL, 0, "<Separator>" },
2133 { "/File/_Quit", "<control>Q", NULL, 0 },
2135 { "/_Preferences", NULL, NULL, 0, "<Branch>" },
2136 { "/_Preferences/_Color", NULL, NULL, 0, "<Branch>" },
2137 { "/_Preferences/Color/_Red", NULL, NULL, 0, "<RadioItem>" },
2138 { "/_Preferences/Color/_Green", NULL, NULL, 0, "<RadioItem>" },
2139 { "/_Preferences/Color/_Blue", NULL, NULL, 0, "<RadioItem>" },
2140 { "/_Preferences/_Shape", NULL, NULL, 0, "<Branch>" },
2141 { "/_Preferences/Shape/_Square", NULL, NULL, 0, "<RadioItem>" },
2142 { "/_Preferences/Shape/_Rectangle", NULL, NULL, 0, "<RadioItem>" },
2143 { "/_Preferences/Shape/_Oval", NULL, NULL, 0, "<RadioItem>" },
2145 { "/_Help", NULL, NULL, 0, "<LastBranch>" },
2146 { "/Help/_About", NULL, NULL, 0 },
2149 static int nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]);
2152 create_item_factory (void)
2154 static GtkWidget *window = NULL;
2160 GtkWidget *separator;
2163 GtkAccelGroup *accel_group;
2164 GtkItemFactory *item_factory;
2166 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2168 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2169 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2171 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
2172 GTK_SIGNAL_FUNC (gtk_true),
2175 accel_group = gtk_accel_group_new ();
2176 item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>", accel_group);
2177 gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL);
2178 gtk_accel_group_attach (accel_group, GTK_OBJECT (window));
2179 gtk_window_set_title (GTK_WINDOW (window), "Item Factory");
2180 gtk_container_border_width (GTK_CONTAINER (window), 0);
2182 box1 = gtk_vbox_new (FALSE, 0);
2183 gtk_container_add (GTK_CONTAINER (window), box1);
2185 gtk_box_pack_start (GTK_BOX (box1),
2186 gtk_item_factory_get_widget (item_factory, "<main>"),
2189 label = gtk_label_new ("Type\n<alt>\nto start");
2190 gtk_widget_set_usize (label, 200, 200);
2191 gtk_misc_set_alignment (GTK_MISC (label), 0.5, 0.5);
2192 gtk_box_pack_start (GTK_BOX (box1), label, TRUE, TRUE, 0);
2195 separator = gtk_hseparator_new ();
2196 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2199 box2 = gtk_vbox_new (FALSE, 10);
2200 gtk_container_border_width (GTK_CONTAINER (box2), 10);
2201 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2203 button = gtk_button_new_with_label ("close");
2204 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2205 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2206 GTK_OBJECT (window));
2207 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2208 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2209 gtk_widget_grab_default (button);
2211 gtk_widget_show_all (window);
2214 gtk_widget_destroy (window);
2222 scrolled_windows_remove (GtkWidget *widget, GtkWidget *scrollwin)
2224 static GtkWidget *parent = NULL;
2225 static GtkWidget *float_parent;
2229 gtk_widget_reparent (scrollwin, parent);
2230 gtk_widget_destroy (float_parent);
2231 float_parent = NULL;
2236 parent = widget->parent;
2237 float_parent = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2238 gtk_widget_reparent (scrollwin, float_parent);
2239 gtk_widget_show (float_parent);
2248 cmw_destroy_cb(GtkWidget *widget)
2250 /* This is needed to get out of gtk_main */
2257 cmw_color (GtkWidget *widget)
2261 csd=gtk_color_selection_dialog_new ("This is a modal color selection dialog");
2264 gtk_window_set_modal (GTK_WINDOW(csd),TRUE);
2266 gtk_signal_connect (GTK_OBJECT(csd), "destroy",
2267 GTK_SIGNAL_FUNC(cmw_destroy_cb),NULL);
2269 gtk_signal_connect_object (GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(csd)->ok_button),
2270 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
2272 gtk_signal_connect_object (GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(csd)->cancel_button),
2273 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
2276 /* wait until destroy calls gtk_main_quit */
2277 gtk_widget_show (csd);
2282 cmw_file (GtkWidget *widget)
2286 fs = gtk_file_selection_new("This is a modal file selection dialog");
2289 gtk_window_set_modal (GTK_WINDOW(fs),TRUE);
2291 gtk_signal_connect (GTK_OBJECT(fs), "destroy",
2292 GTK_SIGNAL_FUNC(cmw_destroy_cb),NULL);
2294 gtk_signal_connect_object (GTK_OBJECT(GTK_FILE_SELECTION(fs)->ok_button),
2295 "clicked",GTK_SIGNAL_FUNC(gtk_widget_destroy),
2297 gtk_signal_connect_object (GTK_OBJECT(GTK_FILE_SELECTION(fs)->cancel_button),
2298 "clicked",GTK_SIGNAL_FUNC(gtk_widget_destroy),
2301 /* wait until destroy calls gtk_main_quit */
2302 gtk_widget_show (fs);
2309 create_modal_window (void)
2311 GtkWidget *window = NULL;
2312 GtkWidget *box1,*box2;
2314 GtkWidget *btnColor,*btnFile,*btnClose;
2316 /* Create modal window (Here you can use any window descendent )*/
2317 window=gtk_window_new (GTK_WINDOW_TOPLEVEL);
2318 gtk_window_set_title (GTK_WINDOW(window),"This window is modal");
2320 /* Set window as modal */
2321 gtk_window_set_modal (GTK_WINDOW(window),TRUE);
2323 /* Create widgets */
2324 box1 = gtk_vbox_new (FALSE,5);
2325 frame1 = gtk_frame_new ("Standard dialogs in modal form");
2326 box2 = gtk_vbox_new (TRUE,5);
2327 btnColor = gtk_button_new_with_label ("Color");
2328 btnFile = gtk_button_new_with_label ("File Selection");
2329 btnClose = gtk_button_new_with_label ("Close");
2332 gtk_container_border_width (GTK_CONTAINER(box1),3);
2333 gtk_container_border_width (GTK_CONTAINER(box2),3);
2336 gtk_container_add (GTK_CONTAINER (window), box1);
2337 gtk_box_pack_start (GTK_BOX (box1), frame1, TRUE, TRUE, 4);
2338 gtk_container_add (GTK_CONTAINER (frame1), box2);
2339 gtk_box_pack_start (GTK_BOX (box2), btnColor, FALSE, FALSE, 4);
2340 gtk_box_pack_start (GTK_BOX (box2), btnFile, FALSE, FALSE, 4);
2341 gtk_box_pack_start (GTK_BOX (box1), gtk_hseparator_new (), FALSE, FALSE, 4);
2342 gtk_box_pack_start (GTK_BOX (box1), btnClose, FALSE, FALSE, 4);
2344 /* connect signals */
2345 gtk_signal_connect_object (GTK_OBJECT (btnClose), "clicked",
2346 GTK_SIGNAL_FUNC (gtk_widget_destroy),
2347 GTK_OBJECT (window));
2349 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2350 GTK_SIGNAL_FUNC (cmw_destroy_cb),NULL);
2352 gtk_signal_connect (GTK_OBJECT (btnColor), "clicked",
2353 GTK_SIGNAL_FUNC (cmw_color),NULL);
2354 gtk_signal_connect (GTK_OBJECT (btnFile), "clicked",
2355 GTK_SIGNAL_FUNC (cmw_file),NULL);
2358 gtk_widget_show_all (window);
2360 /* wait until dialog get destroyed */
2369 create_scrolled_windows (void)
2371 static GtkWidget *window;
2372 GtkWidget *scrolled_window;
2380 window = gtk_dialog_new ();
2382 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2383 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2386 gtk_window_set_title (GTK_WINDOW (window), "dialog");
2387 gtk_container_border_width (GTK_CONTAINER (window), 0);
2390 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
2391 gtk_container_border_width (GTK_CONTAINER (scrolled_window), 10);
2392 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
2393 GTK_POLICY_AUTOMATIC,
2394 GTK_POLICY_AUTOMATIC);
2395 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
2396 scrolled_window, TRUE, TRUE, 0);
2397 gtk_widget_show (scrolled_window);
2399 table = gtk_table_new (20, 20, FALSE);
2400 gtk_table_set_row_spacings (GTK_TABLE (table), 10);
2401 gtk_table_set_col_spacings (GTK_TABLE (table), 10);
2402 gtk_container_add (GTK_CONTAINER (scrolled_window), table);
2403 gtk_container_set_focus_hadjustment (GTK_CONTAINER (table),
2404 gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
2405 gtk_container_set_focus_vadjustment (GTK_CONTAINER (table),
2406 gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
2407 gtk_widget_show (table);
2409 for (i = 0; i < 20; i++)
2410 for (j = 0; j < 20; j++)
2412 sprintf (buffer, "button (%d,%d)\n", i, j);
2413 button = gtk_toggle_button_new_with_label (buffer);
2414 gtk_table_attach_defaults (GTK_TABLE (table), button,
2416 gtk_widget_show (button);
2420 button = gtk_button_new_with_label ("close");
2421 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2422 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2423 GTK_OBJECT (window));
2424 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2425 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
2426 button, TRUE, TRUE, 0);
2427 gtk_widget_grab_default (button);
2428 gtk_widget_show (button);
2430 button = gtk_button_new_with_label ("remove");
2431 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2432 GTK_SIGNAL_FUNC(scrolled_windows_remove),
2433 GTK_OBJECT (scrolled_window));
2434 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2435 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
2436 button, TRUE, TRUE, 0);
2437 gtk_widget_grab_default (button);
2438 gtk_widget_show (button);
2442 if (!GTK_WIDGET_VISIBLE (window))
2443 gtk_widget_show (window);
2445 gtk_widget_destroy (window);
2453 entry_toggle_editable (GtkWidget *checkbutton,
2456 gtk_entry_set_editable(GTK_ENTRY(entry),
2457 GTK_TOGGLE_BUTTON(checkbutton)->active);
2461 entry_toggle_sensitive (GtkWidget *checkbutton,
2464 gtk_widget_set_sensitive (entry, GTK_TOGGLE_BUTTON(checkbutton)->active);
2468 entry_toggle_visibility (GtkWidget *checkbutton,
2471 gtk_entry_set_visibility(GTK_ENTRY(entry),
2472 GTK_TOGGLE_BUTTON(checkbutton)->active);
2478 static GtkWidget *window = NULL;
2481 GtkWidget *editable_check;
2482 GtkWidget *sensitive_check;
2483 GtkWidget *entry, *cb;
2485 GtkWidget *separator;
2486 GList *cbitems = NULL;
2490 cbitems = g_list_append(cbitems, "item0");
2491 cbitems = g_list_append(cbitems, "item1 item1");
2492 cbitems = g_list_append(cbitems, "item2 item2 item2");
2493 cbitems = g_list_append(cbitems, "item3 item3 item3 item3");
2494 cbitems = g_list_append(cbitems, "item4 item4 item4 item4 item4");
2495 cbitems = g_list_append(cbitems, "item5 item5 item5 item5 item5 item5");
2496 cbitems = g_list_append(cbitems, "item6 item6 item6 item6 item6");
2497 cbitems = g_list_append(cbitems, "item7 item7 item7 item7");
2498 cbitems = g_list_append(cbitems, "item8 item8 item8");
2499 cbitems = g_list_append(cbitems, "item9 item9");
2501 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2503 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2504 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2507 gtk_window_set_title (GTK_WINDOW (window), "entry");
2508 gtk_container_border_width (GTK_CONTAINER (window), 0);
2511 box1 = gtk_vbox_new (FALSE, 0);
2512 gtk_container_add (GTK_CONTAINER (window), box1);
2513 gtk_widget_show (box1);
2516 box2 = gtk_vbox_new (FALSE, 10);
2517 gtk_container_border_width (GTK_CONTAINER (box2), 10);
2518 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2519 gtk_widget_show (box2);
2521 entry = gtk_entry_new ();
2522 gtk_entry_set_text (GTK_ENTRY (entry), "hello world");
2523 gtk_editable_select_region (GTK_EDITABLE (entry), 0, 5);
2524 gtk_box_pack_start (GTK_BOX (box2), entry, TRUE, TRUE, 0);
2525 gtk_widget_show (entry);
2527 cb = gtk_combo_new ();
2528 gtk_combo_set_popdown_strings (GTK_COMBO (cb), cbitems);
2529 gtk_entry_set_text (GTK_ENTRY (GTK_COMBO(cb)->entry), "hello world");
2530 gtk_editable_select_region (GTK_EDITABLE (GTK_COMBO(cb)->entry),
2532 gtk_box_pack_start (GTK_BOX (box2), cb, TRUE, TRUE, 0);
2533 gtk_widget_show (cb);
2535 editable_check = gtk_check_button_new_with_label("Editable");
2536 gtk_box_pack_start (GTK_BOX (box2), editable_check, FALSE, TRUE, 0);
2537 gtk_signal_connect (GTK_OBJECT(editable_check), "toggled",
2538 GTK_SIGNAL_FUNC(entry_toggle_editable), entry);
2539 gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(editable_check), TRUE);
2540 gtk_widget_show (editable_check);
2542 editable_check = gtk_check_button_new_with_label("Visible");
2543 gtk_box_pack_start (GTK_BOX (box2), editable_check, FALSE, TRUE, 0);
2544 gtk_signal_connect (GTK_OBJECT(editable_check), "toggled",
2545 GTK_SIGNAL_FUNC(entry_toggle_visibility), entry);
2546 gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(editable_check), TRUE);
2547 gtk_widget_show (editable_check);
2549 sensitive_check = gtk_check_button_new_with_label("Sensitive");
2550 gtk_box_pack_start (GTK_BOX (box2), sensitive_check, FALSE, TRUE, 0);
2551 gtk_signal_connect (GTK_OBJECT(sensitive_check), "toggled",
2552 GTK_SIGNAL_FUNC(entry_toggle_sensitive), entry);
2553 gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(sensitive_check), TRUE);
2554 gtk_widget_show (sensitive_check);
2556 separator = gtk_hseparator_new ();
2557 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2558 gtk_widget_show (separator);
2561 box2 = gtk_vbox_new (FALSE, 10);
2562 gtk_container_border_width (GTK_CONTAINER (box2), 10);
2563 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2564 gtk_widget_show (box2);
2567 button = gtk_button_new_with_label ("close");
2568 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2569 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2570 GTK_OBJECT (window));
2571 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2572 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2573 gtk_widget_grab_default (button);
2574 gtk_widget_show (button);
2577 if (!GTK_WIDGET_VISIBLE (window))
2578 gtk_widget_show (window);
2580 gtk_widget_destroy (window);
2587 static GtkWidget *spinner1;
2590 toggle_snap (GtkWidget *widget, GtkSpinButton *spin)
2592 gtk_spin_button_set_snap_to_ticks (spin, GTK_TOGGLE_BUTTON (widget)->active);
2596 toggle_numeric (GtkWidget *widget, GtkSpinButton *spin)
2598 gtk_spin_button_set_numeric (spin, GTK_TOGGLE_BUTTON (widget)->active);
2602 change_digits (GtkWidget *widget, GtkSpinButton *spin)
2604 gtk_spin_button_set_digits (GTK_SPIN_BUTTON (spinner1),
2605 gtk_spin_button_get_value_as_int (spin));
2609 get_value (GtkWidget *widget, gpointer data)
2613 GtkSpinButton *spin;
2615 spin = GTK_SPIN_BUTTON (spinner1);
2616 label = GTK_LABEL (gtk_object_get_user_data (GTK_OBJECT (widget)));
2617 if (GPOINTER_TO_INT (data) == 1)
2618 sprintf (buf, "%d", gtk_spin_button_get_value_as_int (spin));
2620 sprintf (buf, "%0.*f", spin->digits,
2621 gtk_spin_button_get_value_as_float (spin));
2622 gtk_label_set (label, buf);
2628 static GtkWidget *window = NULL;
2631 GtkWidget *main_vbox;
2634 GtkWidget *spinner2;
2638 GtkWidget *val_label;
2643 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2645 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2646 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
2649 gtk_window_set_title (GTK_WINDOW (window), "GtkSpinButton");
2651 main_vbox = gtk_vbox_new (FALSE, 5);
2652 gtk_container_border_width (GTK_CONTAINER (main_vbox), 10);
2653 gtk_container_add (GTK_CONTAINER (window), main_vbox);
2655 frame = gtk_frame_new ("Not accelerated");
2656 gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0);
2658 vbox = gtk_vbox_new (FALSE, 0);
2659 gtk_container_border_width (GTK_CONTAINER (vbox), 5);
2660 gtk_container_add (GTK_CONTAINER (frame), vbox);
2662 /* Day, month, year spinners */
2664 hbox = gtk_hbox_new (FALSE, 0);
2665 gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 5);
2667 vbox2 = gtk_vbox_new (FALSE, 0);
2668 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
2670 label = gtk_label_new ("Day :");
2671 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
2672 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
2674 adj = (GtkAdjustment *) gtk_adjustment_new (1.0, 1.0, 31.0, 1.0,
2676 spinner = gtk_spin_button_new (adj, 0, 0);
2677 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
2678 gtk_spin_button_set_shadow_type (GTK_SPIN_BUTTON (spinner),
2680 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
2682 vbox2 = gtk_vbox_new (FALSE, 0);
2683 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
2685 label = gtk_label_new ("Month :");
2686 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
2687 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
2689 adj = (GtkAdjustment *) gtk_adjustment_new (1.0, 1.0, 12.0, 1.0,
2691 spinner = gtk_spin_button_new (adj, 0, 0);
2692 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
2693 gtk_spin_button_set_shadow_type (GTK_SPIN_BUTTON (spinner),
2694 GTK_SHADOW_ETCHED_IN);
2695 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
2697 vbox2 = gtk_vbox_new (FALSE, 0);
2698 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
2700 label = gtk_label_new ("Year :");
2701 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
2702 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
2704 adj = (GtkAdjustment *) gtk_adjustment_new (1998.0, 0.0, 2100.0,
2706 spinner = gtk_spin_button_new (adj, 0, 0);
2707 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
2708 gtk_spin_button_set_shadow_type (GTK_SPIN_BUTTON (spinner),
2710 gtk_widget_set_usize (spinner, 55, 0);
2711 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
2713 frame = gtk_frame_new ("Accelerated");
2714 gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0);
2716 vbox = gtk_vbox_new (FALSE, 0);
2717 gtk_container_border_width (GTK_CONTAINER (vbox), 5);
2718 gtk_container_add (GTK_CONTAINER (frame), vbox);
2720 hbox = gtk_hbox_new (FALSE, 0);
2721 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
2723 vbox2 = gtk_vbox_new (FALSE, 0);
2724 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
2726 label = gtk_label_new ("Value :");
2727 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
2728 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
2730 adj = (GtkAdjustment *) gtk_adjustment_new (0.0, -10000.0, 10000.0,
2732 spinner1 = gtk_spin_button_new (adj, 1.0, 2);
2733 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner1), TRUE);
2734 gtk_widget_set_usize (spinner1, 100, 0);
2735 gtk_box_pack_start (GTK_BOX (vbox2), spinner1, FALSE, TRUE, 0);
2737 vbox2 = gtk_vbox_new (FALSE, 0);
2738 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
2740 label = gtk_label_new ("Digits :");
2741 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
2742 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
2744 adj = (GtkAdjustment *) gtk_adjustment_new (2, 1, 5, 1, 1, 0);
2745 spinner2 = gtk_spin_button_new (adj, 0.0, 0);
2746 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner2), TRUE);
2747 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
2748 GTK_SIGNAL_FUNC (change_digits),
2749 (gpointer) spinner2);
2750 gtk_box_pack_start (GTK_BOX (vbox2), spinner2, FALSE, TRUE, 0);
2752 hbox = gtk_hbox_new (FALSE, 0);
2753 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
2755 button = gtk_check_button_new_with_label ("Snap to 0.5-ticks");
2756 gtk_signal_connect (GTK_OBJECT (button), "clicked",
2757 GTK_SIGNAL_FUNC (toggle_snap),
2759 gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
2760 gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (button), TRUE);
2762 button = gtk_check_button_new_with_label ("Numeric only input mode");
2763 gtk_signal_connect (GTK_OBJECT (button), "clicked",
2764 GTK_SIGNAL_FUNC (toggle_numeric),
2766 gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
2767 gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (button), TRUE);
2769 val_label = gtk_label_new ("");
2771 hbox = gtk_hbox_new (FALSE, 0);
2772 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
2774 button = gtk_button_new_with_label ("Value as Int");
2775 gtk_object_set_user_data (GTK_OBJECT (button), val_label);
2776 gtk_signal_connect (GTK_OBJECT (button), "clicked",
2777 GTK_SIGNAL_FUNC (get_value),
2778 GINT_TO_POINTER (1));
2779 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
2781 button = gtk_button_new_with_label ("Value as Float");
2782 gtk_object_set_user_data (GTK_OBJECT (button), val_label);
2783 gtk_signal_connect (GTK_OBJECT (button), "clicked",
2784 GTK_SIGNAL_FUNC (get_value),
2785 GINT_TO_POINTER (2));
2786 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
2788 gtk_box_pack_start (GTK_BOX (vbox), val_label, TRUE, TRUE, 0);
2789 gtk_label_set (GTK_LABEL (val_label), "0");
2791 hbox = gtk_hbox_new (FALSE, 0);
2792 gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
2794 button = gtk_button_new_with_label ("Close");
2795 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2796 GTK_SIGNAL_FUNC (gtk_widget_destroy),
2797 GTK_OBJECT (window));
2798 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
2801 if (!GTK_WIDGET_VISIBLE (window))
2802 gtk_widget_show_all (window);
2804 gtk_widget_destroy (window);
2812 cursor_expose_event (GtkWidget *widget,
2816 GtkDrawingArea *darea;
2817 GdkDrawable *drawable;
2824 g_return_val_if_fail (widget != NULL, TRUE);
2825 g_return_val_if_fail (GTK_IS_DRAWING_AREA (widget), TRUE);
2827 darea = GTK_DRAWING_AREA (widget);
2828 drawable = widget->window;
2829 white_gc = widget->style->white_gc;
2830 gray_gc = widget->style->bg_gc[GTK_STATE_NORMAL];
2831 black_gc = widget->style->black_gc;
2832 max_width = widget->allocation.width;
2833 max_height = widget->allocation.height;
2835 gdk_draw_rectangle (drawable, white_gc,
2842 gdk_draw_rectangle (drawable, black_gc,
2849 gdk_draw_rectangle (drawable, gray_gc,
2860 set_cursor (GtkWidget *spinner,
2868 c = CLAMP (gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spinner)), 0, 152);
2871 label = gtk_object_get_user_data (GTK_OBJECT (spinner));
2872 vals = gtk_type_enum_get_values (GTK_TYPE_GDK_CURSOR_TYPE);
2873 while (vals && vals->value != c)
2876 gtk_label_set (GTK_LABEL (label), vals->value_nick);
2878 gtk_label_set (GTK_LABEL (label), "<unknown>");
2880 cursor = gdk_cursor_new (c);
2881 gdk_window_set_cursor (widget->window, cursor);
2882 gdk_cursor_destroy (cursor);
2886 cursor_event (GtkWidget *widget,
2888 GtkSpinButton *spinner)
2890 if ((event->type == GDK_BUTTON_PRESS) &&
2891 ((event->button.button == 1) ||
2892 (event->button.button == 3)))
2894 gtk_spin_button_spin (spinner, event->button.button == 1 ?
2895 GTK_SPIN_STEP_FORWARD : GTK_SPIN_STEP_BACKWARD, 0);
2903 create_cursors (void)
2905 static GtkWidget *window = NULL;
2908 GtkWidget *main_vbox;
2919 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2921 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2922 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
2925 gtk_window_set_title (GTK_WINDOW (window), "Cursors");
2927 main_vbox = gtk_vbox_new (FALSE, 5);
2928 gtk_container_border_width (GTK_CONTAINER (main_vbox), 0);
2929 gtk_container_add (GTK_CONTAINER (window), main_vbox);
2932 gtk_widget_new (gtk_vbox_get_type (),
2933 "GtkBox::homogeneous", FALSE,
2934 "GtkBox::spacing", 5,
2935 "GtkContainer::border_width", 10,
2936 "GtkWidget::parent", main_vbox,
2937 "GtkWidget::visible", TRUE,
2940 hbox = gtk_hbox_new (FALSE, 0);
2941 gtk_container_border_width (GTK_CONTAINER (hbox), 5);
2942 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
2944 label = gtk_label_new ("Cursor Value : ");
2945 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
2946 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
2948 adj = (GtkAdjustment *) gtk_adjustment_new (0,
2952 spinner = gtk_spin_button_new (adj, 0, 0);
2953 gtk_box_pack_start (GTK_BOX (hbox), spinner, TRUE, TRUE, 0);
2956 gtk_widget_new (gtk_frame_get_type (),
2957 "GtkFrame::shadow", GTK_SHADOW_ETCHED_IN,
2958 "GtkFrame::label_xalign", 0.5,
2959 "GtkFrame::label", "Cursor Area",
2960 "GtkContainer::border_width", 10,
2961 "GtkWidget::parent", vbox,
2962 "GtkWidget::visible", TRUE,
2965 darea = gtk_drawing_area_new ();
2966 gtk_widget_set_usize (darea, 80, 80);
2967 gtk_container_add (GTK_CONTAINER (frame), darea);
2968 gtk_signal_connect (GTK_OBJECT (darea),
2970 GTK_SIGNAL_FUNC (cursor_expose_event),
2972 gtk_widget_set_events (darea, GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK);
2973 gtk_signal_connect (GTK_OBJECT (darea),
2974 "button_press_event",
2975 GTK_SIGNAL_FUNC (cursor_event),
2977 gtk_widget_show (darea);
2979 gtk_signal_connect (GTK_OBJECT (spinner), "changed",
2980 GTK_SIGNAL_FUNC (set_cursor),
2983 label = gtk_widget_new (GTK_TYPE_LABEL,
2988 gtk_container_child_set (GTK_CONTAINER (vbox), label,
2991 gtk_object_set_user_data (GTK_OBJECT (spinner), label);
2994 gtk_widget_new (gtk_hseparator_get_type (),
2995 "GtkWidget::visible", TRUE,
2997 gtk_box_pack_start (GTK_BOX (main_vbox), any, FALSE, TRUE, 0);
2999 hbox = gtk_hbox_new (FALSE, 0);
3000 gtk_container_border_width (GTK_CONTAINER (hbox), 10);
3001 gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
3003 button = gtk_button_new_with_label ("Close");
3004 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
3005 GTK_SIGNAL_FUNC (gtk_widget_destroy),
3006 GTK_OBJECT (window));
3007 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
3009 gtk_widget_show_all (window);
3011 set_cursor (spinner, darea);
3014 gtk_widget_destroy (window);
3022 list_add (GtkWidget *widget,
3027 GtkWidget *list_item;
3028 GtkContainer *container;
3030 container = GTK_CONTAINER (list);
3032 sprintf (buffer, "added item %d", i++);
3033 list_item = gtk_list_item_new_with_label (buffer);
3034 gtk_widget_show (list_item);
3036 gtk_container_add (container, list_item);
3040 list_remove (GtkWidget *widget,
3046 tmp_list = GTK_LIST (list)->selection;
3051 clear_list = g_list_prepend (clear_list, tmp_list->data);
3052 tmp_list = tmp_list->next;
3055 clear_list = g_list_reverse (clear_list);
3057 gtk_list_remove_items (GTK_LIST (list), clear_list);
3059 g_list_free (clear_list);
3063 list_clear (GtkWidget *widget,
3066 gtk_list_clear_items (GTK_LIST (list), 0, -1);
3070 list_undo_selection (GtkWidget *widget,
3073 gtk_list_undo_selection (GTK_LIST (list));
3076 #define RADIOMENUTOGGLED(_rmi_, __i) { \
3079 __g = gtk_radio_menu_item_group(_rmi_); \
3080 while( __g && !((GtkCheckMenuItem *)(__g->data))->active) { \
3086 static GtkWidget *list_omenu;
3089 list_toggle_sel_mode (GtkWidget *widget, GtkList *list)
3093 if (!GTK_WIDGET_MAPPED (widget))
3096 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
3097 (((GtkOptionMenu *)list_omenu)->menu_item), i);
3099 gtk_list_set_selection_mode (list, (GtkSelectionMode) (3-i));
3105 static GtkWidget *window = NULL;
3110 GtkWidget *scrolled_win;
3113 GtkWidget *separator;
3115 GtkWidget *menu_item;
3121 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3123 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3124 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
3127 gtk_window_set_title (GTK_WINDOW (window), "list");
3128 gtk_container_border_width (GTK_CONTAINER (window), 0);
3130 box1 = gtk_vbox_new (FALSE, 0);
3131 gtk_container_add (GTK_CONTAINER (window), box1);
3133 box2 = gtk_vbox_new (FALSE, 10);
3134 gtk_container_border_width (GTK_CONTAINER (box2), 10);
3135 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
3137 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
3138 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
3139 GTK_POLICY_AUTOMATIC,
3140 GTK_POLICY_AUTOMATIC);
3141 gtk_box_pack_start (GTK_BOX (box2), scrolled_win, TRUE, TRUE, 0);
3142 gtk_widget_set_usize (scrolled_win, -1, 300);
3144 list = gtk_list_new ();
3145 gtk_list_set_selection_mode (GTK_LIST (list), GTK_SELECTION_EXTENDED);
3146 gtk_container_add (GTK_CONTAINER (scrolled_win), list);
3147 gtk_container_set_focus_vadjustment
3148 (GTK_CONTAINER (list),
3149 gtk_scrolled_window_get_vadjustment
3150 (GTK_SCROLLED_WINDOW (scrolled_win)));
3151 gtk_container_set_focus_hadjustment
3152 (GTK_CONTAINER (list),
3153 gtk_scrolled_window_get_hadjustment
3154 (GTK_SCROLLED_WINDOW (scrolled_win)));
3156 if ((infile = fopen("gtkenums.h", "r")))
3162 while (fgets (buffer, 256, infile))
3164 if ((pos = strchr (buffer, '\n')))
3166 item = gtk_list_item_new_with_label (buffer);
3167 gtk_container_add (GTK_CONTAINER (list), item);
3173 hbox = gtk_hbox_new (TRUE, 10);
3174 gtk_box_pack_start (GTK_BOX (box2), hbox, FALSE, TRUE, 0);
3176 button = gtk_button_new_with_label ("Undo Selection");
3177 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3178 GTK_SIGNAL_FUNC(list_undo_selection),
3180 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
3182 button = gtk_button_new_with_label ("Remove Selection");
3183 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3184 GTK_SIGNAL_FUNC (list_remove),
3186 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
3188 button = gtk_button_new_with_label ("Clear List");
3189 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3190 GTK_SIGNAL_FUNC (list_clear),
3192 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
3194 hbox = gtk_hbox_new (FALSE, 10);
3195 gtk_box_pack_start (GTK_BOX (box2), hbox, FALSE, TRUE, 0);
3197 button = gtk_button_new_with_label ("Insert Row");
3198 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3199 GTK_SIGNAL_FUNC (list_add),
3201 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
3203 label = gtk_label_new ("Selection Mode :");
3204 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3205 GTK_SIGNAL_FUNC(list_remove),
3207 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
3209 list_omenu = gtk_option_menu_new ();
3210 menu = gtk_menu_new ();
3213 menu_item = gtk_radio_menu_item_new_with_label (group, "Single");
3214 gtk_signal_connect (GTK_OBJECT (menu_item), "activate",
3215 GTK_SIGNAL_FUNC (list_toggle_sel_mode), list);
3216 group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menu_item));
3217 gtk_menu_append (GTK_MENU (menu), menu_item);
3218 gtk_widget_show (menu_item);
3220 menu_item = gtk_radio_menu_item_new_with_label (group, "Browse");
3221 gtk_signal_connect (GTK_OBJECT (menu_item), "activate",
3222 GTK_SIGNAL_FUNC (list_toggle_sel_mode), list);
3223 group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menu_item));
3224 gtk_menu_append (GTK_MENU (menu), menu_item);
3225 gtk_widget_show (menu_item);
3227 menu_item = gtk_radio_menu_item_new_with_label (group, "Multiple");
3228 gtk_signal_connect (GTK_OBJECT (menu_item), "activate",
3229 GTK_SIGNAL_FUNC (list_toggle_sel_mode), list);
3230 group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menu_item));
3231 gtk_menu_append (GTK_MENU (menu), menu_item);
3232 gtk_widget_show (menu_item);
3234 menu_item = gtk_radio_menu_item_new_with_label (group, "Extended");
3235 gtk_signal_connect (GTK_OBJECT (menu_item), "activate",
3236 GTK_SIGNAL_FUNC (list_toggle_sel_mode), list);
3237 group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menu_item));
3238 gtk_menu_append (GTK_MENU (menu), menu_item);
3239 gtk_check_menu_item_set_state (GTK_CHECK_MENU_ITEM (menu_item), TRUE);
3240 gtk_widget_show (menu_item);
3242 gtk_option_menu_set_menu (GTK_OPTION_MENU (list_omenu), menu);
3243 gtk_box_pack_start (GTK_BOX (hbox), list_omenu, FALSE, TRUE, 0);
3245 gtk_option_menu_set_history (GTK_OPTION_MENU (list_omenu), 3);
3247 separator = gtk_hseparator_new ();
3248 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
3251 box2 = gtk_vbox_new (FALSE, 10);
3252 gtk_container_border_width (GTK_CONTAINER (box2), 10);
3253 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
3255 button = gtk_button_new_with_label ("close");
3256 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
3257 GTK_SIGNAL_FUNC(gtk_widget_destroy),
3258 GTK_OBJECT (window));
3259 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
3261 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
3262 gtk_widget_grab_default (button);
3265 if (!GTK_WIDGET_VISIBLE (window))
3266 gtk_widget_show_all (window);
3268 gtk_widget_destroy (window);
3275 static char * book_open_xpm[] = {
3298 static char * book_closed_xpm[] = {
3323 static char * mini_page_xpm[] = {
3346 #define TESTGTK_CLIST_COLUMNS 20
3347 static gint clist_rows = 0;
3348 static GtkWidget *clist_omenu;
3351 add1000_clist (GtkWidget *widget, gpointer data)
3354 char text[TESTGTK_CLIST_COLUMNS][50];
3355 char *texts[TESTGTK_CLIST_COLUMNS];
3359 pixmap = gdk_pixmap_create_from_xpm_d (GTK_CLIST (data)->clist_window,
3361 >K_WIDGET (data)->style->white,
3364 for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++)
3367 sprintf (text[i], "Column %d", i);
3371 sprintf (text[1], "Right");
3372 sprintf (text[2], "Center");
3374 gtk_clist_freeze (GTK_CLIST (data));
3375 for (i = 0; i < 1000; i++)
3377 sprintf (text[0], "Row %d", rand() % 10000 /*clist_rows++*/);
3378 row = gtk_clist_append (GTK_CLIST (data), texts);
3379 gtk_clist_set_pixtext (GTK_CLIST (data), row, 3, "Hello World", 5, pixmap, mask);
3382 gtk_clist_thaw (GTK_CLIST (data));
3384 gdk_pixmap_unref (pixmap);
3385 gdk_bitmap_unref (mask);
3389 add10000_clist (GtkWidget *widget, gpointer data)
3392 char text[TESTGTK_CLIST_COLUMNS][50];
3393 char *texts[TESTGTK_CLIST_COLUMNS];
3395 for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++)
3398 sprintf (text[i], "Column %d", i);
3401 sprintf (text[1], "Right");
3402 sprintf (text[2], "Center");
3404 gtk_clist_freeze (GTK_CLIST (data));
3405 for (i = 0; i < 10000; i++)
3407 sprintf (text[0], "Row %d", rand() % 10000 /*clist_rows++*/);
3408 gtk_clist_append (GTK_CLIST (data), texts);
3410 gtk_clist_thaw (GTK_CLIST (data));
3414 clear_clist (GtkWidget *widget, gpointer data)
3416 gtk_clist_clear (GTK_CLIST (data));
3421 remove_row_clist (GtkWidget *widget, gpointer data)
3423 gtk_clist_remove (GTK_CLIST (data), GTK_CLIST (data)->focus_row);
3428 show_titles_clist (GtkWidget *widget, gpointer data)
3430 gtk_clist_column_titles_show (GTK_CLIST (data));
3434 hide_titles_clist (GtkWidget *widget, gpointer data)
3436 gtk_clist_column_titles_hide (GTK_CLIST (data));
3440 select_clist (GtkWidget *widget,
3443 GdkEventButton * bevent,
3453 g_print ("GtkCList Selection: row %d column %d button %d\n",
3454 row, column, bevent ? bevent->button : 0);
3456 for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++)
3458 switch (gtk_clist_get_cell_type (GTK_CLIST (widget), row, i))
3461 g_print ("CELL %d GTK_CELL_TEXT\n", i);
3462 gtk_clist_get_text (GTK_CLIST (widget), row, i, &text);
3463 g_print ("TEXT: %s\n", text);
3466 case GTK_CELL_PIXMAP:
3467 g_print ("CELL %d GTK_CELL_PIXMAP\n", i);
3468 gtk_clist_get_pixmap (GTK_CLIST (widget), row, i, &pixmap, &mask);
3469 g_print ("PIXMAP: %p\n", pixmap);
3470 g_print ("MASK: %p\n", mask);
3473 case GTK_CELL_PIXTEXT:
3474 g_print ("CELL %d GTK_CELL_PIXTEXT\n", i);
3475 gtk_clist_get_pixtext (GTK_CLIST (widget), row, i, &text, &spacing, &pixmap, &mask);
3476 g_print ("TEXT: %s\n", text);
3477 g_print ("SPACING: %d\n", spacing);
3478 g_print ("PIXMAP: %p\n", pixmap);
3479 g_print ("MASK: %p\n", mask);
3487 /* print selections list */
3488 g_print ("\nSelected Rows:");
3489 list = GTK_CLIST (widget)->selection;
3492 g_print (" %d ", GPOINTER_TO_INT (list->data));
3500 unselect_clist (GtkWidget *widget,
3503 GdkEventButton * bevent,
3513 g_print ("GtkCList Unselection: row %d column %d button %d\n",
3514 row, column, bevent ? bevent->button : 0);
3516 for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++)
3518 switch (gtk_clist_get_cell_type (GTK_CLIST (widget), row, i))
3521 g_print ("CELL %d GTK_CELL_TEXT\n", i);
3522 gtk_clist_get_text (GTK_CLIST (widget), row, i, &text);
3523 g_print ("TEXT: %s\n", text);
3526 case GTK_CELL_PIXMAP:
3527 g_print ("CELL %d GTK_CELL_PIXMAP\n", i);
3528 gtk_clist_get_pixmap (GTK_CLIST (widget), row, i, &pixmap, &mask);
3529 g_print ("PIXMAP: %p\n", pixmap);
3530 g_print ("MASK: %p\n", mask);
3533 case GTK_CELL_PIXTEXT:
3534 g_print ("CELL %d GTK_CELL_PIXTEXT\n", i);
3535 gtk_clist_get_pixtext (GTK_CLIST (widget), row, i, &text, &spacing, &pixmap, &mask);
3536 g_print ("TEXT: %s\n", text);
3537 g_print ("SPACING: %d\n", spacing);
3538 g_print ("PIXMAP: %p\n", pixmap);
3539 g_print ("MASK: %p\n", mask);
3547 /* print selections list */
3548 g_print ("\nSelected Rows:");
3549 list = GTK_CLIST (widget)->selection;
3552 g_print (" %d ", GPOINTER_TO_INT (list->data));
3560 insert_row_clist (GtkWidget *widget, gpointer data)
3562 static char *text[] =
3564 "This", "is", "a", "inserted", "row.",
3565 "This", "is", "a", "inserted", "row.",
3566 "This", "is", "a", "inserted", "row.",
3567 "This", "is", "a", "inserted", "row."
3570 if (GTK_CLIST (data)->focus_row >= 0)
3571 gtk_clist_insert (GTK_CLIST (data), GTK_CLIST (data)->focus_row, text);
3573 gtk_clist_insert (GTK_CLIST (data), 0, text);
3579 clist_warning_test (GtkWidget *button,
3583 static gboolean add_remove = FALSE;
3585 add_remove = !add_remove;
3587 child = gtk_label_new ("Test");
3588 gtk_widget_ref (child);
3589 gtk_object_sink (GTK_OBJECT (child));
3592 gtk_container_add (GTK_CONTAINER (clist), child);
3595 child->parent = clist;
3596 gtk_container_remove (GTK_CONTAINER (clist), child);
3597 child->parent = NULL;
3600 gtk_widget_destroy (child);
3601 gtk_widget_unref (child);
3605 undo_selection (GtkWidget *button, GtkCList *clist)
3607 gtk_clist_undo_selection (clist);
3611 clist_toggle_sel_mode (GtkWidget *widget, GtkCList *clist)
3615 if (!GTK_WIDGET_MAPPED (widget))
3618 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
3619 (((GtkOptionMenu *)clist_omenu)->menu_item), i);
3621 gtk_clist_set_selection_mode (clist, (GtkSelectionMode) (3-i));
3625 clist_click_column (GtkCList *clist, gint column, gpointer data)
3627 if (column == clist->sort_column)
3629 if (clist->sort_type == GTK_SORT_ASCENDING)
3630 clist->sort_type = GTK_SORT_DESCENDING;
3632 clist->sort_type = GTK_SORT_ASCENDING;
3635 gtk_clist_set_sort_column (clist, column);
3637 gtk_clist_sort (clist);
3644 static GtkWidget *window = NULL;
3646 static char *titles[] =
3648 "Title 0", "Title 1", "Title 2", "Title 3", "Title 4",
3649 "Title 5", "Title 6", "Title 7", "Title 8", "Title 9",
3650 "Title 10", "Title 11", "Title 12", "Title 13", "Title 14",
3651 "Title 15", "Title 16", "Title 17", "Title 18", "Title 19"
3654 static OptionMenuItem items[] =
3656 { "Single", clist_toggle_sel_mode },
3657 { "Browse", clist_toggle_sel_mode },
3658 { "Multiple", clist_toggle_sel_mode },
3659 { "Extended", clist_toggle_sel_mode }
3662 char text[TESTGTK_CLIST_COLUMNS][50];
3663 char *texts[TESTGTK_CLIST_COLUMNS];
3669 GtkWidget *separator;
3671 GtkWidget *undo_button;
3677 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3679 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3680 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
3683 gtk_window_set_title (GTK_WINDOW (window), "clist");
3684 gtk_container_border_width (GTK_CONTAINER (window), 0);
3686 box1 = gtk_vbox_new (FALSE, 0);
3687 gtk_container_add (GTK_CONTAINER (window), box1);
3689 box2 = gtk_hbox_new (FALSE, 10);
3690 gtk_container_border_width (GTK_CONTAINER (box2), 10);
3691 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0);
3693 /* create GtkCList here so we have a pointer to throw at the
3694 * button callbacks -- more is done with it later */
3695 clist = gtk_clist_new_with_titles (TESTGTK_CLIST_COLUMNS, titles);
3696 /*clist = gtk_clist_new (TESTGTK_CLIST_COLUMNS);*/
3698 gtk_signal_connect (GTK_OBJECT (clist), "click_column",
3699 (GtkSignalFunc) clist_click_column,
3702 /* control buttons */
3703 button = gtk_button_new_with_label ("Add 1,000 Rows With Pixmaps");
3704 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
3706 gtk_signal_connect (GTK_OBJECT (button),
3708 (GtkSignalFunc) add1000_clist,
3711 button = gtk_button_new_with_label ("Add 10,000 Rows");
3712 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
3714 gtk_signal_connect (GTK_OBJECT (button),
3716 (GtkSignalFunc) add10000_clist,
3719 button = gtk_button_new_with_label ("Clear List");
3720 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
3722 gtk_signal_connect (GTK_OBJECT (button),
3724 (GtkSignalFunc) clear_clist,
3727 button = gtk_button_new_with_label ("Remove Row");
3728 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
3730 gtk_signal_connect (GTK_OBJECT (button),
3732 (GtkSignalFunc) remove_row_clist,
3735 /* second layer of buttons */
3736 box2 = gtk_hbox_new (FALSE, 10);
3737 gtk_container_border_width (GTK_CONTAINER (box2), 10);
3738 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0);
3740 button = gtk_button_new_with_label ("Insert Row");
3741 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
3743 gtk_signal_connect (GTK_OBJECT (button),
3745 (GtkSignalFunc) insert_row_clist,
3748 button = gtk_button_new_with_label ("Show Title Buttons");
3749 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
3751 gtk_signal_connect (GTK_OBJECT (button),
3753 (GtkSignalFunc) show_titles_clist,
3756 button = gtk_button_new_with_label ("Hide Title Buttons");
3757 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
3759 gtk_signal_connect (GTK_OBJECT (button),
3761 (GtkSignalFunc) hide_titles_clist,
3764 button = gtk_button_new_with_label ("Warning Test");
3765 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
3767 gtk_signal_connect (GTK_OBJECT (button),
3769 (GtkSignalFunc) clist_warning_test,
3772 box2 = gtk_hbox_new (FALSE, 10);
3773 gtk_container_border_width (GTK_CONTAINER (box2), 10);
3774 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0);
3776 undo_button = gtk_button_new_with_label ("Undo last selection");
3777 gtk_box_pack_start (GTK_BOX (box2), undo_button, TRUE, TRUE, 0);
3778 gtk_signal_connect (GTK_OBJECT (undo_button),
3780 (GtkSignalFunc) undo_selection,
3783 label = gtk_label_new ("Selection Mode :");
3784 gtk_box_pack_start (GTK_BOX (box2), label, FALSE, TRUE, 0);
3786 clist_omenu = build_option_menu (items, 4, 3, clist);
3787 gtk_box_pack_start (GTK_BOX (box2), clist_omenu, FALSE, TRUE, 0);
3789 /* vbox for the list itself */
3790 box2 = gtk_vbox_new (FALSE, 10);
3791 gtk_container_border_width (GTK_CONTAINER (box2), 10);
3792 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
3795 * the rest of the clist configuration
3799 gtk_signal_connect (GTK_OBJECT (clist),
3801 (GtkSignalFunc) select_clist,
3804 gtk_signal_connect (GTK_OBJECT (clist),
3806 (GtkSignalFunc) unselect_clist,
3810 gtk_clist_set_row_height (GTK_CLIST (clist), 18);
3811 gtk_widget_set_usize (clist, -1, 300);
3813 gtk_clist_set_column_width (GTK_CLIST (clist), 0, 100);
3815 for (i = 1; i < TESTGTK_CLIST_COLUMNS; i++)
3816 gtk_clist_set_column_width (GTK_CLIST (clist), i, 80);
3818 gtk_clist_set_selection_mode (GTK_CLIST (clist), GTK_SELECTION_EXTENDED);
3819 gtk_clist_set_policy (GTK_CLIST (clist), GTK_POLICY_AUTOMATIC,
3820 GTK_POLICY_AUTOMATIC);
3822 gtk_clist_set_column_justification (GTK_CLIST (clist), 1,
3824 gtk_clist_set_column_justification (GTK_CLIST (clist), 2,
3825 GTK_JUSTIFY_CENTER);
3827 for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++)
3830 sprintf (text[i], "Column %d", i);
3833 sprintf (text[1], "Right");
3834 sprintf (text[2], "Center");
3836 for (i = 0; i < 10; i++)
3838 sprintf (text[0], "Row %d", clist_rows++);
3839 gtk_clist_append (GTK_CLIST (clist), texts);
3842 gtk_container_border_width (GTK_CONTAINER (clist), 5);
3843 gtk_box_pack_start (GTK_BOX (box2), clist, TRUE, TRUE, 0);
3845 separator = gtk_hseparator_new ();
3846 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
3848 box2 = gtk_vbox_new (FALSE, 10);
3849 gtk_container_border_width (GTK_CONTAINER (box2), 10);
3850 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
3852 button = gtk_button_new_with_label ("close");
3853 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
3854 GTK_SIGNAL_FUNC(gtk_widget_destroy),
3855 GTK_OBJECT (window));
3857 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
3858 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
3859 gtk_widget_grab_default (button);
3862 if (!GTK_WIDGET_VISIBLE (window))
3863 gtk_widget_show_all (window);
3867 gtk_widget_destroy (window);
3882 static gint books = 0;
3883 static gint pages = 0;
3885 static GtkWidget *book_label;
3886 static GtkWidget *page_label;
3887 static GtkWidget *sel_label;
3888 static GtkWidget *vis_label;
3889 static GtkWidget *omenu1;
3890 static GtkWidget *omenu2;
3891 static GtkWidget *omenu3;
3892 static GtkWidget *spin1;
3893 static GtkWidget *spin2;
3894 static GtkWidget *spin3;
3895 static GdkColor *col_bg;
3897 void after_press (GtkCTree *ctree, gpointer data)
3901 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->selection));
3902 gtk_label_set (GTK_LABEL (sel_label), buf);
3904 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->row_list));
3905 gtk_label_set (GTK_LABEL (vis_label), buf);
3907 sprintf (buf, "%d", books);
3908 gtk_label_set (GTK_LABEL (book_label), buf);
3910 sprintf (buf, "%d", pages);
3911 gtk_label_set (GTK_LABEL (page_label), buf);
3914 void after_move (GtkCTree *ctree, GtkCTreeNode *child, GtkCTreeNode *parent,
3915 GtkCTreeNode *sibling, gpointer data)
3921 gtk_ctree_get_node_info (ctree, child, &source,
3922 NULL, NULL, NULL, NULL, NULL, NULL, NULL);
3924 gtk_ctree_get_node_info (ctree, parent, &target1,
3925 NULL, NULL, NULL, NULL, NULL, NULL, NULL);
3927 gtk_ctree_get_node_info (ctree, sibling, &target2,
3928 NULL, NULL, NULL, NULL, NULL, NULL, NULL);
3930 g_print ("Moving \"%s\" to \"%s\" with sibling \"%s\".\n", source,
3931 (parent) ? target1 : "nil", (sibling) ? target2 : "nil");
3934 gint button_press (GtkCTree *ctree, GdkEventButton *event, gpointer data)
3941 res = gtk_clist_get_selection_info (GTK_CLIST (ctree), event->x, event->y,
3943 if (!res && event->button != 3)
3946 work = GTK_CTREE_NODE (g_list_nth (GTK_CLIST (ctree)->row_list, row));
3948 switch (event->button)
3951 if (GTK_CLIST (ctree)->selection_mode == GTK_SELECTION_MULTIPLE &&
3952 event->state & GDK_SHIFT_MASK)
3953 gtk_signal_emit_stop_by_name (GTK_OBJECT (ctree),"button_press_event");
3956 if (GTK_CTREE_ROW (work)->children &&
3957 gtk_ctree_is_hot_spot (ctree, event->x, event->y))
3959 if (GTK_CTREE_ROW (work)->expanded)
3960 gtk_ctree_collapse_recursive (ctree, work);
3962 gtk_ctree_expand_recursive (ctree, work);
3963 after_press (ctree, NULL);
3964 gtk_signal_emit_stop_by_name (GTK_OBJECT (ctree),
3965 "button_press_event");
3974 gint button_release (GtkCTree *ctree, GdkEventButton *event, gpointer data)
3981 res = gtk_clist_get_selection_info (GTK_CLIST (ctree), event->x, event->y,
3983 if (!res || event->button != 1)
3986 work = GTK_CTREE_NODE (g_list_nth (GTK_CLIST (ctree)->row_list, row));
3988 if (GTK_CLIST (ctree)->selection_mode == GTK_SELECTION_MULTIPLE &&
3989 event->state & GDK_SHIFT_MASK)
3991 if (GTK_CTREE_ROW (work)->row.state == GTK_STATE_SELECTED)
3992 gtk_ctree_unselect_recursive (ctree, work);
3994 gtk_ctree_select_recursive (ctree, work);
3995 after_press (ctree, NULL);
3996 gtk_signal_emit_stop_by_name (GTK_OBJECT (ctree),
3997 "button_release_event");
4002 void count_items (GtkCTree *ctree, GtkCTreeNode *list)
4004 if (GTK_CTREE_ROW (list)->is_leaf)
4010 void expand_all (GtkWidget *widget, GtkCTree *ctree)
4012 gtk_ctree_expand_recursive (ctree, NULL);
4013 after_press (ctree, NULL);
4016 void collapse_all (GtkWidget *widget, GtkCTree *ctree)
4018 gtk_ctree_collapse_recursive (ctree, NULL);
4019 after_press (ctree, NULL);
4022 void select_all (GtkWidget *widget, GtkCTree *ctree)
4024 gtk_ctree_select_recursive (ctree, NULL);
4025 after_press (ctree, NULL);
4028 void unselect_all (GtkWidget *widget, GtkCTree *ctree)
4030 gtk_ctree_unselect_recursive (ctree, NULL);
4031 after_press (ctree, NULL);
4034 void remove_selection (GtkWidget *widget, GtkCTree *ctree)
4037 GtkCTreeNode *new_sel;
4040 selection = GTK_CLIST (ctree)->selection;
4043 gtk_clist_freeze (GTK_CLIST (ctree));
4047 work = selection->data;
4048 if (GTK_CTREE_ROW (work)->is_leaf)
4051 gtk_ctree_post_recursive (ctree, work,
4052 (GtkCTreeFunc) count_items, NULL);
4054 if (GTK_CLIST (ctree)->selection_mode == GTK_SELECTION_BROWSE)
4056 if (GTK_CTREE_ROW (work)->children)
4058 new_sel = GTK_CTREE_ROW (work)->sibling;
4060 new_sel = GTK_CTREE_NODE_NEXT (work);
4064 if (GTK_CTREE_NODE_NEXT (work))
4065 new_sel = GTK_CTREE_NODE_NEXT (work);
4067 new_sel = GTK_CTREE_NODE_PREV (work);
4071 gtk_ctree_remove (ctree, work);
4072 selection = GTK_CLIST (ctree)->selection;
4076 gtk_ctree_select (ctree, new_sel);
4078 gtk_clist_thaw (GTK_CLIST (ctree));
4079 after_press (ctree, NULL);
4082 void sort_all (GtkWidget *widget, GtkCTree *ctree)
4084 gtk_ctree_sort_recursive (ctree, NULL);
4087 void change_indent (GtkWidget *widget, GtkCTree *ctree)
4089 gtk_ctree_set_indent (ctree, GTK_ADJUSTMENT (widget)->value);
4092 void change_row_height (GtkWidget *widget, GtkCList *clist)
4094 gtk_clist_set_row_height (clist, GTK_ADJUSTMENT (widget)->value);
4097 void toggle_reorderable (GtkWidget *widget, GtkCTree *ctree)
4099 gtk_ctree_set_reorderable (ctree, GTK_TOGGLE_BUTTON (widget)->active);
4102 void set_background (GtkCTree *ctree, GtkCTreeNode *node, gpointer data)
4107 if (ctree->line_style != GTK_CTREE_LINES_TABBED)
4109 if (GTK_CTREE_ROW (node)->is_leaf)
4111 if (GTK_CTREE_ROW (node)->parent)
4112 gtk_ctree_set_background
4114 GTK_CTREE_ROW (GTK_CTREE_ROW (node)->parent)->row.data);
4117 gtk_ctree_set_background (ctree, node, GTK_CTREE_ROW (node)->row.data);
4120 gtk_ctree_set_background (ctree, node, NULL);
4123 void ctree_toggle_line_style (GtkWidget *widget, GtkCTree *ctree)
4127 if (!GTK_WIDGET_MAPPED (widget))
4130 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
4131 (((GtkOptionMenu *)omenu1)->menu_item),i);
4133 if ((ctree->line_style == GTK_CTREE_LINES_TABBED &&
4134 ((GtkCTreeLineStyle) (3-i)) != GTK_CTREE_LINES_TABBED) ||
4135 (ctree->line_style != GTK_CTREE_LINES_TABBED &&
4136 ((GtkCTreeLineStyle) (3-i)) == GTK_CTREE_LINES_TABBED))
4137 gtk_ctree_pre_recursive (ctree, NULL, set_background, NULL);
4138 gtk_ctree_set_line_style (ctree, (GtkCTreeLineStyle) (3-i));
4141 void ctree_toggle_justify (GtkWidget *widget, GtkCTree *ctree)
4145 if (!GTK_WIDGET_MAPPED (widget))
4148 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
4149 (((GtkOptionMenu *)omenu2)->menu_item),i);
4151 gtk_clist_set_column_justification (GTK_CLIST (ctree), ctree->tree_column,
4152 (GtkJustification) (1-i));
4155 void ctree_toggle_sel_mode (GtkWidget *widget, GtkCTree *ctree)
4159 if (!GTK_WIDGET_MAPPED (widget))
4162 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
4163 (((GtkOptionMenu *)omenu3)->menu_item), i);
4165 gtk_clist_set_selection_mode (GTK_CLIST (ctree), (GtkSelectionMode) (3-i));
4166 after_press (ctree, NULL);
4169 void build_recursive (GtkCTree *ctree, gint cur_depth, gint depth,
4170 gint num_books, gint num_pages, GtkCTreeNode *parent)
4175 GtkCTreeNode *sibling;
4182 for (i = num_pages + num_books; i > num_books; i--)
4185 sprintf (buf1, "Page %02d", (gint) rand() % 100);
4186 sprintf (buf2, "Item %d-%d", cur_depth, i);
4187 sibling = gtk_ctree_insert (ctree, parent, sibling, text, 5, pixmap3,
4188 mask3, NULL, NULL, TRUE, FALSE);
4190 if (ctree->line_style == GTK_CTREE_LINES_TABBED)
4191 gtk_ctree_set_background (ctree, sibling, col_bg);
4194 if (cur_depth == depth)
4197 for (i = num_books; i > 0; i--)
4200 sprintf (buf1, "Book %02d", (gint) rand() % 100);
4201 sprintf (buf2, "Item %d-%d", cur_depth, i);
4202 sibling = gtk_ctree_insert (ctree, parent, sibling, text, 5, pixmap1,
4203 mask1, pixmap2, mask2, FALSE, FALSE);
4205 col_bg = g_new (GdkColor, 1);
4207 if (cur_depth % 3 == 0)
4209 col_bg->red = 10000 * (cur_depth % 6);
4211 col_bg->blue = 65535 - ((i * 10000) % 65535);
4213 else if (cur_depth % 3 == 1)
4215 col_bg->red = 10000 * (cur_depth % 6);
4216 col_bg->green = 65535 - ((i * 10000) % 65535);
4221 col_bg->red = 65535 - ((i * 10000) % 65535);
4223 col_bg->blue = 10000 * (cur_depth % 6);
4226 gdk_color_alloc (gtk_widget_get_colormap (GTK_WIDGET (ctree)), col_bg);
4227 gtk_ctree_set_row_data_full (ctree, sibling, col_bg, g_free);
4229 if (ctree->line_style == GTK_CTREE_LINES_TABBED)
4230 gtk_ctree_set_background (ctree, sibling, col_bg);
4232 build_recursive (ctree, cur_depth + 1, depth, num_books, num_pages,
4237 void rebuild_tree (GtkWidget *widget, GtkCTree *ctree)
4240 gchar label1[] = "Root";
4241 gchar label2[] = "";
4242 GtkCTreeNode *parent;
4248 d = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin1));
4249 b = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin2));
4250 p = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin3));
4252 n = ((pow (b, d) - 1) / (b - 1)) * (p + 1);
4256 g_print ("%d total items? Try less\n",n);
4260 gtk_clist_freeze (GTK_CLIST (ctree));
4261 gtk_clist_clear (GTK_CLIST (ctree));
4266 parent = gtk_ctree_insert (ctree, NULL, NULL, text, 5, pixmap1,
4267 mask1, pixmap2, mask2, FALSE, TRUE);
4269 col_bg = g_new (GdkColor, 1);
4271 col_bg->green = 45000;
4272 col_bg->blue = 55000;
4273 gdk_color_alloc (gtk_widget_get_colormap (GTK_WIDGET (ctree)), col_bg);
4274 gtk_ctree_set_row_data_full (ctree, parent, col_bg, g_free);
4275 if (ctree->line_style == GTK_CTREE_LINES_TABBED)
4276 gtk_ctree_set_background (ctree, parent, col_bg);
4278 build_recursive (ctree, 1, d, b, p, parent);
4279 gtk_clist_thaw (GTK_CLIST (ctree));
4280 after_press (ctree, NULL);
4284 ctree_click_column (GtkCTree *ctree, gint column, gpointer data)
4288 clist = GTK_CLIST (ctree);
4290 if (column == clist->sort_column)
4292 if (clist->sort_type == GTK_SORT_ASCENDING)
4293 clist->sort_type = GTK_SORT_DESCENDING;
4295 clist->sort_type = GTK_SORT_ASCENDING;
4298 gtk_clist_set_sort_column (clist, column);
4300 gtk_ctree_sort_recursive (ctree, NULL);
4303 void create_ctree (void)
4305 static GtkWidget *window = NULL;
4306 GtkTooltips *tooltips;
4317 GdkColor transparent;
4319 char *title[] = { "Tree" , "Info" };
4322 static OptionMenuItem items1[] =
4324 { "Solid", ctree_toggle_line_style },
4325 { "Dotted", ctree_toggle_line_style },
4326 { "Tabbed", ctree_toggle_line_style },
4327 { "No lines", ctree_toggle_line_style }
4330 static OptionMenuItem items2[] =
4332 { "Left", ctree_toggle_justify },
4333 { "Right", ctree_toggle_justify }
4336 static OptionMenuItem items3[] =
4338 { "Single", ctree_toggle_sel_mode },
4339 { "Browse", ctree_toggle_sel_mode },
4340 { "Multiple", ctree_toggle_sel_mode },
4341 { "Extended", ctree_toggle_sel_mode }
4346 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
4348 gtk_signal_connect (GTK_OBJECT (window), "destroy",
4349 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
4352 gtk_window_set_title (GTK_WINDOW (window), "GtkCTree");
4353 gtk_container_border_width (GTK_CONTAINER (window), 0);
4355 tooltips = gtk_tooltips_new ();
4356 gtk_object_ref (GTK_OBJECT (tooltips));
4357 gtk_object_sink (GTK_OBJECT (tooltips));
4359 gtk_object_set_data_full (GTK_OBJECT (window), "tooltips", tooltips,
4360 (GtkDestroyNotify) gtk_object_unref);
4362 vbox = gtk_vbox_new (FALSE, 0);
4363 gtk_container_add (GTK_CONTAINER (window), vbox);
4365 hbox = gtk_hbox_new (FALSE, 5);
4366 gtk_container_border_width (GTK_CONTAINER (hbox), 5);
4367 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
4369 label = gtk_label_new ("Depth :");
4370 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
4372 adj = (GtkAdjustment *) gtk_adjustment_new (4, 1, 10, 1, 5, 0);
4373 spin1 = gtk_spin_button_new (adj, 0, 0);
4374 gtk_box_pack_start (GTK_BOX (hbox), spin1, FALSE, TRUE, 5);
4376 label = gtk_label_new ("Books :");
4377 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
4379 adj = (GtkAdjustment *) gtk_adjustment_new (3, 1, 20, 1, 5, 0);
4380 spin2 = gtk_spin_button_new (adj, 0, 0);
4381 gtk_box_pack_start (GTK_BOX (hbox), spin2, FALSE, TRUE, 5);
4383 label = gtk_label_new ("Pages :");
4384 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
4386 adj = (GtkAdjustment *) gtk_adjustment_new (5, 1, 20, 1, 5, 0);
4387 spin3 = gtk_spin_button_new (adj, 0, 0);
4388 gtk_box_pack_start (GTK_BOX (hbox), spin3, FALSE, TRUE, 5);
4390 button = gtk_button_new_with_label ("Close");
4391 gtk_box_pack_end (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4393 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
4394 (GtkSignalFunc) gtk_widget_destroy,
4395 GTK_OBJECT(window));
4397 button = gtk_button_new_with_label ("Rebuild tree");
4398 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4400 ctree = GTK_CTREE (gtk_ctree_new_with_titles (2, 0, title));
4401 gtk_ctree_set_line_style (ctree, GTK_CTREE_LINES_DOTTED);
4402 gtk_ctree_set_reorderable (ctree, TRUE);
4403 gtk_signal_connect (GTK_OBJECT (ctree), "click_column",
4404 (GtkSignalFunc) ctree_click_column,
4406 gtk_signal_connect (GTK_OBJECT (ctree), "button_press_event",
4407 GTK_SIGNAL_FUNC (button_press), NULL);
4408 gtk_signal_connect_after (GTK_OBJECT (ctree), "button_press_event",
4409 GTK_SIGNAL_FUNC (after_press), NULL);
4410 gtk_signal_connect (GTK_OBJECT (ctree), "button_release_event",
4411 GTK_SIGNAL_FUNC (button_release), NULL);
4412 gtk_signal_connect_after (GTK_OBJECT (ctree), "button_release_event",
4413 GTK_SIGNAL_FUNC (after_press), NULL);
4414 gtk_signal_connect_after (GTK_OBJECT (ctree), "tree_move",
4415 GTK_SIGNAL_FUNC (after_move), NULL);
4416 gtk_signal_connect_after (GTK_OBJECT (ctree), "end_selection",
4417 GTK_SIGNAL_FUNC (after_press), NULL);
4418 gtk_signal_connect_after (GTK_OBJECT (ctree), "toggle_focus_row",
4419 GTK_SIGNAL_FUNC (after_press), NULL);
4420 gtk_signal_connect_after (GTK_OBJECT (ctree), "select_all",
4421 GTK_SIGNAL_FUNC (after_press), NULL);
4422 gtk_signal_connect_after (GTK_OBJECT (ctree), "unselect_all",
4423 GTK_SIGNAL_FUNC (after_press), NULL);
4424 gtk_signal_connect_after (GTK_OBJECT (ctree), "scroll_vertical",
4425 GTK_SIGNAL_FUNC (after_press), NULL);
4427 gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (ctree), TRUE, TRUE, 0);
4428 gtk_clist_set_selection_mode (GTK_CLIST (ctree), GTK_SELECTION_EXTENDED);
4429 gtk_clist_set_policy (GTK_CLIST (ctree), GTK_POLICY_ALWAYS,
4430 GTK_POLICY_AUTOMATIC);
4431 gtk_clist_set_column_width (GTK_CLIST (ctree), 0, 200);
4432 gtk_clist_set_column_width (GTK_CLIST (ctree), 1, 200);
4434 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4435 GTK_SIGNAL_FUNC (rebuild_tree), ctree);
4437 hbox = gtk_hbox_new (FALSE, 5);
4438 gtk_container_border_width (GTK_CONTAINER (hbox), 5);
4439 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
4441 button = gtk_button_new_with_label ("Expand all");
4442 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4443 GTK_SIGNAL_FUNC (expand_all), ctree);
4444 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4446 button = gtk_button_new_with_label ("Collapse all");
4447 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4448 GTK_SIGNAL_FUNC (collapse_all), ctree);
4449 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4451 button = gtk_button_new_with_label ("Sort tree");
4452 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4453 GTK_SIGNAL_FUNC (sort_all), ctree);
4454 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4456 hbox = gtk_hbox_new (FALSE, 5);
4457 gtk_container_border_width (GTK_CONTAINER (hbox), 5);
4458 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
4460 label = gtk_label_new ("Row height :");
4461 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
4463 adj = (GtkAdjustment *) gtk_adjustment_new (20, 12, 100, 1, 10, 0);
4464 spinner = gtk_spin_button_new (adj, 0, 0);
4465 gtk_tooltips_set_tip (tooltips, spinner,
4466 "Row height of list items", NULL);
4467 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
4468 GTK_SIGNAL_FUNC (change_row_height), ctree);
4469 gtk_box_pack_start (GTK_BOX (hbox), spinner, FALSE, TRUE, 5);
4470 gtk_clist_set_row_height ( GTK_CLIST (ctree), adj->value);
4472 button = gtk_button_new_with_label ("Select all");
4473 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4474 GTK_SIGNAL_FUNC (select_all), ctree);
4475 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4477 button = gtk_button_new_with_label ("Unselect all");
4478 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4479 GTK_SIGNAL_FUNC (unselect_all), ctree);
4480 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4482 button = gtk_button_new_with_label ("Remove selection");
4483 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4484 GTK_SIGNAL_FUNC (remove_selection), ctree);
4485 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4487 hbox = gtk_hbox_new (TRUE, 5);
4488 gtk_container_border_width (GTK_CONTAINER (hbox), 5);
4489 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
4491 hbox2 = gtk_hbox_new (FALSE, 0);
4492 gtk_box_pack_start (GTK_BOX (hbox), hbox2, FALSE, TRUE, 0);
4494 label = gtk_label_new ("Indent :");
4495 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
4497 adj = (GtkAdjustment *) gtk_adjustment_new (20, 0, 60, 1, 10, 0);
4498 spinner = gtk_spin_button_new (adj, 0, 0);
4499 gtk_tooltips_set_tip (tooltips, spinner, "Tree indentation.", NULL);
4500 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
4501 GTK_SIGNAL_FUNC (change_indent), ctree);
4502 gtk_box_pack_start (GTK_BOX (hbox2), spinner, FALSE, TRUE, 5);
4504 check = gtk_check_button_new_with_label ("Reorderable");
4505 gtk_tooltips_set_tip (tooltips, check,
4506 "Tree items can be reordered by dragging.", NULL);
4507 gtk_signal_connect (GTK_OBJECT (check), "clicked",
4508 GTK_SIGNAL_FUNC (toggle_reorderable), ctree);
4509 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
4510 gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (check), TRUE);
4512 omenu1 = build_option_menu (items1, 4, 1, ctree);
4513 gtk_tooltips_set_tip (tooltips, omenu1, "The tree's line style.", NULL);
4514 gtk_box_pack_start (GTK_BOX (hbox), omenu1, FALSE, TRUE, 0);
4516 omenu2 = build_option_menu (items2, 2, 0, ctree);
4517 gtk_tooltips_set_tip (tooltips, omenu2, "The tree's justification.",
4519 gtk_box_pack_start (GTK_BOX (hbox), omenu2, FALSE, TRUE, 0);
4521 omenu3 = build_option_menu (items3, 4, 3, ctree);
4522 gtk_tooltips_set_tip (tooltips, omenu3, "The list's selection mode.",
4524 gtk_box_pack_start (GTK_BOX (hbox), omenu3, FALSE, TRUE, 0);
4526 gtk_widget_realize (window);
4528 pixmap1 = gdk_pixmap_create_from_xpm_d (window->window, &mask1,
4529 &transparent, book_closed_xpm);
4530 pixmap2 = gdk_pixmap_create_from_xpm_d (window->window, &mask2,
4531 &transparent, book_open_xpm);
4532 pixmap3 = gdk_pixmap_create_from_xpm_d (window->window, &mask3,
4533 &transparent, mini_page_xpm);
4535 gtk_widget_set_usize (GTK_WIDGET (ctree), 0, 300);
4537 frame = gtk_frame_new (NULL);
4538 gtk_container_border_width (GTK_CONTAINER (frame), 0);
4539 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_OUT);
4540 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
4542 hbox = gtk_hbox_new (TRUE, 2);
4543 gtk_container_border_width (GTK_CONTAINER (hbox), 2);
4544 gtk_container_add (GTK_CONTAINER (frame), hbox);
4546 frame = gtk_frame_new (NULL);
4547 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
4548 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
4550 hbox2 = gtk_hbox_new (FALSE, 0);
4551 gtk_container_border_width (GTK_CONTAINER (hbox2), 2);
4552 gtk_container_add (GTK_CONTAINER (frame), hbox2);
4554 label = gtk_label_new ("Books :");
4555 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
4557 sprintf (buf, "%d", books);
4558 book_label = gtk_label_new (buf);
4559 gtk_box_pack_end (GTK_BOX (hbox2), book_label, FALSE, TRUE, 5);
4561 frame = gtk_frame_new (NULL);
4562 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
4563 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
4565 hbox2 = gtk_hbox_new (FALSE, 0);
4566 gtk_container_border_width (GTK_CONTAINER (hbox2), 2);
4567 gtk_container_add (GTK_CONTAINER (frame), hbox2);
4569 label = gtk_label_new ("Pages :");
4570 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
4572 sprintf (buf, "%d", pages);
4573 page_label = gtk_label_new (buf);
4574 gtk_box_pack_end (GTK_BOX (hbox2), page_label, FALSE, TRUE, 5);
4576 frame = gtk_frame_new (NULL);
4577 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
4578 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
4580 hbox2 = gtk_hbox_new (FALSE, 0);
4581 gtk_container_border_width (GTK_CONTAINER (hbox2), 2);
4582 gtk_container_add (GTK_CONTAINER (frame), hbox2);
4584 label = gtk_label_new ("Selected :");
4585 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
4587 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->selection));
4588 sel_label = gtk_label_new (buf);
4589 gtk_box_pack_end (GTK_BOX (hbox2), sel_label, FALSE, TRUE, 5);
4591 frame = gtk_frame_new (NULL);
4592 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
4593 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
4595 hbox2 = gtk_hbox_new (FALSE, 0);
4596 gtk_container_border_width (GTK_CONTAINER (hbox2), 2);
4597 gtk_container_add (GTK_CONTAINER (frame), hbox2);
4599 label = gtk_label_new ("Visible :");
4600 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
4602 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->row_list));
4603 vis_label = gtk_label_new (buf);
4604 gtk_box_pack_end (GTK_BOX (hbox2), vis_label, FALSE, TRUE, 5);
4606 rebuild_tree (NULL, ctree);
4609 if (!GTK_WIDGET_VISIBLE (window))
4610 gtk_widget_show_all (window);
4612 gtk_widget_destroy (window);
4620 color_selection_ok (GtkWidget *w,
4621 GtkColorSelectionDialog *cs)
4623 GtkColorSelection *colorsel;
4626 colorsel=GTK_COLOR_SELECTION(cs->colorsel);
4628 gtk_color_selection_get_color(colorsel,color);
4629 gtk_color_selection_set_color(colorsel,color);
4633 color_selection_changed (GtkWidget *w,
4634 GtkColorSelectionDialog *cs)
4636 GtkColorSelection *colorsel;
4639 colorsel=GTK_COLOR_SELECTION(cs->colorsel);
4640 gtk_color_selection_get_color(colorsel,color);
4644 create_color_selection (void)
4646 static GtkWidget *window = NULL;
4650 window = gtk_color_selection_dialog_new ("color selection dialog");
4652 gtk_color_selection_set_opacity (
4653 GTK_COLOR_SELECTION (GTK_COLOR_SELECTION_DIALOG (window)->colorsel),
4656 gtk_color_selection_set_update_policy(
4657 GTK_COLOR_SELECTION (GTK_COLOR_SELECTION_DIALOG (window)->colorsel),
4658 GTK_UPDATE_CONTINUOUS);
4660 gtk_window_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
4662 gtk_signal_connect (GTK_OBJECT (window), "destroy",
4663 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
4666 gtk_signal_connect (
4667 GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (window)->colorsel),
4669 GTK_SIGNAL_FUNC(color_selection_changed),
4672 gtk_signal_connect (
4673 GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (window)->ok_button),
4675 GTK_SIGNAL_FUNC(color_selection_ok),
4678 gtk_signal_connect_object (
4679 GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (window)->cancel_button),
4681 GTK_SIGNAL_FUNC(gtk_widget_destroy),
4682 GTK_OBJECT (window));
4685 if (!GTK_WIDGET_VISIBLE (window))
4686 gtk_widget_show (window);
4688 gtk_widget_destroy (window);
4696 file_selection_hide_fileops (GtkWidget *widget,
4697 GtkFileSelection *fs)
4699 gtk_file_selection_hide_fileop_buttons (fs);
4703 file_selection_ok (GtkWidget *w,
4704 GtkFileSelection *fs)
4706 g_print ("%s\n", gtk_file_selection_get_filename (fs));
4707 gtk_widget_destroy (GTK_WIDGET (fs));
4711 create_file_selection (void)
4713 static GtkWidget *window = NULL;
4718 window = gtk_file_selection_new ("file selection dialog");
4720 gtk_file_selection_hide_fileop_buttons (GTK_FILE_SELECTION (window));
4722 gtk_window_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
4724 gtk_signal_connect (GTK_OBJECT (window), "destroy",
4725 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
4728 gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (window)->ok_button),
4729 "clicked", GTK_SIGNAL_FUNC(file_selection_ok),
4731 gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION (window)->cancel_button),
4732 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
4733 GTK_OBJECT (window));
4735 button = gtk_button_new_with_label ("Hide Fileops");
4736 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4737 (GtkSignalFunc) file_selection_hide_fileops,
4739 gtk_box_pack_start (GTK_BOX (GTK_FILE_SELECTION (window)->action_area),
4740 button, FALSE, FALSE, 0);
4741 gtk_widget_show (button);
4743 button = gtk_button_new_with_label ("Show Fileops");
4744 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
4745 (GtkSignalFunc) gtk_file_selection_show_fileop_buttons,
4747 gtk_box_pack_start (GTK_BOX (GTK_FILE_SELECTION (window)->action_area),
4748 button, FALSE, FALSE, 0);
4749 gtk_widget_show (button);
4752 if (!GTK_WIDGET_VISIBLE (window))
4753 gtk_widget_show (window);
4755 gtk_widget_destroy (window);
4763 font_selection_ok (GtkWidget *w,
4764 GtkFontSelectionDialog *fs)
4766 g_print ("%s\n", gtk_font_selection_dialog_get_font_name (fs));
4767 gtk_widget_destroy (GTK_WIDGET (fs));
4771 create_font_selection (void)
4773 static GtkWidget *window = NULL;
4777 window = gtk_font_selection_dialog_new ("Font Selection Dialog");
4779 gtk_window_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
4781 gtk_signal_connect (GTK_OBJECT (window), "destroy",
4782 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
4785 gtk_signal_connect (GTK_OBJECT (GTK_FONT_SELECTION_DIALOG (window)->ok_button),
4786 "clicked", GTK_SIGNAL_FUNC(font_selection_ok),
4787 GTK_FONT_SELECTION_DIALOG (window));
4788 gtk_signal_connect_object (GTK_OBJECT (GTK_FONT_SELECTION_DIALOG (window)->cancel_button),
4789 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
4790 GTK_OBJECT (window));
4793 if (!GTK_WIDGET_VISIBLE (window))
4794 gtk_widget_show (window);
4796 gtk_widget_destroy (window);
4803 static GtkWidget *dialog_window = NULL;
4806 label_toggle (GtkWidget *widget,
4811 *label = gtk_label_new ("Dialog Test");
4812 gtk_signal_connect (GTK_OBJECT (*label),
4814 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
4816 gtk_misc_set_padding (GTK_MISC (*label), 10, 10);
4817 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->vbox),
4818 *label, TRUE, TRUE, 0);
4819 gtk_widget_show (*label);
4822 gtk_widget_destroy (*label);
4826 create_dialog (void)
4828 static GtkWidget *label;
4833 dialog_window = gtk_dialog_new ();
4835 gtk_signal_connect (GTK_OBJECT (dialog_window), "destroy",
4836 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
4839 gtk_window_set_title (GTK_WINDOW (dialog_window), "GtkDialog");
4840 gtk_container_border_width (GTK_CONTAINER (dialog_window), 0);
4841 gtk_widget_set_usize (dialog_window, 200, 110);
4843 button = gtk_button_new_with_label ("OK");
4844 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
4845 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->action_area),
4846 button, TRUE, TRUE, 0);
4847 gtk_widget_grab_default (button);
4848 gtk_widget_show (button);
4850 button = gtk_button_new_with_label ("Toggle");
4851 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4852 GTK_SIGNAL_FUNC (label_toggle),
4854 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
4855 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->action_area),
4856 button, TRUE, TRUE, 0);
4857 gtk_widget_show (button);
4862 if (!GTK_WIDGET_VISIBLE (dialog_window))
4863 gtk_widget_show (dialog_window);
4865 gtk_widget_destroy (dialog_window);
4873 create_range_controls (void)
4875 static GtkWidget *window = NULL;
4879 GtkWidget *scrollbar;
4881 GtkWidget *separator;
4882 GtkObject *adjustment;
4886 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
4888 gtk_signal_connect (GTK_OBJECT (window), "destroy",
4889 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
4892 gtk_window_set_title (GTK_WINDOW (window), "range controls");
4893 gtk_container_border_width (GTK_CONTAINER (window), 0);
4896 box1 = gtk_vbox_new (FALSE, 0);
4897 gtk_container_add (GTK_CONTAINER (window), box1);
4898 gtk_widget_show (box1);
4901 box2 = gtk_vbox_new (FALSE, 10);
4902 gtk_container_border_width (GTK_CONTAINER (box2), 10);
4903 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
4904 gtk_widget_show (box2);
4907 adjustment = gtk_adjustment_new (0.0, 0.0, 101.0, 0.1, 1.0, 1.0);
4909 scale = gtk_hscale_new (GTK_ADJUSTMENT (adjustment));
4910 gtk_widget_set_usize (GTK_WIDGET (scale), 150, 30);
4911 gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED);
4912 gtk_scale_set_digits (GTK_SCALE (scale), 1);
4913 gtk_scale_set_draw_value (GTK_SCALE (scale), TRUE);
4914 gtk_box_pack_start (GTK_BOX (box2), scale, TRUE, TRUE, 0);
4915 gtk_widget_show (scale);
4917 scrollbar = gtk_hscrollbar_new (GTK_ADJUSTMENT (adjustment));
4918 gtk_range_set_update_policy (GTK_RANGE (scrollbar),
4919 GTK_UPDATE_CONTINUOUS);
4920 gtk_box_pack_start (GTK_BOX (box2), scrollbar, TRUE, TRUE, 0);
4921 gtk_widget_show (scrollbar);
4924 separator = gtk_hseparator_new ();
4925 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
4926 gtk_widget_show (separator);
4929 box2 = gtk_vbox_new (FALSE, 10);
4930 gtk_container_border_width (GTK_CONTAINER (box2), 10);
4931 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
4932 gtk_widget_show (box2);
4935 button = gtk_button_new_with_label ("close");
4936 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
4937 GTK_SIGNAL_FUNC(gtk_widget_destroy),
4938 GTK_OBJECT (window));
4939 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
4940 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
4941 gtk_widget_grab_default (button);
4942 gtk_widget_show (button);
4945 if (!GTK_WIDGET_VISIBLE (window))
4946 gtk_widget_show (window);
4948 gtk_widget_destroy (window);
4956 create_rulers (void)
4958 static GtkWidget *window = NULL;
4964 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
4965 gtk_window_set_policy (GTK_WINDOW (window), TRUE, TRUE, FALSE);
4967 gtk_signal_connect (GTK_OBJECT (window), "destroy",
4968 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
4971 gtk_window_set_title (GTK_WINDOW (window), "rulers");
4972 gtk_widget_set_usize (window, 300, 300);
4973 gtk_widget_set_events (window,
4974 GDK_POINTER_MOTION_MASK
4975 | GDK_POINTER_MOTION_HINT_MASK);
4976 gtk_container_border_width (GTK_CONTAINER (window), 0);
4978 table = gtk_table_new (2, 2, FALSE);
4979 gtk_container_add (GTK_CONTAINER (window), table);
4980 gtk_widget_show (table);
4982 ruler = gtk_hruler_new ();
4983 gtk_ruler_set_metric (GTK_RULER (ruler), GTK_CENTIMETERS);
4984 gtk_ruler_set_range (GTK_RULER (ruler), 100, 0, 0, 20);
4986 gtk_signal_connect_object (
4987 GTK_OBJECT (window),
4988 "motion_notify_event",
4990 GTK_WIDGET_CLASS (GTK_OBJECT (ruler)->klass)->motion_notify_event),
4991 GTK_OBJECT (ruler));
4993 gtk_table_attach (GTK_TABLE (table), ruler, 1, 2, 0, 1,
4994 GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
4995 gtk_widget_show (ruler);
4998 ruler = gtk_vruler_new ();
4999 gtk_ruler_set_range (GTK_RULER (ruler), 5, 15, 0, 20);
5001 gtk_signal_connect_object (
5002 GTK_OBJECT (window),
5003 "motion_notify_event",
5004 GTK_SIGNAL_FUNC (GTK_WIDGET_CLASS (GTK_OBJECT (ruler)->klass)->motion_notify_event),
5005 GTK_OBJECT (ruler));
5007 gtk_table_attach (GTK_TABLE (table), ruler, 0, 1, 1, 2,
5008 GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
5009 gtk_widget_show (ruler);
5012 if (!GTK_WIDGET_VISIBLE (window))
5013 gtk_widget_show (window);
5015 gtk_widget_destroy (window);
5019 text_toggle_editable (GtkWidget *checkbutton,
5022 gtk_text_set_editable(GTK_TEXT(text),
5023 GTK_TOGGLE_BUTTON(checkbutton)->active);
5027 text_toggle_word_wrap (GtkWidget *checkbutton,
5030 gtk_text_set_word_wrap(GTK_TEXT(text),
5031 GTK_TOGGLE_BUTTON(checkbutton)->active);
5041 static GtkWidget *window = NULL;
5047 GtkWidget *separator;
5049 GtkWidget *hscrollbar;
5050 GtkWidget *vscrollbar;
5057 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5058 gtk_widget_set_name (window, "text window");
5059 gtk_widget_set_usize (window, 500, 500);
5060 gtk_window_set_policy (GTK_WINDOW(window), TRUE, TRUE, FALSE);
5062 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5063 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5066 gtk_window_set_title (GTK_WINDOW (window), "test");
5067 gtk_container_border_width (GTK_CONTAINER (window), 0);
5070 box1 = gtk_vbox_new (FALSE, 0);
5071 gtk_container_add (GTK_CONTAINER (window), box1);
5072 gtk_widget_show (box1);
5075 box2 = gtk_vbox_new (FALSE, 10);
5076 gtk_container_border_width (GTK_CONTAINER (box2), 10);
5077 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
5078 gtk_widget_show (box2);
5081 table = gtk_table_new (2, 2, FALSE);
5082 gtk_table_set_row_spacing (GTK_TABLE (table), 0, 2);
5083 gtk_table_set_col_spacing (GTK_TABLE (table), 0, 2);
5084 gtk_box_pack_start (GTK_BOX (box2), table, TRUE, TRUE, 0);
5085 gtk_widget_show (table);
5087 text = gtk_text_new (NULL, NULL);
5088 gtk_text_set_editable (GTK_TEXT (text), TRUE);
5089 gtk_table_attach (GTK_TABLE (table), text, 0, 1, 0, 1,
5090 GTK_EXPAND | GTK_SHRINK | GTK_FILL,
5091 GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
5092 gtk_widget_grab_focus (text);
5093 gtk_widget_show (text);
5095 hscrollbar = gtk_hscrollbar_new (GTK_TEXT (text)->hadj);
5096 gtk_table_attach (GTK_TABLE (table), hscrollbar, 0, 1, 1, 2,
5097 GTK_EXPAND | GTK_FILL | GTK_SHRINK, GTK_FILL, 0, 0);
5098 gtk_widget_show (hscrollbar);
5100 vscrollbar = gtk_vscrollbar_new (GTK_TEXT (text)->vadj);
5101 gtk_table_attach (GTK_TABLE (table), vscrollbar, 1, 2, 0, 1,
5102 GTK_FILL, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
5103 gtk_widget_show (vscrollbar);
5105 gtk_text_freeze (GTK_TEXT (text));
5107 gtk_widget_realize (text);
5109 infile = fopen("testgtk.c", "r");
5118 nchars = fread(buffer, 1, 1024, infile);
5119 gtk_text_insert (GTK_TEXT (text), NULL, NULL,
5120 NULL, buffer, nchars);
5129 gtk_text_insert (GTK_TEXT (text), NULL, &text->style->black, NULL,
5131 gtk_text_insert (GTK_TEXT (text), NULL, &text->style->bg[GTK_STATE_NORMAL], NULL,
5133 gtk_text_insert (GTK_TEXT (text), NULL, &text->style->black, NULL,
5136 gtk_text_thaw (GTK_TEXT (text));
5138 hbox = gtk_hbutton_box_new ();
5139 gtk_box_pack_start (GTK_BOX (box2), hbox, FALSE, FALSE, 0);
5140 gtk_widget_show (hbox);
5142 check = gtk_check_button_new_with_label("Editable");
5143 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, FALSE, 0);
5144 gtk_signal_connect (GTK_OBJECT(check), "toggled",
5145 GTK_SIGNAL_FUNC(text_toggle_editable), text);
5146 gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(check), TRUE);
5147 gtk_widget_show (check);
5149 check = gtk_check_button_new_with_label("Wrap Words");
5150 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
5151 gtk_signal_connect (GTK_OBJECT(check), "toggled",
5152 GTK_SIGNAL_FUNC(text_toggle_word_wrap), text);
5153 gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(check), FALSE);
5154 gtk_widget_show (check);
5156 separator = gtk_hseparator_new ();
5157 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
5158 gtk_widget_show (separator);
5161 box2 = gtk_vbox_new (FALSE, 10);
5162 gtk_container_border_width (GTK_CONTAINER (box2), 10);
5163 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
5164 gtk_widget_show (box2);
5167 button = gtk_button_new_with_label ("close");
5168 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5169 GTK_SIGNAL_FUNC(gtk_widget_destroy),
5170 GTK_OBJECT (window));
5171 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
5172 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5173 gtk_widget_grab_default (button);
5174 gtk_widget_show (button);
5177 if (!GTK_WIDGET_VISIBLE (window))
5178 gtk_widget_show (window);
5180 gtk_widget_destroy (window);
5187 GdkPixmap *book_open;
5188 GdkPixmap *book_closed;
5189 GdkBitmap *book_open_mask;
5190 GdkBitmap *book_closed_mask;
5193 page_switch (GtkWidget *widget, GtkNotebookPage *page, gint page_num)
5195 GtkNotebookPage *oldpage;
5198 oldpage = GTK_NOTEBOOK (widget)->cur_page;
5200 if (page == oldpage)
5203 pixwid = ((GtkBoxChild*)(GTK_BOX (page->tab_label)->children->data))->widget;
5204 gtk_pixmap_set (GTK_PIXMAP (pixwid), book_open, book_open_mask);
5205 pixwid = ((GtkBoxChild*) (GTK_BOX (page->menu_label)->children->data))->widget;
5206 gtk_pixmap_set (GTK_PIXMAP (pixwid), book_open, book_open_mask);
5210 pixwid = ((GtkBoxChild*) (GTK_BOX
5211 (oldpage->tab_label)->children->data))->widget;
5212 gtk_pixmap_set (GTK_PIXMAP (pixwid), book_closed, book_closed_mask);
5213 pixwid = ((GtkBoxChild*) (GTK_BOX (oldpage->menu_label)->children->data))->widget;
5214 gtk_pixmap_set (GTK_PIXMAP (pixwid), book_closed, book_closed_mask);
5219 create_pages (GtkNotebook *notebook, gint start, gint end)
5221 GtkWidget *child = NULL;
5226 GtkWidget *label_box;
5227 GtkWidget *menu_box;
5233 for (i = start; i <= end; i++)
5235 sprintf (buffer, "Page %d", i);
5240 child = gtk_button_new_with_label (buffer);
5241 gtk_container_border_width (GTK_CONTAINER(child), 10);
5244 child = gtk_label_new (buffer);
5247 child = gtk_frame_new (buffer);
5248 gtk_container_border_width (GTK_CONTAINER (child), 10);
5250 box = gtk_vbox_new (TRUE,0);
5251 gtk_container_border_width (GTK_CONTAINER (box), 10);
5252 gtk_container_add (GTK_CONTAINER (child), box);
5254 label = gtk_label_new (buffer);
5255 gtk_box_pack_start (GTK_BOX(box), label, TRUE, TRUE, 5);
5257 entry = gtk_entry_new ();
5258 gtk_box_pack_start (GTK_BOX(box), entry, TRUE, TRUE, 5);
5260 hbox = gtk_hbox_new (TRUE,0);
5261 gtk_box_pack_start (GTK_BOX(box), hbox, TRUE, TRUE, 5);
5263 button = gtk_button_new_with_label ("Ok");
5264 gtk_box_pack_start (GTK_BOX(hbox), button, TRUE, TRUE, 5);
5266 button = gtk_button_new_with_label ("Cancel");
5267 gtk_box_pack_start (GTK_BOX(hbox), button, TRUE, TRUE, 5);
5270 child = gtk_frame_new (buffer);
5271 gtk_container_border_width (GTK_CONTAINER (child), 10);
5273 label = gtk_label_new (buffer);
5274 gtk_container_add (GTK_CONTAINER (child), label);
5278 gtk_widget_show_all (child);
5280 label_box = gtk_hbox_new (FALSE, 0);
5281 pixwid = gtk_pixmap_new (book_closed, book_closed_mask);
5282 gtk_box_pack_start (GTK_BOX (label_box), pixwid, FALSE, TRUE, 0);
5283 gtk_misc_set_padding (GTK_MISC (pixwid), 3, 1);
5284 label = gtk_label_new (buffer);
5285 gtk_box_pack_start (GTK_BOX (label_box), label, FALSE, TRUE, 0);
5286 gtk_widget_show_all (label_box);
5288 menu_box = gtk_hbox_new (FALSE, 0);
5289 pixwid = gtk_pixmap_new (book_closed, book_closed_mask);
5290 gtk_box_pack_start (GTK_BOX (menu_box), pixwid, FALSE, TRUE, 0);
5291 gtk_misc_set_padding (GTK_MISC (pixwid), 3, 1);
5292 label = gtk_label_new (buffer);
5293 gtk_box_pack_start (GTK_BOX (menu_box), label, FALSE, TRUE, 0);
5294 gtk_widget_show_all (menu_box);
5296 gtk_notebook_append_page_menu (notebook, child, label_box, menu_box);
5301 rotate_notebook (GtkButton *button,
5302 GtkNotebook *notebook)
5304 gtk_notebook_set_tab_pos (notebook, (notebook->tab_pos + 1) % 4);
5308 standard_notebook (GtkButton *button,
5309 GtkNotebook *notebook)
5313 gtk_notebook_set_show_tabs (notebook, TRUE);
5314 gtk_notebook_set_scrollable (notebook, FALSE);
5315 if (g_list_length (notebook->children) == 15)
5316 for (i = 0; i < 10; i++)
5317 gtk_notebook_remove_page (notebook, 5);
5321 notabs_notebook (GtkButton *button,
5322 GtkNotebook *notebook)
5326 gtk_notebook_set_show_tabs (notebook, FALSE);
5327 if (g_list_length (notebook->children) == 15)
5328 for (i = 0; i < 10; i++)
5329 gtk_notebook_remove_page (notebook, 5);
5333 scrollable_notebook (GtkButton *button,
5334 GtkNotebook *notebook)
5336 gtk_notebook_set_show_tabs (notebook, TRUE);
5337 gtk_notebook_set_scrollable (notebook, TRUE);
5338 if (g_list_length (notebook->children) == 5)
5339 create_pages (notebook, 6, 15);
5343 notebook_popup (GtkToggleButton *button,
5344 GtkNotebook *notebook)
5347 gtk_notebook_popup_enable (notebook);
5349 gtk_notebook_popup_disable (notebook);
5353 create_notebook (void)
5355 static GtkWidget *window = NULL;
5359 GtkWidget *separator;
5360 GtkWidget *notebook;
5362 GdkColor *transparent = NULL;
5364 static OptionMenuItem items[] =
5366 { "Standard", standard_notebook },
5367 { "No tabs", notabs_notebook },
5368 { "Scrollable", scrollable_notebook }
5373 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5375 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5376 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5379 gtk_window_set_title (GTK_WINDOW (window), "notebook");
5380 gtk_container_border_width (GTK_CONTAINER (window), 0);
5382 box1 = gtk_vbox_new (FALSE, 0);
5383 gtk_container_add (GTK_CONTAINER (window), box1);
5385 notebook = gtk_notebook_new ();
5386 gtk_signal_connect (GTK_OBJECT (notebook), "switch_page",
5387 GTK_SIGNAL_FUNC (page_switch), NULL);
5388 gtk_notebook_set_tab_pos (GTK_NOTEBOOK (notebook), GTK_POS_TOP);
5389 gtk_box_pack_start (GTK_BOX (box1), notebook, TRUE, TRUE, 0);
5390 gtk_container_border_width (GTK_CONTAINER (notebook), 10);
5392 gtk_widget_realize (notebook);
5393 book_open = gdk_pixmap_create_from_xpm_d (notebook->window,
5397 book_closed = gdk_pixmap_create_from_xpm_d (notebook->window,
5402 create_pages (GTK_NOTEBOOK (notebook), 1, 5);
5404 separator = gtk_hseparator_new ();
5405 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 10);
5407 box2 = gtk_hbox_new (TRUE, 5);
5408 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
5410 omenu = build_option_menu (items, 3, 0, notebook);
5411 gtk_box_pack_start (GTK_BOX (box2), omenu, FALSE, FALSE, 0);
5413 button = gtk_check_button_new_with_label ("enable popup menu");
5414 gtk_box_pack_start (GTK_BOX (box2), button, FALSE, FALSE, 0);
5415 gtk_signal_connect (GTK_OBJECT(button), "clicked",
5416 GTK_SIGNAL_FUNC (notebook_popup),
5417 GTK_OBJECT (notebook));
5419 box2 = gtk_hbox_new (TRUE, 10);
5420 gtk_container_border_width (GTK_CONTAINER (box2), 10);
5421 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
5423 button = gtk_button_new_with_label ("close");
5424 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5425 GTK_SIGNAL_FUNC (gtk_widget_destroy),
5426 GTK_OBJECT (window));
5427 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
5428 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5429 gtk_widget_grab_default (button);
5431 button = gtk_button_new_with_label ("next");
5432 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5433 GTK_SIGNAL_FUNC (gtk_notebook_next_page),
5434 GTK_OBJECT (notebook));
5435 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
5436 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5438 button = gtk_button_new_with_label ("prev");
5439 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5440 GTK_SIGNAL_FUNC (gtk_notebook_prev_page),
5441 GTK_OBJECT (notebook));
5442 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
5443 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5445 button = gtk_button_new_with_label ("rotate");
5446 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5447 GTK_SIGNAL_FUNC (rotate_notebook),
5449 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
5450 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5453 if (!GTK_WIDGET_VISIBLE (window))
5454 gtk_widget_show_all (window);
5456 gtk_widget_destroy (window);
5466 static GtkWidget *window = NULL;
5474 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5476 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5477 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5480 gtk_window_set_title (GTK_WINDOW (window), "Panes");
5481 gtk_container_border_width (GTK_CONTAINER (window), 0);
5483 vpaned = gtk_vpaned_new ();
5484 gtk_container_add (GTK_CONTAINER (window), vpaned);
5485 gtk_container_border_width (GTK_CONTAINER(vpaned), 5);
5486 gtk_widget_show (vpaned);
5488 hpaned = gtk_hpaned_new ();
5489 gtk_paned_add1 (GTK_PANED (vpaned), hpaned);
5491 frame = gtk_frame_new (NULL);
5492 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
5493 gtk_widget_set_usize (frame, 60, 60);
5494 gtk_paned_add1 (GTK_PANED (hpaned), frame);
5495 gtk_widget_show (frame);
5497 button = gtk_button_new_with_label ("Hi there");
5498 gtk_container_add (GTK_CONTAINER(frame), button);
5499 gtk_widget_show (button);
5501 frame = gtk_frame_new (NULL);
5502 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
5503 gtk_widget_set_usize (frame, 80, 60);
5504 gtk_paned_add2 (GTK_PANED (hpaned), frame);
5505 gtk_widget_show (frame);
5507 gtk_widget_show (hpaned);
5509 frame = gtk_frame_new (NULL);
5510 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
5511 gtk_widget_set_usize (frame, 60, 80);
5512 gtk_paned_add2 (GTK_PANED (vpaned), frame);
5513 gtk_widget_show (frame);
5516 if (!GTK_WIDGET_VISIBLE (window))
5517 gtk_widget_show (window);
5519 gtk_widget_destroy (window);
5527 dnd_drop_destroy_popup (GtkWidget *widget, GtkWindow **window)
5529 if(GTK_IS_BUTTON(widget)) /* I.e. they clicked the close button */
5530 gtk_widget_destroy(GTK_WIDGET(*window));
5532 gtk_grab_remove(GTK_WIDGET(*window));
5540 dnd_drop (GtkWidget *button, GdkEvent *event)
5542 static GtkWidget *window = NULL;
5543 GtkWidget *vbox, *lbl, *btn;
5546 /* DND doesn't obey gtk_grab's, so check if we're already displaying
5547 * drop modal dialog first
5552 window = gtk_window_new(GTK_WINDOW_DIALOG);
5553 gtk_container_border_width (GTK_CONTAINER(window), 10);
5555 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5556 GTK_SIGNAL_FUNC(dnd_drop_destroy_popup),
5558 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
5559 GTK_SIGNAL_FUNC(gtk_false),
5562 vbox = gtk_vbox_new(FALSE, 5);
5564 /* Display message that we got from drop source */
5565 msg = g_malloc(strlen(event->dropdataavailable.data)
5566 + strlen(event->dropdataavailable.data_type) + 100);
5567 sprintf(msg, "Drop data of type %s was:\n\n%s",
5568 event->dropdataavailable.data_type,
5569 (char *)event->dropdataavailable.data);
5570 lbl = gtk_label_new(msg);
5571 gtk_label_set_justify(GTK_LABEL(lbl), GTK_JUSTIFY_FILL);
5573 gtk_widget_show(lbl);
5574 gtk_box_pack_start_defaults(GTK_BOX(vbox), lbl);
5576 /* Provide an obvious way out of this heinousness */
5577 btn = gtk_button_new_with_label("Continue with life in\nspite of this oppression");
5578 gtk_signal_connect_object (GTK_OBJECT (btn), "clicked",
5579 GTK_SIGNAL_FUNC(gtk_widget_destroy),
5580 GTK_OBJECT (window));
5581 gtk_widget_show(btn);
5582 gtk_box_pack_start_defaults(GTK_BOX(vbox), btn);
5584 gtk_container_add(GTK_CONTAINER(window), vbox);
5586 gtk_widget_show(vbox);
5587 gtk_grab_add(window);
5588 gtk_widget_show(window);
5592 dnd_drag_request (GtkWidget *button, GdkEvent *event)
5594 #define DND_STRING "Bill Gates demands royalties for\nyour use of his innovation."
5595 gtk_widget_dnd_data_set (button, event, DND_STRING, strlen(DND_STRING) + 1);
5601 static GtkWidget *window = NULL;
5607 GtkWidget *separator;
5609 /* For clarity... */
5610 char *possible_drag_types[] = {"text/plain"};
5611 char *accepted_drop_types[] = {"text/plain"};
5613 static GtkWidget *drag_icon = NULL;
5614 static GtkWidget *drop_icon = NULL;
5618 GdkPoint hotspot = {5,5};
5622 drag_icon = shape_create_icon ("Modeller.xpm",
5623 440, 140, 0,0, GTK_WINDOW_POPUP);
5625 gtk_signal_connect (GTK_OBJECT (drag_icon), "destroy",
5626 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5629 gtk_widget_hide (drag_icon);
5634 drop_icon = shape_create_icon ("3DRings.xpm",
5635 440, 140, 0,0, GTK_WINDOW_POPUP);
5637 gtk_signal_connect (GTK_OBJECT (drop_icon), "destroy",
5638 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5641 gtk_widget_hide (drop_icon);
5644 gdk_dnd_set_drag_shape(drag_icon->window,
5649 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5651 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5652 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5655 gtk_window_set_title (GTK_WINDOW (window), "Drag -N- Drop");
5656 gtk_container_border_width (GTK_CONTAINER (window), 0);
5658 box1 = gtk_vbox_new (FALSE, 0);
5659 gtk_container_add (GTK_CONTAINER (window), box1);
5660 gtk_widget_show (box1);
5662 box2 = gtk_hbox_new (FALSE, 5);
5663 gtk_container_border_width (GTK_CONTAINER (box2), 10);
5664 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
5665 gtk_widget_show (box2);
5667 frame = gtk_frame_new ("Drag");
5668 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
5669 gtk_widget_show (frame);
5671 box3 = gtk_vbox_new (FALSE, 5);
5672 gtk_container_border_width (GTK_CONTAINER (box3), 5);
5673 gtk_container_add (GTK_CONTAINER (frame), box3);
5674 gtk_widget_show (box3);
5679 button = gtk_button_new_with_label ("Drag me!");
5680 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
5681 gtk_widget_show (button);
5684 * currently, the widget has to be realized to
5685 * set dnd on it, this needs to change
5687 gtk_widget_realize (button);
5688 gtk_signal_connect (GTK_OBJECT (button),
5689 "drag_request_event",
5690 GTK_SIGNAL_FUNC(dnd_drag_request),
5693 gtk_widget_dnd_drag_set (button, TRUE, possible_drag_types, 1);
5696 frame = gtk_frame_new ("Drop");
5697 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
5698 gtk_widget_show (frame);
5700 box3 = gtk_vbox_new (FALSE, 5);
5701 gtk_container_border_width (GTK_CONTAINER (box3), 5);
5702 gtk_container_add (GTK_CONTAINER (frame), box3);
5703 gtk_widget_show (box3);
5709 button = gtk_button_new_with_label ("To");
5710 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
5711 gtk_widget_show (button);
5713 gtk_widget_realize (button);
5714 gtk_signal_connect (GTK_OBJECT (button),
5715 "drop_data_available_event",
5716 GTK_SIGNAL_FUNC(dnd_drop),
5719 gtk_widget_dnd_drop_set (button, TRUE, accepted_drop_types, 1, FALSE);
5722 separator = gtk_hseparator_new ();
5723 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
5724 gtk_widget_show (separator);
5727 box2 = gtk_vbox_new (FALSE, 10);
5728 gtk_container_border_width (GTK_CONTAINER (box2), 10);
5729 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
5730 gtk_widget_show (box2);
5733 button = gtk_button_new_with_label ("close");
5735 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5736 GTK_SIGNAL_FUNC(gtk_widget_destroy),
5737 GTK_OBJECT (window));
5739 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
5740 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5741 gtk_widget_grab_default (button);
5742 gtk_widget_show (button);
5745 if (!GTK_WIDGET_VISIBLE (window))
5746 gtk_widget_show (window);
5748 gtk_widget_destroy (window);
5755 static GdkWindow *root_win = NULL;
5757 typedef struct _cursoroffset {gint x,y;} CursorOffset;
5760 shape_pressed (GtkWidget *widget, GdkEventButton *event)
5764 /* ignore double and triple click */
5765 if (event->type != GDK_BUTTON_PRESS)
5768 p = gtk_object_get_user_data (GTK_OBJECT(widget));
5769 p->x = (int) event->x;
5770 p->y = (int) event->y;
5772 gtk_grab_add (widget);
5773 gdk_pointer_grab (widget->window, TRUE,
5774 GDK_BUTTON_RELEASE_MASK |
5775 GDK_BUTTON_MOTION_MASK |
5776 GDK_POINTER_MOTION_HINT_MASK,
5781 shape_released (GtkWidget *widget)
5783 gtk_grab_remove (widget);
5784 gdk_pointer_ungrab (0);
5788 shape_motion (GtkWidget *widget,
5789 GdkEventMotion *event)
5793 GdkModifierType mask;
5795 p = gtk_object_get_user_data (GTK_OBJECT (widget));
5798 * Can't use event->x / event->y here
5799 * because I need absolute coordinates.
5801 gdk_window_get_pointer (root_win, &xp, &yp, &mask);
5802 gtk_widget_set_uposition (widget, xp - p->x, yp - p->y);
5806 shape_create_icon (char *xpm_file,
5816 CursorOffset* icon_pos;
5818 GdkBitmap *gdk_pixmap_mask;
5819 GdkPixmap *gdk_pixmap;
5822 style = gtk_widget_get_default_style ();
5823 gc = style->black_gc;
5826 * GDK_WINDOW_TOPLEVEL works also, giving you a title border
5828 window = gtk_window_new (window_type);
5830 fixed = gtk_fixed_new ();
5831 gtk_widget_set_usize (fixed, 100,100);
5832 gtk_container_add (GTK_CONTAINER (window), fixed);
5833 gtk_widget_show (fixed);
5835 gtk_widget_set_events (window,
5836 gtk_widget_get_events (window) |
5837 GDK_BUTTON_MOTION_MASK |
5838 GDK_POINTER_MOTION_HINT_MASK |
5839 GDK_BUTTON_PRESS_MASK);
5841 gtk_widget_realize (window);
5842 gdk_pixmap = gdk_pixmap_create_from_xpm (window->window, &gdk_pixmap_mask,
5843 &style->bg[GTK_STATE_NORMAL],
5846 pixmap = gtk_pixmap_new (gdk_pixmap, gdk_pixmap_mask);
5847 gtk_fixed_put (GTK_FIXED (fixed), pixmap, px,py);
5848 gtk_widget_show (pixmap);
5850 gtk_widget_shape_combine_mask (window, gdk_pixmap_mask, px,py);
5853 gtk_signal_connect (GTK_OBJECT (window), "button_press_event",
5854 GTK_SIGNAL_FUNC (shape_pressed),NULL);
5855 gtk_signal_connect (GTK_OBJECT (window), "button_release_event",
5856 GTK_SIGNAL_FUNC (shape_released),NULL);
5857 gtk_signal_connect (GTK_OBJECT (window), "motion_notify_event",
5858 GTK_SIGNAL_FUNC (shape_motion),NULL);
5860 icon_pos = g_new (CursorOffset, 1);
5861 gtk_object_set_user_data(GTK_OBJECT(window), icon_pos);
5863 gtk_widget_set_uposition (window, x, y);
5864 gtk_widget_show (window);
5870 create_shapes (void)
5872 /* Variables used by the Drag/Drop and Shape Window demos */
5873 static GtkWidget *modeller = NULL;
5874 static GtkWidget *sheets = NULL;
5875 static GtkWidget *rings = NULL;
5877 root_win = gdk_window_foreign_new (GDK_ROOT_WINDOW ());
5881 modeller = shape_create_icon ("Modeller.xpm",
5882 440, 140, 0,0, GTK_WINDOW_POPUP);
5884 gtk_signal_connect (GTK_OBJECT (modeller), "destroy",
5885 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5889 gtk_widget_destroy (modeller);
5893 sheets = shape_create_icon ("FilesQueue.xpm",
5894 580, 170, 0,0, GTK_WINDOW_POPUP);
5896 gtk_signal_connect (GTK_OBJECT (sheets), "destroy",
5897 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5902 gtk_widget_destroy (sheets);
5906 rings = shape_create_icon ("3DRings.xpm",
5907 460, 270, 25,25, GTK_WINDOW_TOPLEVEL);
5909 gtk_signal_connect (GTK_OBJECT (rings), "destroy",
5910 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5914 gtk_widget_destroy (rings);
5922 create_wmhints (void)
5924 static GtkWidget *window = NULL;
5926 GtkWidget *separator;
5935 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5937 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5938 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5941 gtk_window_set_title (GTK_WINDOW (window), "WM Hints");
5942 gtk_container_border_width (GTK_CONTAINER (window), 0);
5944 gtk_widget_realize (window);
5946 circles = gdk_bitmap_create_from_data (window->window,
5950 gdk_window_set_icon (window->window, NULL,
5953 gdk_window_set_icon_name (window->window, "WMHints Test Icon");
5955 gdk_window_set_decorations (window->window, GDK_DECOR_ALL | GDK_DECOR_MENU);
5956 gdk_window_set_functions (window->window, GDK_FUNC_ALL | GDK_FUNC_RESIZE);
5958 box1 = gtk_vbox_new (FALSE, 0);
5959 gtk_container_add (GTK_CONTAINER (window), box1);
5960 gtk_widget_show (box1);
5962 label = gtk_label_new ("Try iconizing me!");
5963 gtk_widget_set_usize (label, 150, 50);
5964 gtk_box_pack_start (GTK_BOX (box1), label, TRUE, TRUE, 0);
5965 gtk_widget_show (label);
5968 separator = gtk_hseparator_new ();
5969 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
5970 gtk_widget_show (separator);
5973 box2 = gtk_vbox_new (FALSE, 10);
5974 gtk_container_border_width (GTK_CONTAINER (box2), 10);
5975 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
5976 gtk_widget_show (box2);
5979 button = gtk_button_new_with_label ("close");
5981 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5982 GTK_SIGNAL_FUNC(gtk_widget_destroy),
5983 GTK_OBJECT (window));
5985 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
5986 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5987 gtk_widget_grab_default (button);
5988 gtk_widget_show (button);
5991 if (!GTK_WIDGET_VISIBLE (window))
5992 gtk_widget_show (window);
5994 gtk_widget_destroy (window);
6001 typedef struct _ProgressData {
6004 GtkWidget *block_spin;
6005 GtkWidget *x_align_spin;
6006 GtkWidget *y_align_spin;
6007 GtkWidget *step_spin;
6008 GtkWidget *act_blocks_spin;
6017 progress_timeout (gpointer data)
6022 adj = GTK_PROGRESS (data)->adjustment;
6024 new_val = adj->value + 1;
6025 if (new_val > adj->upper)
6026 new_val = adj->lower;
6028 gtk_progress_set_value (GTK_PROGRESS (data), new_val);
6034 destroy_progress (GtkWidget *widget,
6035 ProgressData **pdata)
6037 gtk_timeout_remove ((*pdata)->timer);
6038 (*pdata)->timer = 0;
6039 (*pdata)->window = NULL;
6045 progressbar_toggle_orientation (GtkWidget *widget, ProgressData *pdata)
6049 if (!GTK_WIDGET_MAPPED (widget))
6052 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
6053 (((GtkOptionMenu *)(pdata->omenu1))->menu_item), i);
6055 gtk_progress_bar_set_orientation (GTK_PROGRESS_BAR (pdata->pbar),
6056 (GtkProgressBarOrientation) (3-i));
6060 toggle_show_text (GtkWidget *widget, ProgressData *pdata)
6062 gtk_progress_set_show_text (GTK_PROGRESS (pdata->pbar),
6063 GTK_TOGGLE_BUTTON (widget)->active);
6064 gtk_widget_set_sensitive (pdata->entry, GTK_TOGGLE_BUTTON (widget)->active);
6065 gtk_widget_set_sensitive (pdata->x_align_spin,
6066 GTK_TOGGLE_BUTTON (widget)->active);
6067 gtk_widget_set_sensitive (pdata->y_align_spin,
6068 GTK_TOGGLE_BUTTON (widget)->active);
6072 progressbar_toggle_bar_style (GtkWidget *widget, ProgressData *pdata)
6076 if (!GTK_WIDGET_MAPPED (widget))
6079 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
6080 (((GtkOptionMenu *)(pdata->omenu2))->menu_item), i);
6085 gtk_widget_set_sensitive (pdata->block_spin, TRUE);
6087 gtk_widget_set_sensitive (pdata->block_spin, FALSE);
6089 gtk_progress_bar_set_bar_style (GTK_PROGRESS_BAR (pdata->pbar),
6090 (GtkProgressBarStyle) i);
6094 progress_value_changed (GtkAdjustment *adj, ProgressData *pdata)
6098 if (GTK_PROGRESS (pdata->pbar)->activity_mode)
6099 sprintf (buf, "???");
6101 sprintf (buf, "%.0f%%", 100 *
6102 gtk_progress_get_current_percentage (GTK_PROGRESS (pdata->pbar)));
6103 gtk_label_set (GTK_LABEL (pdata->label), buf);
6107 adjust_blocks (GtkAdjustment *adj, ProgressData *pdata)
6109 gtk_progress_set_percentage (GTK_PROGRESS (pdata->pbar), 0);
6110 gtk_progress_bar_set_discrete_blocks (GTK_PROGRESS_BAR (pdata->pbar),
6111 gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (pdata->block_spin)));
6115 adjust_step (GtkAdjustment *adj, ProgressData *pdata)
6117 gtk_progress_bar_set_activity_step (GTK_PROGRESS_BAR (pdata->pbar),
6118 gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (pdata->step_spin)));
6122 adjust_act_blocks (GtkAdjustment *adj, ProgressData *pdata)
6124 gtk_progress_bar_set_activity_blocks (GTK_PROGRESS_BAR (pdata->pbar),
6125 gtk_spin_button_get_value_as_int
6126 (GTK_SPIN_BUTTON (pdata->act_blocks_spin)));
6130 adjust_align (GtkAdjustment *adj, ProgressData *pdata)
6132 gtk_progress_set_text_alignment (GTK_PROGRESS (pdata->pbar),
6133 gtk_spin_button_get_value_as_float
6134 (GTK_SPIN_BUTTON (pdata->x_align_spin)),
6135 gtk_spin_button_get_value_as_float
6136 (GTK_SPIN_BUTTON (pdata->y_align_spin)));
6140 toggle_activity_mode (GtkWidget *widget, ProgressData *pdata)
6142 gtk_progress_set_activity_mode (GTK_PROGRESS (pdata->pbar),
6143 GTK_TOGGLE_BUTTON (widget)->active);
6144 gtk_widget_set_sensitive (pdata->step_spin,
6145 GTK_TOGGLE_BUTTON (widget)->active);
6146 gtk_widget_set_sensitive (pdata->act_blocks_spin,
6147 GTK_TOGGLE_BUTTON (widget)->active);
6151 entry_changed (GtkWidget *widget, ProgressData *pdata)
6153 gtk_progress_set_format_string (GTK_PROGRESS (pdata->pbar),
6154 gtk_entry_get_text (GTK_ENTRY (pdata->entry)));
6158 create_progress_bar (void)
6170 static ProgressData *pdata = NULL;
6172 static OptionMenuItem items1[] =
6174 { "Left-Right", progressbar_toggle_orientation },
6175 { "Right-Left", progressbar_toggle_orientation },
6176 { "Bottom-Top", progressbar_toggle_orientation },
6177 { "Top-Bottom", progressbar_toggle_orientation }
6180 static OptionMenuItem items2[] =
6182 { "Continuous", progressbar_toggle_bar_style },
6183 { "Discrete", progressbar_toggle_bar_style }
6187 pdata = g_new0 (ProgressData, 1);
6191 pdata->window = gtk_dialog_new ();
6193 gtk_window_set_policy (GTK_WINDOW (pdata->window), FALSE, FALSE, TRUE);
6195 gtk_signal_connect (GTK_OBJECT (pdata->window), "destroy",
6196 GTK_SIGNAL_FUNC (destroy_progress),
6201 gtk_window_set_title (GTK_WINDOW (pdata->window), "GtkProgressBar");
6202 gtk_container_border_width (GTK_CONTAINER (pdata->window), 0);
6204 vbox = gtk_vbox_new (FALSE, 5);
6205 gtk_container_border_width (GTK_CONTAINER (vbox), 10);
6206 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (pdata->window)->vbox),
6207 vbox, FALSE, TRUE, 0);
6209 frame = gtk_frame_new ("Progress");
6210 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
6212 vbox2 = gtk_vbox_new (FALSE, 5);
6213 gtk_container_add (GTK_CONTAINER (frame), vbox2);
6215 align = gtk_alignment_new (0.5, 0.5, 0, 0);
6216 gtk_box_pack_start (GTK_BOX (vbox2), align, FALSE, FALSE, 5);
6218 adj = (GtkAdjustment *) gtk_adjustment_new (0, 1, 300, 0, 0, 0);
6219 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
6220 GTK_SIGNAL_FUNC (progress_value_changed), pdata);
6222 pdata->pbar = gtk_progress_bar_new_with_adjustment (adj);
6223 gtk_progress_set_format_string (GTK_PROGRESS (pdata->pbar),
6224 "%v from [%l,%u] (=%p%%)");
6225 gtk_container_add (GTK_CONTAINER (align), pdata->pbar);
6226 pdata->timer = gtk_timeout_add (100, progress_timeout, pdata->pbar);
6228 align = gtk_alignment_new (0.5, 0.5, 0, 0);
6229 gtk_box_pack_start (GTK_BOX (vbox2), align, FALSE, FALSE, 5);
6231 hbox = gtk_hbox_new (FALSE, 5);
6232 gtk_container_add (GTK_CONTAINER (align), hbox);
6233 label = gtk_label_new ("Label updated by user :");
6234 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
6235 pdata->label = gtk_label_new ("");
6236 gtk_box_pack_start (GTK_BOX (hbox), pdata->label, FALSE, TRUE, 0);
6238 frame = gtk_frame_new ("Options");
6239 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
6241 vbox2 = gtk_vbox_new (FALSE, 5);
6242 gtk_container_add (GTK_CONTAINER (frame), vbox2);
6244 tab = gtk_table_new (7, 2, FALSE);
6245 gtk_box_pack_start (GTK_BOX (vbox2), tab, FALSE, TRUE, 0);
6247 label = gtk_label_new ("Orientation :");
6248 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 0, 1,
6249 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
6251 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
6253 pdata->omenu1 = build_option_menu (items1, 4, 0, pdata);
6254 hbox = gtk_hbox_new (FALSE, 0);
6255 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 0, 1,
6256 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
6258 gtk_box_pack_start (GTK_BOX (hbox), pdata->omenu1, TRUE, TRUE, 0);
6260 check = gtk_check_button_new_with_label ("Show text");
6261 gtk_signal_connect (GTK_OBJECT (check), "clicked",
6262 GTK_SIGNAL_FUNC (toggle_show_text),
6264 gtk_table_attach (GTK_TABLE (tab), check, 0, 1, 1, 2,
6265 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
6268 hbox = gtk_hbox_new (FALSE, 0);
6269 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 1, 2,
6270 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
6273 label = gtk_label_new ("Format : ");
6274 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
6276 pdata->entry = gtk_entry_new ();
6277 gtk_signal_connect (GTK_OBJECT (pdata->entry), "changed",
6278 GTK_SIGNAL_FUNC (entry_changed),
6280 gtk_box_pack_start (GTK_BOX (hbox), pdata->entry, TRUE, TRUE, 0);
6281 gtk_entry_set_text (GTK_ENTRY (pdata->entry), "%v from [%l,%u] (=%p%%)");
6282 gtk_widget_set_usize (pdata->entry, 100, -1);
6283 gtk_widget_set_sensitive (pdata->entry, FALSE);
6285 label = gtk_label_new ("Text align :");
6286 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 2, 3,
6287 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
6289 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
6291 hbox = gtk_hbox_new (FALSE, 0);
6292 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 2, 3,
6293 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
6296 label = gtk_label_new ("x :");
6297 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 5);
6299 adj = (GtkAdjustment *) gtk_adjustment_new (0.5, 0, 1, 0.1, 0.1, 0);
6300 pdata->x_align_spin = gtk_spin_button_new (adj, 0, 1);
6301 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
6302 GTK_SIGNAL_FUNC (adjust_align), pdata);
6303 gtk_box_pack_start (GTK_BOX (hbox), pdata->x_align_spin, FALSE, TRUE, 0);
6304 gtk_widget_set_sensitive (pdata->x_align_spin, FALSE);
6306 label = gtk_label_new ("y :");
6307 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 5);
6309 adj = (GtkAdjustment *) gtk_adjustment_new (0.5, 0, 1, 0.1, 0.1, 0);
6310 pdata->y_align_spin = gtk_spin_button_new (adj, 0, 1);
6311 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
6312 GTK_SIGNAL_FUNC (adjust_align), pdata);
6313 gtk_box_pack_start (GTK_BOX (hbox), pdata->y_align_spin, FALSE, TRUE, 0);
6314 gtk_widget_set_sensitive (pdata->y_align_spin, FALSE);
6316 label = gtk_label_new ("Bar Style :");
6317 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 3, 4,
6318 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
6320 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
6322 pdata->omenu2 = build_option_menu (items2, 2, 0, pdata);
6323 hbox = gtk_hbox_new (FALSE, 0);
6324 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 3, 4,
6325 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
6327 gtk_box_pack_start (GTK_BOX (hbox), pdata->omenu2, TRUE, TRUE, 0);
6329 label = gtk_label_new ("Block count :");
6330 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 4, 5,
6331 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
6333 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
6335 hbox = gtk_hbox_new (FALSE, 0);
6336 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 4, 5,
6337 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
6339 adj = (GtkAdjustment *) gtk_adjustment_new (10, 2, 20, 1, 5, 0);
6340 pdata->block_spin = gtk_spin_button_new (adj, 0, 0);
6341 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
6342 GTK_SIGNAL_FUNC (adjust_blocks), pdata);
6343 gtk_box_pack_start (GTK_BOX (hbox), pdata->block_spin, FALSE, TRUE, 0);
6344 gtk_widget_set_sensitive (pdata->block_spin, FALSE);
6346 check = gtk_check_button_new_with_label ("Activity mode");
6347 gtk_signal_connect (GTK_OBJECT (check), "clicked",
6348 GTK_SIGNAL_FUNC (toggle_activity_mode),
6350 gtk_table_attach (GTK_TABLE (tab), check, 0, 1, 5, 6,
6351 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
6354 hbox = gtk_hbox_new (FALSE, 0);
6355 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 5, 6,
6356 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
6358 label = gtk_label_new ("Step size : ");
6359 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
6360 adj = (GtkAdjustment *) gtk_adjustment_new (3, 1, 20, 1, 5, 0);
6361 pdata->step_spin = gtk_spin_button_new (adj, 0, 0);
6362 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
6363 GTK_SIGNAL_FUNC (adjust_step), pdata);
6364 gtk_box_pack_start (GTK_BOX (hbox), pdata->step_spin, FALSE, TRUE, 0);
6365 gtk_widget_set_sensitive (pdata->step_spin, FALSE);
6367 hbox = gtk_hbox_new (FALSE, 0);
6368 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 6, 7,
6369 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
6371 label = gtk_label_new ("Blocks : ");
6372 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
6373 adj = (GtkAdjustment *) gtk_adjustment_new (5, 2, 10, 1, 5, 0);
6374 pdata->act_blocks_spin = gtk_spin_button_new (adj, 0, 0);
6375 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
6376 GTK_SIGNAL_FUNC (adjust_act_blocks), pdata);
6377 gtk_box_pack_start (GTK_BOX (hbox), pdata->act_blocks_spin, FALSE, TRUE,
6379 gtk_widget_set_sensitive (pdata->act_blocks_spin, FALSE);
6381 button = gtk_button_new_with_label ("close");
6382 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6383 GTK_SIGNAL_FUNC (gtk_widget_destroy),
6384 GTK_OBJECT (pdata->window));
6385 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6386 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (pdata->window)->action_area),
6387 button, TRUE, TRUE, 0);
6388 gtk_widget_grab_default (button);
6391 if (!GTK_WIDGET_VISIBLE (pdata->window))
6392 gtk_widget_show_all (pdata->window);
6394 gtk_widget_destroy (pdata->window);
6401 static int color_idle = 0;
6404 color_idle_func (GtkWidget *preview)
6406 static int count = 1;
6410 for (i = 0; i < 256; i++)
6412 for (j = 0, k = 0; j < 256; j++)
6414 buf[k+0] = i + count;
6416 buf[k+2] = j + count;
6420 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
6425 gtk_widget_draw (preview, NULL);
6431 color_preview_destroy (GtkWidget *widget,
6434 gtk_idle_remove (color_idle);
6441 create_color_preview (void)
6443 static GtkWidget *window = NULL;
6450 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6452 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6453 GTK_SIGNAL_FUNC(color_preview_destroy),
6456 gtk_window_set_title (GTK_WINDOW (window), "test");
6457 gtk_container_border_width (GTK_CONTAINER (window), 10);
6459 preview = gtk_preview_new (GTK_PREVIEW_COLOR);
6460 gtk_preview_size (GTK_PREVIEW (preview), 256, 256);
6461 gtk_container_add (GTK_CONTAINER (window), preview);
6463 for (i = 0; i < 256; i++)
6465 for (j = 0, k = 0; j < 256; j++)
6473 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
6476 color_idle = gtk_idle_add ((GtkFunction) color_idle_func, preview);
6479 if (!GTK_WIDGET_VISIBLE (window))
6480 gtk_widget_show_all (window);
6482 gtk_widget_destroy (window);
6489 static int gray_idle = 0;
6492 gray_idle_func (GtkWidget *preview)
6494 static int count = 1;
6498 for (i = 0; i < 256; i++)
6500 for (j = 0; j < 256; j++)
6501 buf[j] = i + j + count;
6503 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
6508 gtk_widget_draw (preview, NULL);
6514 gray_preview_destroy (GtkWidget *widget,
6517 gtk_idle_remove (gray_idle);
6524 create_gray_preview (void)
6526 static GtkWidget *window = NULL;
6533 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6535 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6536 GTK_SIGNAL_FUNC(gray_preview_destroy),
6539 gtk_window_set_title (GTK_WINDOW (window), "test");
6540 gtk_container_border_width (GTK_CONTAINER (window), 10);
6542 preview = gtk_preview_new (GTK_PREVIEW_GRAYSCALE);
6543 gtk_preview_size (GTK_PREVIEW (preview), 256, 256);
6544 gtk_container_add (GTK_CONTAINER (window), preview);
6546 for (i = 0; i < 256; i++)
6548 for (j = 0; j < 256; j++)
6551 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
6554 gray_idle = gtk_idle_add ((GtkFunction) gray_idle_func, preview);
6557 if (!GTK_WIDGET_VISIBLE (window))
6558 gtk_widget_show_all (window);
6560 gtk_widget_destroy (window);
6569 selection_test_received (GtkWidget *list, GtkSelectionData *data)
6572 GtkWidget *list_item;
6576 if (data->length < 0)
6578 g_print ("Selection retrieval failed\n");
6581 if (data->type != GDK_SELECTION_TYPE_ATOM)
6583 g_print ("Selection \"TARGETS\" was not returned as atoms!\n");
6587 /* Clear out any current list items */
6589 gtk_list_clear_items (GTK_LIST(list), 0, -1);
6591 /* Add new items to list */
6593 atoms = (GdkAtom *)data->data;
6596 l = data->length / sizeof (GdkAtom);
6597 for (i = 0; i < l; i++)
6600 name = gdk_atom_name (atoms[i]);
6603 list_item = gtk_list_item_new_with_label (name);
6607 list_item = gtk_list_item_new_with_label ("(bad atom)");
6609 gtk_widget_show (list_item);
6610 item_list = g_list_append (item_list, list_item);
6613 gtk_list_append_items (GTK_LIST (list), item_list);
6619 selection_test_get_targets (GtkWidget *widget, GtkWidget *list)
6621 static GdkAtom targets_atom = GDK_NONE;
6623 if (targets_atom == GDK_NONE)
6624 targets_atom = gdk_atom_intern ("TARGETS", FALSE);
6626 gtk_selection_convert (list, GDK_SELECTION_PRIMARY, targets_atom,
6631 create_selection_test (void)
6633 static GtkWidget *window = NULL;
6636 GtkWidget *scrolled_win;
6642 window = gtk_dialog_new ();
6644 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6645 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6648 gtk_window_set_title (GTK_WINDOW (window), "Selection Test");
6649 gtk_container_border_width (GTK_CONTAINER (window), 0);
6651 /* Create the list */
6653 vbox = gtk_vbox_new (FALSE, 5);
6654 gtk_container_border_width (GTK_CONTAINER (vbox), 10);
6655 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), vbox,
6658 label = gtk_label_new ("Gets available targets for current selection");
6659 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
6661 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
6662 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
6663 GTK_POLICY_AUTOMATIC,
6664 GTK_POLICY_AUTOMATIC);
6665 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
6666 gtk_widget_set_usize (scrolled_win, 100, 200);
6668 list = gtk_list_new ();
6669 gtk_container_add (GTK_CONTAINER (scrolled_win), list);
6671 gtk_signal_connect (GTK_OBJECT(list), "selection_received",
6672 GTK_SIGNAL_FUNC (selection_test_received), NULL);
6674 /* .. And create some buttons */
6675 button = gtk_button_new_with_label ("Get Targets");
6676 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
6677 button, TRUE, TRUE, 0);
6679 gtk_signal_connect (GTK_OBJECT (button), "clicked",
6680 GTK_SIGNAL_FUNC (selection_test_get_targets), list);
6682 button = gtk_button_new_with_label ("Quit");
6683 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
6684 button, TRUE, TRUE, 0);
6686 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6687 GTK_SIGNAL_FUNC (gtk_widget_destroy),
6688 GTK_OBJECT (window));
6691 if (!GTK_WIDGET_VISIBLE (window))
6692 gtk_widget_show_all (window);
6694 gtk_widget_destroy (window);
6702 create_gamma_curve (void)
6704 static GtkWidget *window = NULL, *curve;
6705 static int count = 0;
6712 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6713 gtk_window_set_title (GTK_WINDOW (window), "test");
6714 gtk_container_border_width (GTK_CONTAINER (window), 10);
6716 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6717 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6720 curve = gtk_gamma_curve_new ();
6721 gtk_container_add (GTK_CONTAINER (window), curve);
6722 gtk_widget_show (curve);
6725 max = 127 + (count % 2)*128;
6726 gtk_curve_set_range (GTK_CURVE (GTK_GAMMA_CURVE (curve)->curve),
6728 for (i = 0; i < max; ++i)
6729 vec[i] = (127 / sqrt (max)) * sqrt (i);
6730 gtk_curve_set_vector (GTK_CURVE (GTK_GAMMA_CURVE (curve)->curve),
6733 if (!GTK_WIDGET_VISIBLE (window))
6734 gtk_widget_show (window);
6735 else if (count % 4 == 3)
6737 gtk_widget_destroy (window);
6748 static int scroll_test_pos = 0.0;
6749 static GdkGC *scroll_test_gc = NULL;
6752 scroll_test_expose (GtkWidget *widget, GdkEventExpose *event,
6756 gint imin, imax, jmin, jmax;
6758 imin = (event->area.x) / 10;
6759 imax = (event->area.x + event->area.width + 9) / 10;
6761 jmin = ((int)adj->value + event->area.y) / 10;
6762 jmax = ((int)adj->value + event->area.y + event->area.height + 9) / 10;
6764 gdk_window_clear_area (widget->window,
6765 event->area.x, event->area.y,
6766 event->area.width, event->area.height);
6768 for (i=imin; i<imax; i++)
6769 for (j=jmin; j<jmax; j++)
6771 gdk_draw_rectangle (widget->window,
6772 widget->style->black_gc,
6774 10*i, 10*j - (int)adj->value, 1+i%10, 1+j%10);
6780 scroll_test_configure (GtkWidget *widget, GdkEventConfigure *event,
6783 adj->page_increment = 0.9 * widget->allocation.height;
6784 adj->page_size = widget->allocation.height;
6786 gtk_signal_emit_by_name (GTK_OBJECT (adj), "changed");
6790 scroll_test_adjustment_changed (GtkAdjustment *adj, GtkWidget *widget)
6792 gint source_min = (int)adj->value - scroll_test_pos;
6793 gint source_max = source_min + widget->allocation.height;
6795 gint dest_max = widget->allocation.height;
6799 scroll_test_pos = adj->value;
6801 if (!GTK_WIDGET_DRAWABLE (widget))
6808 rect.width = widget->allocation.width;
6809 rect.height = -source_min;
6810 if (rect.height > widget->allocation.height)
6811 rect.height = widget->allocation.height;
6814 dest_min = rect.height;
6819 rect.y = 2*widget->allocation.height - source_max;
6822 rect.width = widget->allocation.width;
6823 rect.height = widget->allocation.height - rect.y;
6825 source_max = widget->allocation.height;
6829 if (source_min != source_max)
6831 if (scroll_test_gc == NULL)
6833 scroll_test_gc = gdk_gc_new (widget->window);
6834 gdk_gc_set_exposures (scroll_test_gc, TRUE);
6837 gdk_draw_pixmap (widget->window,
6842 widget->allocation.width,
6843 source_max - source_min);
6845 /* Make sure graphics expose events are processed before scrolling
6848 while ((event = gdk_event_get_graphics_expose (widget->window)) != NULL)
6850 gtk_widget_event (widget, event);
6851 if (event->expose.count == 0)
6853 gdk_event_free (event);
6856 gdk_event_free (event);
6860 if (rect.height != 0)
6861 gtk_widget_draw (widget, &rect);
6866 create_scroll_test (void)
6868 static GtkWidget *window = NULL;
6870 GtkWidget *drawing_area;
6871 GtkWidget *scrollbar;
6877 window = gtk_dialog_new ();
6879 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6880 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6883 gtk_window_set_title (GTK_WINDOW (window), "Scroll Test");
6884 gtk_container_border_width (GTK_CONTAINER (window), 0);
6886 hbox = gtk_hbox_new (FALSE, 0);
6887 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), hbox,
6889 gtk_widget_show (hbox);
6891 drawing_area = gtk_drawing_area_new ();
6892 gtk_drawing_area_size (GTK_DRAWING_AREA (drawing_area), 200, 200);
6893 gtk_box_pack_start (GTK_BOX (hbox), drawing_area, TRUE, TRUE, 0);
6894 gtk_widget_show (drawing_area);
6896 gtk_widget_set_events (drawing_area, GDK_EXPOSURE_MASK);
6898 adj = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.0, 1000.0, 1.0, 180.0, 200.0));
6899 scroll_test_pos = 0.0;
6901 scrollbar = gtk_vscrollbar_new (adj);
6902 gtk_box_pack_start (GTK_BOX (hbox), scrollbar, FALSE, FALSE, 0);
6903 gtk_widget_show (scrollbar);
6905 gtk_signal_connect (GTK_OBJECT (drawing_area), "expose_event",
6906 GTK_SIGNAL_FUNC (scroll_test_expose), adj);
6907 gtk_signal_connect (GTK_OBJECT (drawing_area), "configure_event",
6908 GTK_SIGNAL_FUNC (scroll_test_configure), adj);
6911 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
6912 GTK_SIGNAL_FUNC (scroll_test_adjustment_changed),
6915 /* .. And create some buttons */
6917 button = gtk_button_new_with_label ("Quit");
6918 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
6919 button, TRUE, TRUE, 0);
6921 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6922 GTK_SIGNAL_FUNC (gtk_widget_destroy),
6923 GTK_OBJECT (window));
6924 gtk_widget_show (button);
6927 if (!GTK_WIDGET_VISIBLE (window))
6928 gtk_widget_show (window);
6930 gtk_widget_destroy (window);
6937 static int timer = 0;
6940 timeout_test (GtkWidget *label)
6942 static int count = 0;
6943 static char buffer[32];
6945 sprintf (buffer, "count: %d", ++count);
6946 gtk_label_set (GTK_LABEL (label), buffer);
6952 start_timeout_test (GtkWidget *widget,
6957 timer = gtk_timeout_add (100, (GtkFunction) timeout_test, label);
6962 stop_timeout_test (GtkWidget *widget,
6967 gtk_timeout_remove (timer);
6973 destroy_timeout_test (GtkWidget *widget,
6976 stop_timeout_test (NULL, NULL);
6982 create_timeout_test (void)
6984 static GtkWidget *window = NULL;
6990 window = gtk_dialog_new ();
6992 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6993 GTK_SIGNAL_FUNC(destroy_timeout_test),
6996 gtk_window_set_title (GTK_WINDOW (window), "Timeout Test");
6997 gtk_container_border_width (GTK_CONTAINER (window), 0);
6999 label = gtk_label_new ("count: 0");
7000 gtk_misc_set_padding (GTK_MISC (label), 10, 10);
7001 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
7002 label, TRUE, TRUE, 0);
7003 gtk_widget_show (label);
7005 button = gtk_button_new_with_label ("close");
7006 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7007 GTK_SIGNAL_FUNC(gtk_widget_destroy),
7008 GTK_OBJECT (window));
7009 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7010 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7011 button, TRUE, TRUE, 0);
7012 gtk_widget_grab_default (button);
7013 gtk_widget_show (button);
7015 button = gtk_button_new_with_label ("start");
7016 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7017 GTK_SIGNAL_FUNC(start_timeout_test),
7019 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7020 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7021 button, TRUE, TRUE, 0);
7022 gtk_widget_show (button);
7024 button = gtk_button_new_with_label ("stop");
7025 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7026 GTK_SIGNAL_FUNC(stop_timeout_test),
7028 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7029 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7030 button, TRUE, TRUE, 0);
7031 gtk_widget_show (button);
7034 if (!GTK_WIDGET_VISIBLE (window))
7035 gtk_widget_show (window);
7037 gtk_widget_destroy (window);
7044 static int idle = 0;
7047 idle_test (GtkWidget *label)
7049 static int count = 0;
7050 static char buffer[32];
7052 sprintf (buffer, "count: %d", ++count);
7053 gtk_label_set (GTK_LABEL (label), buffer);
7059 start_idle_test (GtkWidget *widget,
7064 idle = gtk_idle_add ((GtkFunction) idle_test, label);
7069 stop_idle_test (GtkWidget *widget,
7074 gtk_idle_remove (idle);
7080 destroy_idle_test (GtkWidget *widget,
7083 stop_idle_test (NULL, NULL);
7089 toggle_idle_container (GtkObject *button,
7090 GtkContainer *container)
7092 gtk_container_set_resize_mode (container, (guint) gtk_object_get_user_data (button));
7096 create_idle_test (void)
7098 static GtkWidget *window = NULL;
7101 GtkWidget *container;
7108 window = gtk_dialog_new ();
7110 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7111 GTK_SIGNAL_FUNC(destroy_idle_test),
7114 gtk_window_set_title (GTK_WINDOW (window), "Idle Test");
7115 gtk_container_border_width (GTK_CONTAINER (window), 0);
7117 label = gtk_label_new ("count: 0");
7118 gtk_misc_set_padding (GTK_MISC (label), 10, 10);
7119 gtk_widget_show (label);
7122 gtk_widget_new (GTK_TYPE_HBOX,
7123 "GtkWidget::visible", TRUE,
7124 /* "GtkContainer::child", gtk_widget_new (GTK_TYPE_HBOX,
7125 * "GtkWidget::visible", TRUE,
7127 "GtkContainer::child", label,
7130 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
7131 container, TRUE, TRUE, 0);
7134 gtk_widget_new (GTK_TYPE_FRAME,
7135 "GtkContainer::border_width", 5,
7136 "GtkFrame::label", "Label Container",
7137 "GtkWidget::visible", TRUE,
7138 "GtkWidget::parent", GTK_DIALOG (window)->vbox,
7141 gtk_widget_new (GTK_TYPE_VBOX,
7142 "GtkWidget::visible", TRUE,
7143 "GtkWidget::parent", frame,
7146 gtk_widget_new (GTK_TYPE_RADIO_BUTTON,
7147 "GtkButton::label", "Resize-Parent",
7148 "GtkObject::user_data", (void*)GTK_RESIZE_PARENT,
7149 "GtkObject::signal::clicked", toggle_idle_container, container,
7150 "GtkWidget::visible", TRUE,
7151 "GtkWidget::parent", box,
7154 gtk_widget_new (GTK_TYPE_RADIO_BUTTON,
7155 "GtkButton::label", "Resize-Queue",
7156 "GtkObject::user_data", (void*)GTK_RESIZE_QUEUE,
7157 "GtkObject::signal::clicked", toggle_idle_container, container,
7158 "GtkRadioButton::group", button,
7159 "GtkWidget::visible", TRUE,
7160 "GtkWidget::parent", box,
7163 gtk_widget_new (GTK_TYPE_RADIO_BUTTON,
7164 "GtkButton::label", "Resize-Immediate",
7165 "GtkObject::user_data", (void*)GTK_RESIZE_IMMEDIATE,
7166 "GtkObject::signal::clicked", toggle_idle_container, container,
7167 "GtkRadioButton::group", button,
7168 "GtkWidget::visible", TRUE,
7169 "GtkWidget::parent", box,
7173 button = gtk_button_new_with_label ("close");
7174 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7175 GTK_SIGNAL_FUNC(gtk_widget_destroy),
7176 GTK_OBJECT (window));
7177 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7178 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7179 button, TRUE, TRUE, 0);
7180 gtk_widget_grab_default (button);
7181 gtk_widget_show (button);
7183 button = gtk_button_new_with_label ("start");
7184 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7185 GTK_SIGNAL_FUNC(start_idle_test),
7187 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7188 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7189 button, TRUE, TRUE, 0);
7190 gtk_widget_show (button);
7192 button = gtk_button_new_with_label ("stop");
7193 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7194 GTK_SIGNAL_FUNC(stop_idle_test),
7196 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7197 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7198 button, TRUE, TRUE, 0);
7199 gtk_widget_show (button);
7202 if (!GTK_WIDGET_VISIBLE (window))
7203 gtk_widget_show (window);
7205 gtk_widget_destroy (window);
7213 reload_rc_file (void)
7217 if (gtk_rc_reparse_all ())
7219 toplevels = gdk_window_get_toplevels();
7223 gdk_window_get_user_data (toplevels->data, (gpointer *)&widget);
7226 gtk_widget_reset_rc_styles (widget);
7228 toplevels = toplevels->next;
7230 g_list_free (toplevels);
7235 reload_all_rc_files (void)
7237 static GdkAtom atom_rcfiles = GDK_NONE;
7243 atom_rcfiles = gdk_atom_intern("_GTK_READ_RCFILES", FALSE);
7245 for(i = 0; i < 5; i++)
7247 sev.data_format = 32;
7248 sev.message_type = atom_rcfiles;
7249 gdk_event_send_clientmessage_toall ((GdkEvent *) &sev);
7253 create_rc_file (void)
7255 static GtkWidget *window = NULL;
7260 window = gtk_dialog_new ();
7262 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7263 GTK_SIGNAL_FUNC(destroy_idle_test),
7266 gtk_window_set_title (GTK_WINDOW (window), "Reload Rc file");
7267 gtk_container_border_width (GTK_CONTAINER (window), 0);
7269 button = gtk_button_new_with_label ("Reload");
7270 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7271 GTK_SIGNAL_FUNC(reload_rc_file), NULL);
7272 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7273 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7274 button, TRUE, TRUE, 0);
7275 gtk_widget_grab_default (button);
7276 gtk_widget_show (button);
7278 button = gtk_button_new_with_label ("Reload All");
7279 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7280 GTK_SIGNAL_FUNC(reload_all_rc_files), NULL);
7281 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7282 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7283 button, TRUE, TRUE, 0);
7284 gtk_widget_show (button);
7286 button = gtk_button_new_with_label ("Close");
7287 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7288 GTK_SIGNAL_FUNC(gtk_widget_destroy),
7289 GTK_OBJECT (window));
7290 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7291 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7292 button, TRUE, TRUE, 0);
7293 gtk_widget_show (button);
7297 if (!GTK_WIDGET_VISIBLE (window))
7298 gtk_widget_show (window);
7300 gtk_widget_destroy (window);
7304 * Test of recursive mainloop
7308 mainloop_destroyed (GtkWidget *w, GtkWidget **window)
7315 create_mainloop (void)
7317 static GtkWidget *window = NULL;
7323 window = gtk_dialog_new ();
7325 gtk_window_set_title (GTK_WINDOW (window), "Test Main Loop");
7327 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7328 GTK_SIGNAL_FUNC(mainloop_destroyed),
7331 label = gtk_label_new ("In recursive main loop...");
7332 gtk_misc_set_padding (GTK_MISC(label), 20, 20);
7334 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), label,
7336 gtk_widget_show (label);
7338 button = gtk_button_new_with_label ("Leave");
7339 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area), button,
7342 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7343 GTK_SIGNAL_FUNC (gtk_widget_destroy),
7344 GTK_OBJECT (window));
7346 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7347 gtk_widget_grab_default (button);
7349 gtk_widget_show (button);
7352 if (!GTK_WIDGET_VISIBLE (window))
7354 gtk_widget_show (window);
7356 g_print ("create_mainloop: start\n");
7358 g_print ("create_mainloop: done\n");
7361 gtk_widget_destroy (window);
7365 * Main Window and Exit
7369 do_exit (GtkWidget *widget, GtkWidget *window)
7371 gtk_widget_destroy (window);
7376 create_main_window (void)
7383 { "button box", create_button_box },
7384 { "buttons", create_buttons },
7385 { "check buttons", create_check_buttons },
7386 { "clist", create_clist},
7387 { "color selection", create_color_selection },
7388 { "ctree", create_ctree },
7389 { "cursors", create_cursors },
7390 { "dialog", create_dialog },
7391 { "dnd", create_dnd },
7392 { "entry", create_entry },
7393 { "file selection", create_file_selection },
7394 { "font selection", create_font_selection },
7395 { "gamma curve", create_gamma_curve },
7396 { "handle box", create_handle_box },
7397 { "item factory", create_item_factory },
7398 { "list", create_list },
7399 { "menus", create_menus },
7400 { "modal window", create_modal_window },
7401 { "notebook", create_notebook },
7402 { "panes", create_panes },
7403 { "pixmap", create_pixmap },
7404 { "preview color", create_color_preview },
7405 { "preview gray", create_gray_preview },
7406 { "progress bar", create_progress_bar },
7407 { "radio buttons", create_radio_buttons },
7408 { "range controls", create_range_controls },
7409 { "rc file", create_rc_file },
7410 { "reparent", create_reparent },
7411 { "rulers", create_rulers },
7412 { "scrolled windows", create_scrolled_windows },
7413 { "shapes", create_shapes },
7414 { "spinbutton", create_spins },
7415 { "statusbar", create_statusbar },
7416 { "test idle", create_idle_test },
7417 { "test mainloop", create_mainloop },
7418 { "test scrolling", create_scroll_test },
7419 { "test selection", create_selection_test },
7420 { "test timeout", create_timeout_test },
7421 { "text", create_text },
7422 { "toggle buttons", create_toggle_buttons },
7423 { "toolbar", create_toolbar },
7424 { "tooltips", create_tooltips },
7425 { "tree", create_tree_mode_window},
7426 { "WM hints", create_wmhints },
7428 int nbuttons = sizeof (buttons) / sizeof (buttons[0]);
7432 GtkWidget *scrolled_window;
7436 GtkWidget *separator;
7439 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7440 gtk_window_set_policy (GTK_WINDOW (window), FALSE, FALSE, FALSE);
7441 gtk_widget_set_name (window, "main window");
7442 gtk_widget_set_usize (window, 200, 400);
7443 gtk_widget_set_uposition (window, 20, 20);
7445 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7446 GTK_SIGNAL_FUNC(gtk_main_quit),
7448 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
7449 GTK_SIGNAL_FUNC (gtk_false),
7452 box1 = gtk_vbox_new (FALSE, 0);
7453 gtk_container_add (GTK_CONTAINER (window), box1);
7455 if (gtk_micro_version > 0)
7467 label = gtk_label_new (buffer);
7468 gtk_box_pack_start (GTK_BOX (box1), label, FALSE, FALSE, 0);
7470 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
7471 gtk_container_border_width (GTK_CONTAINER (scrolled_window), 10);
7472 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
7473 GTK_POLICY_AUTOMATIC,
7474 GTK_POLICY_AUTOMATIC);
7475 GTK_WIDGET_UNSET_FLAGS (GTK_SCROLLED_WINDOW (scrolled_window)->vscrollbar, GTK_CAN_FOCUS);
7476 gtk_box_pack_start (GTK_BOX (box1), scrolled_window, TRUE, TRUE, 0);
7478 box2 = gtk_vbox_new (FALSE, 0);
7479 gtk_container_border_width (GTK_CONTAINER (box2), 10);
7480 gtk_container_add (GTK_CONTAINER (scrolled_window), box2);
7481 gtk_container_set_focus_vadjustment (GTK_CONTAINER (box2),
7482 gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
7483 gtk_widget_show (box2);
7485 for (i = 0; i < nbuttons; i++)
7487 button = gtk_button_new_with_label (buttons[i].label);
7488 if (buttons[i].func)
7489 gtk_signal_connect (GTK_OBJECT (button),
7491 GTK_SIGNAL_FUNC(buttons[i].func),
7494 gtk_widget_set_sensitive (button, FALSE);
7495 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
7498 separator = gtk_hseparator_new ();
7499 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
7501 box2 = gtk_vbox_new (FALSE, 10);
7502 gtk_container_border_width (GTK_CONTAINER (box2), 10);
7503 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
7505 button = gtk_button_new_with_label ("close");
7506 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7507 GTK_SIGNAL_FUNC (do_exit),
7509 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
7510 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7511 gtk_widget_grab_default (button);
7513 gtk_widget_show_all (window);
7517 #include <gle/gle.h>
7518 #endif /* !HAVE_LIBGLE */
7521 main (int argc, char *argv[])
7523 GtkBindingSet *binding_set;
7525 srand (time (NULL));
7529 gtk_init (&argc, &argv);
7532 gle_init (&argc, &argv);
7533 #endif /* !HAVE_LIBGLE */
7537 binding_set = gtk_binding_set_by_class (gtk_type_class (GTK_TYPE_WIDGET));
7538 gtk_binding_entry_add_signal (binding_set,
7539 '9', GDK_CONTROL_MASK | GDK_RELEASE_MASK,
7542 GTK_TYPE_STRING, "GtkWidgetClass <ctrl><release>9 test");
7544 gtk_rc_parse ("testgtkrc");
7546 create_main_window ();