1 /* GTK - The GIMP Toolkit
2 * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Library General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Library General Public License for more details.
14 * You should have received a copy of the GNU Library General Public
15 * License along with this library; if not, write to the
16 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17 * Boston, MA 02111-1307, USA.
27 #include "../gdk/gdk.h"
28 #include "../gdk/gdkx.h"
29 #include "../gdk/gdkkeysyms.h"
31 #include "circles.xbm"
33 typedef struct _OptionMenuItem
40 shape_create_icon (char *xpm_file,
48 build_option_menu (OptionMenuItem items[],
53 /* macro, structure and variables used by tree window demos */
54 #define DEFAULT_NUMBER_OF_ITEM 3
55 #define DEFAULT_RECURSION_LEVEL 3
58 GSList* selection_mode_group;
59 GtkWidget* single_button;
60 GtkWidget* browse_button;
61 GtkWidget* multiple_button;
62 GtkWidget* draw_line_button;
63 GtkWidget* view_line_button;
64 GtkWidget* no_root_item_button;
65 GtkWidget* nb_item_spinner;
66 GtkWidget* recursion_spinner;
67 } sTreeSampleSelection;
69 typedef struct sTreeButtons {
71 GtkWidget* add_button;
72 GtkWidget* remove_button;
73 GtkWidget* subtree_button;
75 /* end of tree section */
78 build_option_menu (OptionMenuItem items[],
89 omenu = gtk_option_menu_new ();
91 menu = gtk_menu_new ();
94 for (i = 0; i < num_items; i++)
96 menu_item = gtk_radio_menu_item_new_with_label (group, items[i].name);
97 gtk_signal_connect (GTK_OBJECT (menu_item), "activate",
98 (GtkSignalFunc) items[i].func, data);
99 group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menu_item));
100 gtk_menu_append (GTK_MENU (menu), menu_item);
102 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_item), TRUE);
103 gtk_widget_show (menu_item);
106 gtk_option_menu_set_menu (GTK_OPTION_MENU (omenu), menu);
107 gtk_option_menu_set_history (GTK_OPTION_MENU (omenu), history);
113 destroy_tooltips (GtkWidget *widget, GtkWindow **window)
115 GtkTooltips *tt = gtk_object_get_data (GTK_OBJECT (*window), "tooltips");
116 gtk_object_unref (GTK_OBJECT (tt));
125 button_window (GtkWidget *widget,
128 if (!GTK_WIDGET_VISIBLE (button))
129 gtk_widget_show (button);
131 gtk_widget_hide (button);
135 create_buttons (void)
137 static GtkWidget *window = NULL;
141 GtkWidget *button[10];
142 GtkWidget *separator;
146 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
148 gtk_signal_connect (GTK_OBJECT (window), "destroy",
149 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
152 gtk_window_set_title (GTK_WINDOW (window), "GtkButton");
153 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
155 box1 = gtk_vbox_new (FALSE, 0);
156 gtk_container_add (GTK_CONTAINER (window), box1);
158 table = gtk_table_new (3, 3, FALSE);
159 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
160 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
161 gtk_container_set_border_width (GTK_CONTAINER (table), 10);
162 gtk_box_pack_start (GTK_BOX (box1), table, TRUE, TRUE, 0);
164 button[0] = gtk_button_new_with_label ("button1");
165 button[1] = gtk_button_new_with_label ("button2");
166 button[2] = gtk_button_new_with_label ("button3");
167 button[3] = gtk_button_new_with_label ("button4");
168 button[4] = gtk_button_new_with_label ("button5");
169 button[5] = gtk_button_new_with_label ("button6");
170 button[6] = gtk_button_new_with_label ("button7");
171 button[7] = gtk_button_new_with_label ("button8");
172 button[8] = gtk_button_new_with_label ("button9");
174 gtk_signal_connect (GTK_OBJECT (button[0]), "clicked",
175 GTK_SIGNAL_FUNC(button_window),
178 gtk_table_attach (GTK_TABLE (table), button[0], 0, 1, 0, 1,
179 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
181 gtk_signal_connect (GTK_OBJECT (button[1]), "clicked",
182 GTK_SIGNAL_FUNC(button_window),
185 gtk_table_attach (GTK_TABLE (table), button[1], 1, 2, 1, 2,
186 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
188 gtk_signal_connect (GTK_OBJECT (button[2]), "clicked",
189 GTK_SIGNAL_FUNC(button_window),
191 gtk_table_attach (GTK_TABLE (table), button[2], 2, 3, 2, 3,
192 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
194 gtk_signal_connect (GTK_OBJECT (button[3]), "clicked",
195 GTK_SIGNAL_FUNC(button_window),
197 gtk_table_attach (GTK_TABLE (table), button[3], 0, 1, 2, 3,
198 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
200 gtk_signal_connect (GTK_OBJECT (button[4]), "clicked",
201 GTK_SIGNAL_FUNC(button_window),
203 gtk_table_attach (GTK_TABLE (table), button[4], 2, 3, 0, 1,
204 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
206 gtk_signal_connect (GTK_OBJECT (button[5]), "clicked",
207 GTK_SIGNAL_FUNC(button_window),
209 gtk_table_attach (GTK_TABLE (table), button[5], 1, 2, 2, 3,
210 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
212 gtk_signal_connect (GTK_OBJECT (button[6]), "clicked",
213 GTK_SIGNAL_FUNC(button_window),
215 gtk_table_attach (GTK_TABLE (table), button[6], 1, 2, 0, 1,
216 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
218 gtk_signal_connect (GTK_OBJECT (button[7]), "clicked",
219 GTK_SIGNAL_FUNC(button_window),
221 gtk_table_attach (GTK_TABLE (table), button[7], 2, 3, 1, 2,
222 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
224 gtk_signal_connect (GTK_OBJECT (button[8]), "clicked",
225 GTK_SIGNAL_FUNC(button_window),
227 gtk_table_attach (GTK_TABLE (table), button[8], 0, 1, 1, 2,
228 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
230 separator = gtk_hseparator_new ();
231 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
233 box2 = gtk_vbox_new (FALSE, 10);
234 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
235 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
237 button[9] = gtk_button_new_with_label ("close");
238 gtk_signal_connect_object (GTK_OBJECT (button[9]), "clicked",
239 GTK_SIGNAL_FUNC(gtk_widget_destroy),
240 GTK_OBJECT (window));
241 gtk_box_pack_start (GTK_BOX (box2), button[9], TRUE, TRUE, 0);
242 GTK_WIDGET_SET_FLAGS (button[9], GTK_CAN_DEFAULT);
243 gtk_widget_grab_default (button[9]);
246 if (!GTK_WIDGET_VISIBLE (window))
247 gtk_widget_show_all (window);
249 gtk_widget_destroy (window);
257 create_toggle_buttons (void)
259 static GtkWidget *window = NULL;
263 GtkWidget *separator;
267 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
269 gtk_signal_connect (GTK_OBJECT (window), "destroy",
270 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
273 gtk_window_set_title (GTK_WINDOW (window), "GtkToggleButton");
274 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
276 box1 = gtk_vbox_new (FALSE, 0);
277 gtk_container_add (GTK_CONTAINER (window), box1);
279 box2 = gtk_vbox_new (FALSE, 10);
280 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
281 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
283 button = gtk_toggle_button_new_with_label ("button1");
284 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
286 button = gtk_toggle_button_new_with_label ("button2");
287 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
289 button = gtk_toggle_button_new_with_label ("button3");
290 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
292 separator = gtk_hseparator_new ();
293 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
295 box2 = gtk_vbox_new (FALSE, 10);
296 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
297 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
299 button = gtk_button_new_with_label ("close");
300 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
301 GTK_SIGNAL_FUNC(gtk_widget_destroy),
302 GTK_OBJECT (window));
303 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
304 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
305 gtk_widget_grab_default (button);
308 if (!GTK_WIDGET_VISIBLE (window))
309 gtk_widget_show_all (window);
311 gtk_widget_destroy (window);
319 create_check_buttons (void)
321 static GtkWidget *window = NULL;
325 GtkWidget *separator;
329 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
331 gtk_signal_connect (GTK_OBJECT (window), "destroy",
332 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
335 gtk_window_set_title (GTK_WINDOW (window), "GtkCheckButton");
336 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
338 box1 = gtk_vbox_new (FALSE, 0);
339 gtk_container_add (GTK_CONTAINER (window), box1);
341 box2 = gtk_vbox_new (FALSE, 10);
342 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
343 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
345 button = gtk_check_button_new_with_label ("button1");
346 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
348 button = gtk_check_button_new_with_label ("button2");
349 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
351 button = gtk_check_button_new_with_label ("button3");
352 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
354 separator = gtk_hseparator_new ();
355 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
357 box2 = gtk_vbox_new (FALSE, 10);
358 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
359 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
361 button = gtk_button_new_with_label ("close");
362 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
363 GTK_SIGNAL_FUNC(gtk_widget_destroy),
364 GTK_OBJECT (window));
365 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
366 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
367 gtk_widget_grab_default (button);
370 if (!GTK_WIDGET_VISIBLE (window))
371 gtk_widget_show_all (window);
373 gtk_widget_destroy (window);
381 create_radio_buttons (void)
383 static GtkWidget *window = NULL;
387 GtkWidget *separator;
391 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
393 gtk_signal_connect (GTK_OBJECT (window), "destroy",
394 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
397 gtk_window_set_title (GTK_WINDOW (window), "radio buttons");
398 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
400 box1 = gtk_vbox_new (FALSE, 0);
401 gtk_container_add (GTK_CONTAINER (window), box1);
403 box2 = gtk_vbox_new (FALSE, 10);
404 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
405 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
407 button = gtk_radio_button_new_with_label (NULL, "button1");
408 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
410 button = gtk_radio_button_new_with_label (
411 gtk_radio_button_group (GTK_RADIO_BUTTON (button)),
413 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
414 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
416 button = gtk_radio_button_new_with_label (
417 gtk_radio_button_group (GTK_RADIO_BUTTON (button)),
419 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
421 separator = gtk_hseparator_new ();
422 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
424 box2 = gtk_vbox_new (FALSE, 10);
425 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
426 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
428 button = gtk_button_new_with_label ("close");
429 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
430 GTK_SIGNAL_FUNC(gtk_widget_destroy),
431 GTK_OBJECT (window));
432 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
433 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
434 gtk_widget_grab_default (button);
437 if (!GTK_WIDGET_VISIBLE (window))
438 gtk_widget_show_all (window);
440 gtk_widget_destroy (window);
448 create_bbox (gint horizontal,
459 frame = gtk_frame_new (title);
462 bbox = gtk_hbutton_box_new ();
464 bbox = gtk_vbutton_box_new ();
466 gtk_container_set_border_width (GTK_CONTAINER (bbox), 5);
467 gtk_container_add (GTK_CONTAINER (frame), bbox);
469 gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), layout);
470 gtk_button_box_set_spacing (GTK_BUTTON_BOX (bbox), spacing);
471 gtk_button_box_set_child_size (GTK_BUTTON_BOX (bbox), child_w, child_h);
473 button = gtk_button_new_with_label ("OK");
474 gtk_container_add (GTK_CONTAINER (bbox), button);
476 button = gtk_button_new_with_label ("Cancel");
477 gtk_container_add (GTK_CONTAINER (bbox), button);
479 button = gtk_button_new_with_label ("Help");
480 gtk_container_add (GTK_CONTAINER (bbox), button);
486 create_button_box (void)
488 static GtkWidget* window = NULL;
489 GtkWidget *main_vbox;
492 GtkWidget *frame_horz;
493 GtkWidget *frame_vert;
497 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
498 gtk_window_set_title (GTK_WINDOW (window), "Button Boxes");
500 gtk_signal_connect (GTK_OBJECT (window), "destroy",
501 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
504 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
506 main_vbox = gtk_vbox_new (FALSE, 0);
507 gtk_container_add (GTK_CONTAINER (window), main_vbox);
509 frame_horz = gtk_frame_new ("Horizontal Button Boxes");
510 gtk_box_pack_start (GTK_BOX (main_vbox), frame_horz, TRUE, TRUE, 10);
512 vbox = gtk_vbox_new (FALSE, 0);
513 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
514 gtk_container_add (GTK_CONTAINER (frame_horz), vbox);
516 gtk_box_pack_start (GTK_BOX (vbox),
517 create_bbox (TRUE, "Spread", 40, 85, 20, GTK_BUTTONBOX_SPREAD),
520 gtk_box_pack_start (GTK_BOX (vbox),
521 create_bbox (TRUE, "Edge", 40, 85, 20, GTK_BUTTONBOX_EDGE),
524 gtk_box_pack_start (GTK_BOX (vbox),
525 create_bbox (TRUE, "Start", 40, 85, 20, GTK_BUTTONBOX_START),
528 gtk_box_pack_start (GTK_BOX (vbox),
529 create_bbox (TRUE, "End", 40, 85, 20, GTK_BUTTONBOX_END),
532 frame_vert = gtk_frame_new ("Vertical Button Boxes");
533 gtk_box_pack_start (GTK_BOX (main_vbox), frame_vert, TRUE, TRUE, 10);
535 hbox = gtk_hbox_new (FALSE, 0);
536 gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
537 gtk_container_add (GTK_CONTAINER (frame_vert), hbox);
539 gtk_box_pack_start (GTK_BOX (hbox),
540 create_bbox (FALSE, "Spread", 30, 85, 20, GTK_BUTTONBOX_SPREAD),
543 gtk_box_pack_start (GTK_BOX (hbox),
544 create_bbox (FALSE, "Edge", 30, 85, 20, GTK_BUTTONBOX_EDGE),
547 gtk_box_pack_start (GTK_BOX (hbox),
548 create_bbox (FALSE, "Start", 30, 85, 20, GTK_BUTTONBOX_START),
551 gtk_box_pack_start (GTK_BOX (hbox),
552 create_bbox (FALSE, "End", 30, 85, 20, GTK_BUTTONBOX_END),
556 if (!GTK_WIDGET_VISIBLE (window))
557 gtk_widget_show_all (window);
559 gtk_widget_destroy (window);
567 new_pixmap (char *filename,
569 GdkColor *background)
575 pixmap = gdk_pixmap_create_from_xpm (window, &mask,
578 wpixmap = gtk_pixmap_new (pixmap, mask);
584 set_toolbar_horizontal (GtkWidget *widget,
587 gtk_toolbar_set_orientation (GTK_TOOLBAR (data), GTK_ORIENTATION_HORIZONTAL);
591 set_toolbar_vertical (GtkWidget *widget,
594 gtk_toolbar_set_orientation (GTK_TOOLBAR (data), GTK_ORIENTATION_VERTICAL);
598 set_toolbar_icons (GtkWidget *widget,
601 gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_ICONS);
605 set_toolbar_text (GtkWidget *widget,
608 gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_TEXT);
612 set_toolbar_both (GtkWidget *widget,
615 gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_BOTH);
619 set_toolbar_small_space (GtkWidget *widget,
622 gtk_toolbar_set_space_size (GTK_TOOLBAR (data), 5);
626 set_toolbar_big_space (GtkWidget *widget,
629 gtk_toolbar_set_space_size (GTK_TOOLBAR (data), 10);
633 set_toolbar_enable (GtkWidget *widget,
636 gtk_toolbar_set_tooltips (GTK_TOOLBAR (data), TRUE);
640 set_toolbar_disable (GtkWidget *widget,
643 gtk_toolbar_set_tooltips (GTK_TOOLBAR (data), FALSE);
647 set_toolbar_borders (GtkWidget *widget,
650 gtk_toolbar_set_button_relief (GTK_TOOLBAR (data), GTK_RELIEF_NORMAL);
654 set_toolbar_borderless (GtkWidget *widget,
657 gtk_toolbar_set_button_relief (GTK_TOOLBAR (data), GTK_RELIEF_NONE);
661 set_toolbar_space_style_empty (GtkWidget *widget,
664 gtk_toolbar_set_space_style (GTK_TOOLBAR (data), GTK_TOOLBAR_SPACE_EMPTY);
668 set_toolbar_space_style_line (GtkWidget *widget,
671 gtk_toolbar_set_space_style (GTK_TOOLBAR (data), GTK_TOOLBAR_SPACE_LINE);
675 create_toolbar (void)
677 static GtkWidget *window = NULL;
683 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
684 gtk_window_set_title (GTK_WINDOW (window), "Toolbar test");
685 gtk_window_set_policy (GTK_WINDOW (window), FALSE, TRUE, TRUE);
687 gtk_signal_connect (GTK_OBJECT (window), "destroy",
688 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
691 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
692 gtk_widget_realize (window);
694 toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_BOTH);
695 gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NONE);
697 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
698 "Horizontal", "Horizontal toolbar layout", "Toolbar/Horizontal",
699 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
700 (GtkSignalFunc) set_toolbar_horizontal, toolbar);
701 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
702 "Vertical", "Vertical toolbar layout", "Toolbar/Vertical",
703 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
704 (GtkSignalFunc) set_toolbar_vertical, toolbar);
706 gtk_toolbar_append_space (GTK_TOOLBAR(toolbar));
708 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
709 "Icons", "Only show toolbar icons", "Toolbar/IconsOnly",
710 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
711 (GtkSignalFunc) set_toolbar_icons, toolbar);
712 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
713 "Text", "Only show toolbar text", "Toolbar/TextOnly",
714 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
715 (GtkSignalFunc) set_toolbar_text, toolbar);
716 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
717 "Both", "Show toolbar icons and text", "Toolbar/Both",
718 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
719 (GtkSignalFunc) set_toolbar_both, toolbar);
721 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
723 entry = gtk_entry_new ();
725 gtk_toolbar_append_widget (GTK_TOOLBAR (toolbar), entry, "This is an unusable GtkEntry ;)", "Hey don't click me!!!");
727 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
729 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
730 "Small", "Use small spaces", "Toolbar/Small",
731 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
732 (GtkSignalFunc) set_toolbar_small_space, toolbar);
733 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
734 "Big", "Use big spaces", "Toolbar/Big",
735 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
736 (GtkSignalFunc) set_toolbar_big_space, toolbar);
738 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
740 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
741 "Enable", "Enable tooltips", NULL,
742 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
743 (GtkSignalFunc) set_toolbar_enable, toolbar);
744 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
745 "Disable", "Disable tooltips", NULL,
746 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
747 (GtkSignalFunc) set_toolbar_disable, toolbar);
749 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
751 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
752 "Borders", "Show Borders", NULL,
753 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
754 (GtkSignalFunc) set_toolbar_borders, toolbar);
755 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
756 "Borderless", "Hide Borders", NULL,
757 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
758 (GtkSignalFunc) set_toolbar_borderless, toolbar);
760 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
762 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
763 "Empty", "Empty spaces", NULL,
764 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
765 (GtkSignalFunc) set_toolbar_space_style_empty, toolbar);
766 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
767 "Lines", "Lines in spaces", NULL,
768 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
769 (GtkSignalFunc) set_toolbar_space_style_line, toolbar);
771 gtk_container_add (GTK_CONTAINER (window), toolbar);
774 if (!GTK_WIDGET_VISIBLE (window))
775 gtk_widget_show_all (window);
777 gtk_widget_destroy (window);
781 make_toolbar (GtkWidget *window)
785 if (!GTK_WIDGET_REALIZED (window))
786 gtk_widget_realize (window);
788 toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_BOTH);
789 gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NONE);
791 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
792 "Horizontal", "Horizontal toolbar layout", NULL,
793 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
794 (GtkSignalFunc) set_toolbar_horizontal, toolbar);
795 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
796 "Vertical", "Vertical toolbar layout", NULL,
797 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
798 (GtkSignalFunc) set_toolbar_vertical, toolbar);
800 gtk_toolbar_append_space (GTK_TOOLBAR(toolbar));
802 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
803 "Icons", "Only show toolbar icons", NULL,
804 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
805 (GtkSignalFunc) set_toolbar_icons, toolbar);
806 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
807 "Text", "Only show toolbar text", NULL,
808 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
809 (GtkSignalFunc) set_toolbar_text, toolbar);
810 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
811 "Both", "Show toolbar icons and text", NULL,
812 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
813 (GtkSignalFunc) set_toolbar_both, toolbar);
815 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
817 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
818 "Small", "Use small spaces", NULL,
819 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
820 (GtkSignalFunc) set_toolbar_small_space, toolbar);
821 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
822 "Big", "Use big spaces", "Toolbar/Big",
823 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
824 (GtkSignalFunc) set_toolbar_big_space, toolbar);
826 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
828 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
829 "Enable", "Enable tooltips", NULL,
830 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
831 (GtkSignalFunc) set_toolbar_enable, toolbar);
832 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
833 "Disable", "Disable tooltips", NULL,
834 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
835 (GtkSignalFunc) set_toolbar_disable, toolbar);
837 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
839 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
840 "Borders", "Show Borders", NULL,
841 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
842 (GtkSignalFunc) set_toolbar_borders, toolbar);
843 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
844 "Borderless", "Hide Borders", NULL,
845 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
846 (GtkSignalFunc) set_toolbar_borderless, toolbar);
855 static guint statusbar_counter = 1;
858 statusbar_push (GtkWidget *button,
859 GtkStatusbar *statusbar)
863 sprintf (text, "something %d", statusbar_counter++);
865 gtk_statusbar_push (statusbar, 1, text);
869 statusbar_pop (GtkWidget *button,
870 GtkStatusbar *statusbar)
872 gtk_statusbar_pop (statusbar, 1);
876 statusbar_steal (GtkWidget *button,
877 GtkStatusbar *statusbar)
879 gtk_statusbar_remove (statusbar, 1, 4);
883 statusbar_popped (GtkStatusbar *statusbar,
887 if (!statusbar->messages)
888 statusbar_counter = 1;
892 statusbar_contexts (GtkStatusbar *statusbar)
896 string = "any context";
897 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
899 gtk_statusbar_get_context_id (statusbar, string));
901 string = "idle messages";
902 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
904 gtk_statusbar_get_context_id (statusbar, string));
906 string = "some text";
907 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
909 gtk_statusbar_get_context_id (statusbar, string));
911 string = "hit the mouse";
912 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
914 gtk_statusbar_get_context_id (statusbar, string));
916 string = "hit the mouse2";
917 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
919 gtk_statusbar_get_context_id (statusbar, string));
923 statusbar_dump_stack (GtkStatusbar *statusbar)
927 for (list = statusbar->messages; list; list = list->next)
929 GtkStatusbarMsg *msg;
932 g_print ("context_id: %d, message_id: %d, status_text: \"%s\"\n",
940 create_statusbar (void)
942 static GtkWidget *window = NULL;
946 GtkWidget *separator;
947 GtkWidget *statusbar;
951 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
953 gtk_signal_connect (GTK_OBJECT (window), "destroy",
954 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
957 gtk_window_set_title (GTK_WINDOW (window), "statusbar");
958 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
960 box1 = gtk_vbox_new (FALSE, 0);
961 gtk_container_add (GTK_CONTAINER (window), box1);
963 box2 = gtk_vbox_new (FALSE, 10);
964 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
965 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
967 statusbar = gtk_statusbar_new ();
968 gtk_box_pack_end (GTK_BOX (box1), statusbar, TRUE, TRUE, 0);
969 gtk_signal_connect (GTK_OBJECT (statusbar),
971 GTK_SIGNAL_FUNC (statusbar_popped),
974 button = gtk_widget_new (gtk_button_get_type (),
975 "label", "push something",
978 "signal::clicked", statusbar_push, statusbar,
981 button = gtk_widget_new (gtk_button_get_type (),
985 "signal_after::clicked", statusbar_pop, statusbar,
988 button = gtk_widget_new (gtk_button_get_type (),
992 "signal_after::clicked", statusbar_steal, statusbar,
995 button = gtk_widget_new (gtk_button_get_type (),
996 "label", "dump stack",
999 "object_signal::clicked", statusbar_dump_stack, statusbar,
1002 button = gtk_widget_new (gtk_button_get_type (),
1003 "label", "test contexts",
1006 "object_signal_after::clicked", statusbar_contexts, statusbar,
1009 separator = gtk_hseparator_new ();
1010 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
1012 box2 = gtk_vbox_new (FALSE, 10);
1013 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
1014 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
1016 button = gtk_button_new_with_label ("close");
1017 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
1018 GTK_SIGNAL_FUNC(gtk_widget_destroy),
1019 GTK_OBJECT (window));
1020 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
1021 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
1022 gtk_widget_grab_default (button);
1025 if (!GTK_WIDGET_VISIBLE (window))
1026 gtk_widget_show_all (window);
1028 gtk_widget_destroy (window);
1036 cb_tree_destroy_event(GtkWidget* w)
1038 sTreeButtons* tree_buttons;
1040 /* free buttons structure associate at this tree */
1041 tree_buttons = gtk_object_get_user_data (GTK_OBJECT (w));
1042 g_free (tree_buttons);
1046 cb_add_new_item(GtkWidget* w, GtkTree* tree)
1048 sTreeButtons* tree_buttons;
1049 GList* selected_list;
1050 GtkWidget* selected_item;
1052 GtkWidget* item_new;
1055 tree_buttons = gtk_object_get_user_data(GTK_OBJECT(tree));
1057 selected_list = GTK_TREE_SELECTION(tree);
1059 if(selected_list == NULL)
1061 /* there is no item in tree */
1062 subtree = GTK_WIDGET(tree);
1066 /* list can have only one element */
1067 selected_item = GTK_WIDGET(selected_list->data);
1069 subtree = GTK_TREE_ITEM_SUBTREE(selected_item);
1073 /* current selected item have not subtree ... create it */
1074 subtree = gtk_tree_new();
1075 gtk_tree_item_set_subtree(GTK_TREE_ITEM(selected_item),
1080 /* at this point, we know which subtree will be used to add new item */
1081 /* create a new item */
1082 sprintf(buffer, "item add %d", tree_buttons->nb_item_add);
1083 item_new = gtk_tree_item_new_with_label(buffer);
1084 gtk_tree_append(GTK_TREE(subtree), item_new);
1085 gtk_widget_show(item_new);
1087 tree_buttons->nb_item_add++;
1091 cb_remove_item(GtkWidget*w, GtkTree* tree)
1093 GList* selected_list;
1096 selected_list = GTK_TREE_SELECTION(tree);
1100 while (selected_list)
1102 clear_list = g_list_prepend (clear_list, selected_list->data);
1103 selected_list = selected_list->next;
1106 clear_list = g_list_reverse (clear_list);
1107 gtk_tree_remove_items(tree, clear_list);
1109 g_list_free (clear_list);
1113 cb_remove_subtree(GtkWidget*w, GtkTree* tree)
1115 GList* selected_list;
1118 selected_list = GTK_TREE_SELECTION(tree);
1122 item = GTK_TREE_ITEM (selected_list->data);
1124 gtk_tree_item_remove_subtree (item);
1129 cb_tree_changed(GtkTree* tree)
1131 sTreeButtons* tree_buttons;
1132 GList* selected_list;
1135 tree_buttons = gtk_object_get_user_data(GTK_OBJECT(tree));
1137 selected_list = GTK_TREE_SELECTION(tree);
1138 nb_selected = g_list_length(selected_list);
1140 if(nb_selected == 0)
1142 if(tree->children == NULL)
1143 gtk_widget_set_sensitive(tree_buttons->add_button, TRUE);
1145 gtk_widget_set_sensitive(tree_buttons->add_button, FALSE);
1146 gtk_widget_set_sensitive(tree_buttons->remove_button, FALSE);
1147 gtk_widget_set_sensitive(tree_buttons->subtree_button, FALSE);
1151 gtk_widget_set_sensitive(tree_buttons->remove_button, TRUE);
1152 gtk_widget_set_sensitive(tree_buttons->add_button, (nb_selected == 1));
1153 gtk_widget_set_sensitive(tree_buttons->subtree_button, (nb_selected == 1));
1158 create_subtree(GtkWidget* item, guint level, guint nb_item_max, guint recursion_level_max)
1160 GtkWidget* item_subtree;
1161 GtkWidget* item_new;
1166 if(level == recursion_level_max) return;
1170 /* query with no root item */
1172 item_subtree = item;
1177 /* query with no root item */
1178 /* create subtree and associate it with current item */
1179 item_subtree = gtk_tree_new();
1183 for(nb_item = 0; nb_item < nb_item_max; nb_item++)
1185 sprintf(buffer, "item %d-%d", level, nb_item);
1186 item_new = gtk_tree_item_new_with_label(buffer);
1187 gtk_tree_append(GTK_TREE(item_subtree), item_new);
1188 create_subtree(item_new, level+1, nb_item_max, recursion_level_max);
1189 gtk_widget_show(item_new);
1193 gtk_tree_item_set_subtree(GTK_TREE_ITEM(item), item_subtree);
1197 create_tree_sample(guint selection_mode,
1198 guint draw_line, guint view_line, guint no_root_item,
1199 guint nb_item_max, guint recursion_level_max)
1204 GtkWidget* separator;
1206 GtkWidget* scrolled_win;
1207 GtkWidget* root_tree;
1208 GtkWidget* root_item;
1209 sTreeButtons* tree_buttons;
1211 /* create tree buttons struct */
1212 if ((tree_buttons = g_malloc (sizeof (sTreeButtons))) == NULL)
1214 g_error("can't allocate memory for tree structure !\n");
1217 tree_buttons->nb_item_add = 0;
1219 /* create top level window */
1220 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
1221 gtk_window_set_title(GTK_WINDOW(window), "Tree Sample");
1222 gtk_signal_connect(GTK_OBJECT(window), "destroy",
1223 (GtkSignalFunc) cb_tree_destroy_event, NULL);
1224 gtk_object_set_user_data(GTK_OBJECT(window), tree_buttons);
1226 box1 = gtk_vbox_new(FALSE, 0);
1227 gtk_container_add(GTK_CONTAINER(window), box1);
1228 gtk_widget_show(box1);
1230 /* create tree box */
1231 box2 = gtk_vbox_new(FALSE, 0);
1232 gtk_box_pack_start(GTK_BOX(box1), box2, TRUE, TRUE, 0);
1233 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1234 gtk_widget_show(box2);
1236 /* create scrolled window */
1237 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
1238 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
1239 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1240 gtk_box_pack_start (GTK_BOX (box2), scrolled_win, TRUE, TRUE, 0);
1241 gtk_widget_set_usize (scrolled_win, 200, 200);
1242 gtk_widget_show (scrolled_win);
1244 /* create root tree widget */
1245 root_tree = gtk_tree_new();
1246 gtk_signal_connect(GTK_OBJECT(root_tree), "selection_changed",
1247 (GtkSignalFunc)cb_tree_changed,
1249 gtk_object_set_user_data(GTK_OBJECT(root_tree), tree_buttons);
1250 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_win), root_tree);
1251 gtk_tree_set_selection_mode(GTK_TREE(root_tree), selection_mode);
1252 gtk_tree_set_view_lines(GTK_TREE(root_tree), draw_line);
1253 gtk_tree_set_view_mode(GTK_TREE(root_tree), !view_line);
1254 gtk_widget_show(root_tree);
1258 /* set root tree to subtree function with root item variable */
1259 root_item = GTK_WIDGET(root_tree);
1263 /* create root tree item widget */
1264 root_item = gtk_tree_item_new_with_label("root item");
1265 gtk_tree_append(GTK_TREE(root_tree), root_item);
1266 gtk_widget_show(root_item);
1268 create_subtree(root_item, -no_root_item, nb_item_max, recursion_level_max);
1270 box2 = gtk_vbox_new(FALSE, 0);
1271 gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, FALSE, 0);
1272 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1273 gtk_widget_show(box2);
1275 button = gtk_button_new_with_label("Add Item");
1276 gtk_widget_set_sensitive(button, FALSE);
1277 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1278 (GtkSignalFunc) cb_add_new_item,
1279 (gpointer)root_tree);
1280 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1281 gtk_widget_show(button);
1282 tree_buttons->add_button = button;
1284 button = gtk_button_new_with_label("Remove Item(s)");
1285 gtk_widget_set_sensitive(button, FALSE);
1286 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1287 (GtkSignalFunc) cb_remove_item,
1288 (gpointer)root_tree);
1289 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1290 gtk_widget_show(button);
1291 tree_buttons->remove_button = button;
1293 button = gtk_button_new_with_label("Remove Subtree");
1294 gtk_widget_set_sensitive(button, FALSE);
1295 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1296 (GtkSignalFunc) cb_remove_subtree,
1297 (gpointer)root_tree);
1298 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1299 gtk_widget_show(button);
1300 tree_buttons->subtree_button = button;
1302 /* create separator */
1303 separator = gtk_hseparator_new();
1304 gtk_box_pack_start(GTK_BOX(box1), separator, FALSE, FALSE, 0);
1305 gtk_widget_show(separator);
1307 /* create button box */
1308 box2 = gtk_vbox_new(FALSE, 0);
1309 gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, FALSE, 0);
1310 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1311 gtk_widget_show(box2);
1313 button = gtk_button_new_with_label("Close");
1314 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1315 gtk_signal_connect_object(GTK_OBJECT (button), "clicked",
1316 (GtkSignalFunc) gtk_widget_destroy,
1317 GTK_OBJECT(window));
1318 gtk_widget_show(button);
1320 gtk_widget_show(window);
1324 cb_create_tree(GtkWidget* w)
1326 guint selection_mode = GTK_SELECTION_SINGLE;
1331 guint recursion_level;
1333 /* get selection mode choice */
1334 if(GTK_TOGGLE_BUTTON(sTreeSampleSelection.single_button)->active)
1335 selection_mode = GTK_SELECTION_SINGLE;
1337 if(GTK_TOGGLE_BUTTON(sTreeSampleSelection.browse_button)->active)
1338 selection_mode = GTK_SELECTION_BROWSE;
1340 selection_mode = GTK_SELECTION_MULTIPLE;
1342 /* get options choice */
1343 draw_line = GTK_TOGGLE_BUTTON(sTreeSampleSelection.draw_line_button)->active;
1344 view_line = GTK_TOGGLE_BUTTON(sTreeSampleSelection.view_line_button)->active;
1345 no_root_item = GTK_TOGGLE_BUTTON(sTreeSampleSelection.no_root_item_button)->active;
1348 nb_item = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(sTreeSampleSelection.nb_item_spinner));
1349 recursion_level = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(sTreeSampleSelection.recursion_spinner));
1351 if (pow (nb_item, recursion_level) > 10000)
1353 g_print ("%g total items? That will take a very long time. Try less\n",
1354 pow (nb_item, recursion_level));
1358 create_tree_sample(selection_mode, draw_line, view_line, no_root_item, nb_item, recursion_level);
1362 create_tree_mode_window(void)
1364 static GtkWidget* window;
1372 GtkWidget* separator;
1379 /* create toplevel window */
1380 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
1381 gtk_window_set_title(GTK_WINDOW(window), "Set Tree Parameters");
1382 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1383 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
1385 box1 = gtk_vbox_new(FALSE, 0);
1386 gtk_container_add(GTK_CONTAINER(window), box1);
1388 /* create upper box - selection box */
1389 box2 = gtk_vbox_new(FALSE, 5);
1390 gtk_box_pack_start(GTK_BOX(box1), box2, TRUE, TRUE, 0);
1391 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1393 box3 = gtk_hbox_new(FALSE, 5);
1394 gtk_box_pack_start(GTK_BOX(box2), box3, TRUE, TRUE, 0);
1396 /* create selection mode frame */
1397 frame = gtk_frame_new("Selection Mode");
1398 gtk_box_pack_start(GTK_BOX(box3), frame, TRUE, TRUE, 0);
1400 box4 = gtk_vbox_new(FALSE, 0);
1401 gtk_container_add(GTK_CONTAINER(frame), box4);
1402 gtk_container_set_border_width(GTK_CONTAINER(box4), 5);
1404 /* create radio button */
1405 button = gtk_radio_button_new_with_label(NULL, "SINGLE");
1406 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1407 sTreeSampleSelection.single_button = button;
1409 button = gtk_radio_button_new_with_label(gtk_radio_button_group (GTK_RADIO_BUTTON (button)),
1411 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1412 sTreeSampleSelection.browse_button = button;
1414 button = gtk_radio_button_new_with_label(gtk_radio_button_group (GTK_RADIO_BUTTON (button)),
1416 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1417 sTreeSampleSelection.multiple_button = button;
1419 sTreeSampleSelection.selection_mode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (button));
1421 /* create option mode frame */
1422 frame = gtk_frame_new("Options");
1423 gtk_box_pack_start(GTK_BOX(box3), frame, TRUE, TRUE, 0);
1425 box4 = gtk_vbox_new(FALSE, 0);
1426 gtk_container_add(GTK_CONTAINER(frame), box4);
1427 gtk_container_set_border_width(GTK_CONTAINER(box4), 5);
1429 /* create check button */
1430 button = gtk_check_button_new_with_label("Draw line");
1431 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1432 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
1433 sTreeSampleSelection.draw_line_button = button;
1435 button = gtk_check_button_new_with_label("View Line mode");
1436 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1437 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
1438 sTreeSampleSelection.view_line_button = button;
1440 button = gtk_check_button_new_with_label("Without Root item");
1441 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1442 sTreeSampleSelection.no_root_item_button = button;
1444 /* create recursion parameter */
1445 frame = gtk_frame_new("Size Parameters");
1446 gtk_box_pack_start(GTK_BOX(box2), frame, TRUE, TRUE, 0);
1448 box4 = gtk_hbox_new(FALSE, 5);
1449 gtk_container_add(GTK_CONTAINER(frame), box4);
1450 gtk_container_set_border_width(GTK_CONTAINER(box4), 5);
1452 /* create number of item spin button */
1453 box5 = gtk_hbox_new(FALSE, 5);
1454 gtk_box_pack_start(GTK_BOX(box4), box5, FALSE, FALSE, 0);
1456 label = gtk_label_new("Number of items : ");
1457 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
1458 gtk_box_pack_start (GTK_BOX (box5), label, FALSE, TRUE, 0);
1460 adj = (GtkAdjustment *) gtk_adjustment_new ((gfloat)DEFAULT_NUMBER_OF_ITEM, 1.0, 255.0, 1.0,
1462 spinner = gtk_spin_button_new (adj, 0, 0);
1463 gtk_box_pack_start (GTK_BOX (box5), spinner, FALSE, TRUE, 0);
1464 sTreeSampleSelection.nb_item_spinner = spinner;
1466 /* create recursion level spin button */
1467 box5 = gtk_hbox_new(FALSE, 5);
1468 gtk_box_pack_start(GTK_BOX(box4), box5, FALSE, FALSE, 0);
1470 label = gtk_label_new("Depth : ");
1471 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
1472 gtk_box_pack_start (GTK_BOX (box5), label, FALSE, TRUE, 0);
1474 adj = (GtkAdjustment *) gtk_adjustment_new ((gfloat)DEFAULT_RECURSION_LEVEL, 0.0, 255.0, 1.0,
1476 spinner = gtk_spin_button_new (adj, 0, 0);
1477 gtk_box_pack_start (GTK_BOX (box5), spinner, FALSE, TRUE, 0);
1478 sTreeSampleSelection.recursion_spinner = spinner;
1480 /* create horizontal separator */
1481 separator = gtk_hseparator_new();
1482 gtk_box_pack_start(GTK_BOX(box1), separator, FALSE, FALSE, 0);
1484 /* create bottom button box */
1485 box2 = gtk_hbox_new(TRUE, 10);
1486 gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, FALSE, 0);
1487 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1489 button = gtk_button_new_with_label("Create Tree");
1490 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1491 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1492 (GtkSignalFunc) cb_create_tree, NULL);
1494 button = gtk_button_new_with_label("Close");
1495 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1496 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
1497 GTK_SIGNAL_FUNC(gtk_widget_destroy),
1498 GTK_OBJECT (window));
1500 if (!GTK_WIDGET_VISIBLE (window))
1501 gtk_widget_show_all (window);
1503 gtk_widget_destroy (window);
1511 handle_box_child_signal (GtkHandleBox *hb,
1513 const gchar *action)
1515 printf ("%s: child <%s> %sed\n",
1516 gtk_type_name (GTK_OBJECT_TYPE (hb)),
1517 gtk_type_name (GTK_OBJECT_TYPE (child)),
1522 create_handle_box (void)
1524 static GtkWidget* window = NULL;
1525 GtkWidget *handle_box;
1526 GtkWidget *handle_box2;
1531 GtkWidget *separator;
1535 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1536 gtk_window_set_title (GTK_WINDOW (window),
1538 gtk_window_set_policy (GTK_WINDOW (window),
1543 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1544 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
1547 gtk_container_set_border_width (GTK_CONTAINER (window), 20);
1549 vbox = gtk_vbox_new (FALSE, 0);
1550 gtk_container_add (GTK_CONTAINER (window), vbox);
1551 gtk_widget_show (vbox);
1553 label = gtk_label_new ("Above");
1554 gtk_container_add (GTK_CONTAINER (vbox), label);
1555 gtk_widget_show (label);
1557 separator = gtk_hseparator_new ();
1558 gtk_container_add (GTK_CONTAINER (vbox), separator);
1559 gtk_widget_show (separator);
1561 hbox = gtk_hbox_new (FALSE, 10);
1562 gtk_container_add (GTK_CONTAINER (vbox), hbox);
1563 gtk_widget_show (hbox);
1565 separator = gtk_hseparator_new ();
1566 gtk_container_add (GTK_CONTAINER (vbox), separator);
1567 gtk_widget_show (separator);
1569 label = gtk_label_new ("Below");
1570 gtk_container_add (GTK_CONTAINER (vbox), label);
1571 gtk_widget_show (label);
1573 handle_box = gtk_handle_box_new ();
1574 gtk_box_pack_start (GTK_BOX (hbox), handle_box, FALSE, FALSE, 0);
1575 gtk_signal_connect (GTK_OBJECT (handle_box),
1577 GTK_SIGNAL_FUNC (handle_box_child_signal),
1579 gtk_signal_connect (GTK_OBJECT (handle_box),
1581 GTK_SIGNAL_FUNC (handle_box_child_signal),
1583 gtk_widget_show (handle_box);
1585 toolbar = make_toolbar (window);
1586 gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NORMAL);
1587 gtk_container_add (GTK_CONTAINER (handle_box), toolbar);
1588 gtk_widget_show (toolbar);
1590 handle_box = gtk_handle_box_new ();
1591 gtk_box_pack_start (GTK_BOX (hbox), handle_box, FALSE, FALSE, 0);
1592 gtk_signal_connect (GTK_OBJECT (handle_box),
1594 GTK_SIGNAL_FUNC (handle_box_child_signal),
1596 gtk_signal_connect (GTK_OBJECT (handle_box),
1598 GTK_SIGNAL_FUNC (handle_box_child_signal),
1600 gtk_widget_show (handle_box);
1602 handle_box2 = gtk_handle_box_new ();
1603 gtk_container_add (GTK_CONTAINER (handle_box), handle_box2);
1604 gtk_signal_connect (GTK_OBJECT (handle_box2),
1606 GTK_SIGNAL_FUNC (handle_box_child_signal),
1608 gtk_signal_connect (GTK_OBJECT (handle_box2),
1610 GTK_SIGNAL_FUNC (handle_box_child_signal),
1612 gtk_widget_show (handle_box2);
1614 label = gtk_label_new ("Fooo!");
1615 gtk_container_add (GTK_CONTAINER (handle_box2), label);
1616 gtk_widget_show (label);
1619 if (!GTK_WIDGET_VISIBLE (window))
1620 gtk_widget_show (window);
1622 gtk_widget_destroy (window);
1628 void create_labels (void)
1630 static GtkWidget *window = NULL;
1638 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1639 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1640 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
1643 gtk_window_set_title (GTK_WINDOW (window), "Label");
1644 vbox = gtk_vbox_new (FALSE, 5);
1645 hbox = gtk_hbox_new (FALSE, 5);
1646 gtk_container_add (GTK_CONTAINER (window), hbox);
1647 gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);
1648 gtk_container_set_border_width (GTK_CONTAINER (window), 5);
1650 frame = gtk_frame_new ("Normal Label");
1651 label = gtk_label_new ("This is a Normal label");
1652 gtk_container_add (GTK_CONTAINER (frame), label);
1653 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
1655 frame = gtk_frame_new ("Multi-line Label");
1656 label = gtk_label_new ("This is a Multi-line label.\nSecond line\nThird line");
1657 gtk_container_add (GTK_CONTAINER (frame), label);
1658 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
1660 frame = gtk_frame_new ("Left Justified Label");
1661 label = gtk_label_new ("This is a Left-Justified\nMulti-line label.\nThird line");
1662 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
1663 gtk_container_add (GTK_CONTAINER (frame), label);
1664 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
1666 frame = gtk_frame_new ("Right Justified Label");
1667 label = gtk_label_new ("This is a Right-Justified\nMulti-line label.\nFourth line, (j/k)");
1668 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_RIGHT);
1669 gtk_container_add (GTK_CONTAINER (frame), label);
1670 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
1672 vbox = gtk_vbox_new (FALSE, 5);
1673 gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);
1674 frame = gtk_frame_new ("Line wrapped label");
1675 label = gtk_label_new ("This is an example of a line-wrapped label. It should not be taking "\
1676 "up the entire "/* big space to test spacing */\
1677 "width allocated to it, but automatically wraps the words to fit. "\
1678 "The time has come, for all good men, to come to the aid of their party. "\
1679 "The sixth sheik's six sheep's sick.\n"\
1680 " It supports multiple paragraphs correctly, and correctly adds "\
1681 "many extra spaces. ");
1683 gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
1684 gtk_container_add (GTK_CONTAINER (frame), label);
1685 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
1687 frame = gtk_frame_new ("Filled, wrapped label");
1688 label = gtk_label_new ("This is an example of a line-wrapped, filled label. It should be taking "\
1689 "up the entire width allocated to it. Here is a seneance to prove "\
1690 "my point. Here is another sentence. "\
1691 "Here comes the sun, do de do de do.\n"\
1692 " This is a new paragraph.\n"\
1693 " This is another newer, longer, better paragraph. It is coming to an end, "\
1695 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_FILL);
1696 gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
1697 gtk_container_add (GTK_CONTAINER (frame), label);
1698 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
1700 frame = gtk_frame_new ("Underlined label");
1701 label = gtk_label_new ("This label is underlined!\n"
1702 "This one is underlined in ÆüËܸì¤ÎÆþÍÑquite a funky fashion");
1703 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
1704 gtk_label_set_pattern (GTK_LABEL (label), "_________________________ _ _________ _ _____ _ __ __ ___ ____ _____");
1705 gtk_container_add (GTK_CONTAINER (frame), label);
1706 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
1709 if (!GTK_WIDGET_VISIBLE (window))
1710 gtk_widget_show_all (window);
1712 gtk_widget_destroy (window);
1720 reparent_label (GtkWidget *widget,
1721 GtkWidget *new_parent)
1725 label = gtk_object_get_user_data (GTK_OBJECT (widget));
1727 gtk_widget_reparent (label, new_parent);
1731 set_parent_signal (GtkWidget *child,
1732 GtkWidget *old_parent,
1735 g_print ("set_parent for \"%s\": new parent: \"%s\", old parent: \"%s\", data: %d\n",
1736 gtk_type_name (GTK_OBJECT_TYPE (child)),
1737 child->parent ? gtk_type_name (GTK_OBJECT_TYPE (child->parent)) : "NULL",
1738 old_parent ? gtk_type_name (GTK_OBJECT_TYPE (old_parent)) : "NULL",
1739 GPOINTER_TO_INT (func_data));
1743 create_reparent (void)
1745 static GtkWidget *window = NULL;
1752 GtkWidget *separator;
1756 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1758 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1759 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
1762 gtk_window_set_title (GTK_WINDOW (window), "reparent");
1763 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
1765 box1 = gtk_vbox_new (FALSE, 0);
1766 gtk_container_add (GTK_CONTAINER (window), box1);
1768 box2 = gtk_hbox_new (FALSE, 5);
1769 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
1770 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
1772 label = gtk_label_new ("Hello World");
1774 frame = gtk_frame_new ("Frame 1");
1775 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
1777 box3 = gtk_vbox_new (FALSE, 5);
1778 gtk_container_set_border_width (GTK_CONTAINER (box3), 5);
1779 gtk_container_add (GTK_CONTAINER (frame), box3);
1781 button = gtk_button_new_with_label ("switch");
1782 gtk_signal_connect (GTK_OBJECT (button), "clicked",
1783 GTK_SIGNAL_FUNC(reparent_label),
1785 gtk_object_set_user_data (GTK_OBJECT (button), label);
1786 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
1788 gtk_box_pack_start (GTK_BOX (box3), label, FALSE, TRUE, 0);
1789 gtk_signal_connect (GTK_OBJECT (label),
1791 GTK_SIGNAL_FUNC (set_parent_signal),
1792 GINT_TO_POINTER (42));
1794 frame = gtk_frame_new ("Frame 2");
1795 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
1797 box3 = gtk_vbox_new (FALSE, 5);
1798 gtk_container_set_border_width (GTK_CONTAINER (box3), 5);
1799 gtk_container_add (GTK_CONTAINER (frame), box3);
1801 button = gtk_button_new_with_label ("switch");
1802 gtk_signal_connect (GTK_OBJECT (button), "clicked",
1803 GTK_SIGNAL_FUNC(reparent_label),
1805 gtk_object_set_user_data (GTK_OBJECT (button), label);
1806 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
1808 separator = gtk_hseparator_new ();
1809 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
1811 box2 = gtk_vbox_new (FALSE, 10);
1812 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
1813 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
1815 button = gtk_button_new_with_label ("close");
1816 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
1817 GTK_SIGNAL_FUNC(gtk_widget_destroy),
1818 GTK_OBJECT (window));
1819 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
1820 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
1821 gtk_widget_grab_default (button);
1824 if (!GTK_WIDGET_VISIBLE (window))
1825 gtk_widget_show_all (window);
1827 gtk_widget_destroy (window);
1833 gint upositionx = 0;
1834 gint upositiony = 0;
1837 uposition_configure (GtkWidget *window)
1843 lx = gtk_object_get_data (GTK_OBJECT (window), "x");
1844 ly = gtk_object_get_data (GTK_OBJECT (window), "y");
1846 gdk_window_get_root_origin (window->window, &upositionx, &upositiony);
1847 sprintf (buffer, "%d", upositionx);
1848 gtk_label_set_text (lx, buffer);
1849 sprintf (buffer, "%d", upositiony);
1850 gtk_label_set_text (ly, buffer);
1856 create_saved_position (void)
1858 static GtkWidget *window = NULL;
1863 GtkWidget *main_vbox;
1871 window = gtk_widget_new (GTK_TYPE_WINDOW,
1872 "type", GTK_WINDOW_TOPLEVEL,
1873 "signal::configure_event", uposition_configure, NULL,
1876 "title", "Saved Position",
1879 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1880 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
1883 main_vbox = gtk_vbox_new (FALSE, 5);
1884 gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 0);
1885 gtk_container_add (GTK_CONTAINER (window), main_vbox);
1888 gtk_widget_new (gtk_vbox_get_type (),
1889 "GtkBox::homogeneous", FALSE,
1890 "GtkBox::spacing", 5,
1891 "GtkContainer::border_width", 10,
1892 "GtkWidget::parent", main_vbox,
1893 "GtkWidget::visible", TRUE,
1896 hbox = gtk_hbox_new (FALSE, 0);
1897 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
1898 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
1900 label = gtk_label_new ("X Origin : ");
1901 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
1902 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
1904 x_label = gtk_label_new ("");
1905 gtk_box_pack_start (GTK_BOX (hbox), x_label, TRUE, TRUE, 0);
1906 gtk_object_set_data (GTK_OBJECT (window), "x", x_label);
1908 hbox = gtk_hbox_new (FALSE, 0);
1909 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
1910 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
1912 label = gtk_label_new ("Y Origin : ");
1913 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
1914 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
1916 y_label = gtk_label_new ("");
1917 gtk_box_pack_start (GTK_BOX (hbox), y_label, TRUE, TRUE, 0);
1918 gtk_object_set_data (GTK_OBJECT (window), "y", y_label);
1921 gtk_widget_new (gtk_hseparator_get_type (),
1922 "GtkWidget::visible", TRUE,
1924 gtk_box_pack_start (GTK_BOX (main_vbox), any, FALSE, TRUE, 0);
1926 hbox = gtk_hbox_new (FALSE, 0);
1927 gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
1928 gtk_box_pack_start (GTK_BOX (main_vbox), hbox, 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 (hbox), button, TRUE, TRUE, 5);
1935 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
1936 gtk_widget_grab_default (button);
1938 gtk_widget_show_all (window);
1941 gtk_widget_destroy (window);
1949 create_pixmap (void)
1951 static GtkWidget *window = NULL;
1957 GtkWidget *separator;
1958 GtkWidget *pixmapwid;
1964 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1966 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1967 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
1970 gtk_window_set_title (GTK_WINDOW (window), "GtkPixmap");
1971 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
1972 gtk_widget_realize(window);
1974 box1 = gtk_vbox_new (FALSE, 0);
1975 gtk_container_add (GTK_CONTAINER (window), box1);
1977 box2 = gtk_vbox_new (FALSE, 10);
1978 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
1979 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
1981 button = gtk_button_new ();
1982 gtk_box_pack_start (GTK_BOX (box2), button, FALSE, FALSE, 0);
1984 pixmap = gdk_pixmap_create_from_xpm (window->window, &mask, NULL,
1986 pixmapwid = gtk_pixmap_new (pixmap, mask);
1987 gdk_pixmap_unref (pixmap);
1988 gdk_pixmap_unref (mask);
1990 label = gtk_label_new ("Pixmap\ntest");
1991 box3 = gtk_hbox_new (FALSE, 0);
1992 gtk_container_set_border_width (GTK_CONTAINER (box3), 2);
1993 gtk_container_add (GTK_CONTAINER (box3), pixmapwid);
1994 gtk_container_add (GTK_CONTAINER (box3), label);
1995 gtk_container_add (GTK_CONTAINER (button), box3);
1997 separator = gtk_hseparator_new ();
1998 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2000 box2 = gtk_vbox_new (FALSE, 10);
2001 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2002 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2004 button = gtk_button_new_with_label ("close");
2005 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2006 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2007 GTK_OBJECT (window));
2008 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2009 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2010 gtk_widget_grab_default (button);
2013 if (!GTK_WIDGET_VISIBLE (window))
2014 gtk_widget_show_all (window);
2016 gtk_widget_destroy (window);
2020 tips_query_widget_entered (GtkTipsQuery *tips_query,
2022 const gchar *tip_text,
2023 const gchar *tip_private,
2026 if (GTK_TOGGLE_BUTTON (toggle)->active)
2028 gtk_label_set_text (GTK_LABEL (tips_query), tip_text ? "There is a Tip!" : "There is no Tip!");
2029 /* don't let GtkTipsQuery reset it's label */
2030 gtk_signal_emit_stop_by_name (GTK_OBJECT (tips_query), "widget_entered");
2035 tips_query_widget_selected (GtkWidget *tips_query,
2037 const gchar *tip_text,
2038 const gchar *tip_private,
2039 GdkEventButton *event,
2043 g_print ("Help \"%s\" requested for <%s>\n",
2044 tip_private ? tip_private : "None",
2045 gtk_type_name (GTK_OBJECT_TYPE (widget)));
2050 create_tooltips (void)
2052 static GtkWidget *window = NULL;
2059 GtkWidget *tips_query;
2060 GtkWidget *separator;
2061 GtkTooltips *tooltips;
2066 gtk_widget_new (gtk_window_get_type (),
2067 "GtkWindow::type", GTK_WINDOW_TOPLEVEL,
2068 "GtkContainer::border_width", 0,
2069 "GtkWindow::title", "Tooltips",
2070 "GtkWindow::allow_shrink", TRUE,
2071 "GtkWindow::allow_grow", FALSE,
2072 "GtkWindow::auto_shrink", TRUE,
2073 "GtkWidget::width", 200,
2076 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2077 GTK_SIGNAL_FUNC (destroy_tooltips),
2080 tooltips=gtk_tooltips_new();
2081 gtk_object_set_data (GTK_OBJECT (window), "tooltips", tooltips);
2083 box1 = gtk_vbox_new (FALSE, 0);
2084 gtk_container_add (GTK_CONTAINER (window), box1);
2086 box2 = gtk_vbox_new (FALSE, 10);
2087 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2088 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2090 button = gtk_toggle_button_new_with_label ("button1");
2091 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2093 gtk_tooltips_set_tip (tooltips,button,"This is button 1", "ContextHelp/buttons/1");
2095 button = gtk_toggle_button_new_with_label ("button2");
2096 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2098 gtk_tooltips_set_tip (tooltips,
2100 "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.",
2101 "ContextHelp/buttons/2_long");
2103 toggle = gtk_toggle_button_new_with_label ("Override TipsQuery Label");
2104 gtk_box_pack_start (GTK_BOX (box2), toggle, TRUE, TRUE, 0);
2106 gtk_tooltips_set_tip (tooltips, toggle, "Toggle TipsQuery view.", "Hi msw! ;)");
2109 gtk_widget_new (gtk_vbox_get_type (),
2110 "GtkBox::homogeneous", FALSE,
2111 "GtkBox::spacing", 5,
2112 "GtkContainer::border_width", 5,
2113 "GtkWidget::visible", TRUE,
2116 tips_query = gtk_tips_query_new ();
2119 gtk_widget_new (gtk_button_get_type (),
2120 "GtkButton::label", "[?]",
2121 "GtkWidget::visible", TRUE,
2122 "GtkWidget::parent", box3,
2123 "GtkObject::object_signal::clicked", gtk_tips_query_start_query, tips_query,
2125 gtk_box_set_child_packing (GTK_BOX (box3), button, FALSE, FALSE, 0, GTK_PACK_START);
2126 gtk_tooltips_set_tip (tooltips,
2128 "Start the Tooltips Inspector",
2129 "ContextHelp/buttons/?");
2132 gtk_widget_set (tips_query,
2133 "GtkWidget::visible", TRUE,
2134 "GtkWidget::parent", box3,
2135 "GtkTipsQuery::caller", button,
2136 "GtkObject::signal::widget_entered", tips_query_widget_entered, toggle,
2137 "GtkObject::signal::widget_selected", tips_query_widget_selected, NULL,
2141 gtk_widget_new (gtk_frame_get_type (),
2142 "GtkFrame::label", "ToolTips Inspector",
2143 "GtkFrame::label_xalign", (double) 0.5,
2144 "GtkContainer::border_width", 0,
2145 "GtkWidget::visible", TRUE,
2146 "GtkWidget::parent", box2,
2147 "GtkContainer::child", box3,
2149 gtk_box_set_child_packing (GTK_BOX (box2), frame, TRUE, TRUE, 10, GTK_PACK_START);
2151 separator = gtk_hseparator_new ();
2152 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2154 box2 = gtk_vbox_new (FALSE, 10);
2155 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2156 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2158 button = gtk_button_new_with_label ("close");
2159 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2160 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2161 GTK_OBJECT (window));
2162 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2163 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2164 gtk_widget_grab_default (button);
2166 gtk_tooltips_set_tip (tooltips, button, "Push this button to close window", "ContextHelp/buttons/Close");
2169 if (!GTK_WIDGET_VISIBLE (window))
2170 gtk_widget_show_all (window);
2172 gtk_widget_destroy (window);
2180 create_menu (gint depth, gboolean tearoff)
2183 GtkWidget *menuitem;
2191 menu = gtk_menu_new ();
2196 menuitem = gtk_tearoff_menu_item_new ();
2197 gtk_menu_append (GTK_MENU (menu), menuitem);
2198 gtk_widget_show (menuitem);
2201 for (i = 0, j = 1; i < 5; i++, j++)
2203 sprintf (buf, "item %2d - %d", depth, j);
2204 menuitem = gtk_radio_menu_item_new_with_label (group, buf);
2205 group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menuitem));
2207 gtk_check_menu_item_set_show_toggle (GTK_CHECK_MENU_ITEM (menuitem), TRUE);
2208 gtk_menu_append (GTK_MENU (menu), menuitem);
2209 gtk_widget_show (menuitem);
2211 gtk_widget_set_sensitive (menuitem, FALSE);
2213 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (depth - 1, TRUE));
2222 static GtkWidget *window = NULL;
2226 GtkWidget *optionmenu;
2227 GtkWidget *separator;
2233 GtkWidget *menuitem;
2234 GtkAccelGroup *accel_group;
2236 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2238 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2239 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2241 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
2242 GTK_SIGNAL_FUNC (gtk_true),
2245 accel_group = gtk_accel_group_new ();
2246 gtk_accel_group_attach (accel_group, GTK_OBJECT (window));
2248 gtk_window_set_title (GTK_WINDOW (window), "menus");
2249 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
2252 box1 = gtk_vbox_new (FALSE, 0);
2253 gtk_container_add (GTK_CONTAINER (window), box1);
2254 gtk_widget_show (box1);
2256 menubar = gtk_menu_bar_new ();
2257 gtk_box_pack_start (GTK_BOX (box1), menubar, FALSE, TRUE, 0);
2258 gtk_widget_show (menubar);
2260 menu = create_menu (2, TRUE);
2262 menuitem = gtk_menu_item_new_with_label ("test\nline2");
2263 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), menu);
2264 gtk_menu_bar_append (GTK_MENU_BAR (menubar), menuitem);
2265 gtk_widget_show (menuitem);
2267 menuitem = gtk_menu_item_new_with_label ("foo");
2268 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (3, TRUE));
2269 gtk_menu_bar_append (GTK_MENU_BAR (menubar), menuitem);
2270 gtk_widget_show (menuitem);
2272 menuitem = gtk_menu_item_new_with_label ("bar");
2273 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (4, TRUE));
2274 gtk_menu_item_right_justify (GTK_MENU_ITEM (menuitem));
2275 gtk_menu_bar_append (GTK_MENU_BAR (menubar), menuitem);
2276 gtk_widget_show (menuitem);
2278 box2 = gtk_vbox_new (FALSE, 10);
2279 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2280 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2281 gtk_widget_show (box2);
2283 menu = create_menu (1, FALSE);
2284 gtk_menu_set_accel_group (GTK_MENU (menu), accel_group);
2286 menuitem = gtk_check_menu_item_new_with_label ("Accelerate Me");
2287 gtk_menu_append (GTK_MENU (menu), menuitem);
2288 gtk_widget_show (menuitem);
2289 gtk_widget_add_accelerator (menuitem,
2294 GTK_ACCEL_VISIBLE | GTK_ACCEL_SIGNAL_VISIBLE);
2295 menuitem = gtk_check_menu_item_new_with_label ("Accelerator Locked");
2296 gtk_menu_append (GTK_MENU (menu), menuitem);
2297 gtk_widget_show (menuitem);
2298 gtk_widget_add_accelerator (menuitem,
2303 GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
2304 menuitem = gtk_check_menu_item_new_with_label ("Accelerators Frozen");
2305 gtk_menu_append (GTK_MENU (menu), menuitem);
2306 gtk_widget_show (menuitem);
2307 gtk_widget_add_accelerator (menuitem,
2313 gtk_widget_add_accelerator (menuitem,
2319 gtk_widget_lock_accelerators (menuitem);
2321 optionmenu = gtk_option_menu_new ();
2322 gtk_option_menu_set_menu (GTK_OPTION_MENU (optionmenu), menu);
2323 gtk_option_menu_set_history (GTK_OPTION_MENU (optionmenu), 3);
2324 gtk_box_pack_start (GTK_BOX (box2), optionmenu, TRUE, TRUE, 0);
2325 gtk_widget_show (optionmenu);
2327 separator = gtk_hseparator_new ();
2328 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2329 gtk_widget_show (separator);
2331 box2 = gtk_vbox_new (FALSE, 10);
2332 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2333 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2334 gtk_widget_show (box2);
2336 button = gtk_button_new_with_label ("close");
2337 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2338 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2339 GTK_OBJECT (window));
2340 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2341 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2342 gtk_widget_grab_default (button);
2343 gtk_widget_show (button);
2346 if (!GTK_WIDGET_VISIBLE (window))
2347 gtk_widget_show (window);
2349 gtk_widget_destroy (window);
2353 gtk_ifactory_cb (gpointer callback_data,
2354 guint callback_action,
2357 g_message ("ItemFactory: activated \"%s\"", gtk_item_factory_path_from_widget (widget));
2360 static GtkItemFactoryEntry menu_items[] =
2362 { "/_File", NULL, 0, 0, "<Branch>" },
2363 { "/File/tearoff1", NULL, gtk_ifactory_cb, 0, "<Tearoff>" },
2364 { "/File/_New", "<control>N", gtk_ifactory_cb, 0 },
2365 { "/File/_Open", "<control>O", gtk_ifactory_cb, 0 },
2366 { "/File/_Save", "<control>S", gtk_ifactory_cb, 0 },
2367 { "/File/Save _As...", NULL, gtk_ifactory_cb, 0 },
2368 { "/File/sep1", NULL, gtk_ifactory_cb, 0, "<Separator>" },
2369 { "/File/_Quit", "<control>Q", gtk_ifactory_cb, 0 },
2371 { "/_Preferences", NULL, 0, 0, "<Branch>" },
2372 { "/_Preferences/_Color", NULL, 0, 0, "<Branch>" },
2373 { "/_Preferences/Color/_Red", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
2374 { "/_Preferences/Color/_Green", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
2375 { "/_Preferences/Color/_Blue", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
2376 { "/_Preferences/_Shape", NULL, 0, 0, "<Branch>" },
2377 { "/_Preferences/Shape/_Square", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
2378 { "/_Preferences/Shape/_Rectangle", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
2379 { "/_Preferences/Shape/_Oval", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
2381 { "/_Help", NULL, 0, 0, "<LastBranch>" },
2382 { "/Help/_About", NULL, gtk_ifactory_cb, 0 },
2385 static int nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]);
2388 create_item_factory (void)
2390 static GtkWidget *window = NULL;
2396 GtkWidget *separator;
2399 GtkAccelGroup *accel_group;
2400 GtkItemFactory *item_factory;
2402 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2404 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2405 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2407 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
2408 GTK_SIGNAL_FUNC (gtk_true),
2411 accel_group = gtk_accel_group_new ();
2412 item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>", accel_group);
2413 gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL);
2414 gtk_accel_group_attach (accel_group, GTK_OBJECT (window));
2415 gtk_window_set_title (GTK_WINDOW (window), "Item Factory");
2416 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
2418 box1 = gtk_vbox_new (FALSE, 0);
2419 gtk_container_add (GTK_CONTAINER (window), box1);
2421 gtk_box_pack_start (GTK_BOX (box1),
2422 gtk_item_factory_get_widget (item_factory, "<main>"),
2425 label = gtk_label_new ("Type\n<alt>\nto start");
2426 gtk_widget_set_usize (label, 200, 200);
2427 gtk_misc_set_alignment (GTK_MISC (label), 0.5, 0.5);
2428 gtk_box_pack_start (GTK_BOX (box1), label, TRUE, TRUE, 0);
2431 separator = gtk_hseparator_new ();
2432 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2435 box2 = gtk_vbox_new (FALSE, 10);
2436 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2437 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2439 button = gtk_button_new_with_label ("close");
2440 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2441 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2442 GTK_OBJECT (window));
2443 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2444 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2445 gtk_widget_grab_default (button);
2447 gtk_widget_show_all (window);
2450 gtk_widget_destroy (window);
2458 scrolled_windows_remove (GtkWidget *widget, GtkWidget *scrollwin)
2460 static GtkWidget *parent = NULL;
2461 static GtkWidget *float_parent;
2465 gtk_widget_reparent (scrollwin, parent);
2466 gtk_widget_destroy (float_parent);
2467 float_parent = NULL;
2472 parent = widget->parent;
2473 float_parent = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2474 gtk_widget_reparent (scrollwin, float_parent);
2475 gtk_widget_show (float_parent);
2484 cmw_destroy_cb(GtkWidget *widget)
2486 /* This is needed to get out of gtk_main */
2493 cmw_color (GtkWidget *widget, GtkWidget *parent)
2497 csd=gtk_color_selection_dialog_new ("This is a modal color selection dialog");
2500 gtk_window_set_modal (GTK_WINDOW(csd),TRUE);
2502 /* And mark it as a transient dialog */
2503 gtk_window_set_transient_for (GTK_WINDOW (csd), GTK_WINDOW (parent));
2505 gtk_signal_connect (GTK_OBJECT(csd), "destroy",
2506 GTK_SIGNAL_FUNC(cmw_destroy_cb),NULL);
2508 gtk_signal_connect_object (GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(csd)->ok_button),
2509 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
2511 gtk_signal_connect_object (GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(csd)->cancel_button),
2512 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
2515 /* wait until destroy calls gtk_main_quit */
2516 gtk_widget_show (csd);
2521 cmw_file (GtkWidget *widget, GtkWidget *parent)
2525 fs = gtk_file_selection_new("This is a modal file selection dialog");
2528 gtk_window_set_modal (GTK_WINDOW(fs),TRUE);
2530 /* And mark it as a transient dialog */
2531 gtk_window_set_transient_for (GTK_WINDOW (fs), GTK_WINDOW (parent));
2533 gtk_signal_connect (GTK_OBJECT(fs), "destroy",
2534 GTK_SIGNAL_FUNC(cmw_destroy_cb),NULL);
2536 gtk_signal_connect_object (GTK_OBJECT(GTK_FILE_SELECTION(fs)->ok_button),
2537 "clicked",GTK_SIGNAL_FUNC(gtk_widget_destroy),
2539 gtk_signal_connect_object (GTK_OBJECT(GTK_FILE_SELECTION(fs)->cancel_button),
2540 "clicked",GTK_SIGNAL_FUNC(gtk_widget_destroy),
2543 /* wait until destroy calls gtk_main_quit */
2544 gtk_widget_show (fs);
2551 create_modal_window (void)
2553 GtkWidget *window = NULL;
2554 GtkWidget *box1,*box2;
2556 GtkWidget *btnColor,*btnFile,*btnClose;
2558 /* Create modal window (Here you can use any window descendent )*/
2559 window=gtk_window_new (GTK_WINDOW_TOPLEVEL);
2560 gtk_window_set_title (GTK_WINDOW(window),"This window is modal");
2562 /* Set window as modal */
2563 gtk_window_set_modal (GTK_WINDOW(window),TRUE);
2565 /* Create widgets */
2566 box1 = gtk_vbox_new (FALSE,5);
2567 frame1 = gtk_frame_new ("Standard dialogs in modal form");
2568 box2 = gtk_vbox_new (TRUE,5);
2569 btnColor = gtk_button_new_with_label ("Color");
2570 btnFile = gtk_button_new_with_label ("File Selection");
2571 btnClose = gtk_button_new_with_label ("Close");
2574 gtk_container_set_border_width (GTK_CONTAINER(box1),3);
2575 gtk_container_set_border_width (GTK_CONTAINER(box2),3);
2578 gtk_container_add (GTK_CONTAINER (window), box1);
2579 gtk_box_pack_start (GTK_BOX (box1), frame1, TRUE, TRUE, 4);
2580 gtk_container_add (GTK_CONTAINER (frame1), box2);
2581 gtk_box_pack_start (GTK_BOX (box2), btnColor, FALSE, FALSE, 4);
2582 gtk_box_pack_start (GTK_BOX (box2), btnFile, FALSE, FALSE, 4);
2583 gtk_box_pack_start (GTK_BOX (box1), gtk_hseparator_new (), FALSE, FALSE, 4);
2584 gtk_box_pack_start (GTK_BOX (box1), btnClose, FALSE, FALSE, 4);
2586 /* connect signals */
2587 gtk_signal_connect_object (GTK_OBJECT (btnClose), "clicked",
2588 GTK_SIGNAL_FUNC (gtk_widget_destroy),
2589 GTK_OBJECT (window));
2591 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2592 GTK_SIGNAL_FUNC (cmw_destroy_cb),NULL);
2594 gtk_signal_connect (GTK_OBJECT (btnColor), "clicked",
2595 GTK_SIGNAL_FUNC (cmw_color),window);
2596 gtk_signal_connect (GTK_OBJECT (btnFile), "clicked",
2597 GTK_SIGNAL_FUNC (cmw_file),window);
2600 gtk_widget_show_all (window);
2602 /* wait until dialog get destroyed */
2611 create_scrolled_windows (void)
2613 static GtkWidget *window;
2614 GtkWidget *scrolled_window;
2622 window = gtk_dialog_new ();
2624 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2625 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2628 gtk_window_set_title (GTK_WINDOW (window), "dialog");
2629 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
2632 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
2633 gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10);
2634 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
2635 GTK_POLICY_AUTOMATIC,
2636 GTK_POLICY_AUTOMATIC);
2637 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
2638 scrolled_window, TRUE, TRUE, 0);
2639 gtk_widget_show (scrolled_window);
2641 table = gtk_table_new (20, 20, FALSE);
2642 gtk_table_set_row_spacings (GTK_TABLE (table), 10);
2643 gtk_table_set_col_spacings (GTK_TABLE (table), 10);
2644 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), table);
2645 gtk_container_set_focus_hadjustment (GTK_CONTAINER (table),
2646 gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
2647 gtk_container_set_focus_vadjustment (GTK_CONTAINER (table),
2648 gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
2649 gtk_widget_show (table);
2651 for (i = 0; i < 20; i++)
2652 for (j = 0; j < 20; j++)
2654 sprintf (buffer, "button (%d,%d)\n", i, j);
2655 button = gtk_toggle_button_new_with_label (buffer);
2656 gtk_table_attach_defaults (GTK_TABLE (table), button,
2658 gtk_widget_show (button);
2662 button = gtk_button_new_with_label ("close");
2663 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2664 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2665 GTK_OBJECT (window));
2666 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2667 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
2668 button, TRUE, TRUE, 0);
2669 gtk_widget_grab_default (button);
2670 gtk_widget_show (button);
2672 button = gtk_button_new_with_label ("remove");
2673 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2674 GTK_SIGNAL_FUNC(scrolled_windows_remove),
2675 GTK_OBJECT (scrolled_window));
2676 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2677 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
2678 button, TRUE, TRUE, 0);
2679 gtk_widget_grab_default (button);
2680 gtk_widget_show (button);
2682 gtk_window_set_default_size (GTK_WINDOW (window), 300, 300);
2685 if (!GTK_WIDGET_VISIBLE (window))
2686 gtk_widget_show (window);
2688 gtk_widget_destroy (window);
2696 entry_toggle_editable (GtkWidget *checkbutton,
2699 gtk_entry_set_editable(GTK_ENTRY(entry),
2700 GTK_TOGGLE_BUTTON(checkbutton)->active);
2704 entry_toggle_sensitive (GtkWidget *checkbutton,
2707 gtk_widget_set_sensitive (entry, GTK_TOGGLE_BUTTON(checkbutton)->active);
2711 entry_toggle_visibility (GtkWidget *checkbutton,
2714 gtk_entry_set_visibility(GTK_ENTRY(entry),
2715 GTK_TOGGLE_BUTTON(checkbutton)->active);
2721 static GtkWidget *window = NULL;
2724 GtkWidget *editable_check;
2725 GtkWidget *sensitive_check;
2726 GtkWidget *entry, *cb;
2728 GtkWidget *separator;
2729 GList *cbitems = NULL;
2733 cbitems = g_list_append(cbitems, "item0");
2734 cbitems = g_list_append(cbitems, "item1 item1");
2735 cbitems = g_list_append(cbitems, "item2 item2 item2");
2736 cbitems = g_list_append(cbitems, "item3 item3 item3 item3");
2737 cbitems = g_list_append(cbitems, "item4 item4 item4 item4 item4");
2738 cbitems = g_list_append(cbitems, "item5 item5 item5 item5 item5 item5");
2739 cbitems = g_list_append(cbitems, "item6 item6 item6 item6 item6");
2740 cbitems = g_list_append(cbitems, "item7 item7 item7 item7");
2741 cbitems = g_list_append(cbitems, "item8 item8 item8");
2742 cbitems = g_list_append(cbitems, "item9 item9");
2744 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2746 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2747 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2750 gtk_window_set_title (GTK_WINDOW (window), "entry");
2751 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
2754 box1 = gtk_vbox_new (FALSE, 0);
2755 gtk_container_add (GTK_CONTAINER (window), box1);
2756 gtk_widget_show (box1);
2759 box2 = gtk_vbox_new (FALSE, 10);
2760 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2761 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2762 gtk_widget_show (box2);
2764 entry = gtk_entry_new ();
2765 gtk_entry_set_text (GTK_ENTRY (entry), "hello world");
2766 gtk_editable_select_region (GTK_EDITABLE (entry), 0, 5);
2767 gtk_box_pack_start (GTK_BOX (box2), entry, TRUE, TRUE, 0);
2768 gtk_widget_show (entry);
2770 cb = gtk_combo_new ();
2771 gtk_combo_set_popdown_strings (GTK_COMBO (cb), cbitems);
2772 gtk_entry_set_text (GTK_ENTRY (GTK_COMBO(cb)->entry), "hello world");
2773 gtk_editable_select_region (GTK_EDITABLE (GTK_COMBO(cb)->entry),
2775 gtk_box_pack_start (GTK_BOX (box2), cb, TRUE, TRUE, 0);
2776 gtk_widget_show (cb);
2778 editable_check = gtk_check_button_new_with_label("Editable");
2779 gtk_box_pack_start (GTK_BOX (box2), editable_check, FALSE, TRUE, 0);
2780 gtk_signal_connect (GTK_OBJECT(editable_check), "toggled",
2781 GTK_SIGNAL_FUNC(entry_toggle_editable), entry);
2782 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(editable_check), TRUE);
2783 gtk_widget_show (editable_check);
2785 editable_check = gtk_check_button_new_with_label("Visible");
2786 gtk_box_pack_start (GTK_BOX (box2), editable_check, FALSE, TRUE, 0);
2787 gtk_signal_connect (GTK_OBJECT(editable_check), "toggled",
2788 GTK_SIGNAL_FUNC(entry_toggle_visibility), entry);
2789 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(editable_check), TRUE);
2790 gtk_widget_show (editable_check);
2792 sensitive_check = gtk_check_button_new_with_label("Sensitive");
2793 gtk_box_pack_start (GTK_BOX (box2), sensitive_check, FALSE, TRUE, 0);
2794 gtk_signal_connect (GTK_OBJECT(sensitive_check), "toggled",
2795 GTK_SIGNAL_FUNC(entry_toggle_sensitive), entry);
2796 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(sensitive_check), TRUE);
2797 gtk_widget_show (sensitive_check);
2799 separator = gtk_hseparator_new ();
2800 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2801 gtk_widget_show (separator);
2804 box2 = gtk_vbox_new (FALSE, 10);
2805 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2806 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2807 gtk_widget_show (box2);
2810 button = gtk_button_new_with_label ("close");
2811 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2812 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2813 GTK_OBJECT (window));
2814 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2815 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2816 gtk_widget_grab_default (button);
2817 gtk_widget_show (button);
2820 if (!GTK_WIDGET_VISIBLE (window))
2821 gtk_widget_show (window);
2823 gtk_widget_destroy (window);
2830 static GtkWidget *spinner1;
2833 toggle_snap (GtkWidget *widget, GtkSpinButton *spin)
2835 gtk_spin_button_set_snap_to_ticks (spin, GTK_TOGGLE_BUTTON (widget)->active);
2839 toggle_numeric (GtkWidget *widget, GtkSpinButton *spin)
2841 gtk_spin_button_set_numeric (spin, GTK_TOGGLE_BUTTON (widget)->active);
2845 change_digits (GtkWidget *widget, GtkSpinButton *spin)
2847 gtk_spin_button_set_digits (GTK_SPIN_BUTTON (spinner1),
2848 gtk_spin_button_get_value_as_int (spin));
2852 get_value (GtkWidget *widget, gpointer data)
2856 GtkSpinButton *spin;
2858 spin = GTK_SPIN_BUTTON (spinner1);
2859 label = GTK_LABEL (gtk_object_get_user_data (GTK_OBJECT (widget)));
2860 if (GPOINTER_TO_INT (data) == 1)
2861 sprintf (buf, "%d", gtk_spin_button_get_value_as_int (spin));
2863 sprintf (buf, "%0.*f", spin->digits,
2864 gtk_spin_button_get_value_as_float (spin));
2865 gtk_label_set_text (label, buf);
2871 static GtkWidget *window = NULL;
2874 GtkWidget *main_vbox;
2877 GtkWidget *spinner2;
2881 GtkWidget *val_label;
2886 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2888 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2889 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
2892 gtk_window_set_title (GTK_WINDOW (window), "GtkSpinButton");
2894 main_vbox = gtk_vbox_new (FALSE, 5);
2895 gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 10);
2896 gtk_container_add (GTK_CONTAINER (window), main_vbox);
2898 frame = gtk_frame_new ("Not accelerated");
2899 gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0);
2901 vbox = gtk_vbox_new (FALSE, 0);
2902 gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
2903 gtk_container_add (GTK_CONTAINER (frame), vbox);
2905 /* Day, month, year spinners */
2907 hbox = gtk_hbox_new (FALSE, 0);
2908 gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 5);
2910 vbox2 = gtk_vbox_new (FALSE, 0);
2911 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
2913 label = gtk_label_new ("Day :");
2914 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
2915 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
2917 adj = (GtkAdjustment *) gtk_adjustment_new (1.0, 1.0, 31.0, 1.0,
2919 spinner = gtk_spin_button_new (adj, 0, 0);
2920 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
2921 gtk_spin_button_set_shadow_type (GTK_SPIN_BUTTON (spinner),
2923 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
2925 vbox2 = gtk_vbox_new (FALSE, 0);
2926 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
2928 label = gtk_label_new ("Month :");
2929 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
2930 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
2932 adj = (GtkAdjustment *) gtk_adjustment_new (1.0, 1.0, 12.0, 1.0,
2934 spinner = gtk_spin_button_new (adj, 0, 0);
2935 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
2936 gtk_spin_button_set_shadow_type (GTK_SPIN_BUTTON (spinner),
2937 GTK_SHADOW_ETCHED_IN);
2938 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
2940 vbox2 = gtk_vbox_new (FALSE, 0);
2941 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
2943 label = gtk_label_new ("Year :");
2944 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
2945 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
2947 adj = (GtkAdjustment *) gtk_adjustment_new (1998.0, 0.0, 2100.0,
2949 spinner = gtk_spin_button_new (adj, 0, 0);
2950 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
2951 gtk_spin_button_set_shadow_type (GTK_SPIN_BUTTON (spinner),
2953 gtk_widget_set_usize (spinner, 55, 0);
2954 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
2956 frame = gtk_frame_new ("Accelerated");
2957 gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0);
2959 vbox = gtk_vbox_new (FALSE, 0);
2960 gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
2961 gtk_container_add (GTK_CONTAINER (frame), vbox);
2963 hbox = gtk_hbox_new (FALSE, 0);
2964 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
2966 vbox2 = gtk_vbox_new (FALSE, 0);
2967 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
2969 label = gtk_label_new ("Value :");
2970 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
2971 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
2973 adj = (GtkAdjustment *) gtk_adjustment_new (0.0, -10000.0, 10000.0,
2975 spinner1 = gtk_spin_button_new (adj, 1.0, 2);
2976 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner1), TRUE);
2977 gtk_widget_set_usize (spinner1, 100, 0);
2978 gtk_box_pack_start (GTK_BOX (vbox2), spinner1, FALSE, TRUE, 0);
2980 vbox2 = gtk_vbox_new (FALSE, 0);
2981 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
2983 label = gtk_label_new ("Digits :");
2984 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
2985 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
2987 adj = (GtkAdjustment *) gtk_adjustment_new (2, 1, 5, 1, 1, 0);
2988 spinner2 = gtk_spin_button_new (adj, 0.0, 0);
2989 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner2), TRUE);
2990 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
2991 GTK_SIGNAL_FUNC (change_digits),
2992 (gpointer) spinner2);
2993 gtk_box_pack_start (GTK_BOX (vbox2), spinner2, FALSE, TRUE, 0);
2995 hbox = gtk_hbox_new (FALSE, 0);
2996 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
2998 button = gtk_check_button_new_with_label ("Snap to 0.5-ticks");
2999 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3000 GTK_SIGNAL_FUNC (toggle_snap),
3002 gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
3003 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
3005 button = gtk_check_button_new_with_label ("Numeric only input mode");
3006 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3007 GTK_SIGNAL_FUNC (toggle_numeric),
3009 gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
3010 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
3012 val_label = gtk_label_new ("");
3014 hbox = gtk_hbox_new (FALSE, 0);
3015 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
3017 button = gtk_button_new_with_label ("Value as Int");
3018 gtk_object_set_user_data (GTK_OBJECT (button), val_label);
3019 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3020 GTK_SIGNAL_FUNC (get_value),
3021 GINT_TO_POINTER (1));
3022 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
3024 button = gtk_button_new_with_label ("Value as Float");
3025 gtk_object_set_user_data (GTK_OBJECT (button), val_label);
3026 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3027 GTK_SIGNAL_FUNC (get_value),
3028 GINT_TO_POINTER (2));
3029 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
3031 gtk_box_pack_start (GTK_BOX (vbox), val_label, TRUE, TRUE, 0);
3032 gtk_label_set_text (GTK_LABEL (val_label), "0");
3034 hbox = gtk_hbox_new (FALSE, 0);
3035 gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
3037 button = gtk_button_new_with_label ("Close");
3038 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
3039 GTK_SIGNAL_FUNC (gtk_widget_destroy),
3040 GTK_OBJECT (window));
3041 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
3044 if (!GTK_WIDGET_VISIBLE (window))
3045 gtk_widget_show_all (window);
3047 gtk_widget_destroy (window);
3055 cursor_expose_event (GtkWidget *widget,
3059 GtkDrawingArea *darea;
3060 GdkDrawable *drawable;
3067 g_return_val_if_fail (widget != NULL, TRUE);
3068 g_return_val_if_fail (GTK_IS_DRAWING_AREA (widget), TRUE);
3070 darea = GTK_DRAWING_AREA (widget);
3071 drawable = widget->window;
3072 white_gc = widget->style->white_gc;
3073 gray_gc = widget->style->bg_gc[GTK_STATE_NORMAL];
3074 black_gc = widget->style->black_gc;
3075 max_width = widget->allocation.width;
3076 max_height = widget->allocation.height;
3078 gdk_draw_rectangle (drawable, white_gc,
3085 gdk_draw_rectangle (drawable, black_gc,
3092 gdk_draw_rectangle (drawable, gray_gc,
3103 set_cursor (GtkWidget *spinner,
3111 c = CLAMP (gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spinner)), 0, 152);
3114 label = gtk_object_get_user_data (GTK_OBJECT (spinner));
3115 vals = gtk_type_enum_get_values (GTK_TYPE_GDK_CURSOR_TYPE);
3116 while (vals && vals->value != c)
3119 gtk_label_set_text (GTK_LABEL (label), vals->value_nick);
3121 gtk_label_set_text (GTK_LABEL (label), "<unknown>");
3123 cursor = gdk_cursor_new (c);
3124 gdk_window_set_cursor (widget->window, cursor);
3125 gdk_cursor_destroy (cursor);
3129 cursor_event (GtkWidget *widget,
3131 GtkSpinButton *spinner)
3133 if ((event->type == GDK_BUTTON_PRESS) &&
3134 ((event->button.button == 1) ||
3135 (event->button.button == 3)))
3137 gtk_spin_button_spin (spinner, event->button.button == 1 ?
3138 GTK_SPIN_STEP_FORWARD : GTK_SPIN_STEP_BACKWARD, 0);
3146 create_cursors (void)
3148 static GtkWidget *window = NULL;
3151 GtkWidget *main_vbox;
3162 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3164 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3165 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
3168 gtk_window_set_title (GTK_WINDOW (window), "Cursors");
3170 main_vbox = gtk_vbox_new (FALSE, 5);
3171 gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 0);
3172 gtk_container_add (GTK_CONTAINER (window), main_vbox);
3175 gtk_widget_new (gtk_vbox_get_type (),
3176 "GtkBox::homogeneous", FALSE,
3177 "GtkBox::spacing", 5,
3178 "GtkContainer::border_width", 10,
3179 "GtkWidget::parent", main_vbox,
3180 "GtkWidget::visible", TRUE,
3183 hbox = gtk_hbox_new (FALSE, 0);
3184 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
3185 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
3187 label = gtk_label_new ("Cursor Value : ");
3188 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
3189 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
3191 adj = (GtkAdjustment *) gtk_adjustment_new (0,
3195 spinner = gtk_spin_button_new (adj, 0, 0);
3196 gtk_box_pack_start (GTK_BOX (hbox), spinner, TRUE, TRUE, 0);
3199 gtk_widget_new (gtk_frame_get_type (),
3200 "GtkFrame::shadow", GTK_SHADOW_ETCHED_IN,
3201 "GtkFrame::label_xalign", 0.5,
3202 "GtkFrame::label", "Cursor Area",
3203 "GtkContainer::border_width", 10,
3204 "GtkWidget::parent", vbox,
3205 "GtkWidget::visible", TRUE,
3208 darea = gtk_drawing_area_new ();
3209 gtk_widget_set_usize (darea, 80, 80);
3210 gtk_container_add (GTK_CONTAINER (frame), darea);
3211 gtk_signal_connect (GTK_OBJECT (darea),
3213 GTK_SIGNAL_FUNC (cursor_expose_event),
3215 gtk_widget_set_events (darea, GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK);
3216 gtk_signal_connect (GTK_OBJECT (darea),
3217 "button_press_event",
3218 GTK_SIGNAL_FUNC (cursor_event),
3220 gtk_widget_show (darea);
3222 gtk_signal_connect (GTK_OBJECT (spinner), "changed",
3223 GTK_SIGNAL_FUNC (set_cursor),
3226 label = gtk_widget_new (GTK_TYPE_LABEL,
3231 gtk_container_child_set (GTK_CONTAINER (vbox), label,
3234 gtk_object_set_user_data (GTK_OBJECT (spinner), label);
3237 gtk_widget_new (gtk_hseparator_get_type (),
3238 "GtkWidget::visible", TRUE,
3240 gtk_box_pack_start (GTK_BOX (main_vbox), any, FALSE, TRUE, 0);
3242 hbox = gtk_hbox_new (FALSE, 0);
3243 gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
3244 gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
3246 button = gtk_button_new_with_label ("Close");
3247 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
3248 GTK_SIGNAL_FUNC (gtk_widget_destroy),
3249 GTK_OBJECT (window));
3250 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
3252 gtk_widget_show_all (window);
3254 set_cursor (spinner, darea);
3257 gtk_widget_destroy (window);
3265 list_add (GtkWidget *widget,
3270 GtkWidget *list_item;
3271 GtkContainer *container;
3273 container = GTK_CONTAINER (list);
3275 sprintf (buffer, "added item %d", i++);
3276 list_item = gtk_list_item_new_with_label (buffer);
3277 gtk_widget_show (list_item);
3279 gtk_container_add (container, list_item);
3283 list_remove (GtkWidget *widget,
3286 GList *clear_list = NULL;
3287 GList *sel_row = NULL;
3290 if (list->selection_mode == GTK_SELECTION_EXTENDED)
3294 item = GTK_CONTAINER (list)->focus_child;
3295 if (!item && list->selection)
3296 item = list->selection->data;
3300 work = g_list_find (list->children, item);
3301 for (sel_row = work; sel_row; sel_row = sel_row->next)
3302 if (GTK_WIDGET (sel_row->data)->state != GTK_STATE_SELECTED)
3307 for (sel_row = work; sel_row; sel_row = sel_row->prev)
3308 if (GTK_WIDGET (sel_row->data)->state != GTK_STATE_SELECTED)
3314 for (work = list->selection; work; work = work->next)
3315 clear_list = g_list_prepend (clear_list, work->data);
3317 clear_list = g_list_reverse (clear_list);
3318 gtk_list_remove_items (GTK_LIST (list), clear_list);
3319 g_list_free (clear_list);
3321 if (list->selection_mode == GTK_SELECTION_EXTENDED && sel_row)
3322 gtk_list_select_child (list, GTK_WIDGET(sel_row->data));
3326 list_clear (GtkWidget *widget,
3329 gtk_list_clear_items (GTK_LIST (list), 0, -1);
3332 #define RADIOMENUTOGGLED(_rmi_, __i) { \
3335 __g = gtk_radio_menu_item_group(_rmi_); \
3336 while( __g && !((GtkCheckMenuItem *)(__g->data))->active) { \
3342 static GtkWidget *list_omenu;
3345 list_toggle_sel_mode (GtkWidget *widget, GtkList *list)
3349 if (!GTK_WIDGET_MAPPED (widget))
3352 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
3353 (((GtkOptionMenu *)list_omenu)->menu_item), i);
3355 gtk_list_set_selection_mode (list, (GtkSelectionMode) (3-i));
3361 static GtkWidget *window = NULL;
3363 static OptionMenuItem items[] =
3365 { "Single", list_toggle_sel_mode },
3366 { "Browse", list_toggle_sel_mode },
3367 { "Multiple", list_toggle_sel_mode },
3368 { "Extended", list_toggle_sel_mode }
3377 GtkWidget *scrolled_win;
3380 GtkWidget *separator;
3383 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3385 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3386 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
3389 gtk_window_set_title (GTK_WINDOW (window), "list");
3390 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
3392 vbox = gtk_vbox_new (FALSE, 0);
3393 gtk_container_add (GTK_CONTAINER (window), vbox);
3395 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
3396 gtk_container_set_border_width (GTK_CONTAINER (scrolled_win), 5);
3397 gtk_widget_set_usize (scrolled_win, -1, 300);
3398 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
3399 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
3400 GTK_POLICY_AUTOMATIC,
3401 GTK_POLICY_AUTOMATIC);
3403 list = gtk_list_new ();
3404 gtk_list_set_selection_mode (GTK_LIST (list), GTK_SELECTION_EXTENDED);
3405 gtk_scrolled_window_add_with_viewport
3406 (GTK_SCROLLED_WINDOW (scrolled_win), list);
3407 gtk_container_set_focus_vadjustment
3408 (GTK_CONTAINER (list),
3409 gtk_scrolled_window_get_vadjustment
3410 (GTK_SCROLLED_WINDOW (scrolled_win)));
3411 gtk_container_set_focus_hadjustment
3412 (GTK_CONTAINER (list),
3413 gtk_scrolled_window_get_hadjustment
3414 (GTK_SCROLLED_WINDOW (scrolled_win)));
3416 if ((infile = fopen("gtkenums.h", "r")))
3422 while (fgets (buffer, 256, infile))
3424 if ((pos = strchr (buffer, '\n')))
3426 item = gtk_list_item_new_with_label (buffer);
3427 gtk_container_add (GTK_CONTAINER (list), item);
3434 hbox = gtk_hbox_new (TRUE, 5);
3435 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
3436 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
3438 button = gtk_button_new_with_label ("Insert Row");
3439 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
3440 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3441 GTK_SIGNAL_FUNC (list_add),
3444 button = gtk_button_new_with_label ("Clear List");
3445 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
3446 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3447 GTK_SIGNAL_FUNC (list_clear),
3450 button = gtk_button_new_with_label ("Remove Selection");
3451 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
3452 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3453 GTK_SIGNAL_FUNC (list_remove),
3456 cbox = gtk_hbox_new (FALSE, 0);
3457 gtk_box_pack_start (GTK_BOX (vbox), cbox, FALSE, TRUE, 0);
3459 hbox = gtk_hbox_new (FALSE, 5);
3460 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
3461 gtk_box_pack_start (GTK_BOX (cbox), hbox, TRUE, FALSE, 0);
3463 label = gtk_label_new ("Selection Mode :");
3464 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
3466 list_omenu = build_option_menu (items, 4, 3, list);
3467 gtk_box_pack_start (GTK_BOX (hbox), list_omenu, FALSE, TRUE, 0);
3469 separator = gtk_hseparator_new ();
3470 gtk_box_pack_start (GTK_BOX (vbox), separator, FALSE, TRUE, 0);
3472 cbox = gtk_hbox_new (FALSE, 0);
3473 gtk_box_pack_start (GTK_BOX (vbox), cbox, FALSE, TRUE, 0);
3475 button = gtk_button_new_with_label ("close");
3476 gtk_container_set_border_width (GTK_CONTAINER (button), 10);
3477 gtk_box_pack_start (GTK_BOX (cbox), button, TRUE, TRUE, 0);
3478 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
3479 GTK_SIGNAL_FUNC(gtk_widget_destroy),
3480 GTK_OBJECT (window));
3482 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
3483 gtk_widget_grab_default (button);
3486 if (!GTK_WIDGET_VISIBLE (window))
3487 gtk_widget_show_all (window);
3489 gtk_widget_destroy (window);
3496 static char * book_open_xpm[] = {
3519 static char * book_closed_xpm[] = {
3544 static char * mini_page_xpm[] = {
3567 static char * gtk_mini_xpm[] = {
3607 #define TESTGTK_CLIST_COLUMNS 12
3608 static gint clist_rows = 0;
3609 static GtkWidget *clist_omenu;
3612 add1000_clist (GtkWidget *widget, gpointer data)
3615 char text[TESTGTK_CLIST_COLUMNS][50];
3616 char *texts[TESTGTK_CLIST_COLUMNS];
3621 clist = GTK_CLIST (data);
3623 pixmap = gdk_pixmap_create_from_xpm_d (clist->clist_window,
3625 >K_WIDGET (data)->style->white,
3628 for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++)
3631 sprintf (text[i], "Column %d", i);
3635 sprintf (text[1], "Right");
3636 sprintf (text[2], "Center");
3638 gtk_clist_freeze (GTK_CLIST (data));
3639 for (i = 0; i < 1000; i++)
3641 sprintf (text[0], "CListRow %d", rand() % 10000);
3642 row = gtk_clist_append (clist, texts);
3643 gtk_clist_set_pixtext (clist, row, 3, "gtk+", 5, pixmap, mask);
3646 gtk_clist_thaw (GTK_CLIST (data));
3648 gdk_pixmap_unref (pixmap);
3649 gdk_bitmap_unref (mask);
3653 add10000_clist (GtkWidget *widget, gpointer data)
3656 char text[TESTGTK_CLIST_COLUMNS][50];
3657 char *texts[TESTGTK_CLIST_COLUMNS];
3659 for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++)
3662 sprintf (text[i], "Column %d", i);
3665 sprintf (text[1], "Right");
3666 sprintf (text[2], "Center");
3668 gtk_clist_freeze (GTK_CLIST (data));
3669 for (i = 0; i < 10000; i++)
3671 sprintf (text[0], "CListRow %d", rand() % 10000);
3672 gtk_clist_append (GTK_CLIST (data), texts);
3674 gtk_clist_thaw (GTK_CLIST (data));
3678 clear_clist (GtkWidget *widget, gpointer data)
3680 gtk_clist_clear (GTK_CLIST (data));
3684 void clist_remove_selection (GtkWidget *widget, GtkCList *clist)
3686 gtk_clist_freeze (clist);
3688 while (clist->selection)
3693 row = GPOINTER_TO_INT (clist->selection->data);
3695 gtk_clist_remove (clist, row);
3697 if (clist->selection_mode == GTK_SELECTION_BROWSE)
3701 if (clist->selection_mode == GTK_SELECTION_EXTENDED && !clist->selection &&
3702 clist->focus_row >= 0)
3703 gtk_clist_select_row (clist, clist->focus_row, -1);
3705 gtk_clist_thaw (clist);
3708 void toggle_title_buttons (GtkWidget *widget, GtkCList *clist)
3710 if (GTK_TOGGLE_BUTTON (widget)->active)
3711 gtk_clist_column_titles_show (clist);
3713 gtk_clist_column_titles_hide (clist);
3716 void toggle_reorderable (GtkWidget *widget, GtkCList *clist)
3718 gtk_clist_set_reorderable (clist, GTK_TOGGLE_BUTTON (widget)->active);
3722 insert_row_clist (GtkWidget *widget, gpointer data)
3724 static char *text[] =
3726 "This", "is an", "inserted", "row.",
3727 "This", "is an", "inserted", "row.",
3728 "This", "is an", "inserted", "row."
3731 static GtkStyle *style1 = NULL;
3732 static GtkStyle *style2 = NULL;
3733 static GtkStyle *style3 = NULL;
3736 if (GTK_CLIST (data)->focus_row >= 0)
3737 row = gtk_clist_insert (GTK_CLIST (data), GTK_CLIST (data)->focus_row,
3740 row = gtk_clist_prepend (GTK_CLIST (data), text);
3754 style1 = gtk_style_copy (GTK_WIDGET (data)->style);
3755 style1->base[GTK_STATE_NORMAL] = col1;
3756 style1->base[GTK_STATE_SELECTED] = col2;
3758 style2 = gtk_style_copy (GTK_WIDGET (data)->style);
3759 style2->fg[GTK_STATE_NORMAL] = col1;
3760 style2->fg[GTK_STATE_SELECTED] = col2;
3762 style3 = gtk_style_copy (GTK_WIDGET (data)->style);
3763 style3->fg[GTK_STATE_NORMAL] = col1;
3764 style3->base[GTK_STATE_NORMAL] = col2;
3765 gdk_font_unref (style3->font);
3767 gdk_font_load ("-*-courier-medium-*-*-*-*-120-*-*-*-*-*-*");
3770 gtk_clist_set_cell_style (GTK_CLIST (data), row, 3, style1);
3771 gtk_clist_set_cell_style (GTK_CLIST (data), row, 4, style2);
3772 gtk_clist_set_cell_style (GTK_CLIST (data), row, 0, style3);
3778 clist_warning_test (GtkWidget *button,
3782 static gboolean add_remove = FALSE;
3784 add_remove = !add_remove;
3786 child = gtk_label_new ("Test");
3787 gtk_widget_ref (child);
3788 gtk_object_sink (GTK_OBJECT (child));
3791 gtk_container_add (GTK_CONTAINER (clist), child);
3794 child->parent = clist;
3795 gtk_container_remove (GTK_CONTAINER (clist), child);
3796 child->parent = NULL;
3799 gtk_widget_destroy (child);
3800 gtk_widget_unref (child);
3804 undo_selection (GtkWidget *button, GtkCList *clist)
3806 gtk_clist_undo_selection (clist);
3810 clist_toggle_sel_mode (GtkWidget *widget, GtkCList *clist)
3814 if (!GTK_WIDGET_MAPPED (widget))
3817 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
3818 (((GtkOptionMenu *)clist_omenu)->menu_item), i);
3820 gtk_clist_set_selection_mode (clist, (GtkSelectionMode) (3-i));
3824 clist_click_column (GtkCList *clist, gint column, gpointer data)
3827 gtk_clist_set_column_visibility (clist, column, FALSE);
3828 else if (column == clist->sort_column)
3830 if (clist->sort_type == GTK_SORT_ASCENDING)
3831 clist->sort_type = GTK_SORT_DESCENDING;
3833 clist->sort_type = GTK_SORT_ASCENDING;
3836 gtk_clist_set_sort_column (clist, column);
3838 gtk_clist_sort (clist);
3845 static GtkWidget *window = NULL;
3847 static char *titles[] =
3849 "auto resize", "not resizeable", "max width 100", "min width 50",
3850 "hide column", "Title 5", "Title 6", "Title 7",
3851 "Title 8", "Title 9", "Title 10", "Title 11"
3854 static OptionMenuItem items[] =
3856 { "Single", clist_toggle_sel_mode },
3857 { "Browse", clist_toggle_sel_mode },
3858 { "Multiple", clist_toggle_sel_mode },
3859 { "Extended", clist_toggle_sel_mode }
3862 char text[TESTGTK_CLIST_COLUMNS][50];
3863 char *texts[TESTGTK_CLIST_COLUMNS];
3869 GtkWidget *separator;
3870 GtkWidget *scrolled_win;
3873 GtkWidget *undo_button;
3883 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3885 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3886 GTK_SIGNAL_FUNC (gtk_widget_destroyed), &window);
3888 gtk_window_set_title (GTK_WINDOW (window), "clist");
3889 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
3891 vbox = gtk_vbox_new (FALSE, 0);
3892 gtk_container_add (GTK_CONTAINER (window), vbox);
3894 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
3895 gtk_container_set_border_width (GTK_CONTAINER (scrolled_win), 5);
3896 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
3897 GTK_POLICY_AUTOMATIC,
3898 GTK_POLICY_AUTOMATIC);
3900 /* create GtkCList here so we have a pointer to throw at the
3901 * button callbacks -- more is done with it later */
3902 clist = gtk_clist_new_with_titles (TESTGTK_CLIST_COLUMNS, titles);
3903 gtk_container_add (GTK_CONTAINER (scrolled_win), clist);
3904 gtk_signal_connect (GTK_OBJECT (clist), "click_column",
3905 (GtkSignalFunc) clist_click_column, NULL);
3907 /* control buttons */
3908 hbox = gtk_hbox_new (FALSE, 5);
3909 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
3910 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
3912 button = gtk_button_new_with_label ("Insert Row");
3913 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
3914 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3915 (GtkSignalFunc) insert_row_clist, (gpointer) clist);
3917 button = gtk_button_new_with_label ("Add 1,000 Rows With Pixmaps");
3918 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
3919 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3920 (GtkSignalFunc) add1000_clist, (gpointer) clist);
3922 button = gtk_button_new_with_label ("Add 10,000 Rows");
3923 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
3924 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3925 (GtkSignalFunc) add10000_clist, (gpointer) clist);
3927 /* second layer of buttons */
3928 hbox = gtk_hbox_new (FALSE, 5);
3929 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
3930 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
3932 button = gtk_button_new_with_label ("Clear List");
3933 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
3934 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3935 (GtkSignalFunc) clear_clist, (gpointer) clist);
3937 button = gtk_button_new_with_label ("Remove Selection");
3938 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
3939 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3940 (GtkSignalFunc) clist_remove_selection,
3943 undo_button = gtk_button_new_with_label ("Undo Selection");
3944 gtk_box_pack_start (GTK_BOX (hbox), undo_button, TRUE, TRUE, 0);
3945 gtk_signal_connect (GTK_OBJECT (undo_button), "clicked",
3946 (GtkSignalFunc) undo_selection, (gpointer) clist);
3948 button = gtk_button_new_with_label ("Warning Test");
3949 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
3950 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3951 (GtkSignalFunc) clist_warning_test,(gpointer) clist);
3953 /* third layer of buttons */
3954 hbox = gtk_hbox_new (FALSE, 5);
3955 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
3956 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
3958 check = gtk_check_button_new_with_label ("Show Title Buttons");
3959 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
3960 gtk_signal_connect (GTK_OBJECT (check), "clicked",
3961 GTK_SIGNAL_FUNC (toggle_title_buttons), clist);
3962 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE);
3964 check = gtk_check_button_new_with_label ("Reorderable");
3965 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
3966 gtk_signal_connect (GTK_OBJECT (check), "clicked",
3967 GTK_SIGNAL_FUNC (toggle_reorderable), clist);
3968 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE);
3970 label = gtk_label_new ("Selection Mode :");
3971 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
3973 clist_omenu = build_option_menu (items, 4, 3, clist);
3974 gtk_box_pack_start (GTK_BOX (hbox), clist_omenu, FALSE, TRUE, 0);
3977 * the rest of the clist configuration
3980 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
3981 gtk_clist_set_row_height (GTK_CLIST (clist), 18);
3982 gtk_widget_set_usize (clist, -1, 300);
3984 for (i = 1; i < TESTGTK_CLIST_COLUMNS; i++)
3985 gtk_clist_set_column_width (GTK_CLIST (clist), i, 80);
3987 gtk_clist_set_column_auto_resize (GTK_CLIST (clist), 0, TRUE);
3988 gtk_clist_set_column_resizeable (GTK_CLIST (clist), 1, FALSE);
3989 gtk_clist_set_column_max_width (GTK_CLIST (clist), 2, 100);
3990 gtk_clist_set_column_min_width (GTK_CLIST (clist), 3, 50);
3991 gtk_clist_set_selection_mode (GTK_CLIST (clist), GTK_SELECTION_EXTENDED);
3992 gtk_clist_set_column_justification (GTK_CLIST (clist), 1,
3994 gtk_clist_set_column_justification (GTK_CLIST (clist), 2,
3995 GTK_JUSTIFY_CENTER);
3997 for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++)
4000 sprintf (text[i], "Column %d", i);
4003 sprintf (text[1], "Right");
4004 sprintf (text[2], "Center");
4013 style = gtk_style_new ();
4014 style->fg[GTK_STATE_NORMAL] = col1;
4015 style->base[GTK_STATE_NORMAL] = col2;
4017 gdk_font_unref (style->font);
4019 gdk_font_load ("-adobe-helvetica-bold-r-*-*-*-140-*-*-*-*-*-*");
4021 for (i = 0; i < 10; i++)
4023 sprintf (text[0], "CListRow %d", clist_rows++);
4024 gtk_clist_append (GTK_CLIST (clist), texts);
4029 gtk_clist_set_row_style (GTK_CLIST (clist), i, style);
4032 gtk_clist_set_cell_style (GTK_CLIST (clist), i, i % 4, style);
4037 separator = gtk_hseparator_new ();
4038 gtk_box_pack_start (GTK_BOX (vbox), separator, FALSE, TRUE, 0);
4040 hbox = gtk_hbox_new (FALSE, 0);
4041 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
4043 button = gtk_button_new_with_label ("close");
4044 gtk_container_set_border_width (GTK_CONTAINER (button), 10);
4045 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4046 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
4047 GTK_SIGNAL_FUNC(gtk_widget_destroy),
4048 GTK_OBJECT (window));
4050 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
4051 gtk_widget_grab_default (button);
4054 if (!GTK_WIDGET_VISIBLE (window))
4055 gtk_widget_show_all (window);
4059 gtk_widget_destroy (window);
4074 static gint books = 0;
4075 static gint pages = 0;
4077 static GtkWidget *book_label;
4078 static GtkWidget *page_label;
4079 static GtkWidget *sel_label;
4080 static GtkWidget *vis_label;
4081 static GtkWidget *omenu1;
4082 static GtkWidget *omenu2;
4083 static GtkWidget *omenu3;
4084 static GtkWidget *omenu4;
4085 static GtkWidget *spin1;
4086 static GtkWidget *spin2;
4087 static GtkWidget *spin3;
4088 static gint line_style;
4090 void after_press (GtkCTree *ctree, gpointer data)
4094 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->selection));
4095 gtk_label_set_text (GTK_LABEL (sel_label), buf);
4097 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->row_list));
4098 gtk_label_set_text (GTK_LABEL (vis_label), buf);
4100 sprintf (buf, "%d", books);
4101 gtk_label_set_text (GTK_LABEL (book_label), buf);
4103 sprintf (buf, "%d", pages);
4104 gtk_label_set_text (GTK_LABEL (page_label), buf);
4107 void after_move (GtkCTree *ctree, GtkCTreeNode *child, GtkCTreeNode *parent,
4108 GtkCTreeNode *sibling, gpointer data)
4114 gtk_ctree_get_node_info (ctree, child, &source,
4115 NULL, NULL, NULL, NULL, NULL, NULL, NULL);
4117 gtk_ctree_get_node_info (ctree, parent, &target1,
4118 NULL, NULL, NULL, NULL, NULL, NULL, NULL);
4120 gtk_ctree_get_node_info (ctree, sibling, &target2,
4121 NULL, NULL, NULL, NULL, NULL, NULL, NULL);
4123 g_print ("Moving \"%s\" to \"%s\" with sibling \"%s\".\n", source,
4124 (parent) ? target1 : "nil", (sibling) ? target2 : "nil");
4127 void count_items (GtkCTree *ctree, GtkCTreeNode *list)
4129 if (GTK_CTREE_ROW (list)->is_leaf)
4135 void expand_all (GtkWidget *widget, GtkCTree *ctree)
4137 gtk_ctree_expand_recursive (ctree, NULL);
4138 after_press (ctree, NULL);
4141 void collapse_all (GtkWidget *widget, GtkCTree *ctree)
4143 gtk_ctree_collapse_recursive (ctree, NULL);
4144 after_press (ctree, NULL);
4147 void select_all (GtkWidget *widget, GtkCTree *ctree)
4149 gtk_ctree_select_recursive (ctree, NULL);
4150 after_press (ctree, NULL);
4153 void change_style (GtkWidget *widget, GtkCTree *ctree)
4155 static GtkStyle *style1 = NULL;
4156 static GtkStyle *style2 = NULL;
4162 if (GTK_CLIST (ctree)->focus_row >= 0)
4163 node = GTK_CTREE_NODE
4164 (g_list_nth (GTK_CLIST (ctree)->row_list,GTK_CLIST (ctree)->focus_row));
4166 node = GTK_CTREE_NODE (GTK_CLIST (ctree)->row_list);
4180 style1 = gtk_style_new ();
4181 style1->base[GTK_STATE_NORMAL] = col1;
4182 style1->fg[GTK_STATE_SELECTED] = col2;
4184 style2 = gtk_style_new ();
4185 style2->base[GTK_STATE_SELECTED] = col2;
4186 style2->fg[GTK_STATE_NORMAL] = col1;
4187 style2->base[GTK_STATE_NORMAL] = col2;
4188 gdk_font_unref (style2->font);
4190 gdk_font_load ("-*-courier-medium-*-*-*-*-300-*-*-*-*-*-*");
4193 gtk_ctree_node_set_cell_style (ctree, node, 1, style1);
4194 gtk_ctree_node_set_cell_style (ctree, node, 0, style2);
4196 if (GTK_CTREE_ROW (node)->children)
4197 gtk_ctree_node_set_row_style (ctree, GTK_CTREE_ROW (node)->children,
4201 void unselect_all (GtkWidget *widget, GtkCTree *ctree)
4203 gtk_ctree_unselect_recursive (ctree, NULL);
4204 after_press (ctree, NULL);
4207 void remove_selection (GtkWidget *widget, GtkCTree *ctree)
4212 clist = GTK_CLIST (ctree);
4214 gtk_clist_freeze (clist);
4216 while (clist->selection)
4218 node = clist->selection->data;
4220 if (GTK_CTREE_ROW (node)->is_leaf)
4223 gtk_ctree_post_recursive (ctree, node,
4224 (GtkCTreeFunc) count_items, NULL);
4226 gtk_ctree_remove_node (ctree, node);
4228 if (clist->selection_mode == GTK_SELECTION_BROWSE)
4232 if (clist->selection_mode == GTK_SELECTION_EXTENDED && !clist->selection &&
4233 clist->focus_row >= 0)
4235 node = gtk_ctree_node_nth (ctree, clist->focus_row);
4238 gtk_ctree_select (ctree, node);
4241 gtk_clist_thaw (clist);
4242 after_press (ctree, NULL);
4245 struct _ExportStruct {
4251 typedef struct _ExportStruct ExportStruct;
4254 gnode2ctree (GtkCTree *ctree,
4257 GtkCTreeNode *cnode,
4261 GdkPixmap *pixmap_closed;
4262 GdkBitmap *mask_closed;
4263 GdkPixmap *pixmap_opened;
4264 GdkBitmap *mask_opened;
4266 if (!cnode || !gnode || (!(es = gnode->data)))
4271 pixmap_closed = pixmap3;
4272 mask_closed = mask3;
4273 pixmap_opened = NULL;
4278 pixmap_closed = pixmap1;
4279 mask_closed = mask1;
4280 pixmap_opened = pixmap2;
4281 mask_opened = mask2;
4284 gtk_ctree_set_node_info (ctree, cnode, es->tree, 2, pixmap_closed,
4285 mask_closed, pixmap_opened, mask_opened,
4286 es->is_leaf, (depth < 3));
4287 gtk_ctree_node_set_text (ctree, cnode, 1, es->info);
4295 ctree2gnode (GtkCTree *ctree,
4298 GtkCTreeNode *cnode,
4303 if (!cnode || !gnode)
4306 es = g_new (ExportStruct, 1);
4308 es->is_leaf = GTK_CTREE_ROW (cnode)->is_leaf;
4309 es->tree = GTK_CELL_PIXTEXT (GTK_CTREE_ROW (cnode)->row.cell[0])->text;
4310 es->info = GTK_CELL_PIXTEXT (GTK_CTREE_ROW (cnode)->row.cell[1])->text;
4314 void export_ctree (GtkWidget *widget, GtkCTree *ctree)
4316 char *title[] = { "Tree" , "Info" };
4317 static GtkWidget *export_window = NULL;
4318 static GtkCTree *export_ctree;
4320 GtkWidget *scrolled_win;
4328 export_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
4330 gtk_signal_connect (GTK_OBJECT (export_window), "destroy",
4331 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
4334 gtk_window_set_title (GTK_WINDOW (export_window), "exported ctree");
4335 gtk_container_set_border_width (GTK_CONTAINER (export_window), 5);
4337 vbox = gtk_vbox_new (FALSE, 0);
4338 gtk_container_add (GTK_CONTAINER (export_window), vbox);
4340 button = gtk_button_new_with_label ("Close");
4341 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, TRUE, 0);
4343 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
4344 (GtkSignalFunc) gtk_widget_destroy,
4345 GTK_OBJECT(export_window));
4347 sep = gtk_hseparator_new ();
4348 gtk_box_pack_end (GTK_BOX (vbox), sep, FALSE, TRUE, 10);
4350 export_ctree = GTK_CTREE (gtk_ctree_new_with_titles (2, 0, title));
4351 gtk_ctree_set_line_style (export_ctree, GTK_CTREE_LINES_DOTTED);
4353 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
4354 gtk_container_add (GTK_CONTAINER (scrolled_win),
4355 GTK_WIDGET (export_ctree));
4356 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
4357 GTK_POLICY_AUTOMATIC,
4358 GTK_POLICY_AUTOMATIC);
4359 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
4360 gtk_clist_set_selection_mode (GTK_CLIST (export_ctree),
4361 GTK_SELECTION_EXTENDED);
4362 gtk_clist_set_column_width (GTK_CLIST (export_ctree), 0, 200);
4363 gtk_clist_set_column_width (GTK_CLIST (export_ctree), 1, 200);
4364 gtk_widget_set_usize (GTK_WIDGET (export_ctree), 300, 200);
4367 if (!GTK_WIDGET_VISIBLE (export_window))
4368 gtk_widget_show_all (export_window);
4370 gtk_clist_clear (GTK_CLIST (export_ctree));
4372 node = GTK_CTREE_NODE (g_list_nth (GTK_CLIST (ctree)->row_list,
4373 GTK_CLIST (ctree)->focus_row));
4377 gnode = gtk_ctree_export_to_gnode (ctree, NULL, NULL, node,
4381 gtk_ctree_insert_gnode (export_ctree, NULL, NULL, gnode,
4383 g_node_destroy (gnode);
4387 void change_indent (GtkWidget *widget, GtkCTree *ctree)
4389 gtk_ctree_set_indent (ctree, GTK_ADJUSTMENT (widget)->value);
4392 void change_spacing (GtkWidget *widget, GtkCTree *ctree)
4394 gtk_ctree_set_spacing (ctree, GTK_ADJUSTMENT (widget)->value);
4397 void change_row_height (GtkWidget *widget, GtkCList *clist)
4399 gtk_clist_set_row_height (clist, GTK_ADJUSTMENT (widget)->value);
4402 void set_background (GtkCTree *ctree, GtkCTreeNode *node, gpointer data)
4404 GtkStyle *style = NULL;
4409 if (ctree->line_style != GTK_CTREE_LINES_TABBED)
4411 if (!GTK_CTREE_ROW (node)->is_leaf)
4412 style = GTK_CTREE_ROW (node)->row.data;
4413 else if (GTK_CTREE_ROW (node)->parent)
4414 style = GTK_CTREE_ROW (GTK_CTREE_ROW (node)->parent)->row.data;
4417 gtk_ctree_node_set_row_style (ctree, node, style);
4420 void ctree_toggle_line_style (GtkWidget *widget, GtkCTree *ctree)
4424 if (!GTK_WIDGET_MAPPED (widget))
4427 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
4428 (((GtkOptionMenu *)omenu1)->menu_item), i);
4430 if ((ctree->line_style == GTK_CTREE_LINES_TABBED &&
4431 ((GtkCTreeLineStyle) (3 - i)) != GTK_CTREE_LINES_TABBED) ||
4432 (ctree->line_style != GTK_CTREE_LINES_TABBED &&
4433 ((GtkCTreeLineStyle) (3 - i)) == GTK_CTREE_LINES_TABBED))
4434 gtk_ctree_pre_recursive (ctree, NULL, set_background, NULL);
4435 gtk_ctree_set_line_style (ctree, 3 - i);
4439 void ctree_toggle_expander_style (GtkWidget *widget, GtkCTree *ctree)
4443 if (!GTK_WIDGET_MAPPED (widget))
4446 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
4447 (((GtkOptionMenu *)omenu2)->menu_item), i);
4449 gtk_ctree_set_expander_style (ctree, (GtkCTreeExpanderStyle) (3 - i));
4452 void ctree_toggle_justify (GtkWidget *widget, GtkCTree *ctree)
4456 if (!GTK_WIDGET_MAPPED (widget))
4459 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
4460 (((GtkOptionMenu *)omenu3)->menu_item), i);
4462 gtk_clist_set_column_justification (GTK_CLIST (ctree), ctree->tree_column,
4463 (GtkJustification) (1 - i));
4466 void ctree_toggle_sel_mode (GtkWidget *widget, GtkCTree *ctree)
4470 if (!GTK_WIDGET_MAPPED (widget))
4473 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
4474 (((GtkOptionMenu *)omenu4)->menu_item), i);
4476 gtk_clist_set_selection_mode (GTK_CLIST (ctree), (GtkSelectionMode) (3 - i));
4477 after_press (ctree, NULL);
4480 void build_recursive (GtkCTree *ctree, gint cur_depth, gint depth,
4481 gint num_books, gint num_pages, GtkCTreeNode *parent)
4486 GtkCTreeNode *sibling;
4493 for (i = num_pages + num_books; i > num_books; i--)
4496 sprintf (buf1, "Page %02d", (gint) rand() % 100);
4497 sprintf (buf2, "Item %d-%d", cur_depth, i);
4498 sibling = gtk_ctree_insert_node (ctree, parent, sibling, text, 5,
4499 pixmap3, mask3, NULL, NULL,
4502 if (parent && ctree->line_style == GTK_CTREE_LINES_TABBED)
4503 gtk_ctree_node_set_row_style (ctree, sibling,
4504 GTK_CTREE_ROW (parent)->row.style);
4507 if (cur_depth == depth)
4510 for (i = num_books; i > 0; i--)
4515 sprintf (buf1, "Book %02d", (gint) rand() % 100);
4516 sprintf (buf2, "Item %d-%d", cur_depth, i);
4517 sibling = gtk_ctree_insert_node (ctree, parent, sibling, text, 5,
4518 pixmap1, mask1, pixmap2, mask2,
4521 style = gtk_style_new ();
4522 switch (cur_depth % 3)
4525 style->base[GTK_STATE_NORMAL].red = 10000 * (cur_depth % 6);
4526 style->base[GTK_STATE_NORMAL].green = 0;
4527 style->base[GTK_STATE_NORMAL].blue = 65535 - ((i * 10000) % 65535);
4530 style->base[GTK_STATE_NORMAL].red = 10000 * (cur_depth % 6);
4531 style->base[GTK_STATE_NORMAL].green = 65535 - ((i * 10000) % 65535);
4532 style->base[GTK_STATE_NORMAL].blue = 0;
4535 style->base[GTK_STATE_NORMAL].red = 65535 - ((i * 10000) % 65535);
4536 style->base[GTK_STATE_NORMAL].green = 0;
4537 style->base[GTK_STATE_NORMAL].blue = 10000 * (cur_depth % 6);
4540 gtk_ctree_node_set_row_data_full (ctree, sibling, style,
4541 (GtkDestroyNotify) gtk_style_unref);
4543 if (ctree->line_style == GTK_CTREE_LINES_TABBED)
4544 gtk_ctree_node_set_row_style (ctree, sibling, style);
4546 build_recursive (ctree, cur_depth + 1, depth, num_books, num_pages,
4551 void rebuild_tree (GtkWidget *widget, GtkCTree *ctree)
4554 gchar label1[] = "Root";
4555 gchar label2[] = "";
4556 GtkCTreeNode *parent;
4563 d = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin1));
4564 b = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin2));
4565 p = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin3));
4567 n = ((pow (b, d) - 1) / (b - 1)) * (p + 1);
4571 g_print ("%d total items? Try less\n",n);
4575 gtk_clist_freeze (GTK_CLIST (ctree));
4576 gtk_clist_clear (GTK_CLIST (ctree));
4581 parent = gtk_ctree_insert_node (ctree, NULL, NULL, text, 5, pixmap1,
4582 mask1, pixmap2, mask2, FALSE, TRUE);
4584 style = gtk_style_new ();
4585 style->base[GTK_STATE_NORMAL].red = 0;
4586 style->base[GTK_STATE_NORMAL].green = 45000;
4587 style->base[GTK_STATE_NORMAL].blue = 55000;
4588 gtk_ctree_node_set_row_data_full (ctree, parent, style,
4589 (GtkDestroyNotify) gtk_style_unref);
4591 if (ctree->line_style == GTK_CTREE_LINES_TABBED)
4592 gtk_ctree_node_set_row_style (ctree, parent, style);
4594 build_recursive (ctree, 1, d, b, p, parent);
4595 gtk_clist_thaw (GTK_CLIST (ctree));
4596 after_press (ctree, NULL);
4600 ctree_click_column (GtkCTree *ctree, gint column, gpointer data)
4604 clist = GTK_CLIST (ctree);
4606 if (column == clist->sort_column)
4608 if (clist->sort_type == GTK_SORT_ASCENDING)
4609 clist->sort_type = GTK_SORT_DESCENDING;
4611 clist->sort_type = GTK_SORT_ASCENDING;
4614 gtk_clist_set_sort_column (clist, column);
4616 gtk_ctree_sort_recursive (ctree, NULL);
4619 void create_ctree (void)
4621 static GtkWidget *window = NULL;
4622 GtkTooltips *tooltips;
4624 GtkWidget *scrolled_win;
4636 GdkColor transparent;
4638 char *title[] = { "Tree" , "Info" };
4641 static OptionMenuItem items1[] =
4643 { "No lines", ctree_toggle_line_style },
4644 { "Solid", ctree_toggle_line_style },
4645 { "Dotted", ctree_toggle_line_style },
4646 { "Tabbed", ctree_toggle_line_style }
4649 static OptionMenuItem items2[] =
4651 { "None", ctree_toggle_expander_style },
4652 { "Square", ctree_toggle_expander_style },
4653 { "Triangle", ctree_toggle_expander_style },
4654 { "Circular", ctree_toggle_expander_style }
4657 static OptionMenuItem items3[] =
4659 { "Left", ctree_toggle_justify },
4660 { "Right", ctree_toggle_justify }
4663 static OptionMenuItem items4[] =
4665 { "Single", ctree_toggle_sel_mode },
4666 { "Browse", ctree_toggle_sel_mode },
4667 { "Multiple", ctree_toggle_sel_mode },
4668 { "Extended", ctree_toggle_sel_mode }
4673 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
4675 gtk_signal_connect (GTK_OBJECT (window), "destroy",
4676 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
4679 gtk_window_set_title (GTK_WINDOW (window), "GtkCTree");
4680 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
4682 tooltips = gtk_tooltips_new ();
4683 gtk_object_ref (GTK_OBJECT (tooltips));
4684 gtk_object_sink (GTK_OBJECT (tooltips));
4686 gtk_object_set_data_full (GTK_OBJECT (window), "tooltips", tooltips,
4687 (GtkDestroyNotify) gtk_object_unref);
4689 vbox = gtk_vbox_new (FALSE, 0);
4690 gtk_container_add (GTK_CONTAINER (window), vbox);
4692 hbox = gtk_hbox_new (FALSE, 5);
4693 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4694 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
4696 label = gtk_label_new ("Depth :");
4697 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
4699 adj = (GtkAdjustment *) gtk_adjustment_new (4, 1, 10, 1, 5, 0);
4700 spin1 = gtk_spin_button_new (adj, 0, 0);
4701 gtk_box_pack_start (GTK_BOX (hbox), spin1, FALSE, TRUE, 5);
4703 label = gtk_label_new ("Books :");
4704 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
4706 adj = (GtkAdjustment *) gtk_adjustment_new (3, 1, 20, 1, 5, 0);
4707 spin2 = gtk_spin_button_new (adj, 0, 0);
4708 gtk_box_pack_start (GTK_BOX (hbox), spin2, FALSE, TRUE, 5);
4710 label = gtk_label_new ("Pages :");
4711 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
4713 adj = (GtkAdjustment *) gtk_adjustment_new (5, 1, 20, 1, 5, 0);
4714 spin3 = gtk_spin_button_new (adj, 0, 0);
4715 gtk_box_pack_start (GTK_BOX (hbox), spin3, FALSE, TRUE, 5);
4717 button = gtk_button_new_with_label ("Close");
4718 gtk_box_pack_end (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4720 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
4721 (GtkSignalFunc) gtk_widget_destroy,
4722 GTK_OBJECT(window));
4724 button = gtk_button_new_with_label ("Rebuild Tree");
4725 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4727 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
4728 gtk_container_set_border_width (GTK_CONTAINER (scrolled_win), 5);
4729 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
4730 GTK_POLICY_AUTOMATIC,
4732 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
4734 ctree = GTK_CTREE (gtk_ctree_new_with_titles (2, 0, title));
4735 gtk_container_add (GTK_CONTAINER (scrolled_win), GTK_WIDGET (ctree));
4737 gtk_clist_set_column_auto_resize (GTK_CLIST (ctree), 0, TRUE);
4738 gtk_clist_set_column_width (GTK_CLIST (ctree), 1, 200);
4739 gtk_clist_set_selection_mode (GTK_CLIST (ctree), GTK_SELECTION_EXTENDED);
4740 gtk_ctree_set_line_style (ctree, GTK_CTREE_LINES_DOTTED);
4741 line_style = GTK_CTREE_LINES_DOTTED;
4743 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4744 GTK_SIGNAL_FUNC (rebuild_tree), ctree);
4745 gtk_signal_connect (GTK_OBJECT (ctree), "click_column",
4746 (GtkSignalFunc) ctree_click_column, NULL);
4748 gtk_signal_connect_after (GTK_OBJECT (ctree), "button_press_event",
4749 GTK_SIGNAL_FUNC (after_press), NULL);
4750 gtk_signal_connect_after (GTK_OBJECT (ctree), "button_release_event",
4751 GTK_SIGNAL_FUNC (after_press), NULL);
4752 gtk_signal_connect_after (GTK_OBJECT (ctree), "tree_move",
4753 GTK_SIGNAL_FUNC (after_move), NULL);
4754 gtk_signal_connect_after (GTK_OBJECT (ctree), "end_selection",
4755 GTK_SIGNAL_FUNC (after_press), NULL);
4756 gtk_signal_connect_after (GTK_OBJECT (ctree), "toggle_focus_row",
4757 GTK_SIGNAL_FUNC (after_press), NULL);
4758 gtk_signal_connect_after (GTK_OBJECT (ctree), "select_all",
4759 GTK_SIGNAL_FUNC (after_press), NULL);
4760 gtk_signal_connect_after (GTK_OBJECT (ctree), "unselect_all",
4761 GTK_SIGNAL_FUNC (after_press), NULL);
4762 gtk_signal_connect_after (GTK_OBJECT (ctree), "scroll_vertical",
4763 GTK_SIGNAL_FUNC (after_press), NULL);
4765 bbox = gtk_hbox_new (FALSE, 5);
4766 gtk_container_set_border_width (GTK_CONTAINER (bbox), 5);
4767 gtk_box_pack_start (GTK_BOX (vbox), bbox, FALSE, TRUE, 0);
4769 mbox = gtk_vbox_new (TRUE, 5);
4770 gtk_box_pack_start (GTK_BOX (bbox), mbox, FALSE, TRUE, 0);
4772 label = gtk_label_new ("Row Height :");
4773 gtk_box_pack_start (GTK_BOX (mbox), label, FALSE, FALSE, 0);
4775 label = gtk_label_new ("Indent :");
4776 gtk_box_pack_start (GTK_BOX (mbox), label, FALSE, FALSE, 0);
4778 label = gtk_label_new ("Spacing :");
4779 gtk_box_pack_start (GTK_BOX (mbox), label, FALSE, FALSE, 0);
4781 mbox = gtk_vbox_new (TRUE, 5);
4782 gtk_box_pack_start (GTK_BOX (bbox), mbox, FALSE, TRUE, 0);
4784 adj = (GtkAdjustment *) gtk_adjustment_new (20, 12, 100, 1, 10, 0);
4785 spinner = gtk_spin_button_new (adj, 0, 0);
4786 gtk_box_pack_start (GTK_BOX (mbox), spinner, FALSE, FALSE, 5);
4787 gtk_tooltips_set_tip (tooltips, spinner,
4788 "Row height of list items", NULL);
4789 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
4790 GTK_SIGNAL_FUNC (change_row_height), ctree);
4791 gtk_clist_set_row_height ( GTK_CLIST (ctree), adj->value);
4793 adj = (GtkAdjustment *) gtk_adjustment_new (20, 0, 60, 1, 10, 0);
4794 spinner = gtk_spin_button_new (adj, 0, 0);
4795 gtk_box_pack_start (GTK_BOX (mbox), spinner, FALSE, FALSE, 5);
4796 gtk_tooltips_set_tip (tooltips, spinner, "Tree Indentation.", NULL);
4797 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
4798 GTK_SIGNAL_FUNC (change_indent), ctree);
4800 adj = (GtkAdjustment *) gtk_adjustment_new (5, 0, 60, 1, 10, 0);
4801 spinner = gtk_spin_button_new (adj, 0, 0);
4802 gtk_box_pack_start (GTK_BOX (mbox), spinner, FALSE, FALSE, 5);
4803 gtk_tooltips_set_tip (tooltips, spinner, "Tree Spacing.", NULL);
4804 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
4805 GTK_SIGNAL_FUNC (change_spacing), ctree);
4807 mbox = gtk_vbox_new (TRUE, 5);
4808 gtk_box_pack_start (GTK_BOX (bbox), mbox, FALSE, TRUE, 0);
4810 hbox = gtk_hbox_new (FALSE, 5);
4811 gtk_box_pack_start (GTK_BOX (mbox), hbox, FALSE, FALSE, 0);
4813 button = gtk_button_new_with_label ("Expand All");
4814 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4815 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4816 GTK_SIGNAL_FUNC (expand_all), ctree);
4818 button = gtk_button_new_with_label ("Collapse All");
4819 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4820 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4821 GTK_SIGNAL_FUNC (collapse_all), ctree);
4823 button = gtk_button_new_with_label ("Change Style");
4824 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4825 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4826 GTK_SIGNAL_FUNC (change_style), ctree);
4828 button = gtk_button_new_with_label ("Export Tree");
4829 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4830 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4831 GTK_SIGNAL_FUNC (export_ctree), ctree);
4833 hbox = gtk_hbox_new (FALSE, 5);
4834 gtk_box_pack_start (GTK_BOX (mbox), hbox, FALSE, FALSE, 0);
4836 button = gtk_button_new_with_label ("Select All");
4837 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4838 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4839 GTK_SIGNAL_FUNC (select_all), ctree);
4841 button = gtk_button_new_with_label ("Unselect All");
4842 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4843 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4844 GTK_SIGNAL_FUNC (unselect_all), ctree);
4846 button = gtk_button_new_with_label ("Remove Selection");
4847 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4848 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4849 GTK_SIGNAL_FUNC (remove_selection), ctree);
4851 check = gtk_check_button_new_with_label ("Reorderable");
4852 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
4853 gtk_tooltips_set_tip (tooltips, check,
4854 "Tree items can be reordered by dragging.", NULL);
4855 gtk_signal_connect (GTK_OBJECT (check), "clicked",
4856 GTK_SIGNAL_FUNC (toggle_reorderable), ctree);
4857 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE);
4859 hbox = gtk_hbox_new (TRUE, 5);
4860 gtk_box_pack_start (GTK_BOX (mbox), hbox, FALSE, FALSE, 0);
4862 omenu1 = build_option_menu (items1, 4, 2, ctree);
4863 gtk_box_pack_start (GTK_BOX (hbox), omenu1, FALSE, TRUE, 0);
4864 gtk_tooltips_set_tip (tooltips, omenu1, "The tree's line style.", NULL);
4866 omenu2 = build_option_menu (items2, 4, 1, ctree);
4867 gtk_box_pack_start (GTK_BOX (hbox), omenu2, FALSE, TRUE, 0);
4868 gtk_tooltips_set_tip (tooltips, omenu2, "The tree's expander style.",
4871 omenu3 = build_option_menu (items3, 2, 0, ctree);
4872 gtk_box_pack_start (GTK_BOX (hbox), omenu3, FALSE, TRUE, 0);
4873 gtk_tooltips_set_tip (tooltips, omenu3, "The tree's justification.",
4876 omenu4 = build_option_menu (items4, 4, 3, ctree);
4877 gtk_box_pack_start (GTK_BOX (hbox), omenu4, FALSE, TRUE, 0);
4878 gtk_tooltips_set_tip (tooltips, omenu4, "The list's selection mode.",
4881 gtk_widget_realize (window);
4883 pixmap1 = gdk_pixmap_create_from_xpm_d (window->window, &mask1,
4884 &transparent, book_closed_xpm);
4885 pixmap2 = gdk_pixmap_create_from_xpm_d (window->window, &mask2,
4886 &transparent, book_open_xpm);
4887 pixmap3 = gdk_pixmap_create_from_xpm_d (window->window, &mask3,
4888 &transparent, mini_page_xpm);
4890 gtk_widget_set_usize (GTK_WIDGET (ctree), 0, 300);
4892 frame = gtk_frame_new (NULL);
4893 gtk_container_set_border_width (GTK_CONTAINER (frame), 0);
4894 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_OUT);
4895 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
4897 hbox = gtk_hbox_new (TRUE, 2);
4898 gtk_container_set_border_width (GTK_CONTAINER (hbox), 2);
4899 gtk_container_add (GTK_CONTAINER (frame), hbox);
4901 frame = gtk_frame_new (NULL);
4902 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
4903 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
4905 hbox2 = gtk_hbox_new (FALSE, 0);
4906 gtk_container_set_border_width (GTK_CONTAINER (hbox2), 2);
4907 gtk_container_add (GTK_CONTAINER (frame), hbox2);
4909 label = gtk_label_new ("Books :");
4910 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
4912 sprintf (buf, "%d", books);
4913 book_label = gtk_label_new (buf);
4914 gtk_box_pack_end (GTK_BOX (hbox2), book_label, FALSE, TRUE, 5);
4916 frame = gtk_frame_new (NULL);
4917 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
4918 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
4920 hbox2 = gtk_hbox_new (FALSE, 0);
4921 gtk_container_set_border_width (GTK_CONTAINER (hbox2), 2);
4922 gtk_container_add (GTK_CONTAINER (frame), hbox2);
4924 label = gtk_label_new ("Pages :");
4925 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
4927 sprintf (buf, "%d", pages);
4928 page_label = gtk_label_new (buf);
4929 gtk_box_pack_end (GTK_BOX (hbox2), page_label, FALSE, TRUE, 5);
4931 frame = gtk_frame_new (NULL);
4932 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
4933 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
4935 hbox2 = gtk_hbox_new (FALSE, 0);
4936 gtk_container_set_border_width (GTK_CONTAINER (hbox2), 2);
4937 gtk_container_add (GTK_CONTAINER (frame), hbox2);
4939 label = gtk_label_new ("Selected :");
4940 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
4942 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->selection));
4943 sel_label = gtk_label_new (buf);
4944 gtk_box_pack_end (GTK_BOX (hbox2), sel_label, FALSE, TRUE, 5);
4946 frame = gtk_frame_new (NULL);
4947 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
4948 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
4950 hbox2 = gtk_hbox_new (FALSE, 0);
4951 gtk_container_set_border_width (GTK_CONTAINER (hbox2), 2);
4952 gtk_container_add (GTK_CONTAINER (frame), hbox2);
4954 label = gtk_label_new ("Visible :");
4955 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
4957 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->row_list));
4958 vis_label = gtk_label_new (buf);
4959 gtk_box_pack_end (GTK_BOX (hbox2), vis_label, FALSE, TRUE, 5);
4961 rebuild_tree (NULL, ctree);
4964 if (!GTK_WIDGET_VISIBLE (window))
4965 gtk_widget_show_all (window);
4967 gtk_widget_destroy (window);
4975 color_selection_ok (GtkWidget *w,
4976 GtkColorSelectionDialog *cs)
4978 GtkColorSelection *colorsel;
4981 colorsel=GTK_COLOR_SELECTION(cs->colorsel);
4983 gtk_color_selection_get_color(colorsel,color);
4984 gtk_color_selection_set_color(colorsel,color);
4988 color_selection_changed (GtkWidget *w,
4989 GtkColorSelectionDialog *cs)
4991 GtkColorSelection *colorsel;
4994 colorsel=GTK_COLOR_SELECTION(cs->colorsel);
4995 gtk_color_selection_get_color(colorsel,color);
4999 create_color_selection (void)
5001 static GtkWidget *window = NULL;
5005 window = gtk_color_selection_dialog_new ("color selection dialog");
5007 gtk_color_selection_set_opacity (
5008 GTK_COLOR_SELECTION (GTK_COLOR_SELECTION_DIALOG (window)->colorsel),
5011 gtk_color_selection_set_update_policy(
5012 GTK_COLOR_SELECTION (GTK_COLOR_SELECTION_DIALOG (window)->colorsel),
5013 GTK_UPDATE_CONTINUOUS);
5015 gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
5017 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5018 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5021 gtk_signal_connect (
5022 GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (window)->colorsel),
5024 GTK_SIGNAL_FUNC(color_selection_changed),
5027 gtk_signal_connect (
5028 GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (window)->ok_button),
5030 GTK_SIGNAL_FUNC(color_selection_ok),
5033 gtk_signal_connect_object (
5034 GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (window)->cancel_button),
5036 GTK_SIGNAL_FUNC(gtk_widget_destroy),
5037 GTK_OBJECT (window));
5040 if (!GTK_WIDGET_VISIBLE (window))
5041 gtk_widget_show (window);
5043 gtk_widget_destroy (window);
5051 file_selection_hide_fileops (GtkWidget *widget,
5052 GtkFileSelection *fs)
5054 gtk_file_selection_hide_fileop_buttons (fs);
5058 file_selection_ok (GtkWidget *w,
5059 GtkFileSelection *fs)
5061 g_print ("%s\n", gtk_file_selection_get_filename (fs));
5062 gtk_widget_destroy (GTK_WIDGET (fs));
5066 create_file_selection (void)
5068 static GtkWidget *window = NULL;
5073 window = gtk_file_selection_new ("file selection dialog");
5075 gtk_file_selection_hide_fileop_buttons (GTK_FILE_SELECTION (window));
5077 gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
5079 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5080 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5083 gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (window)->ok_button),
5084 "clicked", GTK_SIGNAL_FUNC(file_selection_ok),
5086 gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION (window)->cancel_button),
5087 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
5088 GTK_OBJECT (window));
5090 button = gtk_button_new_with_label ("Hide Fileops");
5091 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5092 (GtkSignalFunc) file_selection_hide_fileops,
5094 gtk_box_pack_start (GTK_BOX (GTK_FILE_SELECTION (window)->action_area),
5095 button, FALSE, FALSE, 0);
5096 gtk_widget_show (button);
5098 button = gtk_button_new_with_label ("Show Fileops");
5099 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5100 (GtkSignalFunc) gtk_file_selection_show_fileop_buttons,
5102 gtk_box_pack_start (GTK_BOX (GTK_FILE_SELECTION (window)->action_area),
5103 button, FALSE, FALSE, 0);
5104 gtk_widget_show (button);
5107 if (!GTK_WIDGET_VISIBLE (window))
5108 gtk_widget_show (window);
5110 gtk_widget_destroy (window);
5118 font_selection_ok (GtkWidget *w,
5119 GtkFontSelectionDialog *fs)
5121 g_print ("%s\n", gtk_font_selection_dialog_get_font_name (fs));
5122 gtk_widget_destroy (GTK_WIDGET (fs));
5126 create_font_selection (void)
5128 static GtkWidget *window = NULL;
5132 window = gtk_font_selection_dialog_new ("Font Selection Dialog");
5134 gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
5136 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5137 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5140 gtk_signal_connect (GTK_OBJECT (GTK_FONT_SELECTION_DIALOG (window)->ok_button),
5141 "clicked", GTK_SIGNAL_FUNC(font_selection_ok),
5142 GTK_FONT_SELECTION_DIALOG (window));
5143 gtk_signal_connect_object (GTK_OBJECT (GTK_FONT_SELECTION_DIALOG (window)->cancel_button),
5144 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
5145 GTK_OBJECT (window));
5148 if (!GTK_WIDGET_VISIBLE (window))
5149 gtk_widget_show (window);
5151 gtk_widget_destroy (window);
5158 static GtkWidget *dialog_window = NULL;
5161 label_toggle (GtkWidget *widget,
5166 *label = gtk_label_new ("Dialog Test");
5167 gtk_signal_connect (GTK_OBJECT (*label),
5169 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
5171 gtk_misc_set_padding (GTK_MISC (*label), 10, 10);
5172 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->vbox),
5173 *label, TRUE, TRUE, 0);
5174 gtk_widget_show (*label);
5177 gtk_widget_destroy (*label);
5181 create_dialog (void)
5183 static GtkWidget *label;
5188 dialog_window = gtk_dialog_new ();
5190 gtk_signal_connect (GTK_OBJECT (dialog_window), "destroy",
5191 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5194 gtk_window_set_title (GTK_WINDOW (dialog_window), "GtkDialog");
5195 gtk_container_set_border_width (GTK_CONTAINER (dialog_window), 0);
5196 gtk_widget_set_usize (dialog_window, 200, 110);
5198 button = gtk_button_new_with_label ("OK");
5199 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5200 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->action_area),
5201 button, TRUE, TRUE, 0);
5202 gtk_widget_grab_default (button);
5203 gtk_widget_show (button);
5205 button = gtk_button_new_with_label ("Toggle");
5206 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5207 GTK_SIGNAL_FUNC (label_toggle),
5209 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5210 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->action_area),
5211 button, TRUE, TRUE, 0);
5212 gtk_widget_show (button);
5217 if (!GTK_WIDGET_VISIBLE (dialog_window))
5218 gtk_widget_show (dialog_window);
5220 gtk_widget_destroy (dialog_window);
5225 static gboolean event_watcher_enter_id = 0;
5226 static gboolean event_watcher_leave_id = 0;
5229 event_watcher (GtkObject *object,
5235 g_print ("Watch: \"%s\" emitted for %s\n",
5236 gtk_signal_name (signal_id),
5237 gtk_type_name (GTK_OBJECT_TYPE (object)));
5243 event_watcher_down (void)
5245 if (event_watcher_enter_id)
5249 signal_id = gtk_signal_lookup ("enter_notify_event", GTK_TYPE_WIDGET);
5250 gtk_signal_remove_emission_hook (signal_id, event_watcher_enter_id);
5251 event_watcher_enter_id = 0;
5252 signal_id = gtk_signal_lookup ("leave_notify_event", GTK_TYPE_WIDGET);
5253 gtk_signal_remove_emission_hook (signal_id, event_watcher_leave_id);
5254 event_watcher_leave_id = 0;
5259 event_watcher_toggle (void)
5261 if (event_watcher_enter_id)
5262 event_watcher_down ();
5267 signal_id = gtk_signal_lookup ("enter_notify_event", GTK_TYPE_WIDGET);
5268 event_watcher_enter_id = gtk_signal_add_emission_hook (signal_id, event_watcher, NULL);
5269 signal_id = gtk_signal_lookup ("leave_notify_event", GTK_TYPE_WIDGET);
5270 event_watcher_leave_id = gtk_signal_add_emission_hook (signal_id, event_watcher, NULL);
5275 create_event_watcher (void)
5281 dialog_window = gtk_dialog_new ();
5283 gtk_signal_connect (GTK_OBJECT (dialog_window), "destroy",
5284 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
5286 gtk_signal_connect (GTK_OBJECT (dialog_window),
5288 GTK_SIGNAL_FUNC (event_watcher_down),
5291 gtk_window_set_title (GTK_WINDOW (dialog_window), "Event Watcher");
5292 gtk_container_set_border_width (GTK_CONTAINER (dialog_window), 0);
5293 gtk_widget_set_usize (dialog_window, 200, 110);
5295 button = gtk_toggle_button_new_with_label ("Activate Watch");
5296 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5297 GTK_SIGNAL_FUNC (event_watcher_toggle),
5299 gtk_container_set_border_width (GTK_CONTAINER (button), 10);
5300 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->vbox),
5301 button, TRUE, TRUE, 0);
5302 gtk_widget_show (button);
5304 button = gtk_button_new_with_label ("Close");
5305 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5306 GTK_SIGNAL_FUNC (gtk_widget_destroy),
5307 (GtkObject*) dialog_window);
5308 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5309 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->action_area),
5310 button, TRUE, TRUE, 0);
5311 gtk_widget_grab_default (button);
5312 gtk_widget_show (button);
5315 if (!GTK_WIDGET_VISIBLE (dialog_window))
5316 gtk_widget_show (dialog_window);
5318 gtk_widget_destroy (dialog_window);
5326 create_range_controls (void)
5328 static GtkWidget *window = NULL;
5332 GtkWidget *scrollbar;
5334 GtkWidget *separator;
5335 GtkObject *adjustment;
5339 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5341 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5342 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5345 gtk_window_set_title (GTK_WINDOW (window), "range controls");
5346 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
5349 box1 = gtk_vbox_new (FALSE, 0);
5350 gtk_container_add (GTK_CONTAINER (window), box1);
5351 gtk_widget_show (box1);
5354 box2 = gtk_vbox_new (FALSE, 10);
5355 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
5356 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
5357 gtk_widget_show (box2);
5360 adjustment = gtk_adjustment_new (0.0, 0.0, 101.0, 0.1, 1.0, 1.0);
5362 scale = gtk_hscale_new (GTK_ADJUSTMENT (adjustment));
5363 gtk_widget_set_usize (GTK_WIDGET (scale), 150, 30);
5364 gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED);
5365 gtk_scale_set_digits (GTK_SCALE (scale), 1);
5366 gtk_scale_set_draw_value (GTK_SCALE (scale), TRUE);
5367 gtk_box_pack_start (GTK_BOX (box2), scale, TRUE, TRUE, 0);
5368 gtk_widget_show (scale);
5370 scrollbar = gtk_hscrollbar_new (GTK_ADJUSTMENT (adjustment));
5371 gtk_range_set_update_policy (GTK_RANGE (scrollbar),
5372 GTK_UPDATE_CONTINUOUS);
5373 gtk_box_pack_start (GTK_BOX (box2), scrollbar, TRUE, TRUE, 0);
5374 gtk_widget_show (scrollbar);
5377 separator = gtk_hseparator_new ();
5378 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
5379 gtk_widget_show (separator);
5382 box2 = gtk_vbox_new (FALSE, 10);
5383 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
5384 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
5385 gtk_widget_show (box2);
5388 button = gtk_button_new_with_label ("close");
5389 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5390 GTK_SIGNAL_FUNC(gtk_widget_destroy),
5391 GTK_OBJECT (window));
5392 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
5393 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5394 gtk_widget_grab_default (button);
5395 gtk_widget_show (button);
5398 if (!GTK_WIDGET_VISIBLE (window))
5399 gtk_widget_show (window);
5401 gtk_widget_destroy (window);
5409 create_rulers (void)
5411 static GtkWidget *window = NULL;
5417 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5418 gtk_window_set_policy (GTK_WINDOW (window), TRUE, TRUE, FALSE);
5420 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5421 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5424 gtk_window_set_title (GTK_WINDOW (window), "rulers");
5425 gtk_widget_set_usize (window, 300, 300);
5426 gtk_widget_set_events (window,
5427 GDK_POINTER_MOTION_MASK
5428 | GDK_POINTER_MOTION_HINT_MASK);
5429 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
5431 table = gtk_table_new (2, 2, FALSE);
5432 gtk_container_add (GTK_CONTAINER (window), table);
5433 gtk_widget_show (table);
5435 ruler = gtk_hruler_new ();
5436 gtk_ruler_set_metric (GTK_RULER (ruler), GTK_CENTIMETERS);
5437 gtk_ruler_set_range (GTK_RULER (ruler), 100, 0, 0, 20);
5439 gtk_signal_connect_object (
5440 GTK_OBJECT (window),
5441 "motion_notify_event",
5443 GTK_WIDGET_CLASS (GTK_OBJECT (ruler)->klass)->motion_notify_event),
5444 GTK_OBJECT (ruler));
5446 gtk_table_attach (GTK_TABLE (table), ruler, 1, 2, 0, 1,
5447 GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
5448 gtk_widget_show (ruler);
5451 ruler = gtk_vruler_new ();
5452 gtk_ruler_set_range (GTK_RULER (ruler), 5, 15, 0, 20);
5454 gtk_signal_connect_object (
5455 GTK_OBJECT (window),
5456 "motion_notify_event",
5457 GTK_SIGNAL_FUNC (GTK_WIDGET_CLASS (GTK_OBJECT (ruler)->klass)->motion_notify_event),
5458 GTK_OBJECT (ruler));
5460 gtk_table_attach (GTK_TABLE (table), ruler, 0, 1, 1, 2,
5461 GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
5462 gtk_widget_show (ruler);
5465 if (!GTK_WIDGET_VISIBLE (window))
5466 gtk_widget_show (window);
5468 gtk_widget_destroy (window);
5472 text_toggle_editable (GtkWidget *checkbutton,
5475 gtk_text_set_editable(GTK_TEXT(text),
5476 GTK_TOGGLE_BUTTON(checkbutton)->active);
5480 text_toggle_word_wrap (GtkWidget *checkbutton,
5483 gtk_text_set_word_wrap(GTK_TEXT(text),
5484 GTK_TOGGLE_BUTTON(checkbutton)->active);
5491 { { 0, 0x0000, 0x0000, 0x0000 }, "black" },
5492 { { 0, 0xFFFF, 0xFFFF, 0xFFFF }, "white" },
5493 { { 0, 0xFFFF, 0x0000, 0x0000 }, "red" },
5494 { { 0, 0x0000, 0xFFFF, 0x0000 }, "green" },
5495 { { 0, 0x0000, 0x0000, 0xFFFF }, "blue" },
5496 { { 0, 0x0000, 0xFFFF, 0xFFFF }, "cyan" },
5497 { { 0, 0xFFFF, 0x0000, 0xFFFF }, "magenta" },
5498 { { 0, 0xFFFF, 0xFFFF, 0x0000 }, "yellow" }
5501 int ntext_colors = sizeof(text_colors) / sizeof(text_colors[0]);
5507 text_insert_random (GtkWidget *w, GtkText *text)
5511 for (i=0; i<10; i++)
5513 c = 'A' + rand() % ('Z' - 'A');
5514 gtk_text_set_point (text, rand() % gtk_text_get_length (text));
5515 gtk_text_insert (text, NULL, NULL, NULL, &c, 1);
5524 static GtkWidget *window = NULL;
5530 GtkWidget *separator;
5531 GtkWidget *scrolled_window;
5539 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5540 gtk_widget_set_name (window, "text window");
5541 gtk_widget_set_usize (window, 500, 500);
5542 gtk_window_set_policy (GTK_WINDOW(window), TRUE, TRUE, FALSE);
5544 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5545 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5548 gtk_window_set_title (GTK_WINDOW (window), "test");
5549 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
5552 box1 = gtk_vbox_new (FALSE, 0);
5553 gtk_container_add (GTK_CONTAINER (window), box1);
5554 gtk_widget_show (box1);
5557 box2 = gtk_vbox_new (FALSE, 10);
5558 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
5559 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
5560 gtk_widget_show (box2);
5563 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
5564 gtk_box_pack_start (GTK_BOX (box2), scrolled_window, TRUE, TRUE, 0);
5565 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
5568 gtk_widget_show (scrolled_window);
5570 text = gtk_text_new (NULL, NULL);
5571 gtk_text_set_editable (GTK_TEXT (text), TRUE);
5572 gtk_container_add (GTK_CONTAINER (scrolled_window), text);
5573 gtk_widget_grab_focus (text);
5574 gtk_widget_show (text);
5577 gtk_text_freeze (GTK_TEXT (text));
5579 font = gdk_font_load ("-adobe-courier-medium-r-normal--*-120-*-*-*-*-*-*");
5581 for (i=0; i<ntext_colors; i++)
5583 gtk_text_insert (GTK_TEXT (text), font, NULL, NULL,
5584 text_colors[i].name, -1);
5585 gtk_text_insert (GTK_TEXT (text), font, NULL, NULL, "\t", -1);
5587 for (j=0; j<ntext_colors; j++)
5589 gtk_text_insert (GTK_TEXT (text), font,
5590 &text_colors[j].color, &text_colors[i].color,
5593 gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL, "\n", -1);
5596 /* The Text widget will reference count the font, so we
5597 * unreference it here
5599 gdk_font_unref (font);
5601 infile = fopen("testgtk.c", "r");
5606 int nbytes_read, nbytes_alloc;
5609 nbytes_alloc = 1024;
5610 buffer = g_new (char, nbytes_alloc);
5614 if (nbytes_alloc < nbytes_read + 1024)
5617 buffer = g_realloc (buffer, nbytes_alloc);
5619 len = fread (buffer + nbytes_read, 1, 1024, infile);
5625 gtk_text_insert (GTK_TEXT (text), NULL, NULL,
5626 NULL, buffer, nbytes_read);
5631 gtk_text_thaw (GTK_TEXT (text));
5633 hbox = gtk_hbutton_box_new ();
5634 gtk_box_pack_start (GTK_BOX (box2), hbox, FALSE, FALSE, 0);
5635 gtk_widget_show (hbox);
5637 check = gtk_check_button_new_with_label("Editable");
5638 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, FALSE, 0);
5639 gtk_signal_connect (GTK_OBJECT(check), "toggled",
5640 GTK_SIGNAL_FUNC(text_toggle_editable), text);
5641 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), TRUE);
5642 gtk_widget_show (check);
5644 check = gtk_check_button_new_with_label("Wrap Words");
5645 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
5646 gtk_signal_connect (GTK_OBJECT(check), "toggled",
5647 GTK_SIGNAL_FUNC(text_toggle_word_wrap), text);
5648 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), FALSE);
5649 gtk_widget_show (check);
5651 separator = gtk_hseparator_new ();
5652 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
5653 gtk_widget_show (separator);
5656 box2 = gtk_vbox_new (FALSE, 10);
5657 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
5658 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
5659 gtk_widget_show (box2);
5662 button = gtk_button_new_with_label ("insert random");
5663 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5664 GTK_SIGNAL_FUNC(text_insert_random),
5666 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
5667 gtk_widget_show (button);
5669 button = gtk_button_new_with_label ("close");
5670 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5671 GTK_SIGNAL_FUNC(gtk_widget_destroy),
5672 GTK_OBJECT (window));
5673 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
5674 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5675 gtk_widget_grab_default (button);
5676 gtk_widget_show (button);
5679 if (!GTK_WIDGET_VISIBLE (window))
5680 gtk_widget_show (window);
5682 gtk_widget_destroy (window);
5689 GdkPixmap *book_open;
5690 GdkPixmap *book_closed;
5691 GdkBitmap *book_open_mask;
5692 GdkBitmap *book_closed_mask;
5693 GtkWidget *sample_notebook;
5696 page_switch (GtkWidget *widget, GtkNotebookPage *page, gint page_num)
5698 GtkNotebookPage *oldpage;
5701 oldpage = GTK_NOTEBOOK (widget)->cur_page;
5703 if (page == oldpage)
5705 pixwid = ((GtkBoxChild*)
5706 (GTK_BOX (page->tab_label)->children->data))->widget;
5707 gtk_pixmap_set (GTK_PIXMAP (pixwid), book_open, book_open_mask);
5708 pixwid = ((GtkBoxChild*)
5709 (GTK_BOX (page->menu_label)->children->data))->widget;
5710 gtk_pixmap_set (GTK_PIXMAP (pixwid), book_open, book_open_mask);
5714 pixwid = ((GtkBoxChild*)
5715 (GTK_BOX (oldpage->tab_label)->children->data))->widget;
5716 gtk_pixmap_set (GTK_PIXMAP (pixwid), book_closed, book_closed_mask);
5717 pixwid = ((GtkBoxChild*)
5718 (GTK_BOX (oldpage->menu_label)->children->data))->widget;
5719 gtk_pixmap_set (GTK_PIXMAP (pixwid), book_closed, book_closed_mask);
5724 tab_fill (GtkToggleButton *button, GtkWidget *child)
5727 GtkPackType pack_type;
5729 gtk_notebook_query_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
5730 &expand, NULL, &pack_type);
5731 gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
5732 expand, button->active, pack_type);
5736 tab_expand (GtkToggleButton *button, GtkWidget *child)
5739 GtkPackType pack_type;
5741 gtk_notebook_query_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
5742 NULL, &fill, &pack_type);
5743 gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
5744 button->active, fill, pack_type);
5748 tab_pack (GtkToggleButton *button, GtkWidget *child)
5754 gtk_notebook_query_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
5755 &expand, &fill, NULL);
5756 gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
5757 expand, fill, button->active);
5761 create_pages (GtkNotebook *notebook, gint start, gint end)
5763 GtkWidget *child = NULL;
5768 GtkWidget *label_box;
5769 GtkWidget *menu_box;
5774 for (i = start; i <= end; i++)
5776 sprintf (buffer, "Page %d", i);
5778 child = gtk_frame_new (buffer);
5779 gtk_container_set_border_width (GTK_CONTAINER (child), 10);
5781 vbox = gtk_vbox_new (TRUE,0);
5782 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
5783 gtk_container_add (GTK_CONTAINER (child), vbox);
5785 hbox = gtk_hbox_new (TRUE,0);
5786 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
5788 button = gtk_check_button_new_with_label ("Fill Tab");
5789 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
5790 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
5791 gtk_signal_connect (GTK_OBJECT (button), "toggled",
5792 GTK_SIGNAL_FUNC (tab_fill), child);
5794 button = gtk_check_button_new_with_label ("Expand Tab");
5795 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
5796 gtk_signal_connect (GTK_OBJECT (button), "toggled",
5797 GTK_SIGNAL_FUNC (tab_expand), child);
5799 button = gtk_check_button_new_with_label ("Pack end");
5800 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
5801 gtk_signal_connect (GTK_OBJECT (button), "toggled",
5802 GTK_SIGNAL_FUNC (tab_pack), child);
5804 button = gtk_button_new_with_label ("Hide Page");
5805 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 5);
5806 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5807 GTK_SIGNAL_FUNC (gtk_widget_hide),
5808 GTK_OBJECT (child));
5810 gtk_widget_show_all (child);
5812 label_box = gtk_hbox_new (FALSE, 0);
5813 pixwid = gtk_pixmap_new (book_closed, book_closed_mask);
5814 gtk_box_pack_start (GTK_BOX (label_box), pixwid, FALSE, TRUE, 0);
5815 gtk_misc_set_padding (GTK_MISC (pixwid), 3, 1);
5816 label = gtk_label_new (buffer);
5817 gtk_box_pack_start (GTK_BOX (label_box), label, FALSE, TRUE, 0);
5818 gtk_widget_show_all (label_box);
5820 menu_box = gtk_hbox_new (FALSE, 0);
5821 pixwid = gtk_pixmap_new (book_closed, book_closed_mask);
5822 gtk_box_pack_start (GTK_BOX (menu_box), pixwid, FALSE, TRUE, 0);
5823 gtk_misc_set_padding (GTK_MISC (pixwid), 3, 1);
5824 label = gtk_label_new (buffer);
5825 gtk_box_pack_start (GTK_BOX (menu_box), label, FALSE, TRUE, 0);
5826 gtk_widget_show_all (menu_box);
5827 gtk_notebook_append_page_menu (notebook, child, label_box, menu_box);
5832 rotate_notebook (GtkButton *button,
5833 GtkNotebook *notebook)
5835 gtk_notebook_set_tab_pos (notebook, (notebook->tab_pos + 1) % 4);
5839 show_all_pages (GtkButton *button,
5840 GtkNotebook *notebook)
5842 gtk_container_foreach (GTK_CONTAINER (notebook),
5843 (GtkCallback) gtk_widget_show, NULL);
5847 standard_notebook (GtkButton *button,
5848 GtkNotebook *notebook)
5852 gtk_notebook_set_show_tabs (notebook, TRUE);
5853 gtk_notebook_set_scrollable (notebook, FALSE);
5854 if (g_list_length (notebook->children) == 15)
5855 for (i = 0; i < 10; i++)
5856 gtk_notebook_remove_page (notebook, 5);
5860 notabs_notebook (GtkButton *button,
5861 GtkNotebook *notebook)
5865 gtk_notebook_set_show_tabs (notebook, FALSE);
5866 if (g_list_length (notebook->children) == 15)
5867 for (i = 0; i < 10; i++)
5868 gtk_notebook_remove_page (notebook, 5);
5872 scrollable_notebook (GtkButton *button,
5873 GtkNotebook *notebook)
5875 gtk_notebook_set_show_tabs (notebook, TRUE);
5876 gtk_notebook_set_scrollable (notebook, TRUE);
5877 if (g_list_length (notebook->children) == 5)
5878 create_pages (notebook, 6, 15);
5882 notebook_popup (GtkToggleButton *button,
5883 GtkNotebook *notebook)
5886 gtk_notebook_popup_enable (notebook);
5888 gtk_notebook_popup_disable (notebook);
5892 notebook_homogeneous (GtkToggleButton *button,
5893 GtkNotebook *notebook)
5895 gtk_notebook_set_homogeneous_tabs (notebook, button->active);
5899 create_notebook (void)
5901 static GtkWidget *window = NULL;
5905 GtkWidget *separator;
5907 GdkColor *transparent = NULL;
5910 static OptionMenuItem items[] =
5912 { "Standard", standard_notebook },
5913 { "No tabs", notabs_notebook },
5914 { "Scrollable", scrollable_notebook }
5919 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5921 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5922 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5925 gtk_window_set_title (GTK_WINDOW (window), "notebook");
5926 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
5928 box1 = gtk_vbox_new (FALSE, 0);
5929 gtk_container_add (GTK_CONTAINER (window), box1);
5931 sample_notebook = gtk_notebook_new ();
5932 gtk_signal_connect (GTK_OBJECT (sample_notebook), "switch_page",
5933 GTK_SIGNAL_FUNC (page_switch), NULL);
5934 gtk_notebook_set_tab_pos (GTK_NOTEBOOK (sample_notebook), GTK_POS_TOP);
5935 gtk_box_pack_start (GTK_BOX (box1), sample_notebook, TRUE, TRUE, 0);
5936 gtk_container_set_border_width (GTK_CONTAINER (sample_notebook), 10);
5938 gtk_widget_realize (sample_notebook);
5939 book_open = gdk_pixmap_create_from_xpm_d (sample_notebook->window,
5943 book_closed = gdk_pixmap_create_from_xpm_d (sample_notebook->window,
5948 create_pages (GTK_NOTEBOOK (sample_notebook), 1, 5);
5950 separator = gtk_hseparator_new ();
5951 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 10);
5953 box2 = gtk_hbox_new (FALSE, 5);
5954 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
5955 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
5957 button = gtk_check_button_new_with_label ("popup menu");
5958 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, FALSE, 0);
5959 gtk_signal_connect (GTK_OBJECT(button), "clicked",
5960 GTK_SIGNAL_FUNC (notebook_popup),
5961 GTK_OBJECT (sample_notebook));
5963 button = gtk_check_button_new_with_label ("homogeneous tabs");
5964 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, FALSE, 0);
5965 gtk_signal_connect (GTK_OBJECT(button), "clicked",
5966 GTK_SIGNAL_FUNC (notebook_homogeneous),
5967 GTK_OBJECT (sample_notebook));
5969 box2 = gtk_hbox_new (FALSE, 5);
5970 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
5971 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
5973 label = gtk_label_new ("Notebook Style :");
5974 gtk_box_pack_start (GTK_BOX (box2), label, FALSE, TRUE, 0);
5976 omenu = build_option_menu (items, 3, 0, sample_notebook);
5977 gtk_box_pack_start (GTK_BOX (box2), omenu, FALSE, TRUE, 0);
5979 button = gtk_button_new_with_label ("Show all Pages");
5980 gtk_box_pack_start (GTK_BOX (box2), button, FALSE, TRUE, 0);
5981 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5982 GTK_SIGNAL_FUNC (show_all_pages), sample_notebook);
5984 box2 = gtk_hbox_new (TRUE, 10);
5985 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
5986 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
5988 button = gtk_button_new_with_label ("prev");
5989 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5990 GTK_SIGNAL_FUNC (gtk_notebook_prev_page),
5991 GTK_OBJECT (sample_notebook));
5992 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
5994 button = gtk_button_new_with_label ("next");
5995 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5996 GTK_SIGNAL_FUNC (gtk_notebook_next_page),
5997 GTK_OBJECT (sample_notebook));
5998 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6000 button = gtk_button_new_with_label ("rotate");
6001 gtk_signal_connect (GTK_OBJECT (button), "clicked",
6002 GTK_SIGNAL_FUNC (rotate_notebook), sample_notebook);
6003 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6005 separator = gtk_hseparator_new ();
6006 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 5);
6008 button = gtk_button_new_with_label ("close");
6009 gtk_container_set_border_width (GTK_CONTAINER (button), 5);
6010 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6011 GTK_SIGNAL_FUNC (gtk_widget_destroy),
6012 GTK_OBJECT (window));
6013 gtk_box_pack_start (GTK_BOX (box1), button, FALSE, FALSE, 0);
6014 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6015 gtk_widget_grab_default (button);
6018 if (!GTK_WIDGET_VISIBLE (window))
6019 gtk_widget_show_all (window);
6021 gtk_widget_destroy (window);
6029 toggle_resize (GtkWidget *widget, GtkWidget *child)
6031 GtkPaned *paned = GTK_PANED (child->parent);
6032 gboolean is_child1 = (child == paned->child1);
6033 gboolean resize, shrink;
6035 resize = is_child1 ? paned->child1_resize : paned->child2_resize;
6036 shrink = is_child1 ? paned->child1_shrink : paned->child2_shrink;
6038 gtk_widget_ref (child);
6039 gtk_container_remove (GTK_CONTAINER (child->parent), child);
6041 gtk_paned_pack1 (paned, child, !resize, shrink);
6043 gtk_paned_pack2 (paned, child, !resize, shrink);
6044 gtk_widget_unref (child);
6048 toggle_shrink (GtkWidget *widget, GtkWidget *child)
6050 GtkPaned *paned = GTK_PANED (child->parent);
6051 gboolean is_child1 = (child == paned->child1);
6052 gboolean resize, shrink;
6054 resize = is_child1 ? paned->child1_resize : paned->child2_resize;
6055 shrink = is_child1 ? paned->child1_shrink : paned->child2_shrink;
6057 gtk_widget_ref (child);
6058 gtk_container_remove (GTK_CONTAINER (child->parent), child);
6060 gtk_paned_pack1 (paned, child, resize, !shrink);
6062 gtk_paned_pack2 (paned, child, resize, !shrink);
6063 gtk_widget_unref (child);
6067 create_pane_options (GtkPaned *paned,
6068 const gchar *frame_label,
6069 const gchar *label1,
6070 const gchar *label2)
6075 GtkWidget *check_button;
6077 frame = gtk_frame_new (frame_label);
6078 gtk_container_set_border_width (GTK_CONTAINER (frame), 4);
6080 table = gtk_table_new (3, 2, 4);
6081 gtk_container_add (GTK_CONTAINER (frame), table);
6083 label = gtk_label_new (label1);
6084 gtk_table_attach_defaults (GTK_TABLE (table), label,
6087 check_button = gtk_check_button_new_with_label ("Resize");
6088 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
6090 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
6091 GTK_SIGNAL_FUNC (toggle_resize),
6094 check_button = gtk_check_button_new_with_label ("Shrink");
6095 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
6097 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
6099 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
6100 GTK_SIGNAL_FUNC (toggle_shrink),
6103 label = gtk_label_new (label2);
6104 gtk_table_attach_defaults (GTK_TABLE (table), label,
6107 check_button = gtk_check_button_new_with_label ("Resize");
6108 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
6110 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
6112 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
6113 GTK_SIGNAL_FUNC (toggle_resize),
6116 check_button = gtk_check_button_new_with_label ("Shrink");
6117 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
6119 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
6121 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
6122 GTK_SIGNAL_FUNC (toggle_shrink),
6131 static GtkWidget *window = NULL;
6140 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6142 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6143 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6146 gtk_window_set_title (GTK_WINDOW (window), "Panes");
6147 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6149 vbox = gtk_vbox_new (FALSE, 0);
6150 gtk_container_add (GTK_CONTAINER (window), vbox);
6152 vpaned = gtk_vpaned_new ();
6153 gtk_box_pack_start (GTK_BOX (vbox), vpaned, TRUE, TRUE, 0);
6154 gtk_container_set_border_width (GTK_CONTAINER(vpaned), 5);
6156 hpaned = gtk_hpaned_new ();
6157 gtk_paned_add1 (GTK_PANED (vpaned), hpaned);
6159 frame = gtk_frame_new (NULL);
6160 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
6161 gtk_widget_set_usize (frame, 60, 60);
6162 gtk_paned_add1 (GTK_PANED (hpaned), frame);
6164 button = gtk_button_new_with_label ("Hi there");
6165 gtk_container_add (GTK_CONTAINER(frame), button);
6167 frame = gtk_frame_new (NULL);
6168 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
6169 gtk_widget_set_usize (frame, 80, 60);
6170 gtk_paned_add2 (GTK_PANED (hpaned), frame);
6172 frame = gtk_frame_new (NULL);
6173 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
6174 gtk_widget_set_usize (frame, 60, 80);
6175 gtk_paned_add2 (GTK_PANED (vpaned), frame);
6177 /* Now create toggle buttons to control sizing */
6179 gtk_box_pack_start (GTK_BOX (vbox),
6180 create_pane_options (GTK_PANED (hpaned),
6186 gtk_box_pack_start (GTK_BOX (vbox),
6187 create_pane_options (GTK_PANED (vpaned),
6193 gtk_widget_show_all (vbox);
6196 if (!GTK_WIDGET_VISIBLE (window))
6197 gtk_widget_show (window);
6199 gtk_widget_destroy (window);
6208 dnd_drop_destroy_popup (GtkWidget *widget, GtkWindow **window)
6210 if(GTK_IS_BUTTON(widget)) /* I.e. they clicked the close button */
6211 gtk_widget_destroy(GTK_WIDGET(*window));
6213 gtk_grab_remove(GTK_WIDGET(*window));
6221 dnd_drop (GtkWidget *button, GdkEvent *event)
6223 static GtkWidget *window = NULL;
6224 GtkWidget *vbox, *lbl, *btn;
6227 /* DND doesn't obey gtk_grab's, so check if we're already displaying
6228 * drop modal dialog first
6233 window = gtk_window_new(GTK_WINDOW_DIALOG);
6234 gtk_container_set_border_width (GTK_CONTAINER(window), 10);
6236 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6237 GTK_SIGNAL_FUNC(dnd_drop_destroy_popup),
6239 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
6240 GTK_SIGNAL_FUNC(gtk_false),
6243 vbox = gtk_vbox_new(FALSE, 5);
6245 /* Display message that we got from drop source */
6246 msg = g_malloc(strlen(event->dropdataavailable.data)
6247 + strlen(event->dropdataavailable.data_type) + 100);
6248 sprintf(msg, "Drop data of type %s was:\n\n%s",
6249 event->dropdataavailable.data_type,
6250 (char *)event->dropdataavailable.data);
6251 lbl = gtk_label_new(msg);
6252 gtk_label_set_justify(GTK_LABEL(lbl), GTK_JUSTIFY_FILL);
6254 gtk_widget_show(lbl);
6255 gtk_box_pack_start_defaults(GTK_BOX(vbox), lbl);
6257 /* Provide an obvious way out of this heinousness */
6258 btn = gtk_button_new_with_label("Continue with life in\nspite of this oppression");
6259 gtk_signal_connect_object (GTK_OBJECT (btn), "clicked",
6260 GTK_SIGNAL_FUNC(gtk_widget_destroy),
6261 GTK_OBJECT (window));
6262 gtk_widget_show(btn);
6263 gtk_box_pack_start_defaults(GTK_BOX(vbox), btn);
6265 gtk_container_add(GTK_CONTAINER(window), vbox);
6267 gtk_widget_show(vbox);
6268 gtk_grab_add(window);
6269 gtk_widget_show(window);
6273 dnd_drag_request (GtkWidget *button, GdkEvent *event)
6275 #define DND_STRING "Bill Gates demands royalties for\nyour use of his innovation."
6276 gtk_widget_dnd_data_set (button, event, DND_STRING, strlen(DND_STRING) + 1);
6282 static GtkWidget *window = NULL;
6288 GtkWidget *separator;
6290 /* For clarity... */
6291 char *possible_drag_types[] = {"text/plain"};
6292 char *accepted_drop_types[] = {"text/plain"};
6294 static GtkWidget *drag_icon = NULL;
6295 static GtkWidget *drop_icon = NULL;
6299 GdkPoint hotspot = {5,5};
6303 drag_icon = shape_create_icon ("Modeller.xpm",
6304 440, 140, 0,0, GTK_WINDOW_POPUP);
6306 gtk_signal_connect (GTK_OBJECT (drag_icon), "destroy",
6307 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6310 gtk_widget_hide (drag_icon);
6315 drop_icon = shape_create_icon ("3DRings.xpm",
6316 440, 140, 0,0, GTK_WINDOW_POPUP);
6318 gtk_signal_connect (GTK_OBJECT (drop_icon), "destroy",
6319 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6322 gtk_widget_hide (drop_icon);
6325 gdk_dnd_set_drag_shape(drag_icon->window,
6330 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6332 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6333 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6336 gtk_window_set_title (GTK_WINDOW (window), "Drag -N- Drop");
6337 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6339 box1 = gtk_vbox_new (FALSE, 0);
6340 gtk_container_add (GTK_CONTAINER (window), box1);
6341 gtk_widget_show (box1);
6343 box2 = gtk_hbox_new (FALSE, 5);
6344 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6345 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
6346 gtk_widget_show (box2);
6348 frame = gtk_frame_new ("Drag");
6349 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
6350 gtk_widget_show (frame);
6352 box3 = gtk_vbox_new (FALSE, 5);
6353 gtk_container_set_border_width (GTK_CONTAINER (box3), 5);
6354 gtk_container_add (GTK_CONTAINER (frame), box3);
6355 gtk_widget_show (box3);
6360 button = gtk_button_new_with_label ("Drag me!");
6361 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
6362 gtk_widget_show (button);
6365 * currently, the widget has to be realized to
6366 * set dnd on it, this needs to change
6368 gtk_widget_realize (button);
6369 gtk_signal_connect (GTK_OBJECT (button),
6370 "drag_request_event",
6371 GTK_SIGNAL_FUNC(dnd_drag_request),
6374 gtk_widget_dnd_drag_set (button, TRUE, possible_drag_types, 1);
6377 frame = gtk_frame_new ("Drop");
6378 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
6379 gtk_widget_show (frame);
6381 box3 = gtk_vbox_new (FALSE, 5);
6382 gtk_container_set_border_width (GTK_CONTAINER (box3), 5);
6383 gtk_container_add (GTK_CONTAINER (frame), box3);
6384 gtk_widget_show (box3);
6390 button = gtk_button_new_with_label ("To");
6391 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
6392 gtk_widget_show (button);
6394 gtk_widget_realize (button);
6395 gtk_signal_connect (GTK_OBJECT (button),
6396 "drop_data_available_event",
6397 GTK_SIGNAL_FUNC(dnd_drop),
6400 gtk_widget_dnd_drop_set (button, TRUE, accepted_drop_types, 1, FALSE);
6403 separator = gtk_hseparator_new ();
6404 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
6405 gtk_widget_show (separator);
6408 box2 = gtk_vbox_new (FALSE, 10);
6409 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6410 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6411 gtk_widget_show (box2);
6414 button = gtk_button_new_with_label ("close");
6416 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6417 GTK_SIGNAL_FUNC(gtk_widget_destroy),
6418 GTK_OBJECT (window));
6420 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6421 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6422 gtk_widget_grab_default (button);
6423 gtk_widget_show (button);
6426 if (!GTK_WIDGET_VISIBLE (window))
6427 gtk_widget_show (window);
6429 gtk_widget_destroy (window);
6437 static GdkWindow *root_win = NULL;
6439 typedef struct _cursoroffset {gint x,y;} CursorOffset;
6442 shape_pressed (GtkWidget *widget, GdkEventButton *event)
6446 /* ignore double and triple click */
6447 if (event->type != GDK_BUTTON_PRESS)
6450 p = gtk_object_get_user_data (GTK_OBJECT(widget));
6451 p->x = (int) event->x;
6452 p->y = (int) event->y;
6454 gtk_grab_add (widget);
6455 gdk_pointer_grab (widget->window, TRUE,
6456 GDK_BUTTON_RELEASE_MASK |
6457 GDK_BUTTON_MOTION_MASK |
6458 GDK_POINTER_MOTION_HINT_MASK,
6463 shape_released (GtkWidget *widget)
6465 gtk_grab_remove (widget);
6466 gdk_pointer_ungrab (0);
6470 shape_motion (GtkWidget *widget,
6471 GdkEventMotion *event)
6475 GdkModifierType mask;
6477 p = gtk_object_get_user_data (GTK_OBJECT (widget));
6480 * Can't use event->x / event->y here
6481 * because I need absolute coordinates.
6483 gdk_window_get_pointer (root_win, &xp, &yp, &mask);
6484 gtk_widget_set_uposition (widget, xp - p->x, yp - p->y);
6488 shape_create_icon (char *xpm_file,
6498 CursorOffset* icon_pos;
6500 GdkBitmap *gdk_pixmap_mask;
6501 GdkPixmap *gdk_pixmap;
6504 style = gtk_widget_get_default_style ();
6505 gc = style->black_gc;
6508 * GDK_WINDOW_TOPLEVEL works also, giving you a title border
6510 window = gtk_window_new (window_type);
6512 fixed = gtk_fixed_new ();
6513 gtk_widget_set_usize (fixed, 100,100);
6514 gtk_container_add (GTK_CONTAINER (window), fixed);
6515 gtk_widget_show (fixed);
6517 gtk_widget_set_events (window,
6518 gtk_widget_get_events (window) |
6519 GDK_BUTTON_MOTION_MASK |
6520 GDK_POINTER_MOTION_HINT_MASK |
6521 GDK_BUTTON_PRESS_MASK);
6523 gtk_widget_realize (window);
6524 gdk_pixmap = gdk_pixmap_create_from_xpm (window->window, &gdk_pixmap_mask,
6525 &style->bg[GTK_STATE_NORMAL],
6528 pixmap = gtk_pixmap_new (gdk_pixmap, gdk_pixmap_mask);
6529 gtk_fixed_put (GTK_FIXED (fixed), pixmap, px,py);
6530 gtk_widget_show (pixmap);
6532 gtk_widget_shape_combine_mask (window, gdk_pixmap_mask, px,py);
6535 gtk_signal_connect (GTK_OBJECT (window), "button_press_event",
6536 GTK_SIGNAL_FUNC (shape_pressed),NULL);
6537 gtk_signal_connect (GTK_OBJECT (window), "button_release_event",
6538 GTK_SIGNAL_FUNC (shape_released),NULL);
6539 gtk_signal_connect (GTK_OBJECT (window), "motion_notify_event",
6540 GTK_SIGNAL_FUNC (shape_motion),NULL);
6542 icon_pos = g_new (CursorOffset, 1);
6543 gtk_object_set_user_data(GTK_OBJECT(window), icon_pos);
6545 gtk_widget_set_uposition (window, x, y);
6546 gtk_widget_show (window);
6552 create_shapes (void)
6554 /* Variables used by the Drag/Drop and Shape Window demos */
6555 static GtkWidget *modeller = NULL;
6556 static GtkWidget *sheets = NULL;
6557 static GtkWidget *rings = NULL;
6559 root_win = gdk_window_foreign_new (GDK_ROOT_WINDOW ());
6563 modeller = shape_create_icon ("Modeller.xpm",
6564 440, 140, 0,0, GTK_WINDOW_POPUP);
6566 gtk_signal_connect (GTK_OBJECT (modeller), "destroy",
6567 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6571 gtk_widget_destroy (modeller);
6575 sheets = shape_create_icon ("FilesQueue.xpm",
6576 580, 170, 0,0, GTK_WINDOW_POPUP);
6578 gtk_signal_connect (GTK_OBJECT (sheets), "destroy",
6579 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6584 gtk_widget_destroy (sheets);
6588 rings = shape_create_icon ("3DRings.xpm",
6589 460, 270, 25,25, GTK_WINDOW_TOPLEVEL);
6591 gtk_signal_connect (GTK_OBJECT (rings), "destroy",
6592 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6596 gtk_widget_destroy (rings);
6604 create_wmhints (void)
6606 static GtkWidget *window = NULL;
6608 GtkWidget *separator;
6617 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6619 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6620 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6623 gtk_window_set_title (GTK_WINDOW (window), "WM Hints");
6624 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6626 gtk_widget_realize (window);
6628 circles = gdk_bitmap_create_from_data (window->window,
6632 gdk_window_set_icon (window->window, NULL,
6635 gdk_window_set_icon_name (window->window, "WMHints Test Icon");
6637 gdk_window_set_decorations (window->window, GDK_DECOR_ALL | GDK_DECOR_MENU);
6638 gdk_window_set_functions (window->window, GDK_FUNC_ALL | GDK_FUNC_RESIZE);
6640 box1 = gtk_vbox_new (FALSE, 0);
6641 gtk_container_add (GTK_CONTAINER (window), box1);
6642 gtk_widget_show (box1);
6644 label = gtk_label_new ("Try iconizing me!");
6645 gtk_widget_set_usize (label, 150, 50);
6646 gtk_box_pack_start (GTK_BOX (box1), label, TRUE, TRUE, 0);
6647 gtk_widget_show (label);
6650 separator = gtk_hseparator_new ();
6651 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
6652 gtk_widget_show (separator);
6655 box2 = gtk_vbox_new (FALSE, 10);
6656 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6657 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6658 gtk_widget_show (box2);
6661 button = gtk_button_new_with_label ("close");
6663 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6664 GTK_SIGNAL_FUNC(gtk_widget_destroy),
6665 GTK_OBJECT (window));
6667 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6668 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6669 gtk_widget_grab_default (button);
6670 gtk_widget_show (button);
6673 if (!GTK_WIDGET_VISIBLE (window))
6674 gtk_widget_show (window);
6676 gtk_widget_destroy (window);
6683 typedef struct _ProgressData {
6686 GtkWidget *block_spin;
6687 GtkWidget *x_align_spin;
6688 GtkWidget *y_align_spin;
6689 GtkWidget *step_spin;
6690 GtkWidget *act_blocks_spin;
6699 progress_timeout (gpointer data)
6704 adj = GTK_PROGRESS (data)->adjustment;
6706 new_val = adj->value + 1;
6707 if (new_val > adj->upper)
6708 new_val = adj->lower;
6710 gtk_progress_set_value (GTK_PROGRESS (data), new_val);
6716 destroy_progress (GtkWidget *widget,
6717 ProgressData **pdata)
6719 gtk_timeout_remove ((*pdata)->timer);
6720 (*pdata)->timer = 0;
6721 (*pdata)->window = NULL;
6727 progressbar_toggle_orientation (GtkWidget *widget, ProgressData *pdata)
6731 if (!GTK_WIDGET_MAPPED (widget))
6734 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
6735 (((GtkOptionMenu *)(pdata->omenu1))->menu_item), i);
6737 gtk_progress_bar_set_orientation (GTK_PROGRESS_BAR (pdata->pbar),
6738 (GtkProgressBarOrientation) (3-i));
6742 toggle_show_text (GtkWidget *widget, ProgressData *pdata)
6744 gtk_progress_set_show_text (GTK_PROGRESS (pdata->pbar),
6745 GTK_TOGGLE_BUTTON (widget)->active);
6746 gtk_widget_set_sensitive (pdata->entry, GTK_TOGGLE_BUTTON (widget)->active);
6747 gtk_widget_set_sensitive (pdata->x_align_spin,
6748 GTK_TOGGLE_BUTTON (widget)->active);
6749 gtk_widget_set_sensitive (pdata->y_align_spin,
6750 GTK_TOGGLE_BUTTON (widget)->active);
6754 progressbar_toggle_bar_style (GtkWidget *widget, ProgressData *pdata)
6758 if (!GTK_WIDGET_MAPPED (widget))
6761 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
6762 (((GtkOptionMenu *)(pdata->omenu2))->menu_item), i);
6767 gtk_widget_set_sensitive (pdata->block_spin, TRUE);
6769 gtk_widget_set_sensitive (pdata->block_spin, FALSE);
6771 gtk_progress_bar_set_bar_style (GTK_PROGRESS_BAR (pdata->pbar),
6772 (GtkProgressBarStyle) i);
6776 progress_value_changed (GtkAdjustment *adj, ProgressData *pdata)
6780 if (GTK_PROGRESS (pdata->pbar)->activity_mode)
6781 sprintf (buf, "???");
6783 sprintf (buf, "%.0f%%", 100 *
6784 gtk_progress_get_current_percentage (GTK_PROGRESS (pdata->pbar)));
6785 gtk_label_set_text (GTK_LABEL (pdata->label), buf);
6789 adjust_blocks (GtkAdjustment *adj, ProgressData *pdata)
6791 gtk_progress_set_percentage (GTK_PROGRESS (pdata->pbar), 0);
6792 gtk_progress_bar_set_discrete_blocks (GTK_PROGRESS_BAR (pdata->pbar),
6793 gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (pdata->block_spin)));
6797 adjust_step (GtkAdjustment *adj, ProgressData *pdata)
6799 gtk_progress_bar_set_activity_step (GTK_PROGRESS_BAR (pdata->pbar),
6800 gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (pdata->step_spin)));
6804 adjust_act_blocks (GtkAdjustment *adj, ProgressData *pdata)
6806 gtk_progress_bar_set_activity_blocks (GTK_PROGRESS_BAR (pdata->pbar),
6807 gtk_spin_button_get_value_as_int
6808 (GTK_SPIN_BUTTON (pdata->act_blocks_spin)));
6812 adjust_align (GtkAdjustment *adj, ProgressData *pdata)
6814 gtk_progress_set_text_alignment (GTK_PROGRESS (pdata->pbar),
6815 gtk_spin_button_get_value_as_float
6816 (GTK_SPIN_BUTTON (pdata->x_align_spin)),
6817 gtk_spin_button_get_value_as_float
6818 (GTK_SPIN_BUTTON (pdata->y_align_spin)));
6822 toggle_activity_mode (GtkWidget *widget, ProgressData *pdata)
6824 gtk_progress_set_activity_mode (GTK_PROGRESS (pdata->pbar),
6825 GTK_TOGGLE_BUTTON (widget)->active);
6826 gtk_widget_set_sensitive (pdata->step_spin,
6827 GTK_TOGGLE_BUTTON (widget)->active);
6828 gtk_widget_set_sensitive (pdata->act_blocks_spin,
6829 GTK_TOGGLE_BUTTON (widget)->active);
6833 entry_changed (GtkWidget *widget, ProgressData *pdata)
6835 gtk_progress_set_format_string (GTK_PROGRESS (pdata->pbar),
6836 gtk_entry_get_text (GTK_ENTRY (pdata->entry)));
6840 create_progress_bar (void)
6852 static ProgressData *pdata = NULL;
6854 static OptionMenuItem items1[] =
6856 { "Left-Right", progressbar_toggle_orientation },
6857 { "Right-Left", progressbar_toggle_orientation },
6858 { "Bottom-Top", progressbar_toggle_orientation },
6859 { "Top-Bottom", progressbar_toggle_orientation }
6862 static OptionMenuItem items2[] =
6864 { "Continuous", progressbar_toggle_bar_style },
6865 { "Discrete", progressbar_toggle_bar_style }
6869 pdata = g_new0 (ProgressData, 1);
6873 pdata->window = gtk_dialog_new ();
6875 gtk_window_set_policy (GTK_WINDOW (pdata->window), FALSE, FALSE, TRUE);
6877 gtk_signal_connect (GTK_OBJECT (pdata->window), "destroy",
6878 GTK_SIGNAL_FUNC (destroy_progress),
6883 gtk_window_set_title (GTK_WINDOW (pdata->window), "GtkProgressBar");
6884 gtk_container_set_border_width (GTK_CONTAINER (pdata->window), 0);
6886 vbox = gtk_vbox_new (FALSE, 5);
6887 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
6888 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (pdata->window)->vbox),
6889 vbox, FALSE, TRUE, 0);
6891 frame = gtk_frame_new ("Progress");
6892 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
6894 vbox2 = gtk_vbox_new (FALSE, 5);
6895 gtk_container_add (GTK_CONTAINER (frame), vbox2);
6897 align = gtk_alignment_new (0.5, 0.5, 0, 0);
6898 gtk_box_pack_start (GTK_BOX (vbox2), align, FALSE, FALSE, 5);
6900 adj = (GtkAdjustment *) gtk_adjustment_new (0, 1, 300, 0, 0, 0);
6901 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
6902 GTK_SIGNAL_FUNC (progress_value_changed), pdata);
6904 pdata->pbar = gtk_progress_bar_new_with_adjustment (adj);
6905 gtk_progress_set_format_string (GTK_PROGRESS (pdata->pbar),
6906 "%v from [%l,%u] (=%p%%)");
6907 gtk_container_add (GTK_CONTAINER (align), pdata->pbar);
6908 pdata->timer = gtk_timeout_add (100, progress_timeout, pdata->pbar);
6910 align = gtk_alignment_new (0.5, 0.5, 0, 0);
6911 gtk_box_pack_start (GTK_BOX (vbox2), align, FALSE, FALSE, 5);
6913 hbox = gtk_hbox_new (FALSE, 5);
6914 gtk_container_add (GTK_CONTAINER (align), hbox);
6915 label = gtk_label_new ("Label updated by user :");
6916 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
6917 pdata->label = gtk_label_new ("");
6918 gtk_box_pack_start (GTK_BOX (hbox), pdata->label, FALSE, TRUE, 0);
6920 frame = gtk_frame_new ("Options");
6921 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
6923 vbox2 = gtk_vbox_new (FALSE, 5);
6924 gtk_container_add (GTK_CONTAINER (frame), vbox2);
6926 tab = gtk_table_new (7, 2, FALSE);
6927 gtk_box_pack_start (GTK_BOX (vbox2), tab, FALSE, TRUE, 0);
6929 label = gtk_label_new ("Orientation :");
6930 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 0, 1,
6931 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
6933 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
6935 pdata->omenu1 = build_option_menu (items1, 4, 0, pdata);
6936 hbox = gtk_hbox_new (FALSE, 0);
6937 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 0, 1,
6938 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
6940 gtk_box_pack_start (GTK_BOX (hbox), pdata->omenu1, TRUE, TRUE, 0);
6942 check = gtk_check_button_new_with_label ("Show text");
6943 gtk_signal_connect (GTK_OBJECT (check), "clicked",
6944 GTK_SIGNAL_FUNC (toggle_show_text),
6946 gtk_table_attach (GTK_TABLE (tab), check, 0, 1, 1, 2,
6947 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
6950 hbox = gtk_hbox_new (FALSE, 0);
6951 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 1, 2,
6952 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
6955 label = gtk_label_new ("Format : ");
6956 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
6958 pdata->entry = gtk_entry_new ();
6959 gtk_signal_connect (GTK_OBJECT (pdata->entry), "changed",
6960 GTK_SIGNAL_FUNC (entry_changed),
6962 gtk_box_pack_start (GTK_BOX (hbox), pdata->entry, TRUE, TRUE, 0);
6963 gtk_entry_set_text (GTK_ENTRY (pdata->entry), "%v from [%l,%u] (=%p%%)");
6964 gtk_widget_set_usize (pdata->entry, 100, -1);
6965 gtk_widget_set_sensitive (pdata->entry, FALSE);
6967 label = gtk_label_new ("Text align :");
6968 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 2, 3,
6969 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
6971 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
6973 hbox = gtk_hbox_new (FALSE, 0);
6974 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 2, 3,
6975 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
6978 label = gtk_label_new ("x :");
6979 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 5);
6981 adj = (GtkAdjustment *) gtk_adjustment_new (0.5, 0, 1, 0.1, 0.1, 0);
6982 pdata->x_align_spin = gtk_spin_button_new (adj, 0, 1);
6983 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
6984 GTK_SIGNAL_FUNC (adjust_align), pdata);
6985 gtk_box_pack_start (GTK_BOX (hbox), pdata->x_align_spin, FALSE, TRUE, 0);
6986 gtk_widget_set_sensitive (pdata->x_align_spin, FALSE);
6988 label = gtk_label_new ("y :");
6989 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 5);
6991 adj = (GtkAdjustment *) gtk_adjustment_new (0.5, 0, 1, 0.1, 0.1, 0);
6992 pdata->y_align_spin = gtk_spin_button_new (adj, 0, 1);
6993 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
6994 GTK_SIGNAL_FUNC (adjust_align), pdata);
6995 gtk_box_pack_start (GTK_BOX (hbox), pdata->y_align_spin, FALSE, TRUE, 0);
6996 gtk_widget_set_sensitive (pdata->y_align_spin, FALSE);
6998 label = gtk_label_new ("Bar Style :");
6999 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 3, 4,
7000 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7002 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
7004 pdata->omenu2 = build_option_menu (items2, 2, 0, pdata);
7005 hbox = gtk_hbox_new (FALSE, 0);
7006 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 3, 4,
7007 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7009 gtk_box_pack_start (GTK_BOX (hbox), pdata->omenu2, TRUE, TRUE, 0);
7011 label = gtk_label_new ("Block count :");
7012 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 4, 5,
7013 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7015 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
7017 hbox = gtk_hbox_new (FALSE, 0);
7018 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 4, 5,
7019 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7021 adj = (GtkAdjustment *) gtk_adjustment_new (10, 2, 20, 1, 5, 0);
7022 pdata->block_spin = gtk_spin_button_new (adj, 0, 0);
7023 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
7024 GTK_SIGNAL_FUNC (adjust_blocks), pdata);
7025 gtk_box_pack_start (GTK_BOX (hbox), pdata->block_spin, FALSE, TRUE, 0);
7026 gtk_widget_set_sensitive (pdata->block_spin, FALSE);
7028 check = gtk_check_button_new_with_label ("Activity mode");
7029 gtk_signal_connect (GTK_OBJECT (check), "clicked",
7030 GTK_SIGNAL_FUNC (toggle_activity_mode),
7032 gtk_table_attach (GTK_TABLE (tab), check, 0, 1, 5, 6,
7033 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7036 hbox = gtk_hbox_new (FALSE, 0);
7037 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 5, 6,
7038 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7040 label = gtk_label_new ("Step size : ");
7041 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
7042 adj = (GtkAdjustment *) gtk_adjustment_new (3, 1, 20, 1, 5, 0);
7043 pdata->step_spin = gtk_spin_button_new (adj, 0, 0);
7044 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
7045 GTK_SIGNAL_FUNC (adjust_step), pdata);
7046 gtk_box_pack_start (GTK_BOX (hbox), pdata->step_spin, FALSE, TRUE, 0);
7047 gtk_widget_set_sensitive (pdata->step_spin, FALSE);
7049 hbox = gtk_hbox_new (FALSE, 0);
7050 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 6, 7,
7051 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7053 label = gtk_label_new ("Blocks : ");
7054 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
7055 adj = (GtkAdjustment *) gtk_adjustment_new (5, 2, 10, 1, 5, 0);
7056 pdata->act_blocks_spin = gtk_spin_button_new (adj, 0, 0);
7057 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
7058 GTK_SIGNAL_FUNC (adjust_act_blocks), pdata);
7059 gtk_box_pack_start (GTK_BOX (hbox), pdata->act_blocks_spin, FALSE, TRUE,
7061 gtk_widget_set_sensitive (pdata->act_blocks_spin, FALSE);
7063 button = gtk_button_new_with_label ("close");
7064 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7065 GTK_SIGNAL_FUNC (gtk_widget_destroy),
7066 GTK_OBJECT (pdata->window));
7067 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7068 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (pdata->window)->action_area),
7069 button, TRUE, TRUE, 0);
7070 gtk_widget_grab_default (button);
7073 if (!GTK_WIDGET_VISIBLE (pdata->window))
7074 gtk_widget_show_all (pdata->window);
7076 gtk_widget_destroy (pdata->window);
7083 static int color_idle = 0;
7086 color_idle_func (GtkWidget *preview)
7088 static int count = 1;
7092 for (i = 0; i < 256; i++)
7094 for (j = 0, k = 0; j < 256; j++)
7096 buf[k+0] = i + count;
7098 buf[k+2] = j + count;
7102 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
7107 gtk_widget_draw (preview, NULL);
7113 color_preview_destroy (GtkWidget *widget,
7116 gtk_idle_remove (color_idle);
7123 create_color_preview (void)
7125 static GtkWidget *window = NULL;
7132 gtk_widget_push_visual (gdk_rgb_get_visual ());
7133 gtk_widget_push_colormap (gdk_rgb_get_cmap ());
7134 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7135 gtk_widget_pop_colormap ();
7136 gtk_widget_pop_visual ();
7138 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7139 GTK_SIGNAL_FUNC(color_preview_destroy),
7142 gtk_window_set_title (GTK_WINDOW (window), "test");
7143 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
7145 preview = gtk_preview_new (GTK_PREVIEW_COLOR);
7146 gtk_preview_size (GTK_PREVIEW (preview), 256, 256);
7147 gtk_container_add (GTK_CONTAINER (window), preview);
7149 for (i = 0; i < 256; i++)
7151 for (j = 0, k = 0; j < 256; j++)
7159 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
7162 color_idle = gtk_idle_add ((GtkFunction) color_idle_func, preview);
7165 if (!GTK_WIDGET_VISIBLE (window))
7166 gtk_widget_show_all (window);
7168 gtk_widget_destroy (window);
7175 static int gray_idle = 0;
7178 gray_idle_func (GtkWidget *preview)
7180 static int count = 1;
7184 for (i = 0; i < 256; i++)
7186 for (j = 0; j < 256; j++)
7187 buf[j] = i + j + count;
7189 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
7194 gtk_widget_draw (preview, NULL);
7200 gray_preview_destroy (GtkWidget *widget,
7203 gtk_idle_remove (gray_idle);
7210 create_gray_preview (void)
7212 static GtkWidget *window = NULL;
7219 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7221 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7222 GTK_SIGNAL_FUNC(gray_preview_destroy),
7225 gtk_window_set_title (GTK_WINDOW (window), "test");
7226 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
7228 preview = gtk_preview_new (GTK_PREVIEW_GRAYSCALE);
7229 gtk_preview_size (GTK_PREVIEW (preview), 256, 256);
7230 gtk_container_add (GTK_CONTAINER (window), preview);
7232 for (i = 0; i < 256; i++)
7234 for (j = 0; j < 256; j++)
7237 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
7240 gray_idle = gtk_idle_add ((GtkFunction) gray_idle_func, preview);
7243 if (!GTK_WIDGET_VISIBLE (window))
7244 gtk_widget_show_all (window);
7246 gtk_widget_destroy (window);
7255 selection_test_received (GtkWidget *list, GtkSelectionData *data)
7258 GtkWidget *list_item;
7262 if (data->length < 0)
7264 g_print ("Selection retrieval failed\n");
7267 if (data->type != GDK_SELECTION_TYPE_ATOM)
7269 g_print ("Selection \"TARGETS\" was not returned as atoms!\n");
7273 /* Clear out any current list items */
7275 gtk_list_clear_items (GTK_LIST(list), 0, -1);
7277 /* Add new items to list */
7279 atoms = (GdkAtom *)data->data;
7282 l = data->length / sizeof (GdkAtom);
7283 for (i = 0; i < l; i++)
7286 name = gdk_atom_name (atoms[i]);
7289 list_item = gtk_list_item_new_with_label (name);
7293 list_item = gtk_list_item_new_with_label ("(bad atom)");
7295 gtk_widget_show (list_item);
7296 item_list = g_list_append (item_list, list_item);
7299 gtk_list_append_items (GTK_LIST (list), item_list);
7305 selection_test_get_targets (GtkWidget *widget, GtkWidget *list)
7307 static GdkAtom targets_atom = GDK_NONE;
7309 if (targets_atom == GDK_NONE)
7310 targets_atom = gdk_atom_intern ("TARGETS", FALSE);
7312 gtk_selection_convert (list, GDK_SELECTION_PRIMARY, targets_atom,
7317 create_selection_test (void)
7319 static GtkWidget *window = NULL;
7322 GtkWidget *scrolled_win;
7328 window = gtk_dialog_new ();
7330 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7331 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7334 gtk_window_set_title (GTK_WINDOW (window), "Selection Test");
7335 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
7337 /* Create the list */
7339 vbox = gtk_vbox_new (FALSE, 5);
7340 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
7341 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), vbox,
7344 label = gtk_label_new ("Gets available targets for current selection");
7345 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
7347 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
7348 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
7349 GTK_POLICY_AUTOMATIC,
7350 GTK_POLICY_AUTOMATIC);
7351 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
7352 gtk_widget_set_usize (scrolled_win, 100, 200);
7354 list = gtk_list_new ();
7355 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_win), list);
7357 gtk_signal_connect (GTK_OBJECT(list), "selection_received",
7358 GTK_SIGNAL_FUNC (selection_test_received), NULL);
7360 /* .. And create some buttons */
7361 button = gtk_button_new_with_label ("Get Targets");
7362 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7363 button, TRUE, TRUE, 0);
7365 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7366 GTK_SIGNAL_FUNC (selection_test_get_targets), list);
7368 button = gtk_button_new_with_label ("Quit");
7369 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7370 button, TRUE, TRUE, 0);
7372 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7373 GTK_SIGNAL_FUNC (gtk_widget_destroy),
7374 GTK_OBJECT (window));
7377 if (!GTK_WIDGET_VISIBLE (window))
7378 gtk_widget_show_all (window);
7380 gtk_widget_destroy (window);
7388 create_gamma_curve (void)
7390 static GtkWidget *window = NULL, *curve;
7391 static int count = 0;
7398 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7399 gtk_window_set_title (GTK_WINDOW (window), "test");
7400 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
7402 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7403 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7406 curve = gtk_gamma_curve_new ();
7407 gtk_container_add (GTK_CONTAINER (window), curve);
7408 gtk_widget_show (curve);
7411 max = 127 + (count % 2)*128;
7412 gtk_curve_set_range (GTK_CURVE (GTK_GAMMA_CURVE (curve)->curve),
7414 for (i = 0; i < max; ++i)
7415 vec[i] = (127 / sqrt (max)) * sqrt (i);
7416 gtk_curve_set_vector (GTK_CURVE (GTK_GAMMA_CURVE (curve)->curve),
7419 if (!GTK_WIDGET_VISIBLE (window))
7420 gtk_widget_show (window);
7421 else if (count % 4 == 3)
7423 gtk_widget_destroy (window);
7434 static int scroll_test_pos = 0.0;
7435 static GdkGC *scroll_test_gc = NULL;
7438 scroll_test_expose (GtkWidget *widget, GdkEventExpose *event,
7442 gint imin, imax, jmin, jmax;
7444 imin = (event->area.x) / 10;
7445 imax = (event->area.x + event->area.width + 9) / 10;
7447 jmin = ((int)adj->value + event->area.y) / 10;
7448 jmax = ((int)adj->value + event->area.y + event->area.height + 9) / 10;
7450 gdk_window_clear_area (widget->window,
7451 event->area.x, event->area.y,
7452 event->area.width, event->area.height);
7454 for (i=imin; i<imax; i++)
7455 for (j=jmin; j<jmax; j++)
7457 gdk_draw_rectangle (widget->window,
7458 widget->style->black_gc,
7460 10*i, 10*j - (int)adj->value, 1+i%10, 1+j%10);
7466 scroll_test_configure (GtkWidget *widget, GdkEventConfigure *event,
7469 adj->page_increment = 0.9 * widget->allocation.height;
7470 adj->page_size = widget->allocation.height;
7472 gtk_signal_emit_by_name (GTK_OBJECT (adj), "changed");
7476 scroll_test_adjustment_changed (GtkAdjustment *adj, GtkWidget *widget)
7478 gint source_min = (int)adj->value - scroll_test_pos;
7479 gint source_max = source_min + widget->allocation.height;
7481 gint dest_max = widget->allocation.height;
7485 scroll_test_pos = adj->value;
7487 if (!GTK_WIDGET_DRAWABLE (widget))
7494 rect.width = widget->allocation.width;
7495 rect.height = -source_min;
7496 if (rect.height > widget->allocation.height)
7497 rect.height = widget->allocation.height;
7500 dest_min = rect.height;
7505 rect.y = 2*widget->allocation.height - source_max;
7508 rect.width = widget->allocation.width;
7509 rect.height = widget->allocation.height - rect.y;
7511 source_max = widget->allocation.height;
7515 if (source_min != source_max)
7517 if (scroll_test_gc == NULL)
7519 scroll_test_gc = gdk_gc_new (widget->window);
7520 gdk_gc_set_exposures (scroll_test_gc, TRUE);
7523 gdk_draw_pixmap (widget->window,
7528 widget->allocation.width,
7529 source_max - source_min);
7531 /* Make sure graphics expose events are processed before scrolling
7534 while ((event = gdk_event_get_graphics_expose (widget->window)) != NULL)
7536 gtk_widget_event (widget, event);
7537 if (event->expose.count == 0)
7539 gdk_event_free (event);
7542 gdk_event_free (event);
7546 if (rect.height != 0)
7547 gtk_widget_draw (widget, &rect);
7552 create_scroll_test (void)
7554 static GtkWidget *window = NULL;
7556 GtkWidget *drawing_area;
7557 GtkWidget *scrollbar;
7560 GdkGeometry geometry;
7561 GdkWindowHints geometry_mask;
7565 window = gtk_dialog_new ();
7567 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7568 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7571 gtk_window_set_title (GTK_WINDOW (window), "Scroll Test");
7572 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
7574 hbox = gtk_hbox_new (FALSE, 0);
7575 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), hbox,
7577 gtk_widget_show (hbox);
7579 drawing_area = gtk_drawing_area_new ();
7580 gtk_drawing_area_size (GTK_DRAWING_AREA (drawing_area), 200, 200);
7581 gtk_box_pack_start (GTK_BOX (hbox), drawing_area, TRUE, TRUE, 0);
7582 gtk_widget_show (drawing_area);
7584 gtk_widget_set_events (drawing_area, GDK_EXPOSURE_MASK);
7586 adj = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.0, 1000.0, 1.0, 180.0, 200.0));
7587 scroll_test_pos = 0.0;
7589 scrollbar = gtk_vscrollbar_new (adj);
7590 gtk_box_pack_start (GTK_BOX (hbox), scrollbar, FALSE, FALSE, 0);
7591 gtk_widget_show (scrollbar);
7593 gtk_signal_connect (GTK_OBJECT (drawing_area), "expose_event",
7594 GTK_SIGNAL_FUNC (scroll_test_expose), adj);
7595 gtk_signal_connect (GTK_OBJECT (drawing_area), "configure_event",
7596 GTK_SIGNAL_FUNC (scroll_test_configure), adj);
7599 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
7600 GTK_SIGNAL_FUNC (scroll_test_adjustment_changed),
7603 /* .. And create some buttons */
7605 button = gtk_button_new_with_label ("Quit");
7606 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7607 button, TRUE, TRUE, 0);
7609 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7610 GTK_SIGNAL_FUNC (gtk_widget_destroy),
7611 GTK_OBJECT (window));
7612 gtk_widget_show (button);
7614 /* Set up gridded geometry */
7616 geometry_mask = GDK_HINT_MIN_SIZE |
7617 GDK_HINT_BASE_SIZE |
7618 GDK_HINT_RESIZE_INC;
7620 geometry.min_width = 20;
7621 geometry.min_height = 20;
7622 geometry.base_width = 0;
7623 geometry.base_height = 0;
7624 geometry.width_inc = 10;
7625 geometry.height_inc = 10;
7627 gtk_window_set_geometry_hints (GTK_WINDOW (window),
7628 drawing_area, &geometry, geometry_mask);
7631 if (!GTK_WIDGET_VISIBLE (window))
7632 gtk_widget_show (window);
7634 gtk_widget_destroy (window);
7641 static int timer = 0;
7644 timeout_test (GtkWidget *label)
7646 static int count = 0;
7647 static char buffer[32];
7649 sprintf (buffer, "count: %d", ++count);
7650 gtk_label_set_text (GTK_LABEL (label), buffer);
7656 start_timeout_test (GtkWidget *widget,
7661 timer = gtk_timeout_add (100, (GtkFunction) timeout_test, label);
7666 stop_timeout_test (GtkWidget *widget,
7671 gtk_timeout_remove (timer);
7677 destroy_timeout_test (GtkWidget *widget,
7680 stop_timeout_test (NULL, NULL);
7686 create_timeout_test (void)
7688 static GtkWidget *window = NULL;
7694 window = gtk_dialog_new ();
7696 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7697 GTK_SIGNAL_FUNC(destroy_timeout_test),
7700 gtk_window_set_title (GTK_WINDOW (window), "Timeout Test");
7701 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
7703 label = gtk_label_new ("count: 0");
7704 gtk_misc_set_padding (GTK_MISC (label), 10, 10);
7705 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
7706 label, TRUE, TRUE, 0);
7707 gtk_widget_show (label);
7709 button = gtk_button_new_with_label ("close");
7710 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7711 GTK_SIGNAL_FUNC(gtk_widget_destroy),
7712 GTK_OBJECT (window));
7713 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7714 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7715 button, TRUE, TRUE, 0);
7716 gtk_widget_grab_default (button);
7717 gtk_widget_show (button);
7719 button = gtk_button_new_with_label ("start");
7720 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7721 GTK_SIGNAL_FUNC(start_timeout_test),
7723 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7724 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7725 button, TRUE, TRUE, 0);
7726 gtk_widget_show (button);
7728 button = gtk_button_new_with_label ("stop");
7729 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7730 GTK_SIGNAL_FUNC(stop_timeout_test),
7732 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7733 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7734 button, TRUE, TRUE, 0);
7735 gtk_widget_show (button);
7738 if (!GTK_WIDGET_VISIBLE (window))
7739 gtk_widget_show (window);
7741 gtk_widget_destroy (window);
7748 static int idle = 0;
7751 idle_test (GtkWidget *label)
7753 static int count = 0;
7754 static char buffer[32];
7756 sprintf (buffer, "count: %d", ++count);
7757 gtk_label_set_text (GTK_LABEL (label), buffer);
7763 start_idle_test (GtkWidget *widget,
7768 idle = gtk_idle_add ((GtkFunction) idle_test, label);
7773 stop_idle_test (GtkWidget *widget,
7778 gtk_idle_remove (idle);
7784 destroy_idle_test (GtkWidget *widget,
7787 stop_idle_test (NULL, NULL);
7793 toggle_idle_container (GtkObject *button,
7794 GtkContainer *container)
7796 gtk_container_set_resize_mode (container, GPOINTER_TO_INT (gtk_object_get_user_data (button)));
7800 create_idle_test (void)
7802 static GtkWidget *window = NULL;
7805 GtkWidget *container;
7812 window = gtk_dialog_new ();
7814 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7815 GTK_SIGNAL_FUNC(destroy_idle_test),
7818 gtk_window_set_title (GTK_WINDOW (window), "Idle Test");
7819 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
7821 label = gtk_label_new ("count: 0");
7822 gtk_misc_set_padding (GTK_MISC (label), 10, 10);
7823 gtk_widget_show (label);
7826 gtk_widget_new (GTK_TYPE_HBOX,
7827 "GtkWidget::visible", TRUE,
7828 /* "GtkContainer::child", gtk_widget_new (GTK_TYPE_HBOX,
7829 * "GtkWidget::visible", TRUE,
7831 "GtkContainer::child", label,
7834 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
7835 container, TRUE, TRUE, 0);
7838 gtk_widget_new (GTK_TYPE_FRAME,
7839 "GtkContainer::border_width", 5,
7840 "GtkFrame::label", "Label Container",
7841 "GtkWidget::visible", TRUE,
7842 "GtkWidget::parent", GTK_DIALOG (window)->vbox,
7845 gtk_widget_new (GTK_TYPE_VBOX,
7846 "GtkWidget::visible", TRUE,
7847 "GtkWidget::parent", frame,
7850 gtk_widget_new (GTK_TYPE_RADIO_BUTTON,
7851 "GtkButton::label", "Resize-Parent",
7852 "GtkObject::user_data", (void*)GTK_RESIZE_PARENT,
7853 "GtkObject::signal::clicked", toggle_idle_container, container,
7854 "GtkWidget::visible", TRUE,
7855 "GtkWidget::parent", box,
7858 gtk_widget_new (GTK_TYPE_RADIO_BUTTON,
7859 "GtkButton::label", "Resize-Queue",
7860 "GtkObject::user_data", (void*)GTK_RESIZE_QUEUE,
7861 "GtkObject::signal::clicked", toggle_idle_container, container,
7862 "GtkRadioButton::group", button,
7863 "GtkWidget::visible", TRUE,
7864 "GtkWidget::parent", box,
7867 gtk_widget_new (GTK_TYPE_RADIO_BUTTON,
7868 "GtkButton::label", "Resize-Immediate",
7869 "GtkObject::user_data", (void*)GTK_RESIZE_IMMEDIATE,
7870 "GtkObject::signal::clicked", toggle_idle_container, container,
7871 "GtkRadioButton::group", button,
7872 "GtkWidget::visible", TRUE,
7873 "GtkWidget::parent", box,
7877 button = gtk_button_new_with_label ("close");
7878 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7879 GTK_SIGNAL_FUNC(gtk_widget_destroy),
7880 GTK_OBJECT (window));
7881 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7882 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7883 button, TRUE, TRUE, 0);
7884 gtk_widget_grab_default (button);
7885 gtk_widget_show (button);
7887 button = gtk_button_new_with_label ("start");
7888 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7889 GTK_SIGNAL_FUNC(start_idle_test),
7891 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7892 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7893 button, TRUE, TRUE, 0);
7894 gtk_widget_show (button);
7896 button = gtk_button_new_with_label ("stop");
7897 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7898 GTK_SIGNAL_FUNC(stop_idle_test),
7900 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7901 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7902 button, TRUE, TRUE, 0);
7903 gtk_widget_show (button);
7906 if (!GTK_WIDGET_VISIBLE (window))
7907 gtk_widget_show (window);
7909 gtk_widget_destroy (window);
7917 reload_rc_file (void)
7921 if (gtk_rc_reparse_all ())
7923 toplevels = gdk_window_get_toplevels();
7927 gdk_window_get_user_data (toplevels->data, (gpointer *)&widget);
7930 gtk_widget_reset_rc_styles (widget);
7932 toplevels = toplevels->next;
7934 g_list_free (toplevels);
7939 reload_all_rc_files (void)
7941 static GdkAtom atom_rcfiles = GDK_NONE;
7947 atom_rcfiles = gdk_atom_intern("_GTK_READ_RCFILES", FALSE);
7949 for(i = 0; i < 5; i++)
7951 sev.data_format = 32;
7952 sev.message_type = atom_rcfiles;
7953 gdk_event_send_clientmessage_toall ((GdkEvent *) &sev);
7957 create_rc_file (void)
7959 static GtkWidget *window = NULL;
7964 window = gtk_dialog_new ();
7966 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7967 GTK_SIGNAL_FUNC(destroy_idle_test),
7970 gtk_window_set_title (GTK_WINDOW (window), "Reload Rc file");
7971 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
7973 button = gtk_button_new_with_label ("Reload");
7974 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7975 GTK_SIGNAL_FUNC(reload_rc_file), NULL);
7976 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7977 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7978 button, TRUE, TRUE, 0);
7979 gtk_widget_grab_default (button);
7980 gtk_widget_show (button);
7982 button = gtk_button_new_with_label ("Reload All");
7983 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7984 GTK_SIGNAL_FUNC(reload_all_rc_files), NULL);
7985 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7986 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7987 button, TRUE, TRUE, 0);
7988 gtk_widget_show (button);
7990 button = gtk_button_new_with_label ("Close");
7991 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7992 GTK_SIGNAL_FUNC(gtk_widget_destroy),
7993 GTK_OBJECT (window));
7994 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7995 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7996 button, TRUE, TRUE, 0);
7997 gtk_widget_show (button);
8001 if (!GTK_WIDGET_VISIBLE (window))
8002 gtk_widget_show (window);
8004 gtk_widget_destroy (window);
8008 * Test of recursive mainloop
8012 mainloop_destroyed (GtkWidget *w, GtkWidget **window)
8019 create_mainloop (void)
8021 static GtkWidget *window = NULL;
8027 window = gtk_dialog_new ();
8029 gtk_window_set_title (GTK_WINDOW (window), "Test Main Loop");
8031 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8032 GTK_SIGNAL_FUNC(mainloop_destroyed),
8035 label = gtk_label_new ("In recursive main loop...");
8036 gtk_misc_set_padding (GTK_MISC(label), 20, 20);
8038 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), label,
8040 gtk_widget_show (label);
8042 button = gtk_button_new_with_label ("Leave");
8043 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area), button,
8046 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
8047 GTK_SIGNAL_FUNC (gtk_widget_destroy),
8048 GTK_OBJECT (window));
8050 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8051 gtk_widget_grab_default (button);
8053 gtk_widget_show (button);
8056 if (!GTK_WIDGET_VISIBLE (window))
8058 gtk_widget_show (window);
8060 g_print ("create_mainloop: start\n");
8062 g_print ("create_mainloop: done\n");
8065 gtk_widget_destroy (window);
8069 layout_expose_handler (GtkWidget *widget, GdkEventExpose *event)
8074 gint imin, imax, jmin, jmax;
8076 layout = GTK_LAYOUT (widget);
8078 imin = (layout->xoffset + event->area.x) / 10;
8079 imax = (layout->xoffset + event->area.x + event->area.width + 9) / 10;
8081 jmin = (layout->yoffset + event->area.y) / 10;
8082 jmax = (layout->yoffset + event->area.y + event->area.height + 9) / 10;
8084 gdk_window_clear_area (widget->window,
8085 event->area.x, event->area.y,
8086 event->area.width, event->area.height);
8088 for (i=imin; i<imax; i++)
8089 for (j=jmin; j<jmax; j++)
8091 gdk_draw_rectangle (layout->bin_window,
8092 widget->style->black_gc,
8094 10*i - layout->xoffset, 10*j - layout->yoffset,
8100 void create_layout (void)
8102 static GtkWidget *window = NULL;
8104 GtkWidget *scrolledwindow;
8113 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
8114 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8115 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
8118 gtk_window_set_title (GTK_WINDOW (window), "Layout");
8119 gtk_widget_set_usize (window, 200, 200);
8121 scrolledwindow = gtk_scrolled_window_new (NULL, NULL);
8123 gtk_container_add (GTK_CONTAINER (window), scrolledwindow);
8125 layout = gtk_layout_new (NULL, NULL);
8126 gtk_container_add (GTK_CONTAINER (scrolledwindow), layout);
8128 /* We set step sizes here since GtkLayout does not set
8131 GTK_LAYOUT (layout)->hadjustment->step_increment = 10.0;
8132 GTK_LAYOUT (layout)->vadjustment->step_increment = 10.0;
8134 gtk_widget_set_events (layout, GDK_EXPOSURE_MASK);
8135 gtk_signal_connect (GTK_OBJECT (layout), "expose_event",
8136 GTK_SIGNAL_FUNC (layout_expose_handler), NULL);
8138 gtk_layout_set_size (GTK_LAYOUT (layout), 1600, 128000);
8140 for (i=0 ; i < 16 ; i++)
8141 for (j=0 ; j < 16 ; j++)
8143 sprintf(buf, "Button %d, %d", i, j);
8145 button = gtk_button_new_with_label (buf);
8147 button = gtk_label_new (buf);
8149 gtk_layout_put (GTK_LAYOUT (layout), button,
8153 for (i=16; i < 1280; i++)
8155 sprintf(buf, "Button %d, %d", i, 0);
8157 button = gtk_button_new_with_label (buf);
8159 button = gtk_label_new (buf);
8161 gtk_layout_put (GTK_LAYOUT (layout), button,
8166 if (!GTK_WIDGET_VISIBLE (window))
8167 gtk_widget_show_all (window);
8169 gtk_widget_destroy (window);
8173 * Main Window and Exit
8177 do_exit (GtkWidget *widget, GtkWidget *window)
8179 gtk_widget_destroy (window);
8184 create_main_window (void)
8191 { "button box", create_button_box },
8192 { "buttons", create_buttons },
8193 { "check buttons", create_check_buttons },
8194 { "clist", create_clist},
8195 { "color selection", create_color_selection },
8196 { "ctree", create_ctree },
8197 { "cursors", create_cursors },
8198 { "dialog", create_dialog },
8199 /* { "dnd", create_dnd }, */
8200 { "entry", create_entry },
8201 { "event watcher", create_event_watcher },
8202 { "file selection", create_file_selection },
8203 { "font selection", create_font_selection },
8204 { "gamma curve", create_gamma_curve },
8205 { "handle box", create_handle_box },
8206 { "item factory", create_item_factory },
8207 { "labels", create_labels },
8208 { "layout", create_layout },
8209 { "list", create_list },
8210 { "menus", create_menus },
8211 { "modal window", create_modal_window },
8212 { "notebook", create_notebook },
8213 { "panes", create_panes },
8214 { "pixmap", create_pixmap },
8215 { "preview color", create_color_preview },
8216 { "preview gray", create_gray_preview },
8217 { "progress bar", create_progress_bar },
8218 { "radio buttons", create_radio_buttons },
8219 { "range controls", create_range_controls },
8220 { "rc file", create_rc_file },
8221 { "reparent", create_reparent },
8222 { "rulers", create_rulers },
8223 { "saved position", create_saved_position },
8224 { "scrolled windows", create_scrolled_windows },
8225 { "shapes", create_shapes },
8226 { "spinbutton", create_spins },
8227 { "statusbar", create_statusbar },
8228 { "test idle", create_idle_test },
8229 { "test mainloop", create_mainloop },
8230 { "test scrolling", create_scroll_test },
8231 { "test selection", create_selection_test },
8232 { "test timeout", create_timeout_test },
8233 { "text", create_text },
8234 { "toggle buttons", create_toggle_buttons },
8235 { "toolbar", create_toolbar },
8236 { "tooltips", create_tooltips },
8237 { "tree", create_tree_mode_window},
8238 { "WM hints", create_wmhints },
8240 int nbuttons = sizeof (buttons) / sizeof (buttons[0]);
8244 GtkWidget *scrolled_window;
8248 GtkWidget *separator;
8251 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
8252 gtk_window_set_policy (GTK_WINDOW (window), FALSE, FALSE, FALSE);
8253 gtk_widget_set_name (window, "main window");
8254 gtk_widget_set_usize (window, 200, 400);
8255 gtk_widget_set_uposition (window, 20, 20);
8257 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8258 GTK_SIGNAL_FUNC(gtk_main_quit),
8260 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
8261 GTK_SIGNAL_FUNC (gtk_false),
8264 box1 = gtk_vbox_new (FALSE, 0);
8265 gtk_container_add (GTK_CONTAINER (window), box1);
8267 if (gtk_micro_version > 0)
8279 label = gtk_label_new (buffer);
8280 gtk_box_pack_start (GTK_BOX (box1), label, FALSE, FALSE, 0);
8282 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
8283 gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10);
8284 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
8285 GTK_POLICY_AUTOMATIC,
8286 GTK_POLICY_AUTOMATIC);
8287 gtk_box_pack_start (GTK_BOX (box1), scrolled_window, TRUE, TRUE, 0);
8289 box2 = gtk_vbox_new (FALSE, 0);
8290 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
8291 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), box2);
8292 gtk_container_set_focus_vadjustment (GTK_CONTAINER (box2),
8293 gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
8294 gtk_widget_show (box2);
8296 for (i = 0; i < nbuttons; i++)
8298 button = gtk_button_new_with_label (buttons[i].label);
8299 if (buttons[i].func)
8300 gtk_signal_connect (GTK_OBJECT (button),
8302 GTK_SIGNAL_FUNC(buttons[i].func),
8305 gtk_widget_set_sensitive (button, FALSE);
8306 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
8309 separator = gtk_hseparator_new ();
8310 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
8312 box2 = gtk_vbox_new (FALSE, 10);
8313 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
8314 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
8316 button = gtk_button_new_with_label ("close");
8317 gtk_signal_connect (GTK_OBJECT (button), "clicked",
8318 GTK_SIGNAL_FUNC (do_exit),
8320 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
8321 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8322 gtk_widget_grab_default (button);
8324 gtk_widget_show_all (window);
8328 main (int argc, char *argv[])
8330 GtkBindingSet *binding_set;
8332 srand (time (NULL));
8336 gtk_rc_add_default_file ("testgtkrc");
8338 gtk_init (&argc, &argv);
8344 binding_set = gtk_binding_set_by_class (gtk_type_class (GTK_TYPE_WIDGET));
8345 gtk_binding_entry_add_signal (binding_set,
8346 '9', GDK_CONTROL_MASK | GDK_RELEASE_MASK,
8349 GTK_TYPE_STRING, "GtkWidgetClass <ctrl><release>9 test");
8351 create_main_window ();