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.
21 * Modified by the GTK+ Team and others 1997-1999. See the AUTHORS
22 * file for a list of people on the GTK+ Team. See the ChangeLog
23 * files for a list of changes. These files are distributed with
24 * GTK+ at ftp://ftp.gtk.org/pub/gtk/.
43 #include "gdk/gdkkeysyms.h"
45 #include "circles.xbm"
47 typedef struct _OptionMenuItem
54 shape_create_icon (char *xpm_file,
62 build_option_menu (OptionMenuItem items[],
67 /* macro, structure and variables used by tree window demos */
68 #define DEFAULT_NUMBER_OF_ITEM 3
69 #define DEFAULT_RECURSION_LEVEL 3
72 GSList* selection_mode_group;
73 GtkWidget* single_button;
74 GtkWidget* browse_button;
75 GtkWidget* multiple_button;
76 GtkWidget* draw_line_button;
77 GtkWidget* view_line_button;
78 GtkWidget* no_root_item_button;
79 GtkWidget* nb_item_spinner;
80 GtkWidget* recursion_spinner;
81 } sTreeSampleSelection;
83 typedef struct sTreeButtons {
85 GtkWidget* add_button;
86 GtkWidget* remove_button;
87 GtkWidget* subtree_button;
89 /* end of tree section */
92 build_option_menu (OptionMenuItem items[],
103 omenu = gtk_option_menu_new ();
105 menu = gtk_menu_new ();
108 for (i = 0; i < num_items; i++)
110 menu_item = gtk_radio_menu_item_new_with_label (group, items[i].name);
111 gtk_signal_connect (GTK_OBJECT (menu_item), "activate",
112 (GtkSignalFunc) items[i].func, data);
113 group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menu_item));
114 gtk_menu_append (GTK_MENU (menu), menu_item);
116 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_item), TRUE);
117 gtk_widget_show (menu_item);
120 gtk_option_menu_set_menu (GTK_OPTION_MENU (omenu), menu);
121 gtk_option_menu_set_history (GTK_OPTION_MENU (omenu), history);
127 destroy_tooltips (GtkWidget *widget, GtkWindow **window)
129 GtkTooltips *tt = gtk_object_get_data (GTK_OBJECT (*window), "tooltips");
130 gtk_object_unref (GTK_OBJECT (tt));
139 button_window (GtkWidget *widget,
142 if (!GTK_WIDGET_VISIBLE (button))
143 gtk_widget_show (button);
145 gtk_widget_hide (button);
149 create_buttons (void)
151 static GtkWidget *window = NULL;
155 GtkWidget *button[10];
156 GtkWidget *separator;
160 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
162 gtk_signal_connect (GTK_OBJECT (window), "destroy",
163 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
166 gtk_window_set_title (GTK_WINDOW (window), "GtkButton");
167 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
169 box1 = gtk_vbox_new (FALSE, 0);
170 gtk_container_add (GTK_CONTAINER (window), box1);
172 table = gtk_table_new (3, 3, FALSE);
173 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
174 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
175 gtk_container_set_border_width (GTK_CONTAINER (table), 10);
176 gtk_box_pack_start (GTK_BOX (box1), table, TRUE, TRUE, 0);
178 button[0] = gtk_button_new_with_label ("button1");
179 button[1] = gtk_button_new_with_label ("button2");
180 button[2] = gtk_button_new_with_label ("button3");
181 button[3] = gtk_button_new_with_label ("button4");
182 button[4] = gtk_button_new_with_label ("button5");
183 button[5] = gtk_button_new_with_label ("button6");
184 button[6] = gtk_button_new_with_label ("button7");
185 button[7] = gtk_button_new_with_label ("button8");
186 button[8] = gtk_button_new_with_label ("button9");
188 gtk_signal_connect (GTK_OBJECT (button[0]), "clicked",
189 GTK_SIGNAL_FUNC(button_window),
192 gtk_table_attach (GTK_TABLE (table), button[0], 0, 1, 0, 1,
193 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
195 gtk_signal_connect (GTK_OBJECT (button[1]), "clicked",
196 GTK_SIGNAL_FUNC(button_window),
199 gtk_table_attach (GTK_TABLE (table), button[1], 1, 2, 1, 2,
200 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
202 gtk_signal_connect (GTK_OBJECT (button[2]), "clicked",
203 GTK_SIGNAL_FUNC(button_window),
205 gtk_table_attach (GTK_TABLE (table), button[2], 2, 3, 2, 3,
206 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
208 gtk_signal_connect (GTK_OBJECT (button[3]), "clicked",
209 GTK_SIGNAL_FUNC(button_window),
211 gtk_table_attach (GTK_TABLE (table), button[3], 0, 1, 2, 3,
212 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
214 gtk_signal_connect (GTK_OBJECT (button[4]), "clicked",
215 GTK_SIGNAL_FUNC(button_window),
217 gtk_table_attach (GTK_TABLE (table), button[4], 2, 3, 0, 1,
218 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
220 gtk_signal_connect (GTK_OBJECT (button[5]), "clicked",
221 GTK_SIGNAL_FUNC(button_window),
223 gtk_table_attach (GTK_TABLE (table), button[5], 1, 2, 2, 3,
224 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
226 gtk_signal_connect (GTK_OBJECT (button[6]), "clicked",
227 GTK_SIGNAL_FUNC(button_window),
229 gtk_table_attach (GTK_TABLE (table), button[6], 1, 2, 0, 1,
230 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
232 gtk_signal_connect (GTK_OBJECT (button[7]), "clicked",
233 GTK_SIGNAL_FUNC(button_window),
235 gtk_table_attach (GTK_TABLE (table), button[7], 2, 3, 1, 2,
236 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
238 gtk_signal_connect (GTK_OBJECT (button[8]), "clicked",
239 GTK_SIGNAL_FUNC(button_window),
241 gtk_table_attach (GTK_TABLE (table), button[8], 0, 1, 1, 2,
242 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
244 separator = gtk_hseparator_new ();
245 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
247 box2 = gtk_vbox_new (FALSE, 10);
248 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
249 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
251 button[9] = gtk_button_new_with_label ("close");
252 gtk_signal_connect_object (GTK_OBJECT (button[9]), "clicked",
253 GTK_SIGNAL_FUNC(gtk_widget_destroy),
254 GTK_OBJECT (window));
255 gtk_box_pack_start (GTK_BOX (box2), button[9], TRUE, TRUE, 0);
256 GTK_WIDGET_SET_FLAGS (button[9], GTK_CAN_DEFAULT);
257 gtk_widget_grab_default (button[9]);
260 if (!GTK_WIDGET_VISIBLE (window))
261 gtk_widget_show_all (window);
263 gtk_widget_destroy (window);
271 create_toggle_buttons (void)
273 static GtkWidget *window = NULL;
277 GtkWidget *separator;
281 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
283 gtk_signal_connect (GTK_OBJECT (window), "destroy",
284 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
287 gtk_window_set_title (GTK_WINDOW (window), "GtkToggleButton");
288 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
290 box1 = gtk_vbox_new (FALSE, 0);
291 gtk_container_add (GTK_CONTAINER (window), box1);
293 box2 = gtk_vbox_new (FALSE, 10);
294 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
295 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
297 button = gtk_toggle_button_new_with_label ("button1");
298 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
300 button = gtk_toggle_button_new_with_label ("button2");
301 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
303 button = gtk_toggle_button_new_with_label ("button3");
304 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
306 separator = gtk_hseparator_new ();
307 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
309 box2 = gtk_vbox_new (FALSE, 10);
310 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
311 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
313 button = gtk_button_new_with_label ("close");
314 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
315 GTK_SIGNAL_FUNC(gtk_widget_destroy),
316 GTK_OBJECT (window));
317 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
318 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
319 gtk_widget_grab_default (button);
322 if (!GTK_WIDGET_VISIBLE (window))
323 gtk_widget_show_all (window);
325 gtk_widget_destroy (window);
333 create_check_buttons (void)
335 static GtkWidget *window = NULL;
339 GtkWidget *separator;
343 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
345 gtk_signal_connect (GTK_OBJECT (window), "destroy",
346 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
349 gtk_window_set_title (GTK_WINDOW (window), "GtkCheckButton");
350 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
352 box1 = gtk_vbox_new (FALSE, 0);
353 gtk_container_add (GTK_CONTAINER (window), box1);
355 box2 = gtk_vbox_new (FALSE, 10);
356 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
357 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
359 button = gtk_check_button_new_with_label ("button1");
360 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
362 button = gtk_check_button_new_with_label ("button2");
363 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
365 button = gtk_check_button_new_with_label ("button3");
366 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
368 separator = gtk_hseparator_new ();
369 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
371 box2 = gtk_vbox_new (FALSE, 10);
372 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
373 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
375 button = gtk_button_new_with_label ("close");
376 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
377 GTK_SIGNAL_FUNC(gtk_widget_destroy),
378 GTK_OBJECT (window));
379 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
380 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
381 gtk_widget_grab_default (button);
384 if (!GTK_WIDGET_VISIBLE (window))
385 gtk_widget_show_all (window);
387 gtk_widget_destroy (window);
395 create_radio_buttons (void)
397 static GtkWidget *window = NULL;
401 GtkWidget *separator;
405 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
407 gtk_signal_connect (GTK_OBJECT (window), "destroy",
408 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
411 gtk_window_set_title (GTK_WINDOW (window), "radio buttons");
412 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
414 box1 = gtk_vbox_new (FALSE, 0);
415 gtk_container_add (GTK_CONTAINER (window), box1);
417 box2 = gtk_vbox_new (FALSE, 10);
418 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
419 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
421 button = gtk_radio_button_new_with_label (NULL, "button1");
422 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
424 button = gtk_radio_button_new_with_label (
425 gtk_radio_button_group (GTK_RADIO_BUTTON (button)),
427 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
428 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
430 button = gtk_radio_button_new_with_label (
431 gtk_radio_button_group (GTK_RADIO_BUTTON (button)),
433 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
435 separator = gtk_hseparator_new ();
436 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
438 box2 = gtk_vbox_new (FALSE, 10);
439 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
440 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
442 button = gtk_button_new_with_label ("close");
443 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
444 GTK_SIGNAL_FUNC(gtk_widget_destroy),
445 GTK_OBJECT (window));
446 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
447 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
448 gtk_widget_grab_default (button);
451 if (!GTK_WIDGET_VISIBLE (window))
452 gtk_widget_show_all (window);
454 gtk_widget_destroy (window);
462 create_bbox (gint horizontal,
473 frame = gtk_frame_new (title);
476 bbox = gtk_hbutton_box_new ();
478 bbox = gtk_vbutton_box_new ();
480 gtk_container_set_border_width (GTK_CONTAINER (bbox), 5);
481 gtk_container_add (GTK_CONTAINER (frame), bbox);
483 gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), layout);
484 gtk_button_box_set_spacing (GTK_BUTTON_BOX (bbox), spacing);
485 gtk_button_box_set_child_size (GTK_BUTTON_BOX (bbox), child_w, child_h);
487 button = gtk_button_new_with_label ("OK");
488 gtk_container_add (GTK_CONTAINER (bbox), button);
490 button = gtk_button_new_with_label ("Cancel");
491 gtk_container_add (GTK_CONTAINER (bbox), button);
493 button = gtk_button_new_with_label ("Help");
494 gtk_container_add (GTK_CONTAINER (bbox), button);
500 create_button_box (void)
502 static GtkWidget* window = NULL;
503 GtkWidget *main_vbox;
506 GtkWidget *frame_horz;
507 GtkWidget *frame_vert;
511 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
512 gtk_window_set_title (GTK_WINDOW (window), "Button Boxes");
514 gtk_signal_connect (GTK_OBJECT (window), "destroy",
515 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
518 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
520 main_vbox = gtk_vbox_new (FALSE, 0);
521 gtk_container_add (GTK_CONTAINER (window), main_vbox);
523 frame_horz = gtk_frame_new ("Horizontal Button Boxes");
524 gtk_box_pack_start (GTK_BOX (main_vbox), frame_horz, TRUE, TRUE, 10);
526 vbox = gtk_vbox_new (FALSE, 0);
527 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
528 gtk_container_add (GTK_CONTAINER (frame_horz), vbox);
530 gtk_box_pack_start (GTK_BOX (vbox),
531 create_bbox (TRUE, "Spread", 40, 85, 20, GTK_BUTTONBOX_SPREAD),
534 gtk_box_pack_start (GTK_BOX (vbox),
535 create_bbox (TRUE, "Edge", 40, 85, 20, GTK_BUTTONBOX_EDGE),
538 gtk_box_pack_start (GTK_BOX (vbox),
539 create_bbox (TRUE, "Start", 40, 85, 20, GTK_BUTTONBOX_START),
542 gtk_box_pack_start (GTK_BOX (vbox),
543 create_bbox (TRUE, "End", 40, 85, 20, GTK_BUTTONBOX_END),
546 frame_vert = gtk_frame_new ("Vertical Button Boxes");
547 gtk_box_pack_start (GTK_BOX (main_vbox), frame_vert, TRUE, TRUE, 10);
549 hbox = gtk_hbox_new (FALSE, 0);
550 gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
551 gtk_container_add (GTK_CONTAINER (frame_vert), hbox);
553 gtk_box_pack_start (GTK_BOX (hbox),
554 create_bbox (FALSE, "Spread", 30, 85, 20, GTK_BUTTONBOX_SPREAD),
557 gtk_box_pack_start (GTK_BOX (hbox),
558 create_bbox (FALSE, "Edge", 30, 85, 20, GTK_BUTTONBOX_EDGE),
561 gtk_box_pack_start (GTK_BOX (hbox),
562 create_bbox (FALSE, "Start", 30, 85, 20, GTK_BUTTONBOX_START),
565 gtk_box_pack_start (GTK_BOX (hbox),
566 create_bbox (FALSE, "End", 30, 85, 20, GTK_BUTTONBOX_END),
570 if (!GTK_WIDGET_VISIBLE (window))
571 gtk_widget_show_all (window);
573 gtk_widget_destroy (window);
581 new_pixmap (char *filename,
583 GdkColor *background)
589 pixmap = gdk_pixmap_create_from_xpm (window, &mask,
592 wpixmap = gtk_pixmap_new (pixmap, mask);
598 set_toolbar_horizontal (GtkWidget *widget,
601 gtk_toolbar_set_orientation (GTK_TOOLBAR (data), GTK_ORIENTATION_HORIZONTAL);
605 set_toolbar_vertical (GtkWidget *widget,
608 gtk_toolbar_set_orientation (GTK_TOOLBAR (data), GTK_ORIENTATION_VERTICAL);
612 set_toolbar_icons (GtkWidget *widget,
615 gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_ICONS);
619 set_toolbar_text (GtkWidget *widget,
622 gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_TEXT);
626 set_toolbar_both (GtkWidget *widget,
629 gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_BOTH);
633 set_toolbar_both_horiz (GtkWidget *widget,
636 gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_BOTH_HORIZ);
640 set_toolbar_small_space (GtkWidget *widget,
643 gtk_toolbar_set_space_size (GTK_TOOLBAR (data), 5);
647 set_toolbar_big_space (GtkWidget *widget,
650 gtk_toolbar_set_space_size (GTK_TOOLBAR (data), 10);
654 set_toolbar_enable (GtkWidget *widget,
657 gtk_toolbar_set_tooltips (GTK_TOOLBAR (data), TRUE);
661 set_toolbar_disable (GtkWidget *widget,
664 gtk_toolbar_set_tooltips (GTK_TOOLBAR (data), FALSE);
668 set_toolbar_borders (GtkWidget *widget,
671 gtk_toolbar_set_button_relief (GTK_TOOLBAR (data), GTK_RELIEF_NORMAL);
675 set_toolbar_borderless (GtkWidget *widget,
678 gtk_toolbar_set_button_relief (GTK_TOOLBAR (data), GTK_RELIEF_NONE);
682 set_toolbar_space_style_empty (GtkWidget *widget,
685 gtk_toolbar_set_space_style (GTK_TOOLBAR (data), GTK_TOOLBAR_SPACE_EMPTY);
689 set_toolbar_space_style_line (GtkWidget *widget,
692 gtk_toolbar_set_space_style (GTK_TOOLBAR (data), GTK_TOOLBAR_SPACE_LINE);
696 create_toolbar (void)
698 static GtkWidget *window = NULL;
704 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
705 gtk_window_set_title (GTK_WINDOW (window), "Toolbar test");
706 gtk_window_set_policy (GTK_WINDOW (window), FALSE, TRUE, TRUE);
708 gtk_signal_connect (GTK_OBJECT (window), "destroy",
709 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
712 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
713 gtk_widget_realize (window);
715 toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_BOTH);
716 gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NONE);
718 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
719 "Horizontal", "Horizontal toolbar layout", "Toolbar/Horizontal",
720 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
721 (GtkSignalFunc) set_toolbar_horizontal, toolbar);
722 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
723 "Vertical", "Vertical toolbar layout", "Toolbar/Vertical",
724 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
725 (GtkSignalFunc) set_toolbar_vertical, toolbar);
727 gtk_toolbar_append_space (GTK_TOOLBAR(toolbar));
729 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
730 "Icons", "Only show toolbar icons", "Toolbar/IconsOnly",
731 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
732 (GtkSignalFunc) set_toolbar_icons, toolbar);
733 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
734 "Text", "Only show toolbar text", "Toolbar/TextOnly",
735 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
736 (GtkSignalFunc) set_toolbar_text, toolbar);
737 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
738 "Both", "Show toolbar icons and text", "Toolbar/Both",
739 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
740 (GtkSignalFunc) set_toolbar_both, toolbar);
741 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
743 "Show toolbar icons and text in a horizontal fashion",
745 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
746 (GtkSignalFunc) set_toolbar_both_horiz, toolbar);
748 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
750 entry = gtk_entry_new ();
752 gtk_toolbar_append_widget (GTK_TOOLBAR (toolbar), entry, "This is an unusable GtkEntry ;)", "Hey don't click me!!!");
754 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
756 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
757 "Small", "Use small spaces", "Toolbar/Small",
758 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
759 (GtkSignalFunc) set_toolbar_small_space, toolbar);
760 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
761 "Big", "Use big spaces", "Toolbar/Big",
762 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
763 (GtkSignalFunc) set_toolbar_big_space, toolbar);
765 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
767 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
768 "Enable", "Enable tooltips", NULL,
769 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
770 (GtkSignalFunc) set_toolbar_enable, toolbar);
771 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
772 "Disable", "Disable tooltips", NULL,
773 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
774 (GtkSignalFunc) set_toolbar_disable, toolbar);
776 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
778 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
779 "Borders", "Show Borders", NULL,
780 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
781 (GtkSignalFunc) set_toolbar_borders, toolbar);
782 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
783 "Borderless", "Hide Borders", NULL,
784 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
785 (GtkSignalFunc) set_toolbar_borderless, toolbar);
787 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
789 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
790 "Empty", "Empty spaces", NULL,
791 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
792 (GtkSignalFunc) set_toolbar_space_style_empty, toolbar);
793 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
794 "Lines", "Lines in spaces", NULL,
795 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
796 (GtkSignalFunc) set_toolbar_space_style_line, toolbar);
798 gtk_container_add (GTK_CONTAINER (window), toolbar);
801 if (!GTK_WIDGET_VISIBLE (window))
802 gtk_widget_show_all (window);
804 gtk_widget_destroy (window);
808 make_toolbar (GtkWidget *window)
812 if (!GTK_WIDGET_REALIZED (window))
813 gtk_widget_realize (window);
815 toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_BOTH);
816 gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NONE);
818 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
819 "Horizontal", "Horizontal toolbar layout", NULL,
820 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
821 (GtkSignalFunc) set_toolbar_horizontal, toolbar);
822 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
823 "Vertical", "Vertical toolbar layout", NULL,
824 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
825 (GtkSignalFunc) set_toolbar_vertical, toolbar);
827 gtk_toolbar_append_space (GTK_TOOLBAR(toolbar));
829 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
830 "Icons", "Only show toolbar icons", NULL,
831 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
832 (GtkSignalFunc) set_toolbar_icons, toolbar);
833 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
834 "Text", "Only show toolbar text", NULL,
835 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
836 (GtkSignalFunc) set_toolbar_text, toolbar);
837 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
838 "Both", "Show toolbar icons and text", NULL,
839 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
840 (GtkSignalFunc) set_toolbar_both, toolbar);
842 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
844 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
845 "Small", "Use small spaces", NULL,
846 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
847 (GtkSignalFunc) set_toolbar_small_space, toolbar);
848 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
849 "Big", "Use big spaces", "Toolbar/Big",
850 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
851 (GtkSignalFunc) set_toolbar_big_space, toolbar);
853 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
855 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
856 "Enable", "Enable tooltips", NULL,
857 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
858 (GtkSignalFunc) set_toolbar_enable, toolbar);
859 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
860 "Disable", "Disable tooltips", NULL,
861 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
862 (GtkSignalFunc) set_toolbar_disable, toolbar);
864 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
866 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
867 "Borders", "Show Borders", NULL,
868 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
869 (GtkSignalFunc) set_toolbar_borders, toolbar);
870 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
871 "Borderless", "Hide Borders", NULL,
872 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
873 (GtkSignalFunc) set_toolbar_borderless, toolbar);
882 static guint statusbar_counter = 1;
885 statusbar_push (GtkWidget *button,
886 GtkStatusbar *statusbar)
890 sprintf (text, "something %d", statusbar_counter++);
892 gtk_statusbar_push (statusbar, 1, text);
896 statusbar_pop (GtkWidget *button,
897 GtkStatusbar *statusbar)
899 gtk_statusbar_pop (statusbar, 1);
903 statusbar_steal (GtkWidget *button,
904 GtkStatusbar *statusbar)
906 gtk_statusbar_remove (statusbar, 1, 4);
910 statusbar_popped (GtkStatusbar *statusbar,
914 if (!statusbar->messages)
915 statusbar_counter = 1;
919 statusbar_contexts (GtkStatusbar *statusbar)
923 string = "any context";
924 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
926 gtk_statusbar_get_context_id (statusbar, string));
928 string = "idle messages";
929 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
931 gtk_statusbar_get_context_id (statusbar, string));
933 string = "some text";
934 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
936 gtk_statusbar_get_context_id (statusbar, string));
938 string = "hit the mouse";
939 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
941 gtk_statusbar_get_context_id (statusbar, string));
943 string = "hit the mouse2";
944 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
946 gtk_statusbar_get_context_id (statusbar, string));
950 statusbar_dump_stack (GtkStatusbar *statusbar)
954 for (list = statusbar->messages; list; list = list->next)
956 GtkStatusbarMsg *msg;
959 g_print ("context_id: %d, message_id: %d, status_text: \"%s\"\n",
967 create_statusbar (void)
969 static GtkWidget *window = NULL;
973 GtkWidget *separator;
974 GtkWidget *statusbar;
978 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
980 gtk_signal_connect (GTK_OBJECT (window), "destroy",
981 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
984 gtk_window_set_title (GTK_WINDOW (window), "statusbar");
985 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
987 box1 = gtk_vbox_new (FALSE, 0);
988 gtk_container_add (GTK_CONTAINER (window), box1);
990 box2 = gtk_vbox_new (FALSE, 10);
991 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
992 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
994 statusbar = gtk_statusbar_new ();
995 gtk_box_pack_end (GTK_BOX (box1), statusbar, TRUE, TRUE, 0);
996 gtk_signal_connect (GTK_OBJECT (statusbar),
998 GTK_SIGNAL_FUNC (statusbar_popped),
1001 button = gtk_widget_new (gtk_button_get_type (),
1002 "label", "push something",
1005 "signal::clicked", statusbar_push, statusbar,
1008 button = gtk_widget_new (gtk_button_get_type (),
1012 "signal_after::clicked", statusbar_pop, statusbar,
1015 button = gtk_widget_new (gtk_button_get_type (),
1016 "label", "steal #4",
1019 "signal_after::clicked", statusbar_steal, statusbar,
1022 button = gtk_widget_new (gtk_button_get_type (),
1023 "label", "dump stack",
1026 "object_signal::clicked", statusbar_dump_stack, statusbar,
1029 button = gtk_widget_new (gtk_button_get_type (),
1030 "label", "test contexts",
1033 "object_signal_after::clicked", statusbar_contexts, statusbar,
1036 separator = gtk_hseparator_new ();
1037 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
1039 box2 = gtk_vbox_new (FALSE, 10);
1040 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
1041 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
1043 button = gtk_button_new_with_label ("close");
1044 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
1045 GTK_SIGNAL_FUNC(gtk_widget_destroy),
1046 GTK_OBJECT (window));
1047 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
1048 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
1049 gtk_widget_grab_default (button);
1052 if (!GTK_WIDGET_VISIBLE (window))
1053 gtk_widget_show_all (window);
1055 gtk_widget_destroy (window);
1063 cb_tree_destroy_event(GtkWidget* w)
1065 sTreeButtons* tree_buttons;
1067 /* free buttons structure associate at this tree */
1068 tree_buttons = gtk_object_get_user_data (GTK_OBJECT (w));
1069 g_free (tree_buttons);
1073 cb_add_new_item(GtkWidget* w, GtkTree* tree)
1075 sTreeButtons* tree_buttons;
1076 GList* selected_list;
1077 GtkWidget* selected_item;
1079 GtkWidget* item_new;
1082 tree_buttons = gtk_object_get_user_data(GTK_OBJECT(tree));
1084 selected_list = GTK_TREE_SELECTION(tree);
1086 if(selected_list == NULL)
1088 /* there is no item in tree */
1089 subtree = GTK_WIDGET(tree);
1093 /* list can have only one element */
1094 selected_item = GTK_WIDGET(selected_list->data);
1096 subtree = GTK_TREE_ITEM_SUBTREE(selected_item);
1100 /* current selected item have not subtree ... create it */
1101 subtree = gtk_tree_new();
1102 gtk_tree_item_set_subtree(GTK_TREE_ITEM(selected_item),
1107 /* at this point, we know which subtree will be used to add new item */
1108 /* create a new item */
1109 sprintf(buffer, "item add %d", tree_buttons->nb_item_add);
1110 item_new = gtk_tree_item_new_with_label(buffer);
1111 gtk_tree_append(GTK_TREE(subtree), item_new);
1112 gtk_widget_show(item_new);
1114 tree_buttons->nb_item_add++;
1118 cb_remove_item(GtkWidget*w, GtkTree* tree)
1120 GList* selected_list;
1123 selected_list = GTK_TREE_SELECTION(tree);
1127 while (selected_list)
1129 clear_list = g_list_prepend (clear_list, selected_list->data);
1130 selected_list = selected_list->next;
1133 clear_list = g_list_reverse (clear_list);
1134 gtk_tree_remove_items(tree, clear_list);
1136 g_list_free (clear_list);
1140 cb_remove_subtree(GtkWidget*w, GtkTree* tree)
1142 GList* selected_list;
1145 selected_list = GTK_TREE_SELECTION(tree);
1149 item = GTK_TREE_ITEM (selected_list->data);
1151 gtk_tree_item_remove_subtree (item);
1156 cb_tree_changed(GtkTree* tree)
1158 sTreeButtons* tree_buttons;
1159 GList* selected_list;
1162 tree_buttons = gtk_object_get_user_data(GTK_OBJECT(tree));
1164 selected_list = GTK_TREE_SELECTION(tree);
1165 nb_selected = g_list_length(selected_list);
1167 if(nb_selected == 0)
1169 if(tree->children == NULL)
1170 gtk_widget_set_sensitive(tree_buttons->add_button, TRUE);
1172 gtk_widget_set_sensitive(tree_buttons->add_button, FALSE);
1173 gtk_widget_set_sensitive(tree_buttons->remove_button, FALSE);
1174 gtk_widget_set_sensitive(tree_buttons->subtree_button, FALSE);
1178 gtk_widget_set_sensitive(tree_buttons->remove_button, TRUE);
1179 gtk_widget_set_sensitive(tree_buttons->add_button, (nb_selected == 1));
1180 gtk_widget_set_sensitive(tree_buttons->subtree_button, (nb_selected == 1));
1185 create_subtree(GtkWidget* item, guint level, guint nb_item_max, guint recursion_level_max)
1187 GtkWidget* item_subtree;
1188 GtkWidget* item_new;
1193 if(level == recursion_level_max) return;
1197 /* query with no root item */
1199 item_subtree = item;
1204 /* query with no root item */
1205 /* create subtree and associate it with current item */
1206 item_subtree = gtk_tree_new();
1210 for(nb_item = 0; nb_item < nb_item_max; nb_item++)
1212 sprintf(buffer, "item %d-%d", level, nb_item);
1213 item_new = gtk_tree_item_new_with_label(buffer);
1214 gtk_tree_append(GTK_TREE(item_subtree), item_new);
1215 create_subtree(item_new, level+1, nb_item_max, recursion_level_max);
1216 gtk_widget_show(item_new);
1220 gtk_tree_item_set_subtree(GTK_TREE_ITEM(item), item_subtree);
1224 create_tree_sample(guint selection_mode,
1225 guint draw_line, guint view_line, guint no_root_item,
1226 guint nb_item_max, guint recursion_level_max)
1231 GtkWidget* separator;
1233 GtkWidget* scrolled_win;
1234 GtkWidget* root_tree;
1235 GtkWidget* root_item;
1236 sTreeButtons* tree_buttons;
1238 /* create tree buttons struct */
1239 if ((tree_buttons = g_malloc (sizeof (sTreeButtons))) == NULL)
1241 g_error("can't allocate memory for tree structure !\n");
1244 tree_buttons->nb_item_add = 0;
1246 /* create top level window */
1247 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
1248 gtk_window_set_title(GTK_WINDOW(window), "Tree Sample");
1249 gtk_signal_connect(GTK_OBJECT(window), "destroy",
1250 (GtkSignalFunc) cb_tree_destroy_event, NULL);
1251 gtk_object_set_user_data(GTK_OBJECT(window), tree_buttons);
1253 box1 = gtk_vbox_new(FALSE, 0);
1254 gtk_container_add(GTK_CONTAINER(window), box1);
1255 gtk_widget_show(box1);
1257 /* create tree box */
1258 box2 = gtk_vbox_new(FALSE, 0);
1259 gtk_box_pack_start(GTK_BOX(box1), box2, TRUE, TRUE, 0);
1260 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1261 gtk_widget_show(box2);
1263 /* create scrolled window */
1264 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
1265 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
1266 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1267 gtk_box_pack_start (GTK_BOX (box2), scrolled_win, TRUE, TRUE, 0);
1268 gtk_widget_set_usize (scrolled_win, 200, 200);
1269 gtk_widget_show (scrolled_win);
1271 /* create root tree widget */
1272 root_tree = gtk_tree_new();
1273 gtk_signal_connect(GTK_OBJECT(root_tree), "selection_changed",
1274 (GtkSignalFunc)cb_tree_changed,
1276 gtk_object_set_user_data(GTK_OBJECT(root_tree), tree_buttons);
1277 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_win), root_tree);
1278 gtk_tree_set_selection_mode(GTK_TREE(root_tree), selection_mode);
1279 gtk_tree_set_view_lines(GTK_TREE(root_tree), draw_line);
1280 gtk_tree_set_view_mode(GTK_TREE(root_tree), !view_line);
1281 gtk_widget_show(root_tree);
1285 /* set root tree to subtree function with root item variable */
1286 root_item = GTK_WIDGET(root_tree);
1290 /* create root tree item widget */
1291 root_item = gtk_tree_item_new_with_label("root item");
1292 gtk_tree_append(GTK_TREE(root_tree), root_item);
1293 gtk_widget_show(root_item);
1295 create_subtree(root_item, -no_root_item, nb_item_max, recursion_level_max);
1297 box2 = gtk_vbox_new(FALSE, 0);
1298 gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, FALSE, 0);
1299 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1300 gtk_widget_show(box2);
1302 button = gtk_button_new_with_label("Add Item");
1303 gtk_widget_set_sensitive(button, FALSE);
1304 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1305 (GtkSignalFunc) cb_add_new_item,
1306 (gpointer)root_tree);
1307 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1308 gtk_widget_show(button);
1309 tree_buttons->add_button = button;
1311 button = gtk_button_new_with_label("Remove Item(s)");
1312 gtk_widget_set_sensitive(button, FALSE);
1313 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1314 (GtkSignalFunc) cb_remove_item,
1315 (gpointer)root_tree);
1316 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1317 gtk_widget_show(button);
1318 tree_buttons->remove_button = button;
1320 button = gtk_button_new_with_label("Remove Subtree");
1321 gtk_widget_set_sensitive(button, FALSE);
1322 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1323 (GtkSignalFunc) cb_remove_subtree,
1324 (gpointer)root_tree);
1325 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1326 gtk_widget_show(button);
1327 tree_buttons->subtree_button = button;
1329 /* create separator */
1330 separator = gtk_hseparator_new();
1331 gtk_box_pack_start(GTK_BOX(box1), separator, FALSE, FALSE, 0);
1332 gtk_widget_show(separator);
1334 /* create button box */
1335 box2 = gtk_vbox_new(FALSE, 0);
1336 gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, FALSE, 0);
1337 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1338 gtk_widget_show(box2);
1340 button = gtk_button_new_with_label("Close");
1341 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1342 gtk_signal_connect_object(GTK_OBJECT (button), "clicked",
1343 (GtkSignalFunc) gtk_widget_destroy,
1344 GTK_OBJECT(window));
1345 gtk_widget_show(button);
1347 gtk_widget_show(window);
1351 cb_create_tree(GtkWidget* w)
1353 guint selection_mode = GTK_SELECTION_SINGLE;
1358 guint recursion_level;
1360 /* get selection mode choice */
1361 if(GTK_TOGGLE_BUTTON(sTreeSampleSelection.single_button)->active)
1362 selection_mode = GTK_SELECTION_SINGLE;
1364 if(GTK_TOGGLE_BUTTON(sTreeSampleSelection.browse_button)->active)
1365 selection_mode = GTK_SELECTION_BROWSE;
1367 selection_mode = GTK_SELECTION_MULTIPLE;
1369 /* get options choice */
1370 draw_line = GTK_TOGGLE_BUTTON(sTreeSampleSelection.draw_line_button)->active;
1371 view_line = GTK_TOGGLE_BUTTON(sTreeSampleSelection.view_line_button)->active;
1372 no_root_item = GTK_TOGGLE_BUTTON(sTreeSampleSelection.no_root_item_button)->active;
1375 nb_item = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(sTreeSampleSelection.nb_item_spinner));
1376 recursion_level = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(sTreeSampleSelection.recursion_spinner));
1378 if (pow (nb_item, recursion_level) > 10000)
1380 g_print ("%g total items? That will take a very long time. Try less\n",
1381 pow (nb_item, recursion_level));
1385 create_tree_sample(selection_mode, draw_line, view_line, no_root_item, nb_item, recursion_level);
1389 create_tree_mode_window(void)
1391 static GtkWidget* window;
1399 GtkWidget* separator;
1406 /* create toplevel window */
1407 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
1408 gtk_window_set_title(GTK_WINDOW(window), "Set Tree Parameters");
1409 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1410 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
1412 box1 = gtk_vbox_new(FALSE, 0);
1413 gtk_container_add(GTK_CONTAINER(window), box1);
1415 /* create upper box - selection box */
1416 box2 = gtk_vbox_new(FALSE, 5);
1417 gtk_box_pack_start(GTK_BOX(box1), box2, TRUE, TRUE, 0);
1418 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1420 box3 = gtk_hbox_new(FALSE, 5);
1421 gtk_box_pack_start(GTK_BOX(box2), box3, TRUE, TRUE, 0);
1423 /* create selection mode frame */
1424 frame = gtk_frame_new("Selection Mode");
1425 gtk_box_pack_start(GTK_BOX(box3), frame, TRUE, TRUE, 0);
1427 box4 = gtk_vbox_new(FALSE, 0);
1428 gtk_container_add(GTK_CONTAINER(frame), box4);
1429 gtk_container_set_border_width(GTK_CONTAINER(box4), 5);
1431 /* create radio button */
1432 button = gtk_radio_button_new_with_label(NULL, "SINGLE");
1433 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1434 sTreeSampleSelection.single_button = button;
1436 button = gtk_radio_button_new_with_label(gtk_radio_button_group (GTK_RADIO_BUTTON (button)),
1438 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1439 sTreeSampleSelection.browse_button = button;
1441 button = gtk_radio_button_new_with_label(gtk_radio_button_group (GTK_RADIO_BUTTON (button)),
1443 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1444 sTreeSampleSelection.multiple_button = button;
1446 sTreeSampleSelection.selection_mode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (button));
1448 /* create option mode frame */
1449 frame = gtk_frame_new("Options");
1450 gtk_box_pack_start(GTK_BOX(box3), frame, TRUE, TRUE, 0);
1452 box4 = gtk_vbox_new(FALSE, 0);
1453 gtk_container_add(GTK_CONTAINER(frame), box4);
1454 gtk_container_set_border_width(GTK_CONTAINER(box4), 5);
1456 /* create check button */
1457 button = gtk_check_button_new_with_label("Draw line");
1458 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1459 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
1460 sTreeSampleSelection.draw_line_button = button;
1462 button = gtk_check_button_new_with_label("View Line mode");
1463 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1464 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
1465 sTreeSampleSelection.view_line_button = button;
1467 button = gtk_check_button_new_with_label("Without Root item");
1468 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1469 sTreeSampleSelection.no_root_item_button = button;
1471 /* create recursion parameter */
1472 frame = gtk_frame_new("Size Parameters");
1473 gtk_box_pack_start(GTK_BOX(box2), frame, TRUE, TRUE, 0);
1475 box4 = gtk_hbox_new(FALSE, 5);
1476 gtk_container_add(GTK_CONTAINER(frame), box4);
1477 gtk_container_set_border_width(GTK_CONTAINER(box4), 5);
1479 /* create number of item spin button */
1480 box5 = gtk_hbox_new(FALSE, 5);
1481 gtk_box_pack_start(GTK_BOX(box4), box5, FALSE, FALSE, 0);
1483 label = gtk_label_new("Number of items : ");
1484 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
1485 gtk_box_pack_start (GTK_BOX (box5), label, FALSE, TRUE, 0);
1487 adj = (GtkAdjustment *) gtk_adjustment_new ((gfloat)DEFAULT_NUMBER_OF_ITEM, 1.0, 255.0, 1.0,
1489 spinner = gtk_spin_button_new (adj, 0, 0);
1490 gtk_box_pack_start (GTK_BOX (box5), spinner, FALSE, TRUE, 0);
1491 sTreeSampleSelection.nb_item_spinner = spinner;
1493 /* create recursion level spin button */
1494 box5 = gtk_hbox_new(FALSE, 5);
1495 gtk_box_pack_start(GTK_BOX(box4), box5, FALSE, FALSE, 0);
1497 label = gtk_label_new("Depth : ");
1498 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
1499 gtk_box_pack_start (GTK_BOX (box5), label, FALSE, TRUE, 0);
1501 adj = (GtkAdjustment *) gtk_adjustment_new ((gfloat)DEFAULT_RECURSION_LEVEL, 0.0, 255.0, 1.0,
1503 spinner = gtk_spin_button_new (adj, 0, 0);
1504 gtk_box_pack_start (GTK_BOX (box5), spinner, FALSE, TRUE, 0);
1505 sTreeSampleSelection.recursion_spinner = spinner;
1507 /* create horizontal separator */
1508 separator = gtk_hseparator_new();
1509 gtk_box_pack_start(GTK_BOX(box1), separator, FALSE, FALSE, 0);
1511 /* create bottom button box */
1512 box2 = gtk_hbox_new(TRUE, 10);
1513 gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, FALSE, 0);
1514 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1516 button = gtk_button_new_with_label("Create Tree");
1517 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1518 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1519 (GtkSignalFunc) cb_create_tree, NULL);
1521 button = gtk_button_new_with_label("Close");
1522 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1523 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
1524 GTK_SIGNAL_FUNC(gtk_widget_destroy),
1525 GTK_OBJECT (window));
1527 if (!GTK_WIDGET_VISIBLE (window))
1528 gtk_widget_show_all (window);
1530 gtk_widget_destroy (window);
1538 handle_box_child_signal (GtkHandleBox *hb,
1540 const gchar *action)
1542 printf ("%s: child <%s> %sed\n",
1543 gtk_type_name (GTK_OBJECT_TYPE (hb)),
1544 gtk_type_name (GTK_OBJECT_TYPE (child)),
1549 create_handle_box (void)
1551 static GtkWidget* window = NULL;
1552 GtkWidget *handle_box;
1553 GtkWidget *handle_box2;
1558 GtkWidget *separator;
1562 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1563 gtk_window_set_title (GTK_WINDOW (window),
1565 gtk_window_set_policy (GTK_WINDOW (window),
1570 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1571 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
1574 gtk_container_set_border_width (GTK_CONTAINER (window), 20);
1576 vbox = gtk_vbox_new (FALSE, 0);
1577 gtk_container_add (GTK_CONTAINER (window), vbox);
1578 gtk_widget_show (vbox);
1580 label = gtk_label_new ("Above");
1581 gtk_container_add (GTK_CONTAINER (vbox), label);
1582 gtk_widget_show (label);
1584 separator = gtk_hseparator_new ();
1585 gtk_container_add (GTK_CONTAINER (vbox), separator);
1586 gtk_widget_show (separator);
1588 hbox = gtk_hbox_new (FALSE, 10);
1589 gtk_container_add (GTK_CONTAINER (vbox), hbox);
1590 gtk_widget_show (hbox);
1592 separator = gtk_hseparator_new ();
1593 gtk_container_add (GTK_CONTAINER (vbox), separator);
1594 gtk_widget_show (separator);
1596 label = gtk_label_new ("Below");
1597 gtk_container_add (GTK_CONTAINER (vbox), label);
1598 gtk_widget_show (label);
1600 handle_box = gtk_handle_box_new ();
1601 gtk_box_pack_start (GTK_BOX (hbox), handle_box, FALSE, FALSE, 0);
1602 gtk_signal_connect (GTK_OBJECT (handle_box),
1604 GTK_SIGNAL_FUNC (handle_box_child_signal),
1606 gtk_signal_connect (GTK_OBJECT (handle_box),
1608 GTK_SIGNAL_FUNC (handle_box_child_signal),
1610 gtk_widget_show (handle_box);
1612 toolbar = make_toolbar (window);
1613 gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NORMAL);
1614 gtk_container_add (GTK_CONTAINER (handle_box), toolbar);
1615 gtk_widget_show (toolbar);
1617 handle_box = gtk_handle_box_new ();
1618 gtk_box_pack_start (GTK_BOX (hbox), handle_box, FALSE, FALSE, 0);
1619 gtk_signal_connect (GTK_OBJECT (handle_box),
1621 GTK_SIGNAL_FUNC (handle_box_child_signal),
1623 gtk_signal_connect (GTK_OBJECT (handle_box),
1625 GTK_SIGNAL_FUNC (handle_box_child_signal),
1627 gtk_widget_show (handle_box);
1629 handle_box2 = gtk_handle_box_new ();
1630 gtk_container_add (GTK_CONTAINER (handle_box), handle_box2);
1631 gtk_signal_connect (GTK_OBJECT (handle_box2),
1633 GTK_SIGNAL_FUNC (handle_box_child_signal),
1635 gtk_signal_connect (GTK_OBJECT (handle_box2),
1637 GTK_SIGNAL_FUNC (handle_box_child_signal),
1639 gtk_widget_show (handle_box2);
1641 label = gtk_label_new ("Fooo!");
1642 gtk_container_add (GTK_CONTAINER (handle_box2), label);
1643 gtk_widget_show (label);
1646 if (!GTK_WIDGET_VISIBLE (window))
1647 gtk_widget_show (window);
1649 gtk_widget_destroy (window);
1655 void create_labels (void)
1657 static GtkWidget *window = NULL;
1665 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1666 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1667 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
1670 gtk_window_set_title (GTK_WINDOW (window), "Label");
1671 vbox = gtk_vbox_new (FALSE, 5);
1672 hbox = gtk_hbox_new (FALSE, 5);
1673 gtk_container_add (GTK_CONTAINER (window), hbox);
1674 gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);
1675 gtk_container_set_border_width (GTK_CONTAINER (window), 5);
1677 frame = gtk_frame_new ("Normal Label");
1678 label = gtk_label_new ("This is a Normal label");
1679 gtk_container_add (GTK_CONTAINER (frame), label);
1680 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
1682 frame = gtk_frame_new ("Multi-line Label");
1683 label = gtk_label_new ("This is a Multi-line label.\nSecond line\nThird line");
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 ("Left Justified Label");
1688 label = gtk_label_new ("This is a Left-Justified\nMulti-line label.\nThird line");
1689 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
1690 gtk_container_add (GTK_CONTAINER (frame), label);
1691 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
1693 frame = gtk_frame_new ("Right Justified Label");
1694 label = gtk_label_new ("This is a Right-Justified\nMulti-line label.\nFourth line, (j/k)");
1695 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_RIGHT);
1696 gtk_container_add (GTK_CONTAINER (frame), label);
1697 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
1699 vbox = gtk_vbox_new (FALSE, 5);
1700 gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);
1701 frame = gtk_frame_new ("Line wrapped label");
1702 label = gtk_label_new ("This is an example of a line-wrapped label. It should not be taking "\
1703 "up the entire "/* big space to test spacing */\
1704 "width allocated to it, but automatically wraps the words to fit. "\
1705 "The time has come, for all good men, to come to the aid of their party. "\
1706 "The sixth sheik's six sheep's sick.\n"\
1707 " It supports multiple paragraphs correctly, and correctly adds "\
1708 "many extra spaces. ");
1710 gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
1711 gtk_container_add (GTK_CONTAINER (frame), label);
1712 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
1714 frame = gtk_frame_new ("Filled, wrapped label");
1715 label = gtk_label_new ("This is an example of a line-wrapped, filled label. It should be taking "\
1716 "up the entire width allocated to it. Here is a seneance to prove "\
1717 "my point. Here is another sentence. "\
1718 "Here comes the sun, do de do de do.\n"\
1719 " This is a new paragraph.\n"\
1720 " This is another newer, longer, better paragraph. It is coming to an end, "\
1722 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_FILL);
1723 gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
1724 gtk_container_add (GTK_CONTAINER (frame), label);
1725 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
1727 frame = gtk_frame_new ("Underlined label");
1728 label = gtk_label_new ("This label is underlined!\n"
1729 "This one is underlined in ÆüËܸì¤ÎÆþÍÑquite a funky fashion");
1730 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
1731 gtk_label_set_pattern (GTK_LABEL (label), "_________________________ _ _________ _ _____ _ __ __ ___ ____ _____");
1732 gtk_container_add (GTK_CONTAINER (frame), label);
1733 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
1736 if (!GTK_WIDGET_VISIBLE (window))
1737 gtk_widget_show_all (window);
1739 gtk_widget_destroy (window);
1747 reparent_label (GtkWidget *widget,
1748 GtkWidget *new_parent)
1752 label = gtk_object_get_user_data (GTK_OBJECT (widget));
1754 gtk_widget_reparent (label, new_parent);
1758 set_parent_signal (GtkWidget *child,
1759 GtkWidget *old_parent,
1762 g_print ("set_parent for \"%s\": new parent: \"%s\", old parent: \"%s\", data: %d\n",
1763 gtk_type_name (GTK_OBJECT_TYPE (child)),
1764 child->parent ? gtk_type_name (GTK_OBJECT_TYPE (child->parent)) : "NULL",
1765 old_parent ? gtk_type_name (GTK_OBJECT_TYPE (old_parent)) : "NULL",
1766 GPOINTER_TO_INT (func_data));
1770 create_reparent (void)
1772 static GtkWidget *window = NULL;
1779 GtkWidget *separator;
1783 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1785 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1786 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
1789 gtk_window_set_title (GTK_WINDOW (window), "reparent");
1790 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
1792 box1 = gtk_vbox_new (FALSE, 0);
1793 gtk_container_add (GTK_CONTAINER (window), box1);
1795 box2 = gtk_hbox_new (FALSE, 5);
1796 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
1797 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
1799 label = gtk_label_new ("Hello World");
1801 frame = gtk_frame_new ("Frame 1");
1802 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
1804 box3 = gtk_vbox_new (FALSE, 5);
1805 gtk_container_set_border_width (GTK_CONTAINER (box3), 5);
1806 gtk_container_add (GTK_CONTAINER (frame), box3);
1808 button = gtk_button_new_with_label ("switch");
1809 gtk_signal_connect (GTK_OBJECT (button), "clicked",
1810 GTK_SIGNAL_FUNC(reparent_label),
1812 gtk_object_set_user_data (GTK_OBJECT (button), label);
1813 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
1815 gtk_box_pack_start (GTK_BOX (box3), label, FALSE, TRUE, 0);
1816 gtk_signal_connect (GTK_OBJECT (label),
1818 GTK_SIGNAL_FUNC (set_parent_signal),
1819 GINT_TO_POINTER (42));
1821 frame = gtk_frame_new ("Frame 2");
1822 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
1824 box3 = gtk_vbox_new (FALSE, 5);
1825 gtk_container_set_border_width (GTK_CONTAINER (box3), 5);
1826 gtk_container_add (GTK_CONTAINER (frame), box3);
1828 button = gtk_button_new_with_label ("switch");
1829 gtk_signal_connect (GTK_OBJECT (button), "clicked",
1830 GTK_SIGNAL_FUNC(reparent_label),
1832 gtk_object_set_user_data (GTK_OBJECT (button), label);
1833 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
1835 separator = gtk_hseparator_new ();
1836 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
1838 box2 = gtk_vbox_new (FALSE, 10);
1839 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
1840 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
1842 button = gtk_button_new_with_label ("close");
1843 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
1844 GTK_SIGNAL_FUNC(gtk_widget_destroy),
1845 GTK_OBJECT (window));
1846 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
1847 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
1848 gtk_widget_grab_default (button);
1851 if (!GTK_WIDGET_VISIBLE (window))
1852 gtk_widget_show_all (window);
1854 gtk_widget_destroy (window);
1860 gint upositionx = 0;
1861 gint upositiony = 0;
1864 uposition_configure (GtkWidget *window)
1870 lx = gtk_object_get_data (GTK_OBJECT (window), "x");
1871 ly = gtk_object_get_data (GTK_OBJECT (window), "y");
1873 gdk_window_get_root_origin (window->window, &upositionx, &upositiony);
1874 sprintf (buffer, "%d", upositionx);
1875 gtk_label_set_text (lx, buffer);
1876 sprintf (buffer, "%d", upositiony);
1877 gtk_label_set_text (ly, buffer);
1883 create_saved_position (void)
1885 static GtkWidget *window = NULL;
1890 GtkWidget *main_vbox;
1898 window = gtk_widget_new (GTK_TYPE_WINDOW,
1899 "type", GTK_WINDOW_TOPLEVEL,
1900 "signal::configure_event", uposition_configure, NULL,
1903 "title", "Saved Position",
1906 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1907 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
1910 main_vbox = gtk_vbox_new (FALSE, 5);
1911 gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 0);
1912 gtk_container_add (GTK_CONTAINER (window), main_vbox);
1915 gtk_widget_new (gtk_vbox_get_type (),
1916 "GtkBox::homogeneous", FALSE,
1917 "GtkBox::spacing", 5,
1918 "GtkContainer::border_width", 10,
1919 "GtkWidget::parent", main_vbox,
1920 "GtkWidget::visible", TRUE,
1923 hbox = gtk_hbox_new (FALSE, 0);
1924 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
1925 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
1927 label = gtk_label_new ("X Origin : ");
1928 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
1929 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
1931 x_label = gtk_label_new ("");
1932 gtk_box_pack_start (GTK_BOX (hbox), x_label, TRUE, TRUE, 0);
1933 gtk_object_set_data (GTK_OBJECT (window), "x", x_label);
1935 hbox = gtk_hbox_new (FALSE, 0);
1936 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
1937 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
1939 label = gtk_label_new ("Y Origin : ");
1940 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
1941 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
1943 y_label = gtk_label_new ("");
1944 gtk_box_pack_start (GTK_BOX (hbox), y_label, TRUE, TRUE, 0);
1945 gtk_object_set_data (GTK_OBJECT (window), "y", y_label);
1948 gtk_widget_new (gtk_hseparator_get_type (),
1949 "GtkWidget::visible", TRUE,
1951 gtk_box_pack_start (GTK_BOX (main_vbox), any, FALSE, TRUE, 0);
1953 hbox = gtk_hbox_new (FALSE, 0);
1954 gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
1955 gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
1957 button = gtk_button_new_with_label ("Close");
1958 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
1959 GTK_SIGNAL_FUNC (gtk_widget_destroy),
1960 GTK_OBJECT (window));
1961 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
1962 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
1963 gtk_widget_grab_default (button);
1965 gtk_widget_show_all (window);
1968 gtk_widget_destroy (window);
1976 create_pixmap (void)
1978 static GtkWidget *window = NULL;
1984 GtkWidget *separator;
1985 GtkWidget *pixmapwid;
1991 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1993 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1994 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
1997 gtk_window_set_title (GTK_WINDOW (window), "GtkPixmap");
1998 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
1999 gtk_widget_realize(window);
2001 box1 = gtk_vbox_new (FALSE, 0);
2002 gtk_container_add (GTK_CONTAINER (window), box1);
2004 box2 = gtk_vbox_new (FALSE, 10);
2005 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2006 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2008 button = gtk_button_new ();
2009 gtk_box_pack_start (GTK_BOX (box2), button, FALSE, FALSE, 0);
2011 pixmap = gdk_pixmap_create_from_xpm (window->window, &mask, NULL,
2013 pixmapwid = gtk_pixmap_new (pixmap, mask);
2014 gdk_pixmap_unref (pixmap);
2015 gdk_pixmap_unref (mask);
2017 label = gtk_label_new ("Pixmap\ntest");
2018 box3 = gtk_hbox_new (FALSE, 0);
2019 gtk_container_set_border_width (GTK_CONTAINER (box3), 2);
2020 gtk_container_add (GTK_CONTAINER (box3), pixmapwid);
2021 gtk_container_add (GTK_CONTAINER (box3), label);
2022 gtk_container_add (GTK_CONTAINER (button), box3);
2024 separator = gtk_hseparator_new ();
2025 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2027 box2 = gtk_vbox_new (FALSE, 10);
2028 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2029 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2031 button = gtk_button_new_with_label ("close");
2032 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2033 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2034 GTK_OBJECT (window));
2035 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2036 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2037 gtk_widget_grab_default (button);
2040 if (!GTK_WIDGET_VISIBLE (window))
2041 gtk_widget_show_all (window);
2043 gtk_widget_destroy (window);
2047 tips_query_widget_entered (GtkTipsQuery *tips_query,
2049 const gchar *tip_text,
2050 const gchar *tip_private,
2053 if (GTK_TOGGLE_BUTTON (toggle)->active)
2055 gtk_label_set_text (GTK_LABEL (tips_query), tip_text ? "There is a Tip!" : "There is no Tip!");
2056 /* don't let GtkTipsQuery reset its label */
2057 gtk_signal_emit_stop_by_name (GTK_OBJECT (tips_query), "widget_entered");
2062 tips_query_widget_selected (GtkWidget *tips_query,
2064 const gchar *tip_text,
2065 const gchar *tip_private,
2066 GdkEventButton *event,
2070 g_print ("Help \"%s\" requested for <%s>\n",
2071 tip_private ? tip_private : "None",
2072 gtk_type_name (GTK_OBJECT_TYPE (widget)));
2077 create_tooltips (void)
2079 static GtkWidget *window = NULL;
2086 GtkWidget *tips_query;
2087 GtkWidget *separator;
2088 GtkTooltips *tooltips;
2093 gtk_widget_new (gtk_window_get_type (),
2094 "GtkWindow::type", GTK_WINDOW_TOPLEVEL,
2095 "GtkContainer::border_width", 0,
2096 "GtkWindow::title", "Tooltips",
2097 "GtkWindow::allow_shrink", TRUE,
2098 "GtkWindow::allow_grow", FALSE,
2099 "GtkWindow::auto_shrink", TRUE,
2100 "GtkWidget::width", 200,
2103 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2104 GTK_SIGNAL_FUNC (destroy_tooltips),
2107 tooltips=gtk_tooltips_new();
2108 gtk_object_set_data (GTK_OBJECT (window), "tooltips", tooltips);
2110 box1 = gtk_vbox_new (FALSE, 0);
2111 gtk_container_add (GTK_CONTAINER (window), box1);
2113 box2 = gtk_vbox_new (FALSE, 10);
2114 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2115 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2117 button = gtk_toggle_button_new_with_label ("button1");
2118 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2120 gtk_tooltips_set_tip (tooltips,button,"This is button 1", "ContextHelp/buttons/1");
2122 button = gtk_toggle_button_new_with_label ("button2");
2123 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2125 gtk_tooltips_set_tip (tooltips,
2127 "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.",
2128 "ContextHelp/buttons/2_long");
2130 toggle = gtk_toggle_button_new_with_label ("Override TipsQuery Label");
2131 gtk_box_pack_start (GTK_BOX (box2), toggle, TRUE, TRUE, 0);
2133 gtk_tooltips_set_tip (tooltips, toggle, "Toggle TipsQuery view.", "Hi msw! ;)");
2136 gtk_widget_new (gtk_vbox_get_type (),
2137 "GtkBox::homogeneous", FALSE,
2138 "GtkBox::spacing", 5,
2139 "GtkContainer::border_width", 5,
2140 "GtkWidget::visible", TRUE,
2143 tips_query = gtk_tips_query_new ();
2146 gtk_widget_new (gtk_button_get_type (),
2147 "GtkButton::label", "[?]",
2148 "GtkWidget::visible", TRUE,
2149 "GtkWidget::parent", box3,
2150 "GtkObject::object_signal::clicked", gtk_tips_query_start_query, tips_query,
2152 gtk_box_set_child_packing (GTK_BOX (box3), button, FALSE, FALSE, 0, GTK_PACK_START);
2153 gtk_tooltips_set_tip (tooltips,
2155 "Start the Tooltips Inspector",
2156 "ContextHelp/buttons/?");
2159 gtk_widget_set (tips_query,
2160 "GtkWidget::visible", TRUE,
2161 "GtkWidget::parent", box3,
2162 "GtkTipsQuery::caller", button,
2163 "GtkObject::signal::widget_entered", tips_query_widget_entered, toggle,
2164 "GtkObject::signal::widget_selected", tips_query_widget_selected, NULL,
2168 gtk_widget_new (gtk_frame_get_type (),
2169 "GtkFrame::label", "ToolTips Inspector",
2170 "GtkFrame::label_xalign", (double) 0.5,
2171 "GtkContainer::border_width", 0,
2172 "GtkWidget::visible", TRUE,
2173 "GtkWidget::parent", box2,
2174 "GtkContainer::child", box3,
2176 gtk_box_set_child_packing (GTK_BOX (box2), frame, TRUE, TRUE, 10, GTK_PACK_START);
2178 separator = gtk_hseparator_new ();
2179 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2181 box2 = gtk_vbox_new (FALSE, 10);
2182 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2183 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2185 button = gtk_button_new_with_label ("close");
2186 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2187 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2188 GTK_OBJECT (window));
2189 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2190 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2191 gtk_widget_grab_default (button);
2193 gtk_tooltips_set_tip (tooltips, button, "Push this button to close window", "ContextHelp/buttons/Close");
2196 if (!GTK_WIDGET_VISIBLE (window))
2197 gtk_widget_show_all (window);
2199 gtk_widget_destroy (window);
2207 create_menu (gint depth, gboolean tearoff)
2210 GtkWidget *menuitem;
2218 menu = gtk_menu_new ();
2223 menuitem = gtk_tearoff_menu_item_new ();
2224 gtk_menu_append (GTK_MENU (menu), menuitem);
2225 gtk_widget_show (menuitem);
2228 for (i = 0, j = 1; i < 5; i++, j++)
2230 sprintf (buf, "item %2d - %d", depth, j);
2231 menuitem = gtk_radio_menu_item_new_with_label (group, buf);
2232 group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menuitem));
2234 gtk_check_menu_item_set_show_toggle (GTK_CHECK_MENU_ITEM (menuitem), TRUE);
2235 gtk_menu_append (GTK_MENU (menu), menuitem);
2236 gtk_widget_show (menuitem);
2238 gtk_widget_set_sensitive (menuitem, FALSE);
2240 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (depth - 1, TRUE));
2249 static GtkWidget *window = NULL;
2253 GtkWidget *optionmenu;
2254 GtkWidget *separator;
2260 GtkWidget *menuitem;
2261 GtkAccelGroup *accel_group;
2263 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2265 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2266 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2268 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
2269 GTK_SIGNAL_FUNC (gtk_true),
2272 accel_group = gtk_accel_group_new ();
2273 gtk_accel_group_attach (accel_group, GTK_OBJECT (window));
2275 gtk_window_set_title (GTK_WINDOW (window), "menus");
2276 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
2279 box1 = gtk_vbox_new (FALSE, 0);
2280 gtk_container_add (GTK_CONTAINER (window), box1);
2281 gtk_widget_show (box1);
2283 menubar = gtk_menu_bar_new ();
2284 gtk_box_pack_start (GTK_BOX (box1), menubar, FALSE, TRUE, 0);
2285 gtk_widget_show (menubar);
2287 menu = create_menu (2, TRUE);
2289 menuitem = gtk_menu_item_new_with_label ("test\nline2");
2290 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), menu);
2291 gtk_menu_bar_append (GTK_MENU_BAR (menubar), menuitem);
2292 gtk_widget_show (menuitem);
2294 menuitem = gtk_menu_item_new_with_label ("foo");
2295 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (3, TRUE));
2296 gtk_menu_bar_append (GTK_MENU_BAR (menubar), menuitem);
2297 gtk_widget_show (menuitem);
2299 menuitem = gtk_menu_item_new_with_label ("bar");
2300 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (4, TRUE));
2301 gtk_menu_item_right_justify (GTK_MENU_ITEM (menuitem));
2302 gtk_menu_bar_append (GTK_MENU_BAR (menubar), menuitem);
2303 gtk_widget_show (menuitem);
2305 box2 = gtk_vbox_new (FALSE, 10);
2306 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2307 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2308 gtk_widget_show (box2);
2310 menu = create_menu (1, FALSE);
2311 gtk_menu_set_accel_group (GTK_MENU (menu), accel_group);
2313 menuitem = gtk_check_menu_item_new_with_label ("Accelerate Me");
2314 gtk_menu_append (GTK_MENU (menu), menuitem);
2315 gtk_widget_show (menuitem);
2316 gtk_widget_add_accelerator (menuitem,
2321 GTK_ACCEL_VISIBLE | GTK_ACCEL_SIGNAL_VISIBLE);
2322 menuitem = gtk_check_menu_item_new_with_label ("Accelerator Locked");
2323 gtk_menu_append (GTK_MENU (menu), menuitem);
2324 gtk_widget_show (menuitem);
2325 gtk_widget_add_accelerator (menuitem,
2330 GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
2331 menuitem = gtk_check_menu_item_new_with_label ("Accelerators Frozen");
2332 gtk_menu_append (GTK_MENU (menu), menuitem);
2333 gtk_widget_show (menuitem);
2334 gtk_widget_add_accelerator (menuitem,
2340 gtk_widget_add_accelerator (menuitem,
2346 gtk_widget_lock_accelerators (menuitem);
2348 optionmenu = gtk_option_menu_new ();
2349 gtk_option_menu_set_menu (GTK_OPTION_MENU (optionmenu), menu);
2350 gtk_option_menu_set_history (GTK_OPTION_MENU (optionmenu), 3);
2351 gtk_box_pack_start (GTK_BOX (box2), optionmenu, TRUE, TRUE, 0);
2352 gtk_widget_show (optionmenu);
2354 separator = gtk_hseparator_new ();
2355 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2356 gtk_widget_show (separator);
2358 box2 = gtk_vbox_new (FALSE, 10);
2359 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2360 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2361 gtk_widget_show (box2);
2363 button = gtk_button_new_with_label ("close");
2364 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2365 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2366 GTK_OBJECT (window));
2367 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2368 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2369 gtk_widget_grab_default (button);
2370 gtk_widget_show (button);
2373 if (!GTK_WIDGET_VISIBLE (window))
2374 gtk_widget_show (window);
2376 gtk_widget_destroy (window);
2380 gtk_ifactory_cb (gpointer callback_data,
2381 guint callback_action,
2384 g_message ("ItemFactory: activated \"%s\"", gtk_item_factory_path_from_widget (widget));
2387 static GtkItemFactoryEntry menu_items[] =
2389 { "/_File", NULL, 0, 0, "<Branch>" },
2390 { "/File/tearoff1", NULL, gtk_ifactory_cb, 0, "<Tearoff>" },
2391 { "/File/_New", "<control>N", gtk_ifactory_cb, 0 },
2392 { "/File/_Open", "<control>O", gtk_ifactory_cb, 0 },
2393 { "/File/_Save", "<control>S", gtk_ifactory_cb, 0 },
2394 { "/File/Save _As...", NULL, gtk_ifactory_cb, 0 },
2395 { "/File/sep1", NULL, gtk_ifactory_cb, 0, "<Separator>" },
2396 { "/File/_Quit", "<control>Q", gtk_ifactory_cb, 0 },
2398 { "/_Preferences", NULL, 0, 0, "<Branch>" },
2399 { "/_Preferences/_Color", NULL, 0, 0, "<Branch>" },
2400 { "/_Preferences/Color/_Red", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
2401 { "/_Preferences/Color/_Green", NULL, gtk_ifactory_cb, 0, "/Preferences/Color/Red" },
2402 { "/_Preferences/Color/_Blue", NULL, gtk_ifactory_cb, 0, "/Preferences/Color/Red" },
2403 { "/_Preferences/_Shape", NULL, 0, 0, "<Branch>" },
2404 { "/_Preferences/Shape/_Square", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
2405 { "/_Preferences/Shape/_Rectangle", NULL, gtk_ifactory_cb, 0, "/Preferences/Shape/Square" },
2406 { "/_Preferences/Shape/_Oval", NULL, gtk_ifactory_cb, 0, "/Preferences/Shape/Rectangle" },
2408 { "/_Help", NULL, 0, 0, "<LastBranch>" },
2409 { "/Help/_About", NULL, gtk_ifactory_cb, 0 },
2412 static int nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]);
2415 create_item_factory (void)
2417 static GtkWidget *window = NULL;
2423 GtkWidget *separator;
2426 GtkAccelGroup *accel_group;
2427 GtkItemFactory *item_factory;
2429 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2431 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2432 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2434 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
2435 GTK_SIGNAL_FUNC (gtk_true),
2438 accel_group = gtk_accel_group_new ();
2439 item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>", accel_group);
2440 gtk_object_set_data_full (GTK_OBJECT (window),
2443 (GtkDestroyNotify) gtk_object_unref);
2444 gtk_accel_group_attach (accel_group, GTK_OBJECT (window));
2445 gtk_window_set_title (GTK_WINDOW (window), "Item Factory");
2446 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
2447 gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL);
2449 /* preselect /Preferences/Shape/Oval over the other radios
2451 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (gtk_item_factory_get_item (item_factory,
2452 "/Preferences/Shape/Oval")),
2455 box1 = gtk_vbox_new (FALSE, 0);
2456 gtk_container_add (GTK_CONTAINER (window), box1);
2458 gtk_box_pack_start (GTK_BOX (box1),
2459 gtk_item_factory_get_widget (item_factory, "<main>"),
2462 label = gtk_label_new ("Type\n<alt>\nto start");
2463 gtk_widget_set_usize (label, 200, 200);
2464 gtk_misc_set_alignment (GTK_MISC (label), 0.5, 0.5);
2465 gtk_box_pack_start (GTK_BOX (box1), label, TRUE, TRUE, 0);
2468 separator = gtk_hseparator_new ();
2469 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2472 box2 = gtk_vbox_new (FALSE, 10);
2473 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2474 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2476 button = gtk_button_new_with_label ("close");
2477 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2478 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2479 GTK_OBJECT (window));
2480 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2481 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2482 gtk_widget_grab_default (button);
2484 gtk_widget_show_all (window);
2487 gtk_widget_destroy (window);
2495 scrolled_windows_remove (GtkWidget *widget, GtkWidget *scrollwin)
2497 static GtkWidget *parent = NULL;
2498 static GtkWidget *float_parent;
2502 gtk_widget_reparent (scrollwin, parent);
2503 gtk_widget_destroy (float_parent);
2504 float_parent = NULL;
2509 parent = widget->parent;
2510 float_parent = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2511 gtk_widget_reparent (scrollwin, float_parent);
2512 gtk_widget_show (float_parent);
2521 cmw_destroy_cb(GtkWidget *widget)
2523 /* This is needed to get out of gtk_main */
2530 cmw_color (GtkWidget *widget, GtkWidget *parent)
2534 csd=gtk_color_selection_dialog_new ("This is a modal color selection dialog");
2537 gtk_window_set_modal (GTK_WINDOW(csd),TRUE);
2539 /* And mark it as a transient dialog */
2540 gtk_window_set_transient_for (GTK_WINDOW (csd), GTK_WINDOW (parent));
2542 gtk_signal_connect (GTK_OBJECT(csd), "destroy",
2543 GTK_SIGNAL_FUNC(cmw_destroy_cb),NULL);
2545 gtk_signal_connect_object (GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(csd)->ok_button),
2546 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
2548 gtk_signal_connect_object (GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(csd)->cancel_button),
2549 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
2552 /* wait until destroy calls gtk_main_quit */
2553 gtk_widget_show (csd);
2558 cmw_file (GtkWidget *widget, GtkWidget *parent)
2562 fs = gtk_file_selection_new("This is a modal file selection dialog");
2565 gtk_window_set_modal (GTK_WINDOW(fs),TRUE);
2567 /* And mark it as a transient dialog */
2568 gtk_window_set_transient_for (GTK_WINDOW (fs), GTK_WINDOW (parent));
2570 gtk_signal_connect (GTK_OBJECT(fs), "destroy",
2571 GTK_SIGNAL_FUNC(cmw_destroy_cb),NULL);
2573 gtk_signal_connect_object (GTK_OBJECT(GTK_FILE_SELECTION(fs)->ok_button),
2574 "clicked",GTK_SIGNAL_FUNC(gtk_widget_destroy),
2576 gtk_signal_connect_object (GTK_OBJECT(GTK_FILE_SELECTION(fs)->cancel_button),
2577 "clicked",GTK_SIGNAL_FUNC(gtk_widget_destroy),
2580 /* wait until destroy calls gtk_main_quit */
2581 gtk_widget_show (fs);
2588 create_modal_window (void)
2590 GtkWidget *window = NULL;
2591 GtkWidget *box1,*box2;
2593 GtkWidget *btnColor,*btnFile,*btnClose;
2595 /* Create modal window (Here you can use any window descendent )*/
2596 window=gtk_window_new (GTK_WINDOW_TOPLEVEL);
2597 gtk_window_set_title (GTK_WINDOW(window),"This window is modal");
2599 /* Set window as modal */
2600 gtk_window_set_modal (GTK_WINDOW(window),TRUE);
2602 /* Create widgets */
2603 box1 = gtk_vbox_new (FALSE,5);
2604 frame1 = gtk_frame_new ("Standard dialogs in modal form");
2605 box2 = gtk_vbox_new (TRUE,5);
2606 btnColor = gtk_button_new_with_label ("Color");
2607 btnFile = gtk_button_new_with_label ("File Selection");
2608 btnClose = gtk_button_new_with_label ("Close");
2611 gtk_container_set_border_width (GTK_CONTAINER(box1),3);
2612 gtk_container_set_border_width (GTK_CONTAINER(box2),3);
2615 gtk_container_add (GTK_CONTAINER (window), box1);
2616 gtk_box_pack_start (GTK_BOX (box1), frame1, TRUE, TRUE, 4);
2617 gtk_container_add (GTK_CONTAINER (frame1), box2);
2618 gtk_box_pack_start (GTK_BOX (box2), btnColor, FALSE, FALSE, 4);
2619 gtk_box_pack_start (GTK_BOX (box2), btnFile, FALSE, FALSE, 4);
2620 gtk_box_pack_start (GTK_BOX (box1), gtk_hseparator_new (), FALSE, FALSE, 4);
2621 gtk_box_pack_start (GTK_BOX (box1), btnClose, FALSE, FALSE, 4);
2623 /* connect signals */
2624 gtk_signal_connect_object (GTK_OBJECT (btnClose), "clicked",
2625 GTK_SIGNAL_FUNC (gtk_widget_destroy),
2626 GTK_OBJECT (window));
2628 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2629 GTK_SIGNAL_FUNC (cmw_destroy_cb),NULL);
2631 gtk_signal_connect (GTK_OBJECT (btnColor), "clicked",
2632 GTK_SIGNAL_FUNC (cmw_color),window);
2633 gtk_signal_connect (GTK_OBJECT (btnFile), "clicked",
2634 GTK_SIGNAL_FUNC (cmw_file),window);
2637 gtk_widget_show_all (window);
2639 /* wait until dialog get destroyed */
2648 create_scrolled_windows (void)
2650 static GtkWidget *window;
2651 GtkWidget *scrolled_window;
2659 window = gtk_dialog_new ();
2661 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2662 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2665 gtk_window_set_title (GTK_WINDOW (window), "dialog");
2666 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
2669 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
2670 gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10);
2671 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
2672 GTK_POLICY_AUTOMATIC,
2673 GTK_POLICY_AUTOMATIC);
2674 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
2675 scrolled_window, TRUE, TRUE, 0);
2676 gtk_widget_show (scrolled_window);
2678 table = gtk_table_new (20, 20, FALSE);
2679 gtk_table_set_row_spacings (GTK_TABLE (table), 10);
2680 gtk_table_set_col_spacings (GTK_TABLE (table), 10);
2681 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), table);
2682 gtk_container_set_focus_hadjustment (GTK_CONTAINER (table),
2683 gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
2684 gtk_container_set_focus_vadjustment (GTK_CONTAINER (table),
2685 gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
2686 gtk_widget_show (table);
2688 for (i = 0; i < 20; i++)
2689 for (j = 0; j < 20; j++)
2691 sprintf (buffer, "button (%d,%d)\n", i, j);
2692 button = gtk_toggle_button_new_with_label (buffer);
2693 gtk_table_attach_defaults (GTK_TABLE (table), button,
2695 gtk_widget_show (button);
2699 button = gtk_button_new_with_label ("close");
2700 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2701 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2702 GTK_OBJECT (window));
2703 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2704 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
2705 button, TRUE, TRUE, 0);
2706 gtk_widget_grab_default (button);
2707 gtk_widget_show (button);
2709 button = gtk_button_new_with_label ("remove");
2710 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2711 GTK_SIGNAL_FUNC(scrolled_windows_remove),
2712 GTK_OBJECT (scrolled_window));
2713 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2714 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
2715 button, TRUE, TRUE, 0);
2716 gtk_widget_grab_default (button);
2717 gtk_widget_show (button);
2719 gtk_window_set_default_size (GTK_WINDOW (window), 300, 300);
2722 if (!GTK_WIDGET_VISIBLE (window))
2723 gtk_widget_show (window);
2725 gtk_widget_destroy (window);
2733 entry_toggle_editable (GtkWidget *checkbutton,
2736 gtk_entry_set_editable(GTK_ENTRY(entry),
2737 GTK_TOGGLE_BUTTON(checkbutton)->active);
2741 entry_toggle_sensitive (GtkWidget *checkbutton,
2744 gtk_widget_set_sensitive (entry, GTK_TOGGLE_BUTTON(checkbutton)->active);
2748 entry_toggle_visibility (GtkWidget *checkbutton,
2751 gtk_entry_set_visibility(GTK_ENTRY(entry),
2752 GTK_TOGGLE_BUTTON(checkbutton)->active);
2758 static GtkWidget *window = NULL;
2761 GtkWidget *editable_check;
2762 GtkWidget *sensitive_check;
2763 GtkWidget *entry, *cb;
2765 GtkWidget *separator;
2766 GList *cbitems = NULL;
2770 cbitems = g_list_append(cbitems, "item0");
2771 cbitems = g_list_append(cbitems, "item1 item1");
2772 cbitems = g_list_append(cbitems, "item2 item2 item2");
2773 cbitems = g_list_append(cbitems, "item3 item3 item3 item3");
2774 cbitems = g_list_append(cbitems, "item4 item4 item4 item4 item4");
2775 cbitems = g_list_append(cbitems, "item5 item5 item5 item5 item5 item5");
2776 cbitems = g_list_append(cbitems, "item6 item6 item6 item6 item6");
2777 cbitems = g_list_append(cbitems, "item7 item7 item7 item7");
2778 cbitems = g_list_append(cbitems, "item8 item8 item8");
2779 cbitems = g_list_append(cbitems, "item9 item9");
2781 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2783 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2784 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2787 gtk_window_set_title (GTK_WINDOW (window), "entry");
2788 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
2791 box1 = gtk_vbox_new (FALSE, 0);
2792 gtk_container_add (GTK_CONTAINER (window), box1);
2793 gtk_widget_show (box1);
2796 box2 = gtk_vbox_new (FALSE, 10);
2797 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2798 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2799 gtk_widget_show (box2);
2801 entry = gtk_entry_new ();
2802 gtk_entry_set_text (GTK_ENTRY (entry), "hello world");
2803 gtk_editable_select_region (GTK_EDITABLE (entry), 0, 5);
2804 gtk_box_pack_start (GTK_BOX (box2), entry, TRUE, TRUE, 0);
2805 gtk_widget_show (entry);
2807 cb = gtk_combo_new ();
2808 gtk_combo_set_popdown_strings (GTK_COMBO (cb), cbitems);
2809 gtk_entry_set_text (GTK_ENTRY (GTK_COMBO(cb)->entry), "hello world");
2810 gtk_editable_select_region (GTK_EDITABLE (GTK_COMBO(cb)->entry),
2812 gtk_box_pack_start (GTK_BOX (box2), cb, TRUE, TRUE, 0);
2813 gtk_widget_show (cb);
2815 editable_check = gtk_check_button_new_with_label("Editable");
2816 gtk_box_pack_start (GTK_BOX (box2), editable_check, FALSE, TRUE, 0);
2817 gtk_signal_connect (GTK_OBJECT(editable_check), "toggled",
2818 GTK_SIGNAL_FUNC(entry_toggle_editable), entry);
2819 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(editable_check), TRUE);
2820 gtk_widget_show (editable_check);
2822 editable_check = gtk_check_button_new_with_label("Visible");
2823 gtk_box_pack_start (GTK_BOX (box2), editable_check, FALSE, TRUE, 0);
2824 gtk_signal_connect (GTK_OBJECT(editable_check), "toggled",
2825 GTK_SIGNAL_FUNC(entry_toggle_visibility), entry);
2826 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(editable_check), TRUE);
2827 gtk_widget_show (editable_check);
2829 sensitive_check = gtk_check_button_new_with_label("Sensitive");
2830 gtk_box_pack_start (GTK_BOX (box2), sensitive_check, FALSE, TRUE, 0);
2831 gtk_signal_connect (GTK_OBJECT(sensitive_check), "toggled",
2832 GTK_SIGNAL_FUNC(entry_toggle_sensitive), entry);
2833 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(sensitive_check), TRUE);
2834 gtk_widget_show (sensitive_check);
2836 separator = gtk_hseparator_new ();
2837 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2838 gtk_widget_show (separator);
2841 box2 = gtk_vbox_new (FALSE, 10);
2842 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2843 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2844 gtk_widget_show (box2);
2847 button = gtk_button_new_with_label ("close");
2848 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2849 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2850 GTK_OBJECT (window));
2851 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2852 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2853 gtk_widget_grab_default (button);
2854 gtk_widget_show (button);
2857 if (!GTK_WIDGET_VISIBLE (window))
2858 gtk_widget_show (window);
2860 gtk_widget_destroy (window);
2867 static GtkWidget *spinner1;
2870 toggle_snap (GtkWidget *widget, GtkSpinButton *spin)
2872 gtk_spin_button_set_snap_to_ticks (spin, GTK_TOGGLE_BUTTON (widget)->active);
2876 toggle_numeric (GtkWidget *widget, GtkSpinButton *spin)
2878 gtk_spin_button_set_numeric (spin, GTK_TOGGLE_BUTTON (widget)->active);
2882 change_digits (GtkWidget *widget, GtkSpinButton *spin)
2884 gtk_spin_button_set_digits (GTK_SPIN_BUTTON (spinner1),
2885 gtk_spin_button_get_value_as_int (spin));
2889 get_value (GtkWidget *widget, gpointer data)
2893 GtkSpinButton *spin;
2895 spin = GTK_SPIN_BUTTON (spinner1);
2896 label = GTK_LABEL (gtk_object_get_user_data (GTK_OBJECT (widget)));
2897 if (GPOINTER_TO_INT (data) == 1)
2898 sprintf (buf, "%d", gtk_spin_button_get_value_as_int (spin));
2900 sprintf (buf, "%0.*f", spin->digits,
2901 gtk_spin_button_get_value_as_float (spin));
2902 gtk_label_set_text (label, buf);
2906 spin_button_time_output_func (GtkSpinButton *spin_button)
2908 static gchar buf[6];
2912 hours = spin_button->adjustment->value / 60.0;
2913 minutes = (fabs(floor (hours) - hours) < 1e-5) ? 0.0 : 30;
2914 sprintf (buf, "%02.0f:%02.0f", floor (hours), minutes);
2915 if (strcmp (buf, gtk_entry_get_text (GTK_ENTRY (spin_button))))
2916 gtk_entry_set_text (GTK_ENTRY (spin_button), buf);
2921 spin_button_month_input_func (GtkSpinButton *spin_button,
2925 static gchar *month[12] = { "January", "February", "March", "April",
2926 "May", "June", "July", "August",
2927 "September", "October", "November", "December" };
2929 gboolean found = FALSE;
2931 for (i = 1; i <= 12; i++)
2933 tmp1 = g_strdup (month[i-1]);
2935 tmp2 = g_strdup (gtk_entry_get_text (GTK_ENTRY (spin_button)));
2937 if (strstr (tmp1, tmp2) == tmp1)
2949 *new_val = (gfloat) i;
2954 spin_button_month_output_func (GtkSpinButton *spin_button)
2957 static gchar *month[12] = { "January", "February", "March", "April",
2958 "May", "June", "July", "August", "September",
2959 "October", "November", "December" };
2961 for (i = 1; i <= 12; i++)
2962 if (fabs (spin_button->adjustment->value - (double)i) < 1e-5)
2964 if (strcmp (month[i-1], gtk_entry_get_text (GTK_ENTRY (spin_button))))
2965 gtk_entry_set_text (GTK_ENTRY (spin_button), month[i-1]);
2971 spin_button_hex_input_func (GtkSpinButton *spin_button,
2978 buf = gtk_entry_get_text (GTK_ENTRY (spin_button));
2979 res = (gfloat)(strtol(buf, &err, 16));
2988 spin_button_hex_output_func (GtkSpinButton *spin_button)
2990 static gchar buf[7];
2993 val = (gint) spin_button->adjustment->value;
2994 if (fabs (val) < 1e-5)
2995 sprintf (buf, "0x00");
2997 sprintf (buf, "0x%.2X", val);
2998 if (strcmp (buf, gtk_entry_get_text (GTK_ENTRY (spin_button))))
2999 gtk_entry_set_text (GTK_ENTRY (spin_button), buf);
3006 static GtkWidget *window = NULL;
3009 GtkWidget *main_vbox;
3012 GtkWidget *spinner2;
3016 GtkWidget *val_label;
3021 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3023 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3024 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
3027 gtk_window_set_title (GTK_WINDOW (window), "GtkSpinButton");
3029 main_vbox = gtk_vbox_new (FALSE, 5);
3030 gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 10);
3031 gtk_container_add (GTK_CONTAINER (window), main_vbox);
3033 frame = gtk_frame_new ("Not accelerated");
3034 gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0);
3036 vbox = gtk_vbox_new (FALSE, 0);
3037 gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
3038 gtk_container_add (GTK_CONTAINER (frame), vbox);
3040 /* Time, month, hex spinners */
3042 hbox = gtk_hbox_new (FALSE, 0);
3043 gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 5);
3045 vbox2 = gtk_vbox_new (FALSE, 0);
3046 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
3048 label = gtk_label_new ("Time :");
3049 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
3050 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
3052 adj = (GtkAdjustment *) gtk_adjustment_new (0, 0, 1410, 30, 60, 0);
3053 spinner = gtk_spin_button_new (adj, 0, 0);
3054 gtk_editable_set_editable (GTK_EDITABLE (spinner), FALSE);
3055 gtk_signal_connect (GTK_OBJECT (spinner),
3057 GTK_SIGNAL_FUNC (spin_button_time_output_func),
3059 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
3060 gtk_widget_set_usize (spinner, 55, -1);
3061 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
3063 vbox2 = gtk_vbox_new (FALSE, 0);
3064 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
3066 label = gtk_label_new ("Month :");
3067 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
3068 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
3070 adj = (GtkAdjustment *) gtk_adjustment_new (1.0, 1.0, 12.0, 1.0,
3072 spinner = gtk_spin_button_new (adj, 0, 0);
3073 gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (spinner),
3074 GTK_UPDATE_IF_VALID);
3075 gtk_signal_connect (GTK_OBJECT (spinner),
3077 GTK_SIGNAL_FUNC (spin_button_month_input_func),
3079 gtk_signal_connect (GTK_OBJECT (spinner),
3081 GTK_SIGNAL_FUNC (spin_button_month_output_func),
3083 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
3084 gtk_widget_set_usize (spinner, 85, -1);
3085 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
3087 vbox2 = gtk_vbox_new (FALSE, 0);
3088 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
3090 label = gtk_label_new ("Hex :");
3091 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
3092 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
3094 adj = (GtkAdjustment *) gtk_adjustment_new (0, 0, 255, 1, 16, 0);
3095 spinner = gtk_spin_button_new (adj, 0, 0);
3096 gtk_editable_set_editable (GTK_EDITABLE (spinner), TRUE);
3097 gtk_signal_connect (GTK_OBJECT (spinner),
3099 GTK_SIGNAL_FUNC (spin_button_hex_input_func),
3101 gtk_signal_connect (GTK_OBJECT (spinner),
3103 GTK_SIGNAL_FUNC (spin_button_hex_output_func),
3105 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
3106 gtk_widget_set_usize (spinner, 55, 0);
3107 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
3109 frame = gtk_frame_new ("Accelerated");
3110 gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0);
3112 vbox = gtk_vbox_new (FALSE, 0);
3113 gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
3114 gtk_container_add (GTK_CONTAINER (frame), vbox);
3116 hbox = gtk_hbox_new (FALSE, 0);
3117 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
3119 vbox2 = gtk_vbox_new (FALSE, 0);
3120 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
3122 label = gtk_label_new ("Value :");
3123 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
3124 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
3126 adj = (GtkAdjustment *) gtk_adjustment_new (0.0, -10000.0, 10000.0,
3128 spinner1 = gtk_spin_button_new (adj, 1.0, 2);
3129 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner1), TRUE);
3130 gtk_widget_set_usize (spinner1, 100, 0);
3131 gtk_box_pack_start (GTK_BOX (vbox2), spinner1, FALSE, TRUE, 0);
3133 vbox2 = gtk_vbox_new (FALSE, 0);
3134 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
3136 label = gtk_label_new ("Digits :");
3137 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
3138 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
3140 adj = (GtkAdjustment *) gtk_adjustment_new (2, 1, 5, 1, 1, 0);
3141 spinner2 = gtk_spin_button_new (adj, 0.0, 0);
3142 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
3143 GTK_SIGNAL_FUNC (change_digits),
3144 (gpointer) spinner2);
3145 gtk_box_pack_start (GTK_BOX (vbox2), spinner2, FALSE, TRUE, 0);
3147 hbox = gtk_hbox_new (FALSE, 0);
3148 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
3150 button = gtk_check_button_new_with_label ("Snap to 0.5-ticks");
3151 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3152 GTK_SIGNAL_FUNC (toggle_snap),
3154 gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
3155 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
3157 button = gtk_check_button_new_with_label ("Numeric only input mode");
3158 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3159 GTK_SIGNAL_FUNC (toggle_numeric),
3161 gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
3162 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
3164 val_label = gtk_label_new ("");
3166 hbox = gtk_hbox_new (FALSE, 0);
3167 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
3169 button = gtk_button_new_with_label ("Value as Int");
3170 gtk_object_set_user_data (GTK_OBJECT (button), val_label);
3171 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3172 GTK_SIGNAL_FUNC (get_value),
3173 GINT_TO_POINTER (1));
3174 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
3176 button = gtk_button_new_with_label ("Value as Float");
3177 gtk_object_set_user_data (GTK_OBJECT (button), val_label);
3178 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3179 GTK_SIGNAL_FUNC (get_value),
3180 GINT_TO_POINTER (2));
3181 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
3183 gtk_box_pack_start (GTK_BOX (vbox), val_label, TRUE, TRUE, 0);
3184 gtk_label_set_text (GTK_LABEL (val_label), "0");
3186 hbox = gtk_hbox_new (FALSE, 0);
3187 gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
3189 button = gtk_button_new_with_label ("Close");
3190 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
3191 GTK_SIGNAL_FUNC (gtk_widget_destroy),
3192 GTK_OBJECT (window));
3193 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
3196 if (!GTK_WIDGET_VISIBLE (window))
3197 gtk_widget_show_all (window);
3199 gtk_widget_destroy (window);
3208 cursor_expose_event (GtkWidget *widget,
3212 GtkDrawingArea *darea;
3213 GdkDrawable *drawable;
3220 g_return_val_if_fail (widget != NULL, TRUE);
3221 g_return_val_if_fail (GTK_IS_DRAWING_AREA (widget), TRUE);
3223 darea = GTK_DRAWING_AREA (widget);
3224 drawable = widget->window;
3225 white_gc = widget->style->white_gc;
3226 gray_gc = widget->style->bg_gc[GTK_STATE_NORMAL];
3227 black_gc = widget->style->black_gc;
3228 max_width = widget->allocation.width;
3229 max_height = widget->allocation.height;
3231 gdk_draw_rectangle (drawable, white_gc,
3238 gdk_draw_rectangle (drawable, black_gc,
3245 gdk_draw_rectangle (drawable, gray_gc,
3256 set_cursor (GtkWidget *spinner,
3264 c = CLAMP (gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spinner)), 0, 152);
3267 label = gtk_object_get_user_data (GTK_OBJECT (spinner));
3268 vals = gtk_type_enum_get_values (GTK_TYPE_GDK_CURSOR_TYPE);
3269 while (vals && vals->value != c)
3272 gtk_label_set_text (GTK_LABEL (label), vals->value_nick);
3274 gtk_label_set_text (GTK_LABEL (label), "<unknown>");
3276 cursor = gdk_cursor_new (c);
3277 gdk_window_set_cursor (widget->window, cursor);
3278 gdk_cursor_unref (cursor);
3282 cursor_event (GtkWidget *widget,
3284 GtkSpinButton *spinner)
3286 if ((event->type == GDK_BUTTON_PRESS) &&
3287 ((event->button.button == 1) ||
3288 (event->button.button == 3)))
3290 gtk_spin_button_spin (spinner, event->button.button == 1 ?
3291 GTK_SPIN_STEP_FORWARD : GTK_SPIN_STEP_BACKWARD, 0);
3299 create_cursors (void)
3301 static GtkWidget *window = NULL;
3304 GtkWidget *main_vbox;
3315 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3317 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3318 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
3321 gtk_window_set_title (GTK_WINDOW (window), "Cursors");
3323 main_vbox = gtk_vbox_new (FALSE, 5);
3324 gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 0);
3325 gtk_container_add (GTK_CONTAINER (window), main_vbox);
3328 gtk_widget_new (gtk_vbox_get_type (),
3329 "GtkBox::homogeneous", FALSE,
3330 "GtkBox::spacing", 5,
3331 "GtkContainer::border_width", 10,
3332 "GtkWidget::parent", main_vbox,
3333 "GtkWidget::visible", TRUE,
3336 hbox = gtk_hbox_new (FALSE, 0);
3337 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
3338 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
3340 label = gtk_label_new ("Cursor Value : ");
3341 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
3342 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
3344 adj = (GtkAdjustment *) gtk_adjustment_new (0,
3348 spinner = gtk_spin_button_new (adj, 0, 0);
3349 gtk_box_pack_start (GTK_BOX (hbox), spinner, TRUE, TRUE, 0);
3352 gtk_widget_new (gtk_frame_get_type (),
3353 "GtkFrame::shadow", GTK_SHADOW_ETCHED_IN,
3354 "GtkFrame::label_xalign", 0.5,
3355 "GtkFrame::label", "Cursor Area",
3356 "GtkContainer::border_width", 10,
3357 "GtkWidget::parent", vbox,
3358 "GtkWidget::visible", TRUE,
3361 darea = gtk_drawing_area_new ();
3362 gtk_widget_set_usize (darea, 80, 80);
3363 gtk_container_add (GTK_CONTAINER (frame), darea);
3364 gtk_signal_connect (GTK_OBJECT (darea),
3366 GTK_SIGNAL_FUNC (cursor_expose_event),
3368 gtk_widget_set_events (darea, GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK);
3369 gtk_signal_connect (GTK_OBJECT (darea),
3370 "button_press_event",
3371 GTK_SIGNAL_FUNC (cursor_event),
3373 gtk_widget_show (darea);
3375 gtk_signal_connect (GTK_OBJECT (spinner), "changed",
3376 GTK_SIGNAL_FUNC (set_cursor),
3379 label = gtk_widget_new (GTK_TYPE_LABEL,
3384 gtk_container_child_set (GTK_CONTAINER (vbox), label,
3387 gtk_object_set_user_data (GTK_OBJECT (spinner), label);
3390 gtk_widget_new (gtk_hseparator_get_type (),
3391 "GtkWidget::visible", TRUE,
3393 gtk_box_pack_start (GTK_BOX (main_vbox), any, FALSE, TRUE, 0);
3395 hbox = gtk_hbox_new (FALSE, 0);
3396 gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
3397 gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
3399 button = gtk_button_new_with_label ("Close");
3400 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
3401 GTK_SIGNAL_FUNC (gtk_widget_destroy),
3402 GTK_OBJECT (window));
3403 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
3405 gtk_widget_show_all (window);
3407 set_cursor (spinner, darea);
3410 gtk_widget_destroy (window);
3418 list_add (GtkWidget *widget,
3423 GtkWidget *list_item;
3424 GtkContainer *container;
3426 container = GTK_CONTAINER (list);
3428 sprintf (buffer, "added item %d", i++);
3429 list_item = gtk_list_item_new_with_label (buffer);
3430 gtk_widget_show (list_item);
3432 gtk_container_add (container, list_item);
3436 list_remove (GtkWidget *widget,
3439 GList *clear_list = NULL;
3440 GList *sel_row = NULL;
3443 if (list->selection_mode == GTK_SELECTION_EXTENDED)
3447 item = GTK_CONTAINER (list)->focus_child;
3448 if (!item && list->selection)
3449 item = list->selection->data;
3453 work = g_list_find (list->children, item);
3454 for (sel_row = work; sel_row; sel_row = sel_row->next)
3455 if (GTK_WIDGET (sel_row->data)->state != GTK_STATE_SELECTED)
3460 for (sel_row = work; sel_row; sel_row = sel_row->prev)
3461 if (GTK_WIDGET (sel_row->data)->state != GTK_STATE_SELECTED)
3467 for (work = list->selection; work; work = work->next)
3468 clear_list = g_list_prepend (clear_list, work->data);
3470 clear_list = g_list_reverse (clear_list);
3471 gtk_list_remove_items (GTK_LIST (list), clear_list);
3472 g_list_free (clear_list);
3474 if (list->selection_mode == GTK_SELECTION_EXTENDED && sel_row)
3475 gtk_list_select_child (list, GTK_WIDGET(sel_row->data));
3479 list_clear (GtkWidget *widget,
3482 gtk_list_clear_items (GTK_LIST (list), 0, -1);
3485 #define RADIOMENUTOGGLED(_rmi_, __i) { \
3488 __g = gtk_radio_menu_item_group(_rmi_); \
3489 while( __g && !((GtkCheckMenuItem *)(__g->data))->active) { \
3495 static GtkWidget *list_omenu;
3498 list_toggle_sel_mode (GtkWidget *widget, GtkList *list)
3502 if (!GTK_WIDGET_MAPPED (widget))
3505 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
3506 (((GtkOptionMenu *)list_omenu)->menu_item), i);
3508 gtk_list_set_selection_mode (list, (GtkSelectionMode) (3-i));
3514 static GtkWidget *window = NULL;
3516 static OptionMenuItem items[] =
3518 { "Single", list_toggle_sel_mode },
3519 { "Browse", list_toggle_sel_mode },
3520 { "Multiple", list_toggle_sel_mode },
3521 { "Extended", list_toggle_sel_mode }
3530 GtkWidget *scrolled_win;
3533 GtkWidget *separator;
3536 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3538 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3539 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
3542 gtk_window_set_title (GTK_WINDOW (window), "list");
3543 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
3545 vbox = gtk_vbox_new (FALSE, 0);
3546 gtk_container_add (GTK_CONTAINER (window), vbox);
3548 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
3549 gtk_container_set_border_width (GTK_CONTAINER (scrolled_win), 5);
3550 gtk_widget_set_usize (scrolled_win, -1, 300);
3551 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
3552 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
3553 GTK_POLICY_AUTOMATIC,
3554 GTK_POLICY_AUTOMATIC);
3556 list = gtk_list_new ();
3557 gtk_list_set_selection_mode (GTK_LIST (list), GTK_SELECTION_EXTENDED);
3558 gtk_scrolled_window_add_with_viewport
3559 (GTK_SCROLLED_WINDOW (scrolled_win), list);
3560 gtk_container_set_focus_vadjustment
3561 (GTK_CONTAINER (list),
3562 gtk_scrolled_window_get_vadjustment
3563 (GTK_SCROLLED_WINDOW (scrolled_win)));
3564 gtk_container_set_focus_hadjustment
3565 (GTK_CONTAINER (list),
3566 gtk_scrolled_window_get_hadjustment
3567 (GTK_SCROLLED_WINDOW (scrolled_win)));
3569 if ((infile = fopen("gtkenums.h", "r")))
3575 while (fgets (buffer, 256, infile))
3577 if ((pos = strchr (buffer, '\n')))
3579 item = gtk_list_item_new_with_label (buffer);
3580 gtk_container_add (GTK_CONTAINER (list), item);
3587 hbox = gtk_hbox_new (TRUE, 5);
3588 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
3589 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
3591 button = gtk_button_new_with_label ("Insert Row");
3592 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
3593 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3594 GTK_SIGNAL_FUNC (list_add),
3597 button = gtk_button_new_with_label ("Clear List");
3598 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
3599 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3600 GTK_SIGNAL_FUNC (list_clear),
3603 button = gtk_button_new_with_label ("Remove Selection");
3604 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
3605 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3606 GTK_SIGNAL_FUNC (list_remove),
3609 cbox = gtk_hbox_new (FALSE, 0);
3610 gtk_box_pack_start (GTK_BOX (vbox), cbox, FALSE, TRUE, 0);
3612 hbox = gtk_hbox_new (FALSE, 5);
3613 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
3614 gtk_box_pack_start (GTK_BOX (cbox), hbox, TRUE, FALSE, 0);
3616 label = gtk_label_new ("Selection Mode :");
3617 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
3619 list_omenu = build_option_menu (items, 4, 3, list);
3620 gtk_box_pack_start (GTK_BOX (hbox), list_omenu, FALSE, TRUE, 0);
3622 separator = gtk_hseparator_new ();
3623 gtk_box_pack_start (GTK_BOX (vbox), separator, FALSE, TRUE, 0);
3625 cbox = gtk_hbox_new (FALSE, 0);
3626 gtk_box_pack_start (GTK_BOX (vbox), cbox, FALSE, TRUE, 0);
3628 button = gtk_button_new_with_label ("close");
3629 gtk_container_set_border_width (GTK_CONTAINER (button), 10);
3630 gtk_box_pack_start (GTK_BOX (cbox), button, TRUE, TRUE, 0);
3631 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
3632 GTK_SIGNAL_FUNC(gtk_widget_destroy),
3633 GTK_OBJECT (window));
3635 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
3636 gtk_widget_grab_default (button);
3639 if (!GTK_WIDGET_VISIBLE (window))
3640 gtk_widget_show_all (window);
3642 gtk_widget_destroy (window);
3649 static char * book_open_xpm[] = {
3672 static char * book_closed_xpm[] = {
3697 static char * mini_page_xpm[] = {
3720 static char * gtk_mini_xpm[] = {
3760 #define TESTGTK_CLIST_COLUMNS 12
3761 static gint clist_rows = 0;
3762 static GtkWidget *clist_omenu;
3765 add1000_clist (GtkWidget *widget, gpointer data)
3768 char text[TESTGTK_CLIST_COLUMNS][50];
3769 char *texts[TESTGTK_CLIST_COLUMNS];
3774 clist = GTK_CLIST (data);
3776 pixmap = gdk_pixmap_create_from_xpm_d (clist->clist_window,
3778 >K_WIDGET (data)->style->white,
3781 for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++)
3784 sprintf (text[i], "Column %d", i);
3788 sprintf (text[1], "Right");
3789 sprintf (text[2], "Center");
3791 gtk_clist_freeze (GTK_CLIST (data));
3792 for (i = 0; i < 1000; i++)
3794 sprintf (text[0], "CListRow %d", rand() % 10000);
3795 row = gtk_clist_append (clist, texts);
3796 gtk_clist_set_pixtext (clist, row, 3, "gtk+", 5, pixmap, mask);
3799 gtk_clist_thaw (GTK_CLIST (data));
3801 gdk_pixmap_unref (pixmap);
3802 gdk_bitmap_unref (mask);
3806 add10000_clist (GtkWidget *widget, gpointer data)
3809 char text[TESTGTK_CLIST_COLUMNS][50];
3810 char *texts[TESTGTK_CLIST_COLUMNS];
3812 for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++)
3815 sprintf (text[i], "Column %d", i);
3818 sprintf (text[1], "Right");
3819 sprintf (text[2], "Center");
3821 gtk_clist_freeze (GTK_CLIST (data));
3822 for (i = 0; i < 10000; i++)
3824 sprintf (text[0], "CListRow %d", rand() % 10000);
3825 gtk_clist_append (GTK_CLIST (data), texts);
3827 gtk_clist_thaw (GTK_CLIST (data));
3831 clear_clist (GtkWidget *widget, gpointer data)
3833 gtk_clist_clear (GTK_CLIST (data));
3837 void clist_remove_selection (GtkWidget *widget, GtkCList *clist)
3839 gtk_clist_freeze (clist);
3841 while (clist->selection)
3846 row = GPOINTER_TO_INT (clist->selection->data);
3848 gtk_clist_remove (clist, row);
3850 if (clist->selection_mode == GTK_SELECTION_BROWSE)
3854 if (clist->selection_mode == GTK_SELECTION_EXTENDED && !clist->selection &&
3855 clist->focus_row >= 0)
3856 gtk_clist_select_row (clist, clist->focus_row, -1);
3858 gtk_clist_thaw (clist);
3861 void toggle_title_buttons (GtkWidget *widget, GtkCList *clist)
3863 if (GTK_TOGGLE_BUTTON (widget)->active)
3864 gtk_clist_column_titles_show (clist);
3866 gtk_clist_column_titles_hide (clist);
3869 void toggle_reorderable (GtkWidget *widget, GtkCList *clist)
3871 gtk_clist_set_reorderable (clist, GTK_TOGGLE_BUTTON (widget)->active);
3875 insert_row_clist (GtkWidget *widget, gpointer data)
3877 static char *text[] =
3879 "This", "is an", "inserted", "row.",
3880 "This", "is an", "inserted", "row.",
3881 "This", "is an", "inserted", "row."
3884 static GtkStyle *style1 = NULL;
3885 static GtkStyle *style2 = NULL;
3886 static GtkStyle *style3 = NULL;
3889 if (GTK_CLIST (data)->focus_row >= 0)
3890 row = gtk_clist_insert (GTK_CLIST (data), GTK_CLIST (data)->focus_row,
3893 row = gtk_clist_prepend (GTK_CLIST (data), text);
3907 style1 = gtk_style_copy (GTK_WIDGET (data)->style);
3908 style1->base[GTK_STATE_NORMAL] = col1;
3909 style1->base[GTK_STATE_SELECTED] = col2;
3911 style2 = gtk_style_copy (GTK_WIDGET (data)->style);
3912 style2->fg[GTK_STATE_NORMAL] = col1;
3913 style2->fg[GTK_STATE_SELECTED] = col2;
3915 style3 = gtk_style_copy (GTK_WIDGET (data)->style);
3916 style3->fg[GTK_STATE_NORMAL] = col1;
3917 style3->base[GTK_STATE_NORMAL] = col2;
3918 gdk_font_unref (style3->font);
3920 gdk_font_load ("-*-courier-medium-*-*-*-*-120-*-*-*-*-*-*");
3923 gtk_clist_set_cell_style (GTK_CLIST (data), row, 3, style1);
3924 gtk_clist_set_cell_style (GTK_CLIST (data), row, 4, style2);
3925 gtk_clist_set_cell_style (GTK_CLIST (data), row, 0, style3);
3931 clist_warning_test (GtkWidget *button,
3935 static gboolean add_remove = FALSE;
3937 add_remove = !add_remove;
3939 child = gtk_label_new ("Test");
3940 gtk_widget_ref (child);
3941 gtk_object_sink (GTK_OBJECT (child));
3944 gtk_container_add (GTK_CONTAINER (clist), child);
3947 child->parent = clist;
3948 gtk_container_remove (GTK_CONTAINER (clist), child);
3949 child->parent = NULL;
3952 gtk_widget_destroy (child);
3953 gtk_widget_unref (child);
3957 undo_selection (GtkWidget *button, GtkCList *clist)
3959 gtk_clist_undo_selection (clist);
3963 clist_toggle_sel_mode (GtkWidget *widget, GtkCList *clist)
3967 if (!GTK_WIDGET_MAPPED (widget))
3970 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
3971 (((GtkOptionMenu *)clist_omenu)->menu_item), i);
3973 gtk_clist_set_selection_mode (clist, (GtkSelectionMode) (3-i));
3977 clist_click_column (GtkCList *clist, gint column, gpointer data)
3980 gtk_clist_set_column_visibility (clist, column, FALSE);
3981 else if (column == clist->sort_column)
3983 if (clist->sort_type == GTK_SORT_ASCENDING)
3984 clist->sort_type = GTK_SORT_DESCENDING;
3986 clist->sort_type = GTK_SORT_ASCENDING;
3989 gtk_clist_set_sort_column (clist, column);
3991 gtk_clist_sort (clist);
3998 static GtkWidget *window = NULL;
4000 static char *titles[] =
4002 "auto resize", "not resizeable", "max width 100", "min width 50",
4003 "hide column", "Title 5", "Title 6", "Title 7",
4004 "Title 8", "Title 9", "Title 10", "Title 11"
4007 static OptionMenuItem items[] =
4009 { "Single", clist_toggle_sel_mode },
4010 { "Browse", clist_toggle_sel_mode },
4011 { "Multiple", clist_toggle_sel_mode },
4012 { "Extended", clist_toggle_sel_mode }
4015 char text[TESTGTK_CLIST_COLUMNS][50];
4016 char *texts[TESTGTK_CLIST_COLUMNS];
4022 GtkWidget *separator;
4023 GtkWidget *scrolled_win;
4026 GtkWidget *undo_button;
4036 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
4038 gtk_signal_connect (GTK_OBJECT (window), "destroy",
4039 GTK_SIGNAL_FUNC (gtk_widget_destroyed), &window);
4041 gtk_window_set_title (GTK_WINDOW (window), "clist");
4042 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
4044 vbox = gtk_vbox_new (FALSE, 0);
4045 gtk_container_add (GTK_CONTAINER (window), vbox);
4047 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
4048 gtk_container_set_border_width (GTK_CONTAINER (scrolled_win), 5);
4049 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
4050 GTK_POLICY_AUTOMATIC,
4051 GTK_POLICY_AUTOMATIC);
4053 /* create GtkCList here so we have a pointer to throw at the
4054 * button callbacks -- more is done with it later */
4055 clist = gtk_clist_new_with_titles (TESTGTK_CLIST_COLUMNS, titles);
4056 gtk_container_add (GTK_CONTAINER (scrolled_win), clist);
4057 gtk_signal_connect (GTK_OBJECT (clist), "click_column",
4058 (GtkSignalFunc) clist_click_column, NULL);
4060 /* control buttons */
4061 hbox = gtk_hbox_new (FALSE, 5);
4062 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4063 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
4065 button = gtk_button_new_with_label ("Insert Row");
4066 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4067 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4068 (GtkSignalFunc) insert_row_clist, (gpointer) clist);
4070 button = gtk_button_new_with_label ("Add 1,000 Rows With Pixmaps");
4071 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4072 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4073 (GtkSignalFunc) add1000_clist, (gpointer) clist);
4075 button = gtk_button_new_with_label ("Add 10,000 Rows");
4076 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4077 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4078 (GtkSignalFunc) add10000_clist, (gpointer) clist);
4080 /* second layer of buttons */
4081 hbox = gtk_hbox_new (FALSE, 5);
4082 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4083 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
4085 button = gtk_button_new_with_label ("Clear List");
4086 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4087 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4088 (GtkSignalFunc) clear_clist, (gpointer) clist);
4090 button = gtk_button_new_with_label ("Remove Selection");
4091 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4092 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4093 (GtkSignalFunc) clist_remove_selection,
4096 undo_button = gtk_button_new_with_label ("Undo Selection");
4097 gtk_box_pack_start (GTK_BOX (hbox), undo_button, TRUE, TRUE, 0);
4098 gtk_signal_connect (GTK_OBJECT (undo_button), "clicked",
4099 (GtkSignalFunc) undo_selection, (gpointer) clist);
4101 button = gtk_button_new_with_label ("Warning Test");
4102 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4103 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4104 (GtkSignalFunc) clist_warning_test,(gpointer) clist);
4106 /* third layer of buttons */
4107 hbox = gtk_hbox_new (FALSE, 5);
4108 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4109 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
4111 check = gtk_check_button_new_with_label ("Show Title Buttons");
4112 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
4113 gtk_signal_connect (GTK_OBJECT (check), "clicked",
4114 GTK_SIGNAL_FUNC (toggle_title_buttons), clist);
4115 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE);
4117 check = gtk_check_button_new_with_label ("Reorderable");
4118 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
4119 gtk_signal_connect (GTK_OBJECT (check), "clicked",
4120 GTK_SIGNAL_FUNC (toggle_reorderable), clist);
4121 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE);
4123 label = gtk_label_new ("Selection Mode :");
4124 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
4126 clist_omenu = build_option_menu (items, 4, 3, clist);
4127 gtk_box_pack_start (GTK_BOX (hbox), clist_omenu, FALSE, TRUE, 0);
4130 * the rest of the clist configuration
4133 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
4134 gtk_clist_set_row_height (GTK_CLIST (clist), 18);
4135 gtk_widget_set_usize (clist, -1, 300);
4137 for (i = 1; i < TESTGTK_CLIST_COLUMNS; i++)
4138 gtk_clist_set_column_width (GTK_CLIST (clist), i, 80);
4140 gtk_clist_set_column_auto_resize (GTK_CLIST (clist), 0, TRUE);
4141 gtk_clist_set_column_resizeable (GTK_CLIST (clist), 1, FALSE);
4142 gtk_clist_set_column_max_width (GTK_CLIST (clist), 2, 100);
4143 gtk_clist_set_column_min_width (GTK_CLIST (clist), 3, 50);
4144 gtk_clist_set_selection_mode (GTK_CLIST (clist), GTK_SELECTION_EXTENDED);
4145 gtk_clist_set_column_justification (GTK_CLIST (clist), 1,
4147 gtk_clist_set_column_justification (GTK_CLIST (clist), 2,
4148 GTK_JUSTIFY_CENTER);
4150 for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++)
4153 sprintf (text[i], "Column %d", i);
4156 sprintf (text[1], "Right");
4157 sprintf (text[2], "Center");
4166 style = gtk_style_new ();
4167 style->fg[GTK_STATE_NORMAL] = col1;
4168 style->base[GTK_STATE_NORMAL] = col2;
4170 gdk_font_unref (style->font);
4172 gdk_font_load ("-adobe-helvetica-bold-r-*-*-*-140-*-*-*-*-*-*");
4174 for (i = 0; i < 10; i++)
4176 sprintf (text[0], "CListRow %d", clist_rows++);
4177 gtk_clist_append (GTK_CLIST (clist), texts);
4182 gtk_clist_set_row_style (GTK_CLIST (clist), i, style);
4185 gtk_clist_set_cell_style (GTK_CLIST (clist), i, i % 4, style);
4190 separator = gtk_hseparator_new ();
4191 gtk_box_pack_start (GTK_BOX (vbox), separator, FALSE, TRUE, 0);
4193 hbox = gtk_hbox_new (FALSE, 0);
4194 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
4196 button = gtk_button_new_with_label ("close");
4197 gtk_container_set_border_width (GTK_CONTAINER (button), 10);
4198 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4199 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
4200 GTK_SIGNAL_FUNC(gtk_widget_destroy),
4201 GTK_OBJECT (window));
4203 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
4204 gtk_widget_grab_default (button);
4207 if (!GTK_WIDGET_VISIBLE (window))
4208 gtk_widget_show_all (window);
4212 gtk_widget_destroy (window);
4227 static gint books = 0;
4228 static gint pages = 0;
4230 static GtkWidget *book_label;
4231 static GtkWidget *page_label;
4232 static GtkWidget *sel_label;
4233 static GtkWidget *vis_label;
4234 static GtkWidget *omenu1;
4235 static GtkWidget *omenu2;
4236 static GtkWidget *omenu3;
4237 static GtkWidget *omenu4;
4238 static GtkWidget *spin1;
4239 static GtkWidget *spin2;
4240 static GtkWidget *spin3;
4241 static gint line_style;
4243 void after_press (GtkCTree *ctree, gpointer data)
4247 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->selection));
4248 gtk_label_set_text (GTK_LABEL (sel_label), buf);
4250 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->row_list));
4251 gtk_label_set_text (GTK_LABEL (vis_label), buf);
4253 sprintf (buf, "%d", books);
4254 gtk_label_set_text (GTK_LABEL (book_label), buf);
4256 sprintf (buf, "%d", pages);
4257 gtk_label_set_text (GTK_LABEL (page_label), buf);
4260 void after_move (GtkCTree *ctree, GtkCTreeNode *child, GtkCTreeNode *parent,
4261 GtkCTreeNode *sibling, gpointer data)
4267 gtk_ctree_get_node_info (ctree, child, &source,
4268 NULL, NULL, NULL, NULL, NULL, NULL, NULL);
4270 gtk_ctree_get_node_info (ctree, parent, &target1,
4271 NULL, NULL, NULL, NULL, NULL, NULL, NULL);
4273 gtk_ctree_get_node_info (ctree, sibling, &target2,
4274 NULL, NULL, NULL, NULL, NULL, NULL, NULL);
4276 g_print ("Moving \"%s\" to \"%s\" with sibling \"%s\".\n", source,
4277 (parent) ? target1 : "nil", (sibling) ? target2 : "nil");
4280 void count_items (GtkCTree *ctree, GtkCTreeNode *list)
4282 if (GTK_CTREE_ROW (list)->is_leaf)
4288 void expand_all (GtkWidget *widget, GtkCTree *ctree)
4290 gtk_ctree_expand_recursive (ctree, NULL);
4291 after_press (ctree, NULL);
4294 void collapse_all (GtkWidget *widget, GtkCTree *ctree)
4296 gtk_ctree_collapse_recursive (ctree, NULL);
4297 after_press (ctree, NULL);
4300 void select_all (GtkWidget *widget, GtkCTree *ctree)
4302 gtk_ctree_select_recursive (ctree, NULL);
4303 after_press (ctree, NULL);
4306 void change_style (GtkWidget *widget, GtkCTree *ctree)
4308 static GtkStyle *style1 = NULL;
4309 static GtkStyle *style2 = NULL;
4315 if (GTK_CLIST (ctree)->focus_row >= 0)
4316 node = GTK_CTREE_NODE
4317 (g_list_nth (GTK_CLIST (ctree)->row_list,GTK_CLIST (ctree)->focus_row));
4319 node = GTK_CTREE_NODE (GTK_CLIST (ctree)->row_list);
4333 style1 = gtk_style_new ();
4334 style1->base[GTK_STATE_NORMAL] = col1;
4335 style1->fg[GTK_STATE_SELECTED] = col2;
4337 style2 = gtk_style_new ();
4338 style2->base[GTK_STATE_SELECTED] = col2;
4339 style2->fg[GTK_STATE_NORMAL] = col1;
4340 style2->base[GTK_STATE_NORMAL] = col2;
4341 gdk_font_unref (style2->font);
4343 gdk_font_load ("-*-courier-medium-*-*-*-*-300-*-*-*-*-*-*");
4346 gtk_ctree_node_set_cell_style (ctree, node, 1, style1);
4347 gtk_ctree_node_set_cell_style (ctree, node, 0, style2);
4349 if (GTK_CTREE_ROW (node)->children)
4350 gtk_ctree_node_set_row_style (ctree, GTK_CTREE_ROW (node)->children,
4354 void unselect_all (GtkWidget *widget, GtkCTree *ctree)
4356 gtk_ctree_unselect_recursive (ctree, NULL);
4357 after_press (ctree, NULL);
4360 void remove_selection (GtkWidget *widget, GtkCTree *ctree)
4365 clist = GTK_CLIST (ctree);
4367 gtk_clist_freeze (clist);
4369 while (clist->selection)
4371 node = clist->selection->data;
4373 if (GTK_CTREE_ROW (node)->is_leaf)
4376 gtk_ctree_post_recursive (ctree, node,
4377 (GtkCTreeFunc) count_items, NULL);
4379 gtk_ctree_remove_node (ctree, node);
4381 if (clist->selection_mode == GTK_SELECTION_BROWSE)
4385 if (clist->selection_mode == GTK_SELECTION_EXTENDED && !clist->selection &&
4386 clist->focus_row >= 0)
4388 node = gtk_ctree_node_nth (ctree, clist->focus_row);
4391 gtk_ctree_select (ctree, node);
4394 gtk_clist_thaw (clist);
4395 after_press (ctree, NULL);
4398 struct _ExportStruct {
4404 typedef struct _ExportStruct ExportStruct;
4407 gnode2ctree (GtkCTree *ctree,
4410 GtkCTreeNode *cnode,
4414 GdkPixmap *pixmap_closed;
4415 GdkBitmap *mask_closed;
4416 GdkPixmap *pixmap_opened;
4417 GdkBitmap *mask_opened;
4419 if (!cnode || !gnode || (!(es = gnode->data)))
4424 pixmap_closed = pixmap3;
4425 mask_closed = mask3;
4426 pixmap_opened = NULL;
4431 pixmap_closed = pixmap1;
4432 mask_closed = mask1;
4433 pixmap_opened = pixmap2;
4434 mask_opened = mask2;
4437 gtk_ctree_set_node_info (ctree, cnode, es->tree, 2, pixmap_closed,
4438 mask_closed, pixmap_opened, mask_opened,
4439 es->is_leaf, (depth < 3));
4440 gtk_ctree_node_set_text (ctree, cnode, 1, es->info);
4448 ctree2gnode (GtkCTree *ctree,
4451 GtkCTreeNode *cnode,
4456 if (!cnode || !gnode)
4459 es = g_new (ExportStruct, 1);
4461 es->is_leaf = GTK_CTREE_ROW (cnode)->is_leaf;
4462 es->tree = GTK_CELL_PIXTEXT (GTK_CTREE_ROW (cnode)->row.cell[0])->text;
4463 es->info = GTK_CELL_PIXTEXT (GTK_CTREE_ROW (cnode)->row.cell[1])->text;
4467 void export_ctree (GtkWidget *widget, GtkCTree *ctree)
4469 char *title[] = { "Tree" , "Info" };
4470 static GtkWidget *export_window = NULL;
4471 static GtkCTree *export_ctree;
4473 GtkWidget *scrolled_win;
4481 export_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
4483 gtk_signal_connect (GTK_OBJECT (export_window), "destroy",
4484 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
4487 gtk_window_set_title (GTK_WINDOW (export_window), "exported ctree");
4488 gtk_container_set_border_width (GTK_CONTAINER (export_window), 5);
4490 vbox = gtk_vbox_new (FALSE, 0);
4491 gtk_container_add (GTK_CONTAINER (export_window), vbox);
4493 button = gtk_button_new_with_label ("Close");
4494 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, TRUE, 0);
4496 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
4497 (GtkSignalFunc) gtk_widget_destroy,
4498 GTK_OBJECT(export_window));
4500 sep = gtk_hseparator_new ();
4501 gtk_box_pack_end (GTK_BOX (vbox), sep, FALSE, TRUE, 10);
4503 export_ctree = GTK_CTREE (gtk_ctree_new_with_titles (2, 0, title));
4504 gtk_ctree_set_line_style (export_ctree, GTK_CTREE_LINES_DOTTED);
4506 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
4507 gtk_container_add (GTK_CONTAINER (scrolled_win),
4508 GTK_WIDGET (export_ctree));
4509 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
4510 GTK_POLICY_AUTOMATIC,
4511 GTK_POLICY_AUTOMATIC);
4512 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
4513 gtk_clist_set_selection_mode (GTK_CLIST (export_ctree),
4514 GTK_SELECTION_EXTENDED);
4515 gtk_clist_set_column_width (GTK_CLIST (export_ctree), 0, 200);
4516 gtk_clist_set_column_width (GTK_CLIST (export_ctree), 1, 200);
4517 gtk_widget_set_usize (GTK_WIDGET (export_ctree), 300, 200);
4520 if (!GTK_WIDGET_VISIBLE (export_window))
4521 gtk_widget_show_all (export_window);
4523 gtk_clist_clear (GTK_CLIST (export_ctree));
4525 node = GTK_CTREE_NODE (g_list_nth (GTK_CLIST (ctree)->row_list,
4526 GTK_CLIST (ctree)->focus_row));
4530 gnode = gtk_ctree_export_to_gnode (ctree, NULL, NULL, node,
4534 gtk_ctree_insert_gnode (export_ctree, NULL, NULL, gnode,
4536 g_node_destroy (gnode);
4540 void change_indent (GtkWidget *widget, GtkCTree *ctree)
4542 gtk_ctree_set_indent (ctree, GTK_ADJUSTMENT (widget)->value);
4545 void change_spacing (GtkWidget *widget, GtkCTree *ctree)
4547 gtk_ctree_set_spacing (ctree, GTK_ADJUSTMENT (widget)->value);
4550 void change_row_height (GtkWidget *widget, GtkCList *clist)
4552 gtk_clist_set_row_height (clist, GTK_ADJUSTMENT (widget)->value);
4555 void set_background (GtkCTree *ctree, GtkCTreeNode *node, gpointer data)
4557 GtkStyle *style = NULL;
4562 if (ctree->line_style != GTK_CTREE_LINES_TABBED)
4564 if (!GTK_CTREE_ROW (node)->is_leaf)
4565 style = GTK_CTREE_ROW (node)->row.data;
4566 else if (GTK_CTREE_ROW (node)->parent)
4567 style = GTK_CTREE_ROW (GTK_CTREE_ROW (node)->parent)->row.data;
4570 gtk_ctree_node_set_row_style (ctree, node, style);
4573 void ctree_toggle_line_style (GtkWidget *widget, GtkCTree *ctree)
4577 if (!GTK_WIDGET_MAPPED (widget))
4580 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
4581 (((GtkOptionMenu *)omenu1)->menu_item), i);
4583 if ((ctree->line_style == GTK_CTREE_LINES_TABBED &&
4584 ((GtkCTreeLineStyle) (3 - i)) != GTK_CTREE_LINES_TABBED) ||
4585 (ctree->line_style != GTK_CTREE_LINES_TABBED &&
4586 ((GtkCTreeLineStyle) (3 - i)) == GTK_CTREE_LINES_TABBED))
4587 gtk_ctree_pre_recursive (ctree, NULL, set_background, NULL);
4588 gtk_ctree_set_line_style (ctree, 3 - i);
4592 void ctree_toggle_expander_style (GtkWidget *widget, GtkCTree *ctree)
4596 if (!GTK_WIDGET_MAPPED (widget))
4599 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
4600 (((GtkOptionMenu *)omenu2)->menu_item), i);
4602 gtk_ctree_set_expander_style (ctree, (GtkCTreeExpanderStyle) (3 - i));
4605 void ctree_toggle_justify (GtkWidget *widget, GtkCTree *ctree)
4609 if (!GTK_WIDGET_MAPPED (widget))
4612 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
4613 (((GtkOptionMenu *)omenu3)->menu_item), i);
4615 gtk_clist_set_column_justification (GTK_CLIST (ctree), ctree->tree_column,
4616 (GtkJustification) (1 - i));
4619 void ctree_toggle_sel_mode (GtkWidget *widget, GtkCTree *ctree)
4623 if (!GTK_WIDGET_MAPPED (widget))
4626 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
4627 (((GtkOptionMenu *)omenu4)->menu_item), i);
4629 gtk_clist_set_selection_mode (GTK_CLIST (ctree), (GtkSelectionMode) (3 - i));
4630 after_press (ctree, NULL);
4633 void build_recursive (GtkCTree *ctree, gint cur_depth, gint depth,
4634 gint num_books, gint num_pages, GtkCTreeNode *parent)
4639 GtkCTreeNode *sibling;
4646 for (i = num_pages + num_books; i > num_books; i--)
4649 sprintf (buf1, "Page %02d", (gint) rand() % 100);
4650 sprintf (buf2, "Item %d-%d", cur_depth, i);
4651 sibling = gtk_ctree_insert_node (ctree, parent, sibling, text, 5,
4652 pixmap3, mask3, NULL, NULL,
4655 if (parent && ctree->line_style == GTK_CTREE_LINES_TABBED)
4656 gtk_ctree_node_set_row_style (ctree, sibling,
4657 GTK_CTREE_ROW (parent)->row.style);
4660 if (cur_depth == depth)
4663 for (i = num_books; i > 0; i--)
4668 sprintf (buf1, "Book %02d", (gint) rand() % 100);
4669 sprintf (buf2, "Item %d-%d", cur_depth, i);
4670 sibling = gtk_ctree_insert_node (ctree, parent, sibling, text, 5,
4671 pixmap1, mask1, pixmap2, mask2,
4674 style = gtk_style_new ();
4675 switch (cur_depth % 3)
4678 style->base[GTK_STATE_NORMAL].red = 10000 * (cur_depth % 6);
4679 style->base[GTK_STATE_NORMAL].green = 0;
4680 style->base[GTK_STATE_NORMAL].blue = 65535 - ((i * 10000) % 65535);
4683 style->base[GTK_STATE_NORMAL].red = 10000 * (cur_depth % 6);
4684 style->base[GTK_STATE_NORMAL].green = 65535 - ((i * 10000) % 65535);
4685 style->base[GTK_STATE_NORMAL].blue = 0;
4688 style->base[GTK_STATE_NORMAL].red = 65535 - ((i * 10000) % 65535);
4689 style->base[GTK_STATE_NORMAL].green = 0;
4690 style->base[GTK_STATE_NORMAL].blue = 10000 * (cur_depth % 6);
4693 gtk_ctree_node_set_row_data_full (ctree, sibling, style,
4694 (GtkDestroyNotify) gtk_style_unref);
4696 if (ctree->line_style == GTK_CTREE_LINES_TABBED)
4697 gtk_ctree_node_set_row_style (ctree, sibling, style);
4699 build_recursive (ctree, cur_depth + 1, depth, num_books, num_pages,
4704 void rebuild_tree (GtkWidget *widget, GtkCTree *ctree)
4707 gchar label1[] = "Root";
4708 gchar label2[] = "";
4709 GtkCTreeNode *parent;
4716 d = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin1));
4717 b = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin2));
4718 p = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin3));
4720 n = ((pow (b, d) - 1) / (b - 1)) * (p + 1);
4724 g_print ("%d total items? Try less\n",n);
4728 gtk_clist_freeze (GTK_CLIST (ctree));
4729 gtk_clist_clear (GTK_CLIST (ctree));
4734 parent = gtk_ctree_insert_node (ctree, NULL, NULL, text, 5, pixmap1,
4735 mask1, pixmap2, mask2, FALSE, TRUE);
4737 style = gtk_style_new ();
4738 style->base[GTK_STATE_NORMAL].red = 0;
4739 style->base[GTK_STATE_NORMAL].green = 45000;
4740 style->base[GTK_STATE_NORMAL].blue = 55000;
4741 gtk_ctree_node_set_row_data_full (ctree, parent, style,
4742 (GtkDestroyNotify) gtk_style_unref);
4744 if (ctree->line_style == GTK_CTREE_LINES_TABBED)
4745 gtk_ctree_node_set_row_style (ctree, parent, style);
4747 build_recursive (ctree, 1, d, b, p, parent);
4748 gtk_clist_thaw (GTK_CLIST (ctree));
4749 after_press (ctree, NULL);
4753 ctree_click_column (GtkCTree *ctree, gint column, gpointer data)
4757 clist = GTK_CLIST (ctree);
4759 if (column == clist->sort_column)
4761 if (clist->sort_type == GTK_SORT_ASCENDING)
4762 clist->sort_type = GTK_SORT_DESCENDING;
4764 clist->sort_type = GTK_SORT_ASCENDING;
4767 gtk_clist_set_sort_column (clist, column);
4769 gtk_ctree_sort_recursive (ctree, NULL);
4772 void create_ctree (void)
4774 static GtkWidget *window = NULL;
4775 GtkTooltips *tooltips;
4777 GtkWidget *scrolled_win;
4789 GdkColor transparent = { 0 };
4791 char *title[] = { "Tree" , "Info" };
4794 static OptionMenuItem items1[] =
4796 { "No lines", ctree_toggle_line_style },
4797 { "Solid", ctree_toggle_line_style },
4798 { "Dotted", ctree_toggle_line_style },
4799 { "Tabbed", ctree_toggle_line_style }
4802 static OptionMenuItem items2[] =
4804 { "None", ctree_toggle_expander_style },
4805 { "Square", ctree_toggle_expander_style },
4806 { "Triangle", ctree_toggle_expander_style },
4807 { "Circular", ctree_toggle_expander_style }
4810 static OptionMenuItem items3[] =
4812 { "Left", ctree_toggle_justify },
4813 { "Right", ctree_toggle_justify }
4816 static OptionMenuItem items4[] =
4818 { "Single", ctree_toggle_sel_mode },
4819 { "Browse", ctree_toggle_sel_mode },
4820 { "Multiple", ctree_toggle_sel_mode },
4821 { "Extended", ctree_toggle_sel_mode }
4826 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
4828 gtk_signal_connect (GTK_OBJECT (window), "destroy",
4829 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
4832 gtk_window_set_title (GTK_WINDOW (window), "GtkCTree");
4833 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
4835 tooltips = gtk_tooltips_new ();
4836 gtk_object_ref (GTK_OBJECT (tooltips));
4837 gtk_object_sink (GTK_OBJECT (tooltips));
4839 gtk_object_set_data_full (GTK_OBJECT (window), "tooltips", tooltips,
4840 (GtkDestroyNotify) gtk_object_unref);
4842 vbox = gtk_vbox_new (FALSE, 0);
4843 gtk_container_add (GTK_CONTAINER (window), vbox);
4845 hbox = gtk_hbox_new (FALSE, 5);
4846 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4847 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
4849 label = gtk_label_new ("Depth :");
4850 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
4852 adj = (GtkAdjustment *) gtk_adjustment_new (4, 1, 10, 1, 5, 0);
4853 spin1 = gtk_spin_button_new (adj, 0, 0);
4854 gtk_box_pack_start (GTK_BOX (hbox), spin1, FALSE, TRUE, 5);
4856 label = gtk_label_new ("Books :");
4857 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
4859 adj = (GtkAdjustment *) gtk_adjustment_new (3, 1, 20, 1, 5, 0);
4860 spin2 = gtk_spin_button_new (adj, 0, 0);
4861 gtk_box_pack_start (GTK_BOX (hbox), spin2, FALSE, TRUE, 5);
4863 label = gtk_label_new ("Pages :");
4864 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
4866 adj = (GtkAdjustment *) gtk_adjustment_new (5, 1, 20, 1, 5, 0);
4867 spin3 = gtk_spin_button_new (adj, 0, 0);
4868 gtk_box_pack_start (GTK_BOX (hbox), spin3, FALSE, TRUE, 5);
4870 button = gtk_button_new_with_label ("Close");
4871 gtk_box_pack_end (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4873 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
4874 (GtkSignalFunc) gtk_widget_destroy,
4875 GTK_OBJECT(window));
4877 button = gtk_button_new_with_label ("Rebuild Tree");
4878 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4880 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
4881 gtk_container_set_border_width (GTK_CONTAINER (scrolled_win), 5);
4882 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
4883 GTK_POLICY_AUTOMATIC,
4885 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
4887 ctree = GTK_CTREE (gtk_ctree_new_with_titles (2, 0, title));
4888 gtk_container_add (GTK_CONTAINER (scrolled_win), GTK_WIDGET (ctree));
4890 gtk_clist_set_column_auto_resize (GTK_CLIST (ctree), 0, TRUE);
4891 gtk_clist_set_column_width (GTK_CLIST (ctree), 1, 200);
4892 gtk_clist_set_selection_mode (GTK_CLIST (ctree), GTK_SELECTION_EXTENDED);
4893 gtk_ctree_set_line_style (ctree, GTK_CTREE_LINES_DOTTED);
4894 line_style = GTK_CTREE_LINES_DOTTED;
4896 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4897 GTK_SIGNAL_FUNC (rebuild_tree), ctree);
4898 gtk_signal_connect (GTK_OBJECT (ctree), "click_column",
4899 (GtkSignalFunc) ctree_click_column, NULL);
4901 gtk_signal_connect_after (GTK_OBJECT (ctree), "button_press_event",
4902 GTK_SIGNAL_FUNC (after_press), NULL);
4903 gtk_signal_connect_after (GTK_OBJECT (ctree), "button_release_event",
4904 GTK_SIGNAL_FUNC (after_press), NULL);
4905 gtk_signal_connect_after (GTK_OBJECT (ctree), "tree_move",
4906 GTK_SIGNAL_FUNC (after_move), NULL);
4907 gtk_signal_connect_after (GTK_OBJECT (ctree), "end_selection",
4908 GTK_SIGNAL_FUNC (after_press), NULL);
4909 gtk_signal_connect_after (GTK_OBJECT (ctree), "toggle_focus_row",
4910 GTK_SIGNAL_FUNC (after_press), NULL);
4911 gtk_signal_connect_after (GTK_OBJECT (ctree), "select_all",
4912 GTK_SIGNAL_FUNC (after_press), NULL);
4913 gtk_signal_connect_after (GTK_OBJECT (ctree), "unselect_all",
4914 GTK_SIGNAL_FUNC (after_press), NULL);
4915 gtk_signal_connect_after (GTK_OBJECT (ctree), "scroll_vertical",
4916 GTK_SIGNAL_FUNC (after_press), NULL);
4918 bbox = gtk_hbox_new (FALSE, 5);
4919 gtk_container_set_border_width (GTK_CONTAINER (bbox), 5);
4920 gtk_box_pack_start (GTK_BOX (vbox), bbox, FALSE, TRUE, 0);
4922 mbox = gtk_vbox_new (TRUE, 5);
4923 gtk_box_pack_start (GTK_BOX (bbox), mbox, FALSE, TRUE, 0);
4925 label = gtk_label_new ("Row Height :");
4926 gtk_box_pack_start (GTK_BOX (mbox), label, FALSE, FALSE, 0);
4928 label = gtk_label_new ("Indent :");
4929 gtk_box_pack_start (GTK_BOX (mbox), label, FALSE, FALSE, 0);
4931 label = gtk_label_new ("Spacing :");
4932 gtk_box_pack_start (GTK_BOX (mbox), label, FALSE, FALSE, 0);
4934 mbox = gtk_vbox_new (TRUE, 5);
4935 gtk_box_pack_start (GTK_BOX (bbox), mbox, FALSE, TRUE, 0);
4937 adj = (GtkAdjustment *) gtk_adjustment_new (20, 12, 100, 1, 10, 0);
4938 spinner = gtk_spin_button_new (adj, 0, 0);
4939 gtk_box_pack_start (GTK_BOX (mbox), spinner, FALSE, FALSE, 5);
4940 gtk_tooltips_set_tip (tooltips, spinner,
4941 "Row height of list items", NULL);
4942 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
4943 GTK_SIGNAL_FUNC (change_row_height), ctree);
4944 gtk_clist_set_row_height ( GTK_CLIST (ctree), adj->value);
4946 adj = (GtkAdjustment *) gtk_adjustment_new (20, 0, 60, 1, 10, 0);
4947 spinner = gtk_spin_button_new (adj, 0, 0);
4948 gtk_box_pack_start (GTK_BOX (mbox), spinner, FALSE, FALSE, 5);
4949 gtk_tooltips_set_tip (tooltips, spinner, "Tree Indentation.", NULL);
4950 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
4951 GTK_SIGNAL_FUNC (change_indent), ctree);
4953 adj = (GtkAdjustment *) gtk_adjustment_new (5, 0, 60, 1, 10, 0);
4954 spinner = gtk_spin_button_new (adj, 0, 0);
4955 gtk_box_pack_start (GTK_BOX (mbox), spinner, FALSE, FALSE, 5);
4956 gtk_tooltips_set_tip (tooltips, spinner, "Tree Spacing.", NULL);
4957 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
4958 GTK_SIGNAL_FUNC (change_spacing), ctree);
4960 mbox = gtk_vbox_new (TRUE, 5);
4961 gtk_box_pack_start (GTK_BOX (bbox), mbox, FALSE, TRUE, 0);
4963 hbox = gtk_hbox_new (FALSE, 5);
4964 gtk_box_pack_start (GTK_BOX (mbox), hbox, FALSE, FALSE, 0);
4966 button = gtk_button_new_with_label ("Expand All");
4967 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4968 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4969 GTK_SIGNAL_FUNC (expand_all), ctree);
4971 button = gtk_button_new_with_label ("Collapse All");
4972 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4973 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4974 GTK_SIGNAL_FUNC (collapse_all), ctree);
4976 button = gtk_button_new_with_label ("Change Style");
4977 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4978 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4979 GTK_SIGNAL_FUNC (change_style), ctree);
4981 button = gtk_button_new_with_label ("Export Tree");
4982 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4983 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4984 GTK_SIGNAL_FUNC (export_ctree), ctree);
4986 hbox = gtk_hbox_new (FALSE, 5);
4987 gtk_box_pack_start (GTK_BOX (mbox), hbox, FALSE, FALSE, 0);
4989 button = gtk_button_new_with_label ("Select All");
4990 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4991 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4992 GTK_SIGNAL_FUNC (select_all), ctree);
4994 button = gtk_button_new_with_label ("Unselect All");
4995 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4996 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4997 GTK_SIGNAL_FUNC (unselect_all), ctree);
4999 button = gtk_button_new_with_label ("Remove Selection");
5000 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5001 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5002 GTK_SIGNAL_FUNC (remove_selection), ctree);
5004 check = gtk_check_button_new_with_label ("Reorderable");
5005 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
5006 gtk_tooltips_set_tip (tooltips, check,
5007 "Tree items can be reordered by dragging.", NULL);
5008 gtk_signal_connect (GTK_OBJECT (check), "clicked",
5009 GTK_SIGNAL_FUNC (toggle_reorderable), ctree);
5010 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE);
5012 hbox = gtk_hbox_new (TRUE, 5);
5013 gtk_box_pack_start (GTK_BOX (mbox), hbox, FALSE, FALSE, 0);
5015 omenu1 = build_option_menu (items1, 4, 2, ctree);
5016 gtk_box_pack_start (GTK_BOX (hbox), omenu1, FALSE, TRUE, 0);
5017 gtk_tooltips_set_tip (tooltips, omenu1, "The tree's line style.", NULL);
5019 omenu2 = build_option_menu (items2, 4, 1, ctree);
5020 gtk_box_pack_start (GTK_BOX (hbox), omenu2, FALSE, TRUE, 0);
5021 gtk_tooltips_set_tip (tooltips, omenu2, "The tree's expander style.",
5024 omenu3 = build_option_menu (items3, 2, 0, ctree);
5025 gtk_box_pack_start (GTK_BOX (hbox), omenu3, FALSE, TRUE, 0);
5026 gtk_tooltips_set_tip (tooltips, omenu3, "The tree's justification.",
5029 omenu4 = build_option_menu (items4, 4, 3, ctree);
5030 gtk_box_pack_start (GTK_BOX (hbox), omenu4, FALSE, TRUE, 0);
5031 gtk_tooltips_set_tip (tooltips, omenu4, "The list's selection mode.",
5034 gtk_widget_realize (window);
5036 pixmap1 = gdk_pixmap_create_from_xpm_d (window->window, &mask1,
5037 &transparent, book_closed_xpm);
5038 pixmap2 = gdk_pixmap_create_from_xpm_d (window->window, &mask2,
5039 &transparent, book_open_xpm);
5040 pixmap3 = gdk_pixmap_create_from_xpm_d (window->window, &mask3,
5041 &transparent, mini_page_xpm);
5043 gtk_widget_set_usize (GTK_WIDGET (ctree), 0, 300);
5045 frame = gtk_frame_new (NULL);
5046 gtk_container_set_border_width (GTK_CONTAINER (frame), 0);
5047 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_OUT);
5048 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
5050 hbox = gtk_hbox_new (TRUE, 2);
5051 gtk_container_set_border_width (GTK_CONTAINER (hbox), 2);
5052 gtk_container_add (GTK_CONTAINER (frame), hbox);
5054 frame = gtk_frame_new (NULL);
5055 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
5056 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
5058 hbox2 = gtk_hbox_new (FALSE, 0);
5059 gtk_container_set_border_width (GTK_CONTAINER (hbox2), 2);
5060 gtk_container_add (GTK_CONTAINER (frame), hbox2);
5062 label = gtk_label_new ("Books :");
5063 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
5065 sprintf (buf, "%d", books);
5066 book_label = gtk_label_new (buf);
5067 gtk_box_pack_end (GTK_BOX (hbox2), book_label, FALSE, TRUE, 5);
5069 frame = gtk_frame_new (NULL);
5070 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
5071 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
5073 hbox2 = gtk_hbox_new (FALSE, 0);
5074 gtk_container_set_border_width (GTK_CONTAINER (hbox2), 2);
5075 gtk_container_add (GTK_CONTAINER (frame), hbox2);
5077 label = gtk_label_new ("Pages :");
5078 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
5080 sprintf (buf, "%d", pages);
5081 page_label = gtk_label_new (buf);
5082 gtk_box_pack_end (GTK_BOX (hbox2), page_label, FALSE, TRUE, 5);
5084 frame = gtk_frame_new (NULL);
5085 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
5086 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
5088 hbox2 = gtk_hbox_new (FALSE, 0);
5089 gtk_container_set_border_width (GTK_CONTAINER (hbox2), 2);
5090 gtk_container_add (GTK_CONTAINER (frame), hbox2);
5092 label = gtk_label_new ("Selected :");
5093 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
5095 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->selection));
5096 sel_label = gtk_label_new (buf);
5097 gtk_box_pack_end (GTK_BOX (hbox2), sel_label, FALSE, TRUE, 5);
5099 frame = gtk_frame_new (NULL);
5100 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
5101 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
5103 hbox2 = gtk_hbox_new (FALSE, 0);
5104 gtk_container_set_border_width (GTK_CONTAINER (hbox2), 2);
5105 gtk_container_add (GTK_CONTAINER (frame), hbox2);
5107 label = gtk_label_new ("Visible :");
5108 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
5110 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->row_list));
5111 vis_label = gtk_label_new (buf);
5112 gtk_box_pack_end (GTK_BOX (hbox2), vis_label, FALSE, TRUE, 5);
5114 rebuild_tree (NULL, ctree);
5117 if (!GTK_WIDGET_VISIBLE (window))
5118 gtk_widget_show_all (window);
5120 gtk_widget_destroy (window);
5128 color_selection_ok (GtkWidget *w,
5129 GtkColorSelectionDialog *cs)
5131 GtkColorSelection *colorsel;
5134 colorsel=GTK_COLOR_SELECTION(cs->colorsel);
5136 gtk_color_selection_get_color(colorsel,color);
5137 gtk_color_selection_set_color(colorsel,color);
5141 color_selection_changed (GtkWidget *w,
5142 GtkColorSelectionDialog *cs)
5144 GtkColorSelection *colorsel;
5147 colorsel=GTK_COLOR_SELECTION(cs->colorsel);
5148 gtk_color_selection_get_color(colorsel,color);
5152 create_color_selection (void)
5154 static GtkWidget *window = NULL;
5158 window = gtk_color_selection_dialog_new ("color selection dialog");
5160 gtk_color_selection_set_opacity (
5161 GTK_COLOR_SELECTION (GTK_COLOR_SELECTION_DIALOG (window)->colorsel),
5164 gtk_color_selection_set_update_policy(
5165 GTK_COLOR_SELECTION (GTK_COLOR_SELECTION_DIALOG (window)->colorsel),
5166 GTK_UPDATE_CONTINUOUS);
5168 gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
5170 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5171 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5174 gtk_signal_connect (
5175 GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (window)->colorsel),
5177 GTK_SIGNAL_FUNC(color_selection_changed),
5180 gtk_signal_connect (
5181 GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (window)->ok_button),
5183 GTK_SIGNAL_FUNC(color_selection_ok),
5186 gtk_signal_connect_object (
5187 GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (window)->cancel_button),
5189 GTK_SIGNAL_FUNC(gtk_widget_destroy),
5190 GTK_OBJECT (window));
5193 if (!GTK_WIDGET_VISIBLE (window))
5194 gtk_widget_show (window);
5196 gtk_widget_destroy (window);
5204 file_selection_hide_fileops (GtkWidget *widget,
5205 GtkFileSelection *fs)
5207 gtk_file_selection_hide_fileop_buttons (fs);
5211 file_selection_ok (GtkWidget *w,
5212 GtkFileSelection *fs)
5214 g_print ("%s\n", gtk_file_selection_get_filename (fs));
5215 gtk_widget_destroy (GTK_WIDGET (fs));
5219 create_file_selection (void)
5221 static GtkWidget *window = NULL;
5226 window = gtk_file_selection_new ("file selection dialog");
5228 gtk_file_selection_hide_fileop_buttons (GTK_FILE_SELECTION (window));
5230 gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
5232 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5233 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5236 gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (window)->ok_button),
5237 "clicked", GTK_SIGNAL_FUNC(file_selection_ok),
5239 gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION (window)->cancel_button),
5240 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
5241 GTK_OBJECT (window));
5243 button = gtk_button_new_with_label ("Hide Fileops");
5244 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5245 (GtkSignalFunc) file_selection_hide_fileops,
5247 gtk_box_pack_start (GTK_BOX (GTK_FILE_SELECTION (window)->action_area),
5248 button, FALSE, FALSE, 0);
5249 gtk_widget_show (button);
5251 button = gtk_button_new_with_label ("Show Fileops");
5252 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5253 (GtkSignalFunc) gtk_file_selection_show_fileop_buttons,
5255 gtk_box_pack_start (GTK_BOX (GTK_FILE_SELECTION (window)->action_area),
5256 button, FALSE, FALSE, 0);
5257 gtk_widget_show (button);
5260 if (!GTK_WIDGET_VISIBLE (window))
5261 gtk_widget_show (window);
5263 gtk_widget_destroy (window);
5271 font_selection_ok (GtkWidget *w,
5272 GtkFontSelectionDialog *fs)
5274 gchar *s = gtk_font_selection_dialog_get_font_name (fs);
5276 g_print ("%s\n", s);
5278 gtk_widget_destroy (GTK_WIDGET (fs));
5282 create_font_selection (void)
5284 static GtkWidget *window = NULL;
5288 window = gtk_font_selection_dialog_new ("Font Selection Dialog");
5290 gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
5292 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5293 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5296 gtk_signal_connect (GTK_OBJECT (GTK_FONT_SELECTION_DIALOG (window)->ok_button),
5297 "clicked", GTK_SIGNAL_FUNC(font_selection_ok),
5298 GTK_FONT_SELECTION_DIALOG (window));
5299 gtk_signal_connect_object (GTK_OBJECT (GTK_FONT_SELECTION_DIALOG (window)->cancel_button),
5300 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
5301 GTK_OBJECT (window));
5304 if (!GTK_WIDGET_VISIBLE (window))
5305 gtk_widget_show (window);
5307 gtk_widget_destroy (window);
5314 static GtkWidget *dialog_window = NULL;
5317 label_toggle (GtkWidget *widget,
5322 *label = gtk_label_new ("Dialog Test");
5323 gtk_signal_connect (GTK_OBJECT (*label),
5325 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
5327 gtk_misc_set_padding (GTK_MISC (*label), 10, 10);
5328 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->vbox),
5329 *label, TRUE, TRUE, 0);
5330 gtk_widget_show (*label);
5333 gtk_widget_destroy (*label);
5337 create_dialog (void)
5339 static GtkWidget *label;
5344 dialog_window = gtk_dialog_new ();
5346 gtk_signal_connect (GTK_OBJECT (dialog_window), "destroy",
5347 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5350 gtk_window_set_title (GTK_WINDOW (dialog_window), "GtkDialog");
5351 gtk_container_set_border_width (GTK_CONTAINER (dialog_window), 0);
5352 gtk_widget_set_usize (dialog_window, 200, 110);
5354 button = gtk_button_new_with_label ("OK");
5355 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5356 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->action_area),
5357 button, TRUE, TRUE, 0);
5358 gtk_widget_grab_default (button);
5359 gtk_widget_show (button);
5361 button = gtk_button_new_with_label ("Toggle");
5362 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5363 GTK_SIGNAL_FUNC (label_toggle),
5365 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5366 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->action_area),
5367 button, TRUE, TRUE, 0);
5368 gtk_widget_show (button);
5373 if (!GTK_WIDGET_VISIBLE (dialog_window))
5374 gtk_widget_show (dialog_window);
5376 gtk_widget_destroy (dialog_window);
5381 static gboolean event_watcher_enter_id = 0;
5382 static gboolean event_watcher_leave_id = 0;
5385 event_watcher (GtkObject *object,
5391 g_print ("Watch: \"%s\" emitted for %s\n",
5392 gtk_signal_name (signal_id),
5393 gtk_type_name (GTK_OBJECT_TYPE (object)));
5399 event_watcher_down (void)
5401 if (event_watcher_enter_id)
5405 signal_id = gtk_signal_lookup ("enter_notify_event", GTK_TYPE_WIDGET);
5406 gtk_signal_remove_emission_hook (signal_id, event_watcher_enter_id);
5407 event_watcher_enter_id = 0;
5408 signal_id = gtk_signal_lookup ("leave_notify_event", GTK_TYPE_WIDGET);
5409 gtk_signal_remove_emission_hook (signal_id, event_watcher_leave_id);
5410 event_watcher_leave_id = 0;
5415 event_watcher_toggle (void)
5417 if (event_watcher_enter_id)
5418 event_watcher_down ();
5423 signal_id = gtk_signal_lookup ("enter_notify_event", GTK_TYPE_WIDGET);
5424 event_watcher_enter_id = gtk_signal_add_emission_hook (signal_id, event_watcher, NULL);
5425 signal_id = gtk_signal_lookup ("leave_notify_event", GTK_TYPE_WIDGET);
5426 event_watcher_leave_id = gtk_signal_add_emission_hook (signal_id, event_watcher, NULL);
5431 create_event_watcher (void)
5437 dialog_window = gtk_dialog_new ();
5439 gtk_signal_connect (GTK_OBJECT (dialog_window), "destroy",
5440 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
5442 gtk_signal_connect (GTK_OBJECT (dialog_window),
5444 GTK_SIGNAL_FUNC (event_watcher_down),
5447 gtk_window_set_title (GTK_WINDOW (dialog_window), "Event Watcher");
5448 gtk_container_set_border_width (GTK_CONTAINER (dialog_window), 0);
5449 gtk_widget_set_usize (dialog_window, 200, 110);
5451 button = gtk_toggle_button_new_with_label ("Activate Watch");
5452 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5453 GTK_SIGNAL_FUNC (event_watcher_toggle),
5455 gtk_container_set_border_width (GTK_CONTAINER (button), 10);
5456 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->vbox),
5457 button, TRUE, TRUE, 0);
5458 gtk_widget_show (button);
5460 button = gtk_button_new_with_label ("Close");
5461 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5462 GTK_SIGNAL_FUNC (gtk_widget_destroy),
5463 (GtkObject*) dialog_window);
5464 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5465 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->action_area),
5466 button, TRUE, TRUE, 0);
5467 gtk_widget_grab_default (button);
5468 gtk_widget_show (button);
5471 if (!GTK_WIDGET_VISIBLE (dialog_window))
5472 gtk_widget_show (dialog_window);
5474 gtk_widget_destroy (dialog_window);
5482 create_range_controls (void)
5484 static GtkWidget *window = NULL;
5488 GtkWidget *scrollbar;
5490 GtkWidget *separator;
5491 GtkObject *adjustment;
5495 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5497 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5498 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5501 gtk_window_set_title (GTK_WINDOW (window), "range controls");
5502 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
5505 box1 = gtk_vbox_new (FALSE, 0);
5506 gtk_container_add (GTK_CONTAINER (window), box1);
5507 gtk_widget_show (box1);
5510 box2 = gtk_vbox_new (FALSE, 10);
5511 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
5512 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
5513 gtk_widget_show (box2);
5516 adjustment = gtk_adjustment_new (0.0, 0.0, 101.0, 0.1, 1.0, 1.0);
5518 scale = gtk_hscale_new (GTK_ADJUSTMENT (adjustment));
5519 gtk_widget_set_usize (GTK_WIDGET (scale), 150, 30);
5520 gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED);
5521 gtk_scale_set_digits (GTK_SCALE (scale), 1);
5522 gtk_scale_set_draw_value (GTK_SCALE (scale), TRUE);
5523 gtk_box_pack_start (GTK_BOX (box2), scale, TRUE, TRUE, 0);
5524 gtk_widget_show (scale);
5526 scrollbar = gtk_hscrollbar_new (GTK_ADJUSTMENT (adjustment));
5527 gtk_range_set_update_policy (GTK_RANGE (scrollbar),
5528 GTK_UPDATE_CONTINUOUS);
5529 gtk_box_pack_start (GTK_BOX (box2), scrollbar, TRUE, TRUE, 0);
5530 gtk_widget_show (scrollbar);
5533 separator = gtk_hseparator_new ();
5534 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
5535 gtk_widget_show (separator);
5538 box2 = gtk_vbox_new (FALSE, 10);
5539 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
5540 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
5541 gtk_widget_show (box2);
5544 button = gtk_button_new_with_label ("close");
5545 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5546 GTK_SIGNAL_FUNC(gtk_widget_destroy),
5547 GTK_OBJECT (window));
5548 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
5549 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5550 gtk_widget_grab_default (button);
5551 gtk_widget_show (button);
5554 if (!GTK_WIDGET_VISIBLE (window))
5555 gtk_widget_show (window);
5557 gtk_widget_destroy (window);
5565 create_rulers (void)
5567 static GtkWidget *window = NULL;
5573 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5574 gtk_window_set_policy (GTK_WINDOW (window), TRUE, TRUE, FALSE);
5576 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5577 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5580 gtk_window_set_title (GTK_WINDOW (window), "rulers");
5581 gtk_widget_set_usize (window, 300, 300);
5582 gtk_widget_set_events (window,
5583 GDK_POINTER_MOTION_MASK
5584 | GDK_POINTER_MOTION_HINT_MASK);
5585 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
5587 table = gtk_table_new (2, 2, FALSE);
5588 gtk_container_add (GTK_CONTAINER (window), table);
5589 gtk_widget_show (table);
5591 ruler = gtk_hruler_new ();
5592 gtk_ruler_set_metric (GTK_RULER (ruler), GTK_CENTIMETERS);
5593 gtk_ruler_set_range (GTK_RULER (ruler), 100, 0, 0, 20);
5595 gtk_signal_connect_object (
5596 GTK_OBJECT (window),
5597 "motion_notify_event",
5599 GTK_WIDGET_CLASS (GTK_OBJECT (ruler)->klass)->motion_notify_event),
5600 GTK_OBJECT (ruler));
5602 gtk_table_attach (GTK_TABLE (table), ruler, 1, 2, 0, 1,
5603 GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
5604 gtk_widget_show (ruler);
5607 ruler = gtk_vruler_new ();
5608 gtk_ruler_set_range (GTK_RULER (ruler), 5, 15, 0, 20);
5610 gtk_signal_connect_object (
5611 GTK_OBJECT (window),
5612 "motion_notify_event",
5613 GTK_SIGNAL_FUNC (GTK_WIDGET_CLASS (GTK_OBJECT (ruler)->klass)->motion_notify_event),
5614 GTK_OBJECT (ruler));
5616 gtk_table_attach (GTK_TABLE (table), ruler, 0, 1, 1, 2,
5617 GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
5618 gtk_widget_show (ruler);
5621 if (!GTK_WIDGET_VISIBLE (window))
5622 gtk_widget_show (window);
5624 gtk_widget_destroy (window);
5628 text_toggle_editable (GtkWidget *checkbutton,
5631 gtk_text_set_editable(GTK_TEXT(text),
5632 GTK_TOGGLE_BUTTON(checkbutton)->active);
5636 text_toggle_word_wrap (GtkWidget *checkbutton,
5639 gtk_text_set_word_wrap(GTK_TEXT(text),
5640 GTK_TOGGLE_BUTTON(checkbutton)->active);
5647 { { 0, 0x0000, 0x0000, 0x0000 }, "black" },
5648 { { 0, 0xFFFF, 0xFFFF, 0xFFFF }, "white" },
5649 { { 0, 0xFFFF, 0x0000, 0x0000 }, "red" },
5650 { { 0, 0x0000, 0xFFFF, 0x0000 }, "green" },
5651 { { 0, 0x0000, 0x0000, 0xFFFF }, "blue" },
5652 { { 0, 0x0000, 0xFFFF, 0xFFFF }, "cyan" },
5653 { { 0, 0xFFFF, 0x0000, 0xFFFF }, "magenta" },
5654 { { 0, 0xFFFF, 0xFFFF, 0x0000 }, "yellow" }
5657 int ntext_colors = sizeof(text_colors) / sizeof(text_colors[0]);
5663 text_insert_random (GtkWidget *w, GtkText *text)
5667 for (i=0; i<10; i++)
5669 c = 'A' + rand() % ('Z' - 'A');
5670 gtk_text_set_point (text, rand() % gtk_text_get_length (text));
5671 gtk_text_insert (text, NULL, NULL, NULL, &c, 1);
5680 static GtkWidget *window = NULL;
5686 GtkWidget *separator;
5687 GtkWidget *scrolled_window;
5695 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5696 gtk_widget_set_name (window, "text window");
5697 gtk_widget_set_usize (window, 500, 500);
5698 gtk_window_set_policy (GTK_WINDOW(window), TRUE, TRUE, FALSE);
5700 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5701 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5704 gtk_window_set_title (GTK_WINDOW (window), "test");
5705 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
5708 box1 = gtk_vbox_new (FALSE, 0);
5709 gtk_container_add (GTK_CONTAINER (window), box1);
5710 gtk_widget_show (box1);
5713 box2 = gtk_vbox_new (FALSE, 10);
5714 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
5715 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
5716 gtk_widget_show (box2);
5719 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
5720 gtk_box_pack_start (GTK_BOX (box2), scrolled_window, TRUE, TRUE, 0);
5721 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
5724 gtk_widget_show (scrolled_window);
5726 text = gtk_text_new (NULL, NULL);
5727 gtk_text_set_editable (GTK_TEXT (text), TRUE);
5728 gtk_container_add (GTK_CONTAINER (scrolled_window), text);
5729 gtk_widget_grab_focus (text);
5730 gtk_widget_show (text);
5733 gtk_text_freeze (GTK_TEXT (text));
5735 font = gdk_font_load ("-adobe-courier-medium-r-normal--*-120-*-*-*-*-*-*");
5737 for (i=0; i<ntext_colors; i++)
5739 gtk_text_insert (GTK_TEXT (text), font, NULL, NULL,
5740 text_colors[i].name, -1);
5741 gtk_text_insert (GTK_TEXT (text), font, NULL, NULL, "\t", -1);
5743 for (j=0; j<ntext_colors; j++)
5745 gtk_text_insert (GTK_TEXT (text), font,
5746 &text_colors[j].color, &text_colors[i].color,
5749 gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL, "\n", -1);
5752 /* The Text widget will reference count the font, so we
5753 * unreference it here
5755 gdk_font_unref (font);
5757 infile = fopen("testgtk.c", "r");
5762 int nbytes_read, nbytes_alloc;
5765 nbytes_alloc = 1024;
5766 buffer = g_new (char, nbytes_alloc);
5770 if (nbytes_alloc < nbytes_read + 1024)
5773 buffer = g_realloc (buffer, nbytes_alloc);
5775 len = fread (buffer + nbytes_read, 1, 1024, infile);
5781 gtk_text_insert (GTK_TEXT (text), NULL, NULL,
5782 NULL, buffer, nbytes_read);
5787 gtk_text_thaw (GTK_TEXT (text));
5789 hbox = gtk_hbutton_box_new ();
5790 gtk_box_pack_start (GTK_BOX (box2), hbox, FALSE, FALSE, 0);
5791 gtk_widget_show (hbox);
5793 check = gtk_check_button_new_with_label("Editable");
5794 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, FALSE, 0);
5795 gtk_signal_connect (GTK_OBJECT(check), "toggled",
5796 GTK_SIGNAL_FUNC(text_toggle_editable), text);
5797 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), TRUE);
5798 gtk_widget_show (check);
5800 check = gtk_check_button_new_with_label("Wrap Words");
5801 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
5802 gtk_signal_connect (GTK_OBJECT(check), "toggled",
5803 GTK_SIGNAL_FUNC(text_toggle_word_wrap), text);
5804 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), FALSE);
5805 gtk_widget_show (check);
5807 separator = gtk_hseparator_new ();
5808 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
5809 gtk_widget_show (separator);
5812 box2 = gtk_vbox_new (FALSE, 10);
5813 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
5814 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
5815 gtk_widget_show (box2);
5818 button = gtk_button_new_with_label ("insert random");
5819 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5820 GTK_SIGNAL_FUNC(text_insert_random),
5822 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
5823 gtk_widget_show (button);
5825 button = gtk_button_new_with_label ("close");
5826 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5827 GTK_SIGNAL_FUNC(gtk_widget_destroy),
5828 GTK_OBJECT (window));
5829 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
5830 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5831 gtk_widget_grab_default (button);
5832 gtk_widget_show (button);
5835 if (!GTK_WIDGET_VISIBLE (window))
5836 gtk_widget_show (window);
5838 gtk_widget_destroy (window);
5845 GdkPixmap *book_open;
5846 GdkPixmap *book_closed;
5847 GdkBitmap *book_open_mask;
5848 GdkBitmap *book_closed_mask;
5849 GtkWidget *sample_notebook;
5852 page_switch (GtkWidget *widget, GtkNotebookPage *page, gint page_num)
5854 GtkNotebookPage *oldpage;
5857 oldpage = GTK_NOTEBOOK (widget)->cur_page;
5859 if (page == oldpage)
5861 pixwid = ((GtkBoxChild*)
5862 (GTK_BOX (page->tab_label)->children->data))->widget;
5863 gtk_pixmap_set (GTK_PIXMAP (pixwid), book_open, book_open_mask);
5864 pixwid = ((GtkBoxChild*)
5865 (GTK_BOX (page->menu_label)->children->data))->widget;
5866 gtk_pixmap_set (GTK_PIXMAP (pixwid), book_open, book_open_mask);
5870 pixwid = ((GtkBoxChild*)
5871 (GTK_BOX (oldpage->tab_label)->children->data))->widget;
5872 gtk_pixmap_set (GTK_PIXMAP (pixwid), book_closed, book_closed_mask);
5873 pixwid = ((GtkBoxChild*)
5874 (GTK_BOX (oldpage->menu_label)->children->data))->widget;
5875 gtk_pixmap_set (GTK_PIXMAP (pixwid), book_closed, book_closed_mask);
5880 tab_fill (GtkToggleButton *button, GtkWidget *child)
5883 GtkPackType pack_type;
5885 gtk_notebook_query_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
5886 &expand, NULL, &pack_type);
5887 gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
5888 expand, button->active, pack_type);
5892 tab_expand (GtkToggleButton *button, GtkWidget *child)
5895 GtkPackType pack_type;
5897 gtk_notebook_query_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
5898 NULL, &fill, &pack_type);
5899 gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
5900 button->active, fill, pack_type);
5904 tab_pack (GtkToggleButton *button, GtkWidget *child)
5910 gtk_notebook_query_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
5911 &expand, &fill, NULL);
5912 gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
5913 expand, fill, button->active);
5917 create_pages (GtkNotebook *notebook, gint start, gint end)
5919 GtkWidget *child = NULL;
5924 GtkWidget *label_box;
5925 GtkWidget *menu_box;
5930 for (i = start; i <= end; i++)
5932 sprintf (buffer, "Page %d", i);
5934 child = gtk_frame_new (buffer);
5935 gtk_container_set_border_width (GTK_CONTAINER (child), 10);
5937 vbox = gtk_vbox_new (TRUE,0);
5938 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
5939 gtk_container_add (GTK_CONTAINER (child), vbox);
5941 hbox = gtk_hbox_new (TRUE,0);
5942 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
5944 button = gtk_check_button_new_with_label ("Fill Tab");
5945 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
5946 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
5947 gtk_signal_connect (GTK_OBJECT (button), "toggled",
5948 GTK_SIGNAL_FUNC (tab_fill), child);
5950 button = gtk_check_button_new_with_label ("Expand Tab");
5951 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
5952 gtk_signal_connect (GTK_OBJECT (button), "toggled",
5953 GTK_SIGNAL_FUNC (tab_expand), child);
5955 button = gtk_check_button_new_with_label ("Pack end");
5956 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
5957 gtk_signal_connect (GTK_OBJECT (button), "toggled",
5958 GTK_SIGNAL_FUNC (tab_pack), child);
5960 button = gtk_button_new_with_label ("Hide Page");
5961 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 5);
5962 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5963 GTK_SIGNAL_FUNC (gtk_widget_hide),
5964 GTK_OBJECT (child));
5966 gtk_widget_show_all (child);
5968 label_box = gtk_hbox_new (FALSE, 0);
5969 pixwid = gtk_pixmap_new (book_closed, book_closed_mask);
5970 gtk_box_pack_start (GTK_BOX (label_box), pixwid, FALSE, TRUE, 0);
5971 gtk_misc_set_padding (GTK_MISC (pixwid), 3, 1);
5972 label = gtk_label_new (buffer);
5973 gtk_box_pack_start (GTK_BOX (label_box), label, FALSE, TRUE, 0);
5974 gtk_widget_show_all (label_box);
5976 menu_box = gtk_hbox_new (FALSE, 0);
5977 pixwid = gtk_pixmap_new (book_closed, book_closed_mask);
5978 gtk_box_pack_start (GTK_BOX (menu_box), pixwid, FALSE, TRUE, 0);
5979 gtk_misc_set_padding (GTK_MISC (pixwid), 3, 1);
5980 label = gtk_label_new (buffer);
5981 gtk_box_pack_start (GTK_BOX (menu_box), label, FALSE, TRUE, 0);
5982 gtk_widget_show_all (menu_box);
5983 gtk_notebook_append_page_menu (notebook, child, label_box, menu_box);
5988 rotate_notebook (GtkButton *button,
5989 GtkNotebook *notebook)
5991 gtk_notebook_set_tab_pos (notebook, (notebook->tab_pos + 1) % 4);
5995 show_all_pages (GtkButton *button,
5996 GtkNotebook *notebook)
5998 gtk_container_foreach (GTK_CONTAINER (notebook),
5999 (GtkCallback) gtk_widget_show, NULL);
6003 standard_notebook (GtkButton *button,
6004 GtkNotebook *notebook)
6008 gtk_notebook_set_show_tabs (notebook, TRUE);
6009 gtk_notebook_set_scrollable (notebook, FALSE);
6010 if (g_list_length (notebook->children) == 15)
6011 for (i = 0; i < 10; i++)
6012 gtk_notebook_remove_page (notebook, 5);
6016 notabs_notebook (GtkButton *button,
6017 GtkNotebook *notebook)
6021 gtk_notebook_set_show_tabs (notebook, FALSE);
6022 if (g_list_length (notebook->children) == 15)
6023 for (i = 0; i < 10; i++)
6024 gtk_notebook_remove_page (notebook, 5);
6028 scrollable_notebook (GtkButton *button,
6029 GtkNotebook *notebook)
6031 gtk_notebook_set_show_tabs (notebook, TRUE);
6032 gtk_notebook_set_scrollable (notebook, TRUE);
6033 if (g_list_length (notebook->children) == 5)
6034 create_pages (notebook, 6, 15);
6038 notebook_popup (GtkToggleButton *button,
6039 GtkNotebook *notebook)
6042 gtk_notebook_popup_enable (notebook);
6044 gtk_notebook_popup_disable (notebook);
6048 notebook_homogeneous (GtkToggleButton *button,
6049 GtkNotebook *notebook)
6051 gtk_notebook_set_homogeneous_tabs (notebook, button->active);
6055 create_notebook (void)
6057 static GtkWidget *window = NULL;
6061 GtkWidget *separator;
6063 GdkColor *transparent = NULL;
6066 static OptionMenuItem items[] =
6068 { "Standard", standard_notebook },
6069 { "No tabs", notabs_notebook },
6070 { "Scrollable", scrollable_notebook }
6075 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6077 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6078 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6081 gtk_window_set_title (GTK_WINDOW (window), "notebook");
6082 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6084 box1 = gtk_vbox_new (FALSE, 0);
6085 gtk_container_add (GTK_CONTAINER (window), box1);
6087 sample_notebook = gtk_notebook_new ();
6088 gtk_signal_connect (GTK_OBJECT (sample_notebook), "switch_page",
6089 GTK_SIGNAL_FUNC (page_switch), NULL);
6090 gtk_notebook_set_tab_pos (GTK_NOTEBOOK (sample_notebook), GTK_POS_TOP);
6091 gtk_box_pack_start (GTK_BOX (box1), sample_notebook, TRUE, TRUE, 0);
6092 gtk_container_set_border_width (GTK_CONTAINER (sample_notebook), 10);
6094 gtk_widget_realize (sample_notebook);
6095 book_open = gdk_pixmap_create_from_xpm_d (sample_notebook->window,
6099 book_closed = gdk_pixmap_create_from_xpm_d (sample_notebook->window,
6104 create_pages (GTK_NOTEBOOK (sample_notebook), 1, 5);
6106 separator = gtk_hseparator_new ();
6107 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 10);
6109 box2 = gtk_hbox_new (FALSE, 5);
6110 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6111 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6113 button = gtk_check_button_new_with_label ("popup menu");
6114 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, FALSE, 0);
6115 gtk_signal_connect (GTK_OBJECT(button), "clicked",
6116 GTK_SIGNAL_FUNC (notebook_popup),
6117 GTK_OBJECT (sample_notebook));
6119 button = gtk_check_button_new_with_label ("homogeneous tabs");
6120 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, FALSE, 0);
6121 gtk_signal_connect (GTK_OBJECT(button), "clicked",
6122 GTK_SIGNAL_FUNC (notebook_homogeneous),
6123 GTK_OBJECT (sample_notebook));
6125 box2 = gtk_hbox_new (FALSE, 5);
6126 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6127 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6129 label = gtk_label_new ("Notebook Style :");
6130 gtk_box_pack_start (GTK_BOX (box2), label, FALSE, TRUE, 0);
6132 omenu = build_option_menu (items, 3, 0, sample_notebook);
6133 gtk_box_pack_start (GTK_BOX (box2), omenu, FALSE, TRUE, 0);
6135 button = gtk_button_new_with_label ("Show all Pages");
6136 gtk_box_pack_start (GTK_BOX (box2), button, FALSE, TRUE, 0);
6137 gtk_signal_connect (GTK_OBJECT (button), "clicked",
6138 GTK_SIGNAL_FUNC (show_all_pages), sample_notebook);
6140 box2 = gtk_hbox_new (TRUE, 10);
6141 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6142 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6144 button = gtk_button_new_with_label ("prev");
6145 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6146 GTK_SIGNAL_FUNC (gtk_notebook_prev_page),
6147 GTK_OBJECT (sample_notebook));
6148 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6150 button = gtk_button_new_with_label ("next");
6151 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6152 GTK_SIGNAL_FUNC (gtk_notebook_next_page),
6153 GTK_OBJECT (sample_notebook));
6154 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6156 button = gtk_button_new_with_label ("rotate");
6157 gtk_signal_connect (GTK_OBJECT (button), "clicked",
6158 GTK_SIGNAL_FUNC (rotate_notebook), sample_notebook);
6159 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6161 separator = gtk_hseparator_new ();
6162 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 5);
6164 button = gtk_button_new_with_label ("close");
6165 gtk_container_set_border_width (GTK_CONTAINER (button), 5);
6166 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6167 GTK_SIGNAL_FUNC (gtk_widget_destroy),
6168 GTK_OBJECT (window));
6169 gtk_box_pack_start (GTK_BOX (box1), button, FALSE, FALSE, 0);
6170 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6171 gtk_widget_grab_default (button);
6174 if (!GTK_WIDGET_VISIBLE (window))
6175 gtk_widget_show_all (window);
6177 gtk_widget_destroy (window);
6185 toggle_resize (GtkWidget *widget, GtkWidget *child)
6187 GtkPaned *paned = GTK_PANED (child->parent);
6188 gboolean is_child1 = (child == paned->child1);
6189 gboolean resize, shrink;
6191 resize = is_child1 ? paned->child1_resize : paned->child2_resize;
6192 shrink = is_child1 ? paned->child1_shrink : paned->child2_shrink;
6194 gtk_widget_ref (child);
6195 gtk_container_remove (GTK_CONTAINER (child->parent), child);
6197 gtk_paned_pack1 (paned, child, !resize, shrink);
6199 gtk_paned_pack2 (paned, child, !resize, shrink);
6200 gtk_widget_unref (child);
6204 toggle_shrink (GtkWidget *widget, GtkWidget *child)
6206 GtkPaned *paned = GTK_PANED (child->parent);
6207 gboolean is_child1 = (child == paned->child1);
6208 gboolean resize, shrink;
6210 resize = is_child1 ? paned->child1_resize : paned->child2_resize;
6211 shrink = is_child1 ? paned->child1_shrink : paned->child2_shrink;
6213 gtk_widget_ref (child);
6214 gtk_container_remove (GTK_CONTAINER (child->parent), child);
6216 gtk_paned_pack1 (paned, child, resize, !shrink);
6218 gtk_paned_pack2 (paned, child, resize, !shrink);
6219 gtk_widget_unref (child);
6223 create_pane_options (GtkPaned *paned,
6224 const gchar *frame_label,
6225 const gchar *label1,
6226 const gchar *label2)
6231 GtkWidget *check_button;
6233 frame = gtk_frame_new (frame_label);
6234 gtk_container_set_border_width (GTK_CONTAINER (frame), 4);
6236 table = gtk_table_new (3, 2, 4);
6237 gtk_container_add (GTK_CONTAINER (frame), table);
6239 label = gtk_label_new (label1);
6240 gtk_table_attach_defaults (GTK_TABLE (table), label,
6243 check_button = gtk_check_button_new_with_label ("Resize");
6244 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
6246 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
6247 GTK_SIGNAL_FUNC (toggle_resize),
6250 check_button = gtk_check_button_new_with_label ("Shrink");
6251 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
6253 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
6255 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
6256 GTK_SIGNAL_FUNC (toggle_shrink),
6259 label = gtk_label_new (label2);
6260 gtk_table_attach_defaults (GTK_TABLE (table), label,
6263 check_button = gtk_check_button_new_with_label ("Resize");
6264 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
6266 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
6268 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
6269 GTK_SIGNAL_FUNC (toggle_resize),
6272 check_button = gtk_check_button_new_with_label ("Shrink");
6273 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
6275 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
6277 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
6278 GTK_SIGNAL_FUNC (toggle_shrink),
6287 static GtkWidget *window = NULL;
6296 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6298 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6299 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6302 gtk_window_set_title (GTK_WINDOW (window), "Panes");
6303 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6305 vbox = gtk_vbox_new (FALSE, 0);
6306 gtk_container_add (GTK_CONTAINER (window), vbox);
6308 vpaned = gtk_vpaned_new ();
6309 gtk_box_pack_start (GTK_BOX (vbox), vpaned, TRUE, TRUE, 0);
6310 gtk_container_set_border_width (GTK_CONTAINER(vpaned), 5);
6312 hpaned = gtk_hpaned_new ();
6313 gtk_paned_add1 (GTK_PANED (vpaned), hpaned);
6315 frame = gtk_frame_new (NULL);
6316 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
6317 gtk_widget_set_usize (frame, 60, 60);
6318 gtk_paned_add1 (GTK_PANED (hpaned), frame);
6320 button = gtk_button_new_with_label ("Hi there");
6321 gtk_container_add (GTK_CONTAINER(frame), button);
6323 frame = gtk_frame_new (NULL);
6324 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
6325 gtk_widget_set_usize (frame, 80, 60);
6326 gtk_paned_add2 (GTK_PANED (hpaned), frame);
6328 frame = gtk_frame_new (NULL);
6329 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
6330 gtk_widget_set_usize (frame, 60, 80);
6331 gtk_paned_add2 (GTK_PANED (vpaned), frame);
6333 /* Now create toggle buttons to control sizing */
6335 gtk_box_pack_start (GTK_BOX (vbox),
6336 create_pane_options (GTK_PANED (hpaned),
6342 gtk_box_pack_start (GTK_BOX (vbox),
6343 create_pane_options (GTK_PANED (vpaned),
6349 gtk_widget_show_all (vbox);
6352 if (!GTK_WIDGET_VISIBLE (window))
6353 gtk_widget_show (window);
6355 gtk_widget_destroy (window);
6364 dnd_drop_destroy_popup (GtkWidget *widget, GtkWindow **window)
6366 if(GTK_IS_BUTTON(widget)) /* I.e. they clicked the close button */
6367 gtk_widget_destroy(GTK_WIDGET(*window));
6369 gtk_grab_remove(GTK_WIDGET(*window));
6377 dnd_drop (GtkWidget *button, GdkEvent *event)
6379 static GtkWidget *window = NULL;
6380 GtkWidget *vbox, *lbl, *btn;
6383 /* DND doesn't obey gtk_grab's, so check if we're already displaying
6384 * drop modal dialog first
6389 window = gtk_window_new(GTK_WINDOW_DIALOG);
6390 gtk_container_set_border_width (GTK_CONTAINER(window), 10);
6392 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6393 GTK_SIGNAL_FUNC(dnd_drop_destroy_popup),
6395 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
6396 GTK_SIGNAL_FUNC(gtk_false),
6399 vbox = gtk_vbox_new(FALSE, 5);
6401 /* Display message that we got from drop source */
6402 msg = g_malloc(strlen(event->dropdataavailable.data)
6403 + strlen(event->dropdataavailable.data_type) + 100);
6404 sprintf(msg, "Drop data of type %s was:\n\n%s",
6405 event->dropdataavailable.data_type,
6406 (char *)event->dropdataavailable.data);
6407 lbl = gtk_label_new(msg);
6408 gtk_label_set_justify(GTK_LABEL(lbl), GTK_JUSTIFY_FILL);
6410 gtk_widget_show(lbl);
6411 gtk_box_pack_start_defaults(GTK_BOX(vbox), lbl);
6413 /* Provide an obvious way out of this heinousness */
6414 btn = gtk_button_new_with_label("Continue with life in\nspite of this oppression");
6415 gtk_signal_connect_object (GTK_OBJECT (btn), "clicked",
6416 GTK_SIGNAL_FUNC(gtk_widget_destroy),
6417 GTK_OBJECT (window));
6418 gtk_widget_show(btn);
6419 gtk_box_pack_start_defaults(GTK_BOX(vbox), btn);
6421 gtk_container_add(GTK_CONTAINER(window), vbox);
6423 gtk_widget_show(vbox);
6424 gtk_grab_add(window);
6425 gtk_widget_show(window);
6429 dnd_drag_request (GtkWidget *button, GdkEvent *event)
6431 #define DND_STRING "Bill Gates demands royalties for\nyour use of his innovation."
6432 gtk_widget_dnd_data_set (button, event, DND_STRING, strlen(DND_STRING) + 1);
6438 static GtkWidget *window = NULL;
6444 GtkWidget *separator;
6446 /* For clarity... */
6447 char *possible_drag_types[] = {"text/plain"};
6448 char *accepted_drop_types[] = {"text/plain"};
6450 static GtkWidget *drag_icon = NULL;
6451 static GtkWidget *drop_icon = NULL;
6455 GdkPoint hotspot = {5,5};
6459 drag_icon = shape_create_icon ("Modeller.xpm",
6460 440, 140, 0,0, GTK_WINDOW_POPUP);
6462 gtk_signal_connect (GTK_OBJECT (drag_icon), "destroy",
6463 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6466 gtk_widget_hide (drag_icon);
6471 drop_icon = shape_create_icon ("3DRings.xpm",
6472 440, 140, 0,0, GTK_WINDOW_POPUP);
6474 gtk_signal_connect (GTK_OBJECT (drop_icon), "destroy",
6475 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6478 gtk_widget_hide (drop_icon);
6481 gdk_dnd_set_drag_shape(drag_icon->window,
6486 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6488 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6489 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6492 gtk_window_set_title (GTK_WINDOW (window), "Drag -N- Drop");
6493 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6495 box1 = gtk_vbox_new (FALSE, 0);
6496 gtk_container_add (GTK_CONTAINER (window), box1);
6497 gtk_widget_show (box1);
6499 box2 = gtk_hbox_new (FALSE, 5);
6500 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6501 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
6502 gtk_widget_show (box2);
6504 frame = gtk_frame_new ("Drag");
6505 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
6506 gtk_widget_show (frame);
6508 box3 = gtk_vbox_new (FALSE, 5);
6509 gtk_container_set_border_width (GTK_CONTAINER (box3), 5);
6510 gtk_container_add (GTK_CONTAINER (frame), box3);
6511 gtk_widget_show (box3);
6516 button = gtk_button_new_with_label ("Drag me!");
6517 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
6518 gtk_widget_show (button);
6521 * currently, the widget has to be realized to
6522 * set dnd on it, this needs to change
6524 gtk_widget_realize (button);
6525 gtk_signal_connect (GTK_OBJECT (button),
6526 "drag_request_event",
6527 GTK_SIGNAL_FUNC(dnd_drag_request),
6530 gtk_widget_dnd_drag_set (button, TRUE, possible_drag_types, 1);
6533 frame = gtk_frame_new ("Drop");
6534 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
6535 gtk_widget_show (frame);
6537 box3 = gtk_vbox_new (FALSE, 5);
6538 gtk_container_set_border_width (GTK_CONTAINER (box3), 5);
6539 gtk_container_add (GTK_CONTAINER (frame), box3);
6540 gtk_widget_show (box3);
6546 button = gtk_button_new_with_label ("To");
6547 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
6548 gtk_widget_show (button);
6550 gtk_widget_realize (button);
6551 gtk_signal_connect (GTK_OBJECT (button),
6552 "drop_data_available_event",
6553 GTK_SIGNAL_FUNC(dnd_drop),
6556 gtk_widget_dnd_drop_set (button, TRUE, accepted_drop_types, 1, FALSE);
6559 separator = gtk_hseparator_new ();
6560 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
6561 gtk_widget_show (separator);
6564 box2 = gtk_vbox_new (FALSE, 10);
6565 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6566 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6567 gtk_widget_show (box2);
6570 button = gtk_button_new_with_label ("close");
6572 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6573 GTK_SIGNAL_FUNC(gtk_widget_destroy),
6574 GTK_OBJECT (window));
6576 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6577 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6578 gtk_widget_grab_default (button);
6579 gtk_widget_show (button);
6582 if (!GTK_WIDGET_VISIBLE (window))
6583 gtk_widget_show (window);
6585 gtk_widget_destroy (window);
6593 typedef struct _cursoroffset {gint x,y;} CursorOffset;
6596 shape_pressed (GtkWidget *widget, GdkEventButton *event)
6600 /* ignore double and triple click */
6601 if (event->type != GDK_BUTTON_PRESS)
6604 p = gtk_object_get_user_data (GTK_OBJECT(widget));
6605 p->x = (int) event->x;
6606 p->y = (int) event->y;
6608 gtk_grab_add (widget);
6609 gdk_pointer_grab (widget->window, TRUE,
6610 GDK_BUTTON_RELEASE_MASK |
6611 GDK_BUTTON_MOTION_MASK |
6612 GDK_POINTER_MOTION_HINT_MASK,
6617 shape_released (GtkWidget *widget)
6619 gtk_grab_remove (widget);
6620 gdk_pointer_ungrab (0);
6624 shape_motion (GtkWidget *widget,
6625 GdkEventMotion *event)
6629 GdkModifierType mask;
6631 p = gtk_object_get_user_data (GTK_OBJECT (widget));
6634 * Can't use event->x / event->y here
6635 * because I need absolute coordinates.
6637 gdk_window_get_pointer (NULL, &xp, &yp, &mask);
6638 gtk_widget_set_uposition (widget, xp - p->x, yp - p->y);
6642 shape_create_icon (char *xpm_file,
6652 CursorOffset* icon_pos;
6654 GdkBitmap *gdk_pixmap_mask;
6655 GdkPixmap *gdk_pixmap;
6658 style = gtk_widget_get_default_style ();
6659 gc = style->black_gc;
6662 * GDK_WINDOW_TOPLEVEL works also, giving you a title border
6664 window = gtk_window_new (window_type);
6666 fixed = gtk_fixed_new ();
6667 gtk_widget_set_usize (fixed, 100,100);
6668 gtk_container_add (GTK_CONTAINER (window), fixed);
6669 gtk_widget_show (fixed);
6671 gtk_widget_set_events (window,
6672 gtk_widget_get_events (window) |
6673 GDK_BUTTON_MOTION_MASK |
6674 GDK_POINTER_MOTION_HINT_MASK |
6675 GDK_BUTTON_PRESS_MASK);
6677 gtk_widget_realize (window);
6678 gdk_pixmap = gdk_pixmap_create_from_xpm (window->window, &gdk_pixmap_mask,
6679 &style->bg[GTK_STATE_NORMAL],
6682 pixmap = gtk_pixmap_new (gdk_pixmap, gdk_pixmap_mask);
6683 gtk_fixed_put (GTK_FIXED (fixed), pixmap, px,py);
6684 gtk_widget_show (pixmap);
6686 gtk_widget_shape_combine_mask (window, gdk_pixmap_mask, px,py);
6689 gtk_signal_connect (GTK_OBJECT (window), "button_press_event",
6690 GTK_SIGNAL_FUNC (shape_pressed),NULL);
6691 gtk_signal_connect (GTK_OBJECT (window), "button_release_event",
6692 GTK_SIGNAL_FUNC (shape_released),NULL);
6693 gtk_signal_connect (GTK_OBJECT (window), "motion_notify_event",
6694 GTK_SIGNAL_FUNC (shape_motion),NULL);
6696 icon_pos = g_new (CursorOffset, 1);
6697 gtk_object_set_user_data(GTK_OBJECT(window), icon_pos);
6699 gtk_widget_set_uposition (window, x, y);
6700 gtk_widget_show (window);
6706 create_shapes (void)
6708 /* Variables used by the Drag/Drop and Shape Window demos */
6709 static GtkWidget *modeller = NULL;
6710 static GtkWidget *sheets = NULL;
6711 static GtkWidget *rings = NULL;
6715 modeller = shape_create_icon ("Modeller.xpm",
6716 440, 140, 0,0, GTK_WINDOW_POPUP);
6718 gtk_signal_connect (GTK_OBJECT (modeller), "destroy",
6719 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6723 gtk_widget_destroy (modeller);
6727 sheets = shape_create_icon ("FilesQueue.xpm",
6728 580, 170, 0,0, GTK_WINDOW_POPUP);
6730 gtk_signal_connect (GTK_OBJECT (sheets), "destroy",
6731 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6736 gtk_widget_destroy (sheets);
6740 rings = shape_create_icon ("3DRings.xpm",
6741 460, 270, 25,25, GTK_WINDOW_TOPLEVEL);
6743 gtk_signal_connect (GTK_OBJECT (rings), "destroy",
6744 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6748 gtk_widget_destroy (rings);
6756 create_wmhints (void)
6758 static GtkWidget *window = NULL;
6760 GtkWidget *separator;
6769 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6771 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6772 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6775 gtk_window_set_title (GTK_WINDOW (window), "WM Hints");
6776 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6778 gtk_widget_realize (window);
6780 circles = gdk_bitmap_create_from_data (window->window,
6784 gdk_window_set_icon (window->window, NULL,
6787 gdk_window_set_icon_name (window->window, "WMHints Test Icon");
6789 gdk_window_set_decorations (window->window, GDK_DECOR_ALL | GDK_DECOR_MENU);
6790 gdk_window_set_functions (window->window, GDK_FUNC_ALL | GDK_FUNC_RESIZE);
6792 box1 = gtk_vbox_new (FALSE, 0);
6793 gtk_container_add (GTK_CONTAINER (window), box1);
6794 gtk_widget_show (box1);
6796 label = gtk_label_new ("Try iconizing me!");
6797 gtk_widget_set_usize (label, 150, 50);
6798 gtk_box_pack_start (GTK_BOX (box1), label, TRUE, TRUE, 0);
6799 gtk_widget_show (label);
6802 separator = gtk_hseparator_new ();
6803 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
6804 gtk_widget_show (separator);
6807 box2 = gtk_vbox_new (FALSE, 10);
6808 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6809 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6810 gtk_widget_show (box2);
6813 button = gtk_button_new_with_label ("close");
6815 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6816 GTK_SIGNAL_FUNC(gtk_widget_destroy),
6817 GTK_OBJECT (window));
6819 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6820 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6821 gtk_widget_grab_default (button);
6822 gtk_widget_show (button);
6825 if (!GTK_WIDGET_VISIBLE (window))
6826 gtk_widget_show (window);
6828 gtk_widget_destroy (window);
6835 typedef struct _ProgressData {
6838 GtkWidget *block_spin;
6839 GtkWidget *x_align_spin;
6840 GtkWidget *y_align_spin;
6841 GtkWidget *step_spin;
6842 GtkWidget *act_blocks_spin;
6851 progress_timeout (gpointer data)
6856 adj = GTK_PROGRESS (data)->adjustment;
6858 new_val = adj->value + 1;
6859 if (new_val > adj->upper)
6860 new_val = adj->lower;
6862 gtk_progress_set_value (GTK_PROGRESS (data), new_val);
6868 destroy_progress (GtkWidget *widget,
6869 ProgressData **pdata)
6871 gtk_timeout_remove ((*pdata)->timer);
6872 (*pdata)->timer = 0;
6873 (*pdata)->window = NULL;
6879 progressbar_toggle_orientation (GtkWidget *widget, ProgressData *pdata)
6883 if (!GTK_WIDGET_MAPPED (widget))
6886 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
6887 (((GtkOptionMenu *)(pdata->omenu1))->menu_item), i);
6889 gtk_progress_bar_set_orientation (GTK_PROGRESS_BAR (pdata->pbar),
6890 (GtkProgressBarOrientation) (3-i));
6894 toggle_show_text (GtkWidget *widget, ProgressData *pdata)
6896 gtk_progress_set_show_text (GTK_PROGRESS (pdata->pbar),
6897 GTK_TOGGLE_BUTTON (widget)->active);
6898 gtk_widget_set_sensitive (pdata->entry, GTK_TOGGLE_BUTTON (widget)->active);
6899 gtk_widget_set_sensitive (pdata->x_align_spin,
6900 GTK_TOGGLE_BUTTON (widget)->active);
6901 gtk_widget_set_sensitive (pdata->y_align_spin,
6902 GTK_TOGGLE_BUTTON (widget)->active);
6906 progressbar_toggle_bar_style (GtkWidget *widget, ProgressData *pdata)
6910 if (!GTK_WIDGET_MAPPED (widget))
6913 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
6914 (((GtkOptionMenu *)(pdata->omenu2))->menu_item), i);
6919 gtk_widget_set_sensitive (pdata->block_spin, TRUE);
6921 gtk_widget_set_sensitive (pdata->block_spin, FALSE);
6923 gtk_progress_bar_set_bar_style (GTK_PROGRESS_BAR (pdata->pbar),
6924 (GtkProgressBarStyle) i);
6928 progress_value_changed (GtkAdjustment *adj, ProgressData *pdata)
6932 if (GTK_PROGRESS (pdata->pbar)->activity_mode)
6933 sprintf (buf, "???");
6935 sprintf (buf, "%.0f%%", 100 *
6936 gtk_progress_get_current_percentage (GTK_PROGRESS (pdata->pbar)));
6937 gtk_label_set_text (GTK_LABEL (pdata->label), buf);
6941 adjust_blocks (GtkAdjustment *adj, ProgressData *pdata)
6943 gtk_progress_set_percentage (GTK_PROGRESS (pdata->pbar), 0);
6944 gtk_progress_bar_set_discrete_blocks (GTK_PROGRESS_BAR (pdata->pbar),
6945 gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (pdata->block_spin)));
6949 adjust_step (GtkAdjustment *adj, ProgressData *pdata)
6951 gtk_progress_bar_set_activity_step (GTK_PROGRESS_BAR (pdata->pbar),
6952 gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (pdata->step_spin)));
6956 adjust_act_blocks (GtkAdjustment *adj, ProgressData *pdata)
6958 gtk_progress_bar_set_activity_blocks (GTK_PROGRESS_BAR (pdata->pbar),
6959 gtk_spin_button_get_value_as_int
6960 (GTK_SPIN_BUTTON (pdata->act_blocks_spin)));
6964 adjust_align (GtkAdjustment *adj, ProgressData *pdata)
6966 gtk_progress_set_text_alignment (GTK_PROGRESS (pdata->pbar),
6967 gtk_spin_button_get_value_as_float
6968 (GTK_SPIN_BUTTON (pdata->x_align_spin)),
6969 gtk_spin_button_get_value_as_float
6970 (GTK_SPIN_BUTTON (pdata->y_align_spin)));
6974 toggle_activity_mode (GtkWidget *widget, ProgressData *pdata)
6976 gtk_progress_set_activity_mode (GTK_PROGRESS (pdata->pbar),
6977 GTK_TOGGLE_BUTTON (widget)->active);
6978 gtk_widget_set_sensitive (pdata->step_spin,
6979 GTK_TOGGLE_BUTTON (widget)->active);
6980 gtk_widget_set_sensitive (pdata->act_blocks_spin,
6981 GTK_TOGGLE_BUTTON (widget)->active);
6985 entry_changed (GtkWidget *widget, ProgressData *pdata)
6987 gtk_progress_set_format_string (GTK_PROGRESS (pdata->pbar),
6988 gtk_entry_get_text (GTK_ENTRY (pdata->entry)));
6992 create_progress_bar (void)
7004 static ProgressData *pdata = NULL;
7006 static OptionMenuItem items1[] =
7008 { "Left-Right", progressbar_toggle_orientation },
7009 { "Right-Left", progressbar_toggle_orientation },
7010 { "Bottom-Top", progressbar_toggle_orientation },
7011 { "Top-Bottom", progressbar_toggle_orientation }
7014 static OptionMenuItem items2[] =
7016 { "Continuous", progressbar_toggle_bar_style },
7017 { "Discrete", progressbar_toggle_bar_style }
7021 pdata = g_new0 (ProgressData, 1);
7025 pdata->window = gtk_dialog_new ();
7027 gtk_window_set_policy (GTK_WINDOW (pdata->window), FALSE, FALSE, TRUE);
7029 gtk_signal_connect (GTK_OBJECT (pdata->window), "destroy",
7030 GTK_SIGNAL_FUNC (destroy_progress),
7035 gtk_window_set_title (GTK_WINDOW (pdata->window), "GtkProgressBar");
7036 gtk_container_set_border_width (GTK_CONTAINER (pdata->window), 0);
7038 vbox = gtk_vbox_new (FALSE, 5);
7039 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
7040 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (pdata->window)->vbox),
7041 vbox, FALSE, TRUE, 0);
7043 frame = gtk_frame_new ("Progress");
7044 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
7046 vbox2 = gtk_vbox_new (FALSE, 5);
7047 gtk_container_add (GTK_CONTAINER (frame), vbox2);
7049 align = gtk_alignment_new (0.5, 0.5, 0, 0);
7050 gtk_box_pack_start (GTK_BOX (vbox2), align, FALSE, FALSE, 5);
7052 adj = (GtkAdjustment *) gtk_adjustment_new (0, 1, 300, 0, 0, 0);
7053 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
7054 GTK_SIGNAL_FUNC (progress_value_changed), pdata);
7056 pdata->pbar = gtk_progress_bar_new_with_adjustment (adj);
7057 gtk_progress_set_format_string (GTK_PROGRESS (pdata->pbar),
7058 "%v from [%l,%u] (=%p%%)");
7059 gtk_container_add (GTK_CONTAINER (align), pdata->pbar);
7060 pdata->timer = gtk_timeout_add (100, progress_timeout, pdata->pbar);
7062 align = gtk_alignment_new (0.5, 0.5, 0, 0);
7063 gtk_box_pack_start (GTK_BOX (vbox2), align, FALSE, FALSE, 5);
7065 hbox = gtk_hbox_new (FALSE, 5);
7066 gtk_container_add (GTK_CONTAINER (align), hbox);
7067 label = gtk_label_new ("Label updated by user :");
7068 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
7069 pdata->label = gtk_label_new ("");
7070 gtk_box_pack_start (GTK_BOX (hbox), pdata->label, FALSE, TRUE, 0);
7072 frame = gtk_frame_new ("Options");
7073 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
7075 vbox2 = gtk_vbox_new (FALSE, 5);
7076 gtk_container_add (GTK_CONTAINER (frame), vbox2);
7078 tab = gtk_table_new (7, 2, FALSE);
7079 gtk_box_pack_start (GTK_BOX (vbox2), tab, FALSE, TRUE, 0);
7081 label = gtk_label_new ("Orientation :");
7082 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 0, 1,
7083 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7085 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
7087 pdata->omenu1 = build_option_menu (items1, 4, 0, pdata);
7088 hbox = gtk_hbox_new (FALSE, 0);
7089 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 0, 1,
7090 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7092 gtk_box_pack_start (GTK_BOX (hbox), pdata->omenu1, TRUE, TRUE, 0);
7094 check = gtk_check_button_new_with_label ("Show text");
7095 gtk_signal_connect (GTK_OBJECT (check), "clicked",
7096 GTK_SIGNAL_FUNC (toggle_show_text),
7098 gtk_table_attach (GTK_TABLE (tab), check, 0, 1, 1, 2,
7099 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7102 hbox = gtk_hbox_new (FALSE, 0);
7103 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 1, 2,
7104 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7107 label = gtk_label_new ("Format : ");
7108 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
7110 pdata->entry = gtk_entry_new ();
7111 gtk_signal_connect (GTK_OBJECT (pdata->entry), "changed",
7112 GTK_SIGNAL_FUNC (entry_changed),
7114 gtk_box_pack_start (GTK_BOX (hbox), pdata->entry, TRUE, TRUE, 0);
7115 gtk_entry_set_text (GTK_ENTRY (pdata->entry), "%v from [%l,%u] (=%p%%)");
7116 gtk_widget_set_usize (pdata->entry, 100, -1);
7117 gtk_widget_set_sensitive (pdata->entry, FALSE);
7119 label = gtk_label_new ("Text align :");
7120 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 2, 3,
7121 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7123 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
7125 hbox = gtk_hbox_new (FALSE, 0);
7126 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 2, 3,
7127 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7130 label = gtk_label_new ("x :");
7131 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 5);
7133 adj = (GtkAdjustment *) gtk_adjustment_new (0.5, 0, 1, 0.1, 0.1, 0);
7134 pdata->x_align_spin = gtk_spin_button_new (adj, 0, 1);
7135 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
7136 GTK_SIGNAL_FUNC (adjust_align), pdata);
7137 gtk_box_pack_start (GTK_BOX (hbox), pdata->x_align_spin, FALSE, TRUE, 0);
7138 gtk_widget_set_sensitive (pdata->x_align_spin, FALSE);
7140 label = gtk_label_new ("y :");
7141 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 5);
7143 adj = (GtkAdjustment *) gtk_adjustment_new (0.5, 0, 1, 0.1, 0.1, 0);
7144 pdata->y_align_spin = gtk_spin_button_new (adj, 0, 1);
7145 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
7146 GTK_SIGNAL_FUNC (adjust_align), pdata);
7147 gtk_box_pack_start (GTK_BOX (hbox), pdata->y_align_spin, FALSE, TRUE, 0);
7148 gtk_widget_set_sensitive (pdata->y_align_spin, FALSE);
7150 label = gtk_label_new ("Bar Style :");
7151 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 3, 4,
7152 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7154 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
7156 pdata->omenu2 = build_option_menu (items2, 2, 0, pdata);
7157 hbox = gtk_hbox_new (FALSE, 0);
7158 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 3, 4,
7159 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7161 gtk_box_pack_start (GTK_BOX (hbox), pdata->omenu2, TRUE, TRUE, 0);
7163 label = gtk_label_new ("Block count :");
7164 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 4, 5,
7165 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7167 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
7169 hbox = gtk_hbox_new (FALSE, 0);
7170 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 4, 5,
7171 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7173 adj = (GtkAdjustment *) gtk_adjustment_new (10, 2, 20, 1, 5, 0);
7174 pdata->block_spin = gtk_spin_button_new (adj, 0, 0);
7175 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
7176 GTK_SIGNAL_FUNC (adjust_blocks), pdata);
7177 gtk_box_pack_start (GTK_BOX (hbox), pdata->block_spin, FALSE, TRUE, 0);
7178 gtk_widget_set_sensitive (pdata->block_spin, FALSE);
7180 check = gtk_check_button_new_with_label ("Activity mode");
7181 gtk_signal_connect (GTK_OBJECT (check), "clicked",
7182 GTK_SIGNAL_FUNC (toggle_activity_mode),
7184 gtk_table_attach (GTK_TABLE (tab), check, 0, 1, 5, 6,
7185 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7188 hbox = gtk_hbox_new (FALSE, 0);
7189 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 5, 6,
7190 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7192 label = gtk_label_new ("Step size : ");
7193 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
7194 adj = (GtkAdjustment *) gtk_adjustment_new (3, 1, 20, 1, 5, 0);
7195 pdata->step_spin = gtk_spin_button_new (adj, 0, 0);
7196 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
7197 GTK_SIGNAL_FUNC (adjust_step), pdata);
7198 gtk_box_pack_start (GTK_BOX (hbox), pdata->step_spin, FALSE, TRUE, 0);
7199 gtk_widget_set_sensitive (pdata->step_spin, FALSE);
7201 hbox = gtk_hbox_new (FALSE, 0);
7202 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 6, 7,
7203 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7205 label = gtk_label_new ("Blocks : ");
7206 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
7207 adj = (GtkAdjustment *) gtk_adjustment_new (5, 2, 10, 1, 5, 0);
7208 pdata->act_blocks_spin = gtk_spin_button_new (adj, 0, 0);
7209 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
7210 GTK_SIGNAL_FUNC (adjust_act_blocks), pdata);
7211 gtk_box_pack_start (GTK_BOX (hbox), pdata->act_blocks_spin, FALSE, TRUE,
7213 gtk_widget_set_sensitive (pdata->act_blocks_spin, FALSE);
7215 button = gtk_button_new_with_label ("close");
7216 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7217 GTK_SIGNAL_FUNC (gtk_widget_destroy),
7218 GTK_OBJECT (pdata->window));
7219 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7220 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (pdata->window)->action_area),
7221 button, TRUE, TRUE, 0);
7222 gtk_widget_grab_default (button);
7225 if (!GTK_WIDGET_VISIBLE (pdata->window))
7226 gtk_widget_show_all (pdata->window);
7228 gtk_widget_destroy (pdata->window);
7235 static int color_idle = 0;
7238 color_idle_func (GtkWidget *preview)
7240 static int count = 1;
7244 for (i = 0; i < 256; i++)
7246 for (j = 0, k = 0; j < 256; j++)
7248 buf[k+0] = i + count;
7250 buf[k+2] = j + count;
7254 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
7259 gtk_widget_draw (preview, NULL);
7265 color_preview_destroy (GtkWidget *widget,
7268 gtk_idle_remove (color_idle);
7275 create_color_preview (void)
7277 static GtkWidget *window = NULL;
7284 gtk_widget_push_visual (gdk_rgb_get_visual ());
7285 gtk_widget_push_colormap (gdk_rgb_get_cmap ());
7286 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7287 gtk_widget_pop_colormap ();
7288 gtk_widget_pop_visual ();
7290 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7291 GTK_SIGNAL_FUNC(color_preview_destroy),
7294 gtk_window_set_title (GTK_WINDOW (window), "test");
7295 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
7297 preview = gtk_preview_new (GTK_PREVIEW_COLOR);
7298 gtk_preview_size (GTK_PREVIEW (preview), 256, 256);
7299 gtk_container_add (GTK_CONTAINER (window), preview);
7301 for (i = 0; i < 256; i++)
7303 for (j = 0, k = 0; j < 256; j++)
7311 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
7314 color_idle = gtk_idle_add ((GtkFunction) color_idle_func, preview);
7317 if (!GTK_WIDGET_VISIBLE (window))
7318 gtk_widget_show_all (window);
7320 gtk_widget_destroy (window);
7327 static int gray_idle = 0;
7330 gray_idle_func (GtkWidget *preview)
7332 static int count = 1;
7336 for (i = 0; i < 256; i++)
7338 for (j = 0; j < 256; j++)
7339 buf[j] = i + j + count;
7341 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
7346 gtk_widget_draw (preview, NULL);
7352 gray_preview_destroy (GtkWidget *widget,
7355 gtk_idle_remove (gray_idle);
7362 create_gray_preview (void)
7364 static GtkWidget *window = NULL;
7371 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7373 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7374 GTK_SIGNAL_FUNC(gray_preview_destroy),
7377 gtk_window_set_title (GTK_WINDOW (window), "test");
7378 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
7380 preview = gtk_preview_new (GTK_PREVIEW_GRAYSCALE);
7381 gtk_preview_size (GTK_PREVIEW (preview), 256, 256);
7382 gtk_container_add (GTK_CONTAINER (window), preview);
7384 for (i = 0; i < 256; i++)
7386 for (j = 0; j < 256; j++)
7389 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
7392 gray_idle = gtk_idle_add ((GtkFunction) gray_idle_func, preview);
7395 if (!GTK_WIDGET_VISIBLE (window))
7396 gtk_widget_show_all (window);
7398 gtk_widget_destroy (window);
7407 selection_test_received (GtkWidget *list, GtkSelectionData *data)
7410 GtkWidget *list_item;
7414 if (data->length < 0)
7416 g_print ("Selection retrieval failed\n");
7419 if (data->type != GDK_SELECTION_TYPE_ATOM)
7421 g_print ("Selection \"TARGETS\" was not returned as atoms!\n");
7425 /* Clear out any current list items */
7427 gtk_list_clear_items (GTK_LIST(list), 0, -1);
7429 /* Add new items to list */
7431 atoms = (GdkAtom *)data->data;
7434 l = data->length / sizeof (GdkAtom);
7435 for (i = 0; i < l; i++)
7438 name = gdk_atom_name (atoms[i]);
7441 list_item = gtk_list_item_new_with_label (name);
7445 list_item = gtk_list_item_new_with_label ("(bad atom)");
7447 gtk_widget_show (list_item);
7448 item_list = g_list_append (item_list, list_item);
7451 gtk_list_append_items (GTK_LIST (list), item_list);
7457 selection_test_get_targets (GtkWidget *widget, GtkWidget *list)
7459 static GdkAtom targets_atom = GDK_NONE;
7461 if (targets_atom == GDK_NONE)
7462 targets_atom = gdk_atom_intern ("TARGETS", FALSE);
7464 gtk_selection_convert (list, GDK_SELECTION_PRIMARY, targets_atom,
7469 create_selection_test (void)
7471 static GtkWidget *window = NULL;
7474 GtkWidget *scrolled_win;
7480 window = gtk_dialog_new ();
7482 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7483 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7486 gtk_window_set_title (GTK_WINDOW (window), "Selection Test");
7487 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
7489 /* Create the list */
7491 vbox = gtk_vbox_new (FALSE, 5);
7492 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
7493 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), vbox,
7496 label = gtk_label_new ("Gets available targets for current selection");
7497 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
7499 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
7500 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
7501 GTK_POLICY_AUTOMATIC,
7502 GTK_POLICY_AUTOMATIC);
7503 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
7504 gtk_widget_set_usize (scrolled_win, 100, 200);
7506 list = gtk_list_new ();
7507 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_win), list);
7509 gtk_signal_connect (GTK_OBJECT(list), "selection_received",
7510 GTK_SIGNAL_FUNC (selection_test_received), NULL);
7512 /* .. And create some buttons */
7513 button = gtk_button_new_with_label ("Get Targets");
7514 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7515 button, TRUE, TRUE, 0);
7517 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7518 GTK_SIGNAL_FUNC (selection_test_get_targets), list);
7520 button = gtk_button_new_with_label ("Quit");
7521 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7522 button, TRUE, TRUE, 0);
7524 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7525 GTK_SIGNAL_FUNC (gtk_widget_destroy),
7526 GTK_OBJECT (window));
7529 if (!GTK_WIDGET_VISIBLE (window))
7530 gtk_widget_show_all (window);
7532 gtk_widget_destroy (window);
7540 create_gamma_curve (void)
7542 static GtkWidget *window = NULL, *curve;
7543 static int count = 0;
7550 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7551 gtk_window_set_title (GTK_WINDOW (window), "test");
7552 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
7554 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7555 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7558 curve = gtk_gamma_curve_new ();
7559 gtk_container_add (GTK_CONTAINER (window), curve);
7560 gtk_widget_show (curve);
7563 max = 127 + (count % 2)*128;
7564 gtk_curve_set_range (GTK_CURVE (GTK_GAMMA_CURVE (curve)->curve),
7566 for (i = 0; i < max; ++i)
7567 vec[i] = (127 / sqrt (max)) * sqrt (i);
7568 gtk_curve_set_vector (GTK_CURVE (GTK_GAMMA_CURVE (curve)->curve),
7571 if (!GTK_WIDGET_VISIBLE (window))
7572 gtk_widget_show (window);
7573 else if (count % 4 == 3)
7575 gtk_widget_destroy (window);
7586 static int scroll_test_pos = 0.0;
7587 static GdkGC *scroll_test_gc = NULL;
7590 scroll_test_expose (GtkWidget *widget, GdkEventExpose *event,
7594 gint imin, imax, jmin, jmax;
7596 imin = (event->area.x) / 10;
7597 imax = (event->area.x + event->area.width + 9) / 10;
7599 jmin = ((int)adj->value + event->area.y) / 10;
7600 jmax = ((int)adj->value + event->area.y + event->area.height + 9) / 10;
7602 gdk_window_clear_area (widget->window,
7603 event->area.x, event->area.y,
7604 event->area.width, event->area.height);
7606 for (i=imin; i<imax; i++)
7607 for (j=jmin; j<jmax; j++)
7609 gdk_draw_rectangle (widget->window,
7610 widget->style->black_gc,
7612 10*i, 10*j - (int)adj->value, 1+i%10, 1+j%10);
7618 scroll_test_scroll (GtkWidget *widget, GdkEventScroll *event,
7621 gfloat new_value = adj->value + ((event->direction == GDK_SCROLL_UP) ?
7622 -adj->page_increment / 2:
7623 adj->page_increment / 2);
7624 new_value = CLAMP (new_value, adj->lower, adj->upper - adj->page_size);
7625 gtk_adjustment_set_value (adj, new_value);
7631 scroll_test_configure (GtkWidget *widget, GdkEventConfigure *event,
7634 adj->page_increment = 0.9 * widget->allocation.height;
7635 adj->page_size = widget->allocation.height;
7637 gtk_signal_emit_by_name (GTK_OBJECT (adj), "changed");
7641 scroll_test_adjustment_changed (GtkAdjustment *adj, GtkWidget *widget)
7643 gint source_min = (int)adj->value - scroll_test_pos;
7644 gint source_max = source_min + widget->allocation.height;
7646 gint dest_max = widget->allocation.height;
7650 scroll_test_pos = adj->value;
7652 if (!GTK_WIDGET_DRAWABLE (widget))
7659 rect.width = widget->allocation.width;
7660 rect.height = -source_min;
7661 if (rect.height > widget->allocation.height)
7662 rect.height = widget->allocation.height;
7665 dest_min = rect.height;
7670 rect.y = 2*widget->allocation.height - source_max;
7673 rect.width = widget->allocation.width;
7674 rect.height = widget->allocation.height - rect.y;
7676 source_max = widget->allocation.height;
7680 if (source_min != source_max)
7682 if (scroll_test_gc == NULL)
7684 scroll_test_gc = gdk_gc_new (widget->window);
7685 gdk_gc_set_exposures (scroll_test_gc, TRUE);
7688 gdk_draw_pixmap (widget->window,
7693 widget->allocation.width,
7694 source_max - source_min);
7696 /* Make sure graphics expose events are processed before scrolling
7699 while ((event = gdk_event_get_graphics_expose (widget->window)) != NULL)
7701 gtk_widget_event (widget, event);
7702 if (event->expose.count == 0)
7704 gdk_event_free (event);
7707 gdk_event_free (event);
7711 if (rect.height != 0)
7712 gtk_widget_draw (widget, &rect);
7717 create_scroll_test (void)
7719 static GtkWidget *window = NULL;
7721 GtkWidget *drawing_area;
7722 GtkWidget *scrollbar;
7725 GdkGeometry geometry;
7726 GdkWindowHints geometry_mask;
7730 window = gtk_dialog_new ();
7732 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7733 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7736 gtk_window_set_title (GTK_WINDOW (window), "Scroll Test");
7737 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
7739 hbox = gtk_hbox_new (FALSE, 0);
7740 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), hbox,
7742 gtk_widget_show (hbox);
7744 drawing_area = gtk_drawing_area_new ();
7745 gtk_drawing_area_size (GTK_DRAWING_AREA (drawing_area), 200, 200);
7746 gtk_box_pack_start (GTK_BOX (hbox), drawing_area, TRUE, TRUE, 0);
7747 gtk_widget_show (drawing_area);
7749 gtk_widget_set_events (drawing_area, GDK_EXPOSURE_MASK | GDK_SCROLL_MASK);
7751 adj = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.0, 1000.0, 1.0, 180.0, 200.0));
7752 scroll_test_pos = 0.0;
7754 scrollbar = gtk_vscrollbar_new (adj);
7755 gtk_box_pack_start (GTK_BOX (hbox), scrollbar, FALSE, FALSE, 0);
7756 gtk_widget_show (scrollbar);
7758 gtk_signal_connect (GTK_OBJECT (drawing_area), "expose_event",
7759 GTK_SIGNAL_FUNC (scroll_test_expose), adj);
7760 gtk_signal_connect (GTK_OBJECT (drawing_area), "configure_event",
7761 GTK_SIGNAL_FUNC (scroll_test_configure), adj);
7762 gtk_signal_connect (GTK_OBJECT (drawing_area), "scroll_event",
7763 GTK_SIGNAL_FUNC (scroll_test_scroll), adj);
7765 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
7766 GTK_SIGNAL_FUNC (scroll_test_adjustment_changed),
7769 /* .. And create some buttons */
7771 button = gtk_button_new_with_label ("Quit");
7772 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7773 button, TRUE, TRUE, 0);
7775 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7776 GTK_SIGNAL_FUNC (gtk_widget_destroy),
7777 GTK_OBJECT (window));
7778 gtk_widget_show (button);
7780 /* Set up gridded geometry */
7782 geometry_mask = GDK_HINT_MIN_SIZE |
7783 GDK_HINT_BASE_SIZE |
7784 GDK_HINT_RESIZE_INC;
7786 geometry.min_width = 20;
7787 geometry.min_height = 20;
7788 geometry.base_width = 0;
7789 geometry.base_height = 0;
7790 geometry.width_inc = 10;
7791 geometry.height_inc = 10;
7793 gtk_window_set_geometry_hints (GTK_WINDOW (window),
7794 drawing_area, &geometry, geometry_mask);
7797 if (!GTK_WIDGET_VISIBLE (window))
7798 gtk_widget_show (window);
7800 gtk_widget_destroy (window);
7807 static int timer = 0;
7810 timeout_test (GtkWidget *label)
7812 static int count = 0;
7813 static char buffer[32];
7815 sprintf (buffer, "count: %d", ++count);
7816 gtk_label_set_text (GTK_LABEL (label), buffer);
7822 start_timeout_test (GtkWidget *widget,
7827 timer = gtk_timeout_add (100, (GtkFunction) timeout_test, label);
7832 stop_timeout_test (GtkWidget *widget,
7837 gtk_timeout_remove (timer);
7843 destroy_timeout_test (GtkWidget *widget,
7846 stop_timeout_test (NULL, NULL);
7852 create_timeout_test (void)
7854 static GtkWidget *window = NULL;
7860 window = gtk_dialog_new ();
7862 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7863 GTK_SIGNAL_FUNC(destroy_timeout_test),
7866 gtk_window_set_title (GTK_WINDOW (window), "Timeout Test");
7867 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
7869 label = gtk_label_new ("count: 0");
7870 gtk_misc_set_padding (GTK_MISC (label), 10, 10);
7871 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
7872 label, TRUE, TRUE, 0);
7873 gtk_widget_show (label);
7875 button = gtk_button_new_with_label ("close");
7876 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7877 GTK_SIGNAL_FUNC(gtk_widget_destroy),
7878 GTK_OBJECT (window));
7879 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7880 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7881 button, TRUE, TRUE, 0);
7882 gtk_widget_grab_default (button);
7883 gtk_widget_show (button);
7885 button = gtk_button_new_with_label ("start");
7886 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7887 GTK_SIGNAL_FUNC(start_timeout_test),
7889 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7890 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7891 button, TRUE, TRUE, 0);
7892 gtk_widget_show (button);
7894 button = gtk_button_new_with_label ("stop");
7895 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7896 GTK_SIGNAL_FUNC(stop_timeout_test),
7898 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7899 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7900 button, TRUE, TRUE, 0);
7901 gtk_widget_show (button);
7904 if (!GTK_WIDGET_VISIBLE (window))
7905 gtk_widget_show (window);
7907 gtk_widget_destroy (window);
7914 static int idle_id = 0;
7917 idle_test (GtkWidget *label)
7919 static int count = 0;
7920 static char buffer[32];
7922 sprintf (buffer, "count: %d", ++count);
7923 gtk_label_set_text (GTK_LABEL (label), buffer);
7929 start_idle_test (GtkWidget *widget,
7934 idle_id = gtk_idle_add ((GtkFunction) idle_test, label);
7939 stop_idle_test (GtkWidget *widget,
7944 gtk_idle_remove (idle_id);
7950 destroy_idle_test (GtkWidget *widget,
7953 stop_idle_test (NULL, NULL);
7959 toggle_idle_container (GtkObject *button,
7960 GtkContainer *container)
7962 gtk_container_set_resize_mode (container, GPOINTER_TO_INT (gtk_object_get_user_data (button)));
7966 create_idle_test (void)
7968 static GtkWidget *window = NULL;
7971 GtkWidget *container;
7978 window = gtk_dialog_new ();
7980 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7981 GTK_SIGNAL_FUNC(destroy_idle_test),
7984 gtk_window_set_title (GTK_WINDOW (window), "Idle Test");
7985 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
7987 label = gtk_label_new ("count: 0");
7988 gtk_misc_set_padding (GTK_MISC (label), 10, 10);
7989 gtk_widget_show (label);
7992 gtk_widget_new (GTK_TYPE_HBOX,
7993 "GtkWidget::visible", TRUE,
7994 /* "GtkContainer::child", gtk_widget_new (GTK_TYPE_HBOX,
7995 * "GtkWidget::visible", TRUE,
7997 "GtkContainer::child", label,
8000 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
8001 container, TRUE, TRUE, 0);
8004 gtk_widget_new (GTK_TYPE_FRAME,
8005 "GtkContainer::border_width", 5,
8006 "GtkFrame::label", "Label Container",
8007 "GtkWidget::visible", TRUE,
8008 "GtkWidget::parent", GTK_DIALOG (window)->vbox,
8011 gtk_widget_new (GTK_TYPE_VBOX,
8012 "GtkWidget::visible", TRUE,
8013 "GtkWidget::parent", frame,
8016 gtk_widget_new (GTK_TYPE_RADIO_BUTTON,
8017 "GtkButton::label", "Resize-Parent",
8018 "GtkObject::user_data", (void*)GTK_RESIZE_PARENT,
8019 "GtkObject::signal::clicked", toggle_idle_container, container,
8020 "GtkWidget::visible", TRUE,
8021 "GtkWidget::parent", box,
8024 gtk_widget_new (GTK_TYPE_RADIO_BUTTON,
8025 "GtkButton::label", "Resize-Queue",
8026 "GtkObject::user_data", (void*)GTK_RESIZE_QUEUE,
8027 "GtkObject::signal::clicked", toggle_idle_container, container,
8028 "GtkRadioButton::group", button,
8029 "GtkWidget::visible", TRUE,
8030 "GtkWidget::parent", box,
8033 gtk_widget_new (GTK_TYPE_RADIO_BUTTON,
8034 "GtkButton::label", "Resize-Immediate",
8035 "GtkObject::user_data", (void*)GTK_RESIZE_IMMEDIATE,
8036 "GtkObject::signal::clicked", toggle_idle_container, container,
8037 "GtkRadioButton::group", button,
8038 "GtkWidget::visible", TRUE,
8039 "GtkWidget::parent", box,
8043 button = gtk_button_new_with_label ("close");
8044 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
8045 GTK_SIGNAL_FUNC(gtk_widget_destroy),
8046 GTK_OBJECT (window));
8047 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8048 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8049 button, TRUE, TRUE, 0);
8050 gtk_widget_grab_default (button);
8051 gtk_widget_show (button);
8053 button = gtk_button_new_with_label ("start");
8054 gtk_signal_connect (GTK_OBJECT (button), "clicked",
8055 GTK_SIGNAL_FUNC(start_idle_test),
8057 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8058 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8059 button, TRUE, TRUE, 0);
8060 gtk_widget_show (button);
8062 button = gtk_button_new_with_label ("stop");
8063 gtk_signal_connect (GTK_OBJECT (button), "clicked",
8064 GTK_SIGNAL_FUNC(stop_idle_test),
8066 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8067 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8068 button, TRUE, TRUE, 0);
8069 gtk_widget_show (button);
8072 if (!GTK_WIDGET_VISIBLE (window))
8073 gtk_widget_show (window);
8075 gtk_widget_destroy (window);
8083 reload_rc_file (void)
8087 if (gtk_rc_reparse_all ())
8089 toplevels = gdk_window_get_toplevels();
8093 gdk_window_get_user_data (toplevels->data, (gpointer *)&widget);
8096 gtk_widget_reset_rc_styles (widget);
8098 toplevels = toplevels->next;
8100 g_list_free (toplevels);
8105 reload_all_rc_files (void)
8107 static GdkAtom atom_rcfiles = GDK_NONE;
8113 atom_rcfiles = gdk_atom_intern("_GTK_READ_RCFILES", FALSE);
8115 for(i = 0; i < 5; i++)
8117 sev.data_format = 32;
8118 sev.message_type = atom_rcfiles;
8119 gdk_event_send_clientmessage_toall ((GdkEvent *) &sev);
8123 create_rc_file (void)
8125 static GtkWidget *window = NULL;
8130 window = gtk_dialog_new ();
8132 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8133 GTK_SIGNAL_FUNC(destroy_idle_test),
8136 gtk_window_set_title (GTK_WINDOW (window), "Reload Rc file");
8137 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
8139 button = gtk_button_new_with_label ("Reload");
8140 gtk_signal_connect (GTK_OBJECT (button), "clicked",
8141 GTK_SIGNAL_FUNC(reload_rc_file), NULL);
8142 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8143 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8144 button, TRUE, TRUE, 0);
8145 gtk_widget_grab_default (button);
8146 gtk_widget_show (button);
8148 button = gtk_button_new_with_label ("Reload All");
8149 gtk_signal_connect (GTK_OBJECT (button), "clicked",
8150 GTK_SIGNAL_FUNC(reload_all_rc_files), NULL);
8151 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8152 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8153 button, TRUE, TRUE, 0);
8154 gtk_widget_show (button);
8156 button = gtk_button_new_with_label ("Close");
8157 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
8158 GTK_SIGNAL_FUNC(gtk_widget_destroy),
8159 GTK_OBJECT (window));
8160 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8161 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8162 button, TRUE, TRUE, 0);
8163 gtk_widget_show (button);
8167 if (!GTK_WIDGET_VISIBLE (window))
8168 gtk_widget_show (window);
8170 gtk_widget_destroy (window);
8174 * Test of recursive mainloop
8178 mainloop_destroyed (GtkWidget *w, GtkWidget **window)
8185 create_mainloop (void)
8187 static GtkWidget *window = NULL;
8193 window = gtk_dialog_new ();
8195 gtk_window_set_title (GTK_WINDOW (window), "Test Main Loop");
8197 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8198 GTK_SIGNAL_FUNC(mainloop_destroyed),
8201 label = gtk_label_new ("In recursive main loop...");
8202 gtk_misc_set_padding (GTK_MISC(label), 20, 20);
8204 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), label,
8206 gtk_widget_show (label);
8208 button = gtk_button_new_with_label ("Leave");
8209 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area), button,
8212 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
8213 GTK_SIGNAL_FUNC (gtk_widget_destroy),
8214 GTK_OBJECT (window));
8216 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8217 gtk_widget_grab_default (button);
8219 gtk_widget_show (button);
8222 if (!GTK_WIDGET_VISIBLE (window))
8224 gtk_widget_show (window);
8226 g_print ("create_mainloop: start\n");
8228 g_print ("create_mainloop: done\n");
8231 gtk_widget_destroy (window);
8235 layout_expose_handler (GtkWidget *widget, GdkEventExpose *event)
8240 gint imin, imax, jmin, jmax;
8242 layout = GTK_LAYOUT (widget);
8244 imin = (layout->xoffset + event->area.x) / 10;
8245 imax = (layout->xoffset + event->area.x + event->area.width + 9) / 10;
8247 jmin = (layout->yoffset + event->area.y) / 10;
8248 jmax = (layout->yoffset + event->area.y + event->area.height + 9) / 10;
8250 gdk_window_clear_area (widget->window,
8251 event->area.x, event->area.y,
8252 event->area.width, event->area.height);
8254 for (i=imin; i<imax; i++)
8255 for (j=jmin; j<jmax; j++)
8257 gdk_draw_rectangle (layout->bin_window,
8258 widget->style->black_gc,
8260 10*i - layout->xoffset, 10*j - layout->yoffset,
8266 void create_layout (void)
8268 static GtkWidget *window = NULL;
8270 GtkWidget *scrolledwindow;
8279 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
8280 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8281 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
8284 gtk_window_set_title (GTK_WINDOW (window), "Layout");
8285 gtk_widget_set_usize (window, 200, 200);
8287 scrolledwindow = gtk_scrolled_window_new (NULL, NULL);
8289 gtk_container_add (GTK_CONTAINER (window), scrolledwindow);
8291 layout = gtk_layout_new (NULL, NULL);
8292 gtk_container_add (GTK_CONTAINER (scrolledwindow), layout);
8294 /* We set step sizes here since GtkLayout does not set
8297 GTK_LAYOUT (layout)->hadjustment->step_increment = 10.0;
8298 GTK_LAYOUT (layout)->vadjustment->step_increment = 10.0;
8300 gtk_widget_set_events (layout, GDK_EXPOSURE_MASK);
8301 gtk_signal_connect (GTK_OBJECT (layout), "expose_event",
8302 GTK_SIGNAL_FUNC (layout_expose_handler), NULL);
8304 gtk_layout_set_size (GTK_LAYOUT (layout), 1600, 128000);
8306 for (i=0 ; i < 16 ; i++)
8307 for (j=0 ; j < 16 ; j++)
8309 sprintf(buf, "Button %d, %d", i, j);
8311 button = gtk_button_new_with_label (buf);
8313 button = gtk_label_new (buf);
8315 gtk_layout_put (GTK_LAYOUT (layout), button,
8319 for (i=16; i < 1280; i++)
8321 sprintf(buf, "Button %d, %d", i, 0);
8323 button = gtk_button_new_with_label (buf);
8325 button = gtk_label_new (buf);
8327 gtk_layout_put (GTK_LAYOUT (layout), button,
8332 if (!GTK_WIDGET_VISIBLE (window))
8333 gtk_widget_show_all (window);
8335 gtk_widget_destroy (window);
8339 * Main Window and Exit
8343 do_exit (GtkWidget *widget, GtkWidget *window)
8345 gtk_widget_destroy (window);
8350 create_main_window (void)
8357 { "button box", create_button_box },
8358 { "buttons", create_buttons },
8359 { "check buttons", create_check_buttons },
8360 { "clist", create_clist},
8361 { "color selection", create_color_selection },
8362 { "ctree", create_ctree },
8363 { "cursors", create_cursors },
8364 { "dialog", create_dialog },
8365 /* { "dnd", create_dnd }, */
8366 { "entry", create_entry },
8367 { "event watcher", create_event_watcher },
8368 { "file selection", create_file_selection },
8369 { "font selection", create_font_selection },
8370 { "gamma curve", create_gamma_curve },
8371 { "handle box", create_handle_box },
8372 { "item factory", create_item_factory },
8373 { "labels", create_labels },
8374 { "layout", create_layout },
8375 { "list", create_list },
8376 { "menus", create_menus },
8377 { "modal window", create_modal_window },
8378 { "notebook", create_notebook },
8379 { "panes", create_panes },
8380 { "pixmap", create_pixmap },
8381 { "preview color", create_color_preview },
8382 { "preview gray", create_gray_preview },
8383 { "progress bar", create_progress_bar },
8384 { "radio buttons", create_radio_buttons },
8385 { "range controls", create_range_controls },
8386 { "rc file", create_rc_file },
8387 { "reparent", create_reparent },
8388 { "rulers", create_rulers },
8389 { "saved position", create_saved_position },
8390 { "scrolled windows", create_scrolled_windows },
8391 { "shapes", create_shapes },
8392 { "spinbutton", create_spins },
8393 { "statusbar", create_statusbar },
8394 { "test idle", create_idle_test },
8395 { "test mainloop", create_mainloop },
8396 { "test scrolling", create_scroll_test },
8397 { "test selection", create_selection_test },
8398 { "test timeout", create_timeout_test },
8399 { "text", create_text },
8400 { "toggle buttons", create_toggle_buttons },
8401 { "toolbar", create_toolbar },
8402 { "tooltips", create_tooltips },
8403 { "tree", create_tree_mode_window},
8404 { "WM hints", create_wmhints },
8406 int nbuttons = sizeof (buttons) / sizeof (buttons[0]);
8410 GtkWidget *scrolled_window;
8414 GtkWidget *separator;
8417 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
8418 gtk_window_set_policy (GTK_WINDOW (window), FALSE, FALSE, FALSE);
8419 gtk_widget_set_name (window, "main window");
8420 gtk_widget_set_usize (window, 200, 400);
8421 gtk_widget_set_uposition (window, 20, 20);
8423 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8424 GTK_SIGNAL_FUNC(gtk_main_quit),
8426 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
8427 GTK_SIGNAL_FUNC (gtk_false),
8430 box1 = gtk_vbox_new (FALSE, 0);
8431 gtk_container_add (GTK_CONTAINER (window), box1);
8433 if (gtk_micro_version > 0)
8445 label = gtk_label_new (buffer);
8446 gtk_box_pack_start (GTK_BOX (box1), label, FALSE, FALSE, 0);
8448 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
8449 gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10);
8450 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
8451 GTK_POLICY_AUTOMATIC,
8452 GTK_POLICY_AUTOMATIC);
8453 gtk_box_pack_start (GTK_BOX (box1), scrolled_window, TRUE, TRUE, 0);
8455 box2 = gtk_vbox_new (FALSE, 0);
8456 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
8457 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), box2);
8458 gtk_container_set_focus_vadjustment (GTK_CONTAINER (box2),
8459 gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
8460 gtk_widget_show (box2);
8462 for (i = 0; i < nbuttons; i++)
8464 button = gtk_button_new_with_label (buttons[i].label);
8465 if (buttons[i].func)
8466 gtk_signal_connect (GTK_OBJECT (button),
8468 GTK_SIGNAL_FUNC(buttons[i].func),
8471 gtk_widget_set_sensitive (button, FALSE);
8472 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
8475 separator = gtk_hseparator_new ();
8476 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
8478 box2 = gtk_vbox_new (FALSE, 10);
8479 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
8480 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
8482 button = gtk_button_new_with_label ("close");
8483 gtk_signal_connect (GTK_OBJECT (button), "clicked",
8484 GTK_SIGNAL_FUNC (do_exit),
8486 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
8487 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8488 gtk_widget_grab_default (button);
8490 gtk_widget_show_all (window);
8494 main (int argc, char *argv[])
8496 GtkBindingSet *binding_set;
8497 struct stat statbuf;
8499 srand (time (NULL));
8503 /* Check to see if we are being run from the correct
8506 if (stat("./testgtkrc", &statbuf) < 0)
8508 fprintf (stderr, "*** The testgtk program must be run from within the\n"
8509 "*** gtk/ subdirectory of the GTK+ distribution.\n");
8513 gtk_rc_add_default_file ("testgtkrc");
8515 gtk_init (&argc, &argv);
8521 binding_set = gtk_binding_set_by_class (gtk_type_class (GTK_TYPE_WIDGET));
8522 gtk_binding_entry_add_signal (binding_set,
8523 '9', GDK_CONTROL_MASK | GDK_RELEASE_MASK,
8526 GTK_TYPE_STRING, "GtkWidgetClass <ctrl><release>9 test");
8528 create_main_window ();