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/.
38 #include "gdk/gdkkeysyms.h"
41 #include "circles.xbm"
43 typedef struct _OptionMenuItem
50 shape_create_icon (char *xpm_file,
58 build_option_menu (OptionMenuItem items[],
63 /* macro, structure and variables used by tree window demos */
64 #define DEFAULT_NUMBER_OF_ITEM 3
65 #define DEFAULT_RECURSION_LEVEL 3
68 GSList* selection_mode_group;
69 GtkWidget* single_button;
70 GtkWidget* browse_button;
71 GtkWidget* multiple_button;
72 GtkWidget* draw_line_button;
73 GtkWidget* view_line_button;
74 GtkWidget* no_root_item_button;
75 GtkWidget* nb_item_spinner;
76 GtkWidget* recursion_spinner;
77 } sTreeSampleSelection;
79 typedef struct sTreeButtons {
81 GtkWidget* add_button;
82 GtkWidget* remove_button;
83 GtkWidget* subtree_button;
85 /* end of tree section */
88 build_option_menu (OptionMenuItem items[],
99 omenu = gtk_option_menu_new ();
101 menu = gtk_menu_new ();
104 for (i = 0; i < num_items; i++)
106 menu_item = gtk_radio_menu_item_new_with_label (group, items[i].name);
107 gtk_signal_connect (GTK_OBJECT (menu_item), "activate",
108 (GtkSignalFunc) items[i].func, data);
109 group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menu_item));
110 gtk_menu_append (GTK_MENU (menu), menu_item);
112 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_item), TRUE);
113 gtk_widget_show (menu_item);
116 gtk_option_menu_set_menu (GTK_OPTION_MENU (omenu), menu);
117 gtk_option_menu_set_history (GTK_OPTION_MENU (omenu), history);
123 destroy_tooltips (GtkWidget *widget, GtkWindow **window)
125 GtkTooltips *tt = gtk_object_get_data (GTK_OBJECT (*window), "tooltips");
126 gtk_object_unref (GTK_OBJECT (tt));
135 button_window (GtkWidget *widget,
138 if (!GTK_WIDGET_VISIBLE (button))
139 gtk_widget_show (button);
141 gtk_widget_hide (button);
145 create_buttons (void)
147 static GtkWidget *window = NULL;
151 GtkWidget *button[10];
152 GtkWidget *separator;
156 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
158 gtk_signal_connect (GTK_OBJECT (window), "destroy",
159 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
162 gtk_window_set_title (GTK_WINDOW (window), "GtkButton");
163 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
165 box1 = gtk_vbox_new (FALSE, 0);
166 gtk_container_add (GTK_CONTAINER (window), box1);
168 table = gtk_table_new (3, 3, FALSE);
169 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
170 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
171 gtk_container_set_border_width (GTK_CONTAINER (table), 10);
172 gtk_box_pack_start (GTK_BOX (box1), table, TRUE, TRUE, 0);
174 button[0] = gtk_button_new_with_label ("button1");
175 button[1] = gtk_button_new_with_label ("button2");
176 button[2] = gtk_button_new_with_label ("button3");
177 button[3] = gtk_button_new_with_label ("button4");
178 button[4] = gtk_button_new_with_label ("button5");
179 button[5] = gtk_button_new_with_label ("button6");
180 button[6] = gtk_button_new_with_label ("button7");
181 button[7] = gtk_button_new_with_label ("button8");
182 button[8] = gtk_button_new_with_label ("button9");
184 gtk_signal_connect (GTK_OBJECT (button[0]), "clicked",
185 GTK_SIGNAL_FUNC(button_window),
188 gtk_table_attach (GTK_TABLE (table), button[0], 0, 1, 0, 1,
189 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
191 gtk_signal_connect (GTK_OBJECT (button[1]), "clicked",
192 GTK_SIGNAL_FUNC(button_window),
195 gtk_table_attach (GTK_TABLE (table), button[1], 1, 2, 1, 2,
196 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
198 gtk_signal_connect (GTK_OBJECT (button[2]), "clicked",
199 GTK_SIGNAL_FUNC(button_window),
201 gtk_table_attach (GTK_TABLE (table), button[2], 2, 3, 2, 3,
202 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
204 gtk_signal_connect (GTK_OBJECT (button[3]), "clicked",
205 GTK_SIGNAL_FUNC(button_window),
207 gtk_table_attach (GTK_TABLE (table), button[3], 0, 1, 2, 3,
208 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
210 gtk_signal_connect (GTK_OBJECT (button[4]), "clicked",
211 GTK_SIGNAL_FUNC(button_window),
213 gtk_table_attach (GTK_TABLE (table), button[4], 2, 3, 0, 1,
214 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
216 gtk_signal_connect (GTK_OBJECT (button[5]), "clicked",
217 GTK_SIGNAL_FUNC(button_window),
219 gtk_table_attach (GTK_TABLE (table), button[5], 1, 2, 2, 3,
220 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
222 gtk_signal_connect (GTK_OBJECT (button[6]), "clicked",
223 GTK_SIGNAL_FUNC(button_window),
225 gtk_table_attach (GTK_TABLE (table), button[6], 1, 2, 0, 1,
226 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
228 gtk_signal_connect (GTK_OBJECT (button[7]), "clicked",
229 GTK_SIGNAL_FUNC(button_window),
231 gtk_table_attach (GTK_TABLE (table), button[7], 2, 3, 1, 2,
232 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
234 gtk_signal_connect (GTK_OBJECT (button[8]), "clicked",
235 GTK_SIGNAL_FUNC(button_window),
237 gtk_table_attach (GTK_TABLE (table), button[8], 0, 1, 1, 2,
238 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
240 separator = gtk_hseparator_new ();
241 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
243 box2 = gtk_vbox_new (FALSE, 10);
244 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
245 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
247 button[9] = gtk_button_new_with_label ("close");
248 gtk_signal_connect_object (GTK_OBJECT (button[9]), "clicked",
249 GTK_SIGNAL_FUNC(gtk_widget_destroy),
250 GTK_OBJECT (window));
251 gtk_box_pack_start (GTK_BOX (box2), button[9], TRUE, TRUE, 0);
252 GTK_WIDGET_SET_FLAGS (button[9], GTK_CAN_DEFAULT);
253 gtk_widget_grab_default (button[9]);
256 if (!GTK_WIDGET_VISIBLE (window))
257 gtk_widget_show_all (window);
259 gtk_widget_destroy (window);
267 create_toggle_buttons (void)
269 static GtkWidget *window = NULL;
273 GtkWidget *separator;
277 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
279 gtk_signal_connect (GTK_OBJECT (window), "destroy",
280 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
283 gtk_window_set_title (GTK_WINDOW (window), "GtkToggleButton");
284 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
286 box1 = gtk_vbox_new (FALSE, 0);
287 gtk_container_add (GTK_CONTAINER (window), box1);
289 box2 = gtk_vbox_new (FALSE, 10);
290 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
291 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
293 button = gtk_toggle_button_new_with_label ("button1");
294 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
296 button = gtk_toggle_button_new_with_label ("button2");
297 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
299 button = gtk_toggle_button_new_with_label ("button3");
300 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
302 separator = gtk_hseparator_new ();
303 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
305 box2 = gtk_vbox_new (FALSE, 10);
306 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
307 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
309 button = gtk_button_new_with_label ("close");
310 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
311 GTK_SIGNAL_FUNC(gtk_widget_destroy),
312 GTK_OBJECT (window));
313 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
314 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
315 gtk_widget_grab_default (button);
318 if (!GTK_WIDGET_VISIBLE (window))
319 gtk_widget_show_all (window);
321 gtk_widget_destroy (window);
329 create_check_buttons (void)
331 static GtkWidget *window = NULL;
335 GtkWidget *separator;
339 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
341 gtk_signal_connect (GTK_OBJECT (window), "destroy",
342 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
345 gtk_window_set_title (GTK_WINDOW (window), "GtkCheckButton");
346 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
348 box1 = gtk_vbox_new (FALSE, 0);
349 gtk_container_add (GTK_CONTAINER (window), box1);
351 box2 = gtk_vbox_new (FALSE, 10);
352 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
353 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
355 button = gtk_check_button_new_with_label ("button1");
356 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
358 button = gtk_check_button_new_with_label ("button2");
359 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
361 button = gtk_check_button_new_with_label ("button3");
362 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
364 separator = gtk_hseparator_new ();
365 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
367 box2 = gtk_vbox_new (FALSE, 10);
368 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
369 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
371 button = gtk_button_new_with_label ("close");
372 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
373 GTK_SIGNAL_FUNC(gtk_widget_destroy),
374 GTK_OBJECT (window));
375 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
376 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
377 gtk_widget_grab_default (button);
380 if (!GTK_WIDGET_VISIBLE (window))
381 gtk_widget_show_all (window);
383 gtk_widget_destroy (window);
391 create_radio_buttons (void)
393 static GtkWidget *window = NULL;
397 GtkWidget *separator;
401 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
403 gtk_signal_connect (GTK_OBJECT (window), "destroy",
404 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
407 gtk_window_set_title (GTK_WINDOW (window), "radio buttons");
408 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
410 box1 = gtk_vbox_new (FALSE, 0);
411 gtk_container_add (GTK_CONTAINER (window), box1);
413 box2 = gtk_vbox_new (FALSE, 10);
414 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
415 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
417 button = gtk_radio_button_new_with_label (NULL, "button1");
418 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
420 button = gtk_radio_button_new_with_label (
421 gtk_radio_button_group (GTK_RADIO_BUTTON (button)),
423 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
424 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
426 button = gtk_radio_button_new_with_label (
427 gtk_radio_button_group (GTK_RADIO_BUTTON (button)),
429 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
431 separator = gtk_hseparator_new ();
432 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
434 box2 = gtk_vbox_new (FALSE, 10);
435 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
436 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
438 button = gtk_button_new_with_label ("close");
439 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
440 GTK_SIGNAL_FUNC(gtk_widget_destroy),
441 GTK_OBJECT (window));
442 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
443 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
444 gtk_widget_grab_default (button);
447 if (!GTK_WIDGET_VISIBLE (window))
448 gtk_widget_show_all (window);
450 gtk_widget_destroy (window);
458 create_bbox (gint horizontal,
469 frame = gtk_frame_new (title);
472 bbox = gtk_hbutton_box_new ();
474 bbox = gtk_vbutton_box_new ();
476 gtk_container_set_border_width (GTK_CONTAINER (bbox), 5);
477 gtk_container_add (GTK_CONTAINER (frame), bbox);
479 gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), layout);
480 gtk_button_box_set_spacing (GTK_BUTTON_BOX (bbox), spacing);
481 gtk_button_box_set_child_size (GTK_BUTTON_BOX (bbox), child_w, child_h);
483 button = gtk_button_new_with_label ("OK");
484 gtk_container_add (GTK_CONTAINER (bbox), button);
486 button = gtk_button_new_with_label ("Cancel");
487 gtk_container_add (GTK_CONTAINER (bbox), button);
489 button = gtk_button_new_with_label ("Help");
490 gtk_container_add (GTK_CONTAINER (bbox), button);
496 create_button_box (void)
498 static GtkWidget* window = NULL;
499 GtkWidget *main_vbox;
502 GtkWidget *frame_horz;
503 GtkWidget *frame_vert;
507 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
508 gtk_window_set_title (GTK_WINDOW (window), "Button Boxes");
510 gtk_signal_connect (GTK_OBJECT (window), "destroy",
511 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
514 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
516 main_vbox = gtk_vbox_new (FALSE, 0);
517 gtk_container_add (GTK_CONTAINER (window), main_vbox);
519 frame_horz = gtk_frame_new ("Horizontal Button Boxes");
520 gtk_box_pack_start (GTK_BOX (main_vbox), frame_horz, TRUE, TRUE, 10);
522 vbox = gtk_vbox_new (FALSE, 0);
523 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
524 gtk_container_add (GTK_CONTAINER (frame_horz), vbox);
526 gtk_box_pack_start (GTK_BOX (vbox),
527 create_bbox (TRUE, "Spread", 40, 85, 20, GTK_BUTTONBOX_SPREAD),
530 gtk_box_pack_start (GTK_BOX (vbox),
531 create_bbox (TRUE, "Edge", 40, 85, 20, GTK_BUTTONBOX_EDGE),
534 gtk_box_pack_start (GTK_BOX (vbox),
535 create_bbox (TRUE, "Start", 40, 85, 20, GTK_BUTTONBOX_START),
538 gtk_box_pack_start (GTK_BOX (vbox),
539 create_bbox (TRUE, "End", 40, 85, 20, GTK_BUTTONBOX_END),
542 frame_vert = gtk_frame_new ("Vertical Button Boxes");
543 gtk_box_pack_start (GTK_BOX (main_vbox), frame_vert, TRUE, TRUE, 10);
545 hbox = gtk_hbox_new (FALSE, 0);
546 gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
547 gtk_container_add (GTK_CONTAINER (frame_vert), hbox);
549 gtk_box_pack_start (GTK_BOX (hbox),
550 create_bbox (FALSE, "Spread", 30, 85, 20, GTK_BUTTONBOX_SPREAD),
553 gtk_box_pack_start (GTK_BOX (hbox),
554 create_bbox (FALSE, "Edge", 30, 85, 20, GTK_BUTTONBOX_EDGE),
557 gtk_box_pack_start (GTK_BOX (hbox),
558 create_bbox (FALSE, "Start", 30, 85, 20, GTK_BUTTONBOX_START),
561 gtk_box_pack_start (GTK_BOX (hbox),
562 create_bbox (FALSE, "End", 30, 85, 20, GTK_BUTTONBOX_END),
566 if (!GTK_WIDGET_VISIBLE (window))
567 gtk_widget_show_all (window);
569 gtk_widget_destroy (window);
577 new_pixmap (char *filename,
579 GdkColor *background)
585 pixmap = gdk_pixmap_create_from_xpm (window, &mask,
588 wpixmap = gtk_pixmap_new (pixmap, mask);
594 set_toolbar_horizontal (GtkWidget *widget,
597 gtk_toolbar_set_orientation (GTK_TOOLBAR (data), GTK_ORIENTATION_HORIZONTAL);
601 set_toolbar_vertical (GtkWidget *widget,
604 gtk_toolbar_set_orientation (GTK_TOOLBAR (data), GTK_ORIENTATION_VERTICAL);
608 set_toolbar_icons (GtkWidget *widget,
611 gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_ICONS);
615 set_toolbar_text (GtkWidget *widget,
618 gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_TEXT);
622 set_toolbar_both (GtkWidget *widget,
625 gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_BOTH);
629 set_toolbar_both_horiz (GtkWidget *widget,
632 gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_BOTH_HORIZ);
636 set_toolbar_small_space (GtkWidget *widget,
639 gtk_toolbar_set_space_size (GTK_TOOLBAR (data), 5);
643 set_toolbar_big_space (GtkWidget *widget,
646 gtk_toolbar_set_space_size (GTK_TOOLBAR (data), 10);
650 set_toolbar_enable (GtkWidget *widget,
653 gtk_toolbar_set_tooltips (GTK_TOOLBAR (data), TRUE);
657 set_toolbar_disable (GtkWidget *widget,
660 gtk_toolbar_set_tooltips (GTK_TOOLBAR (data), FALSE);
664 set_toolbar_borders (GtkWidget *widget,
667 gtk_toolbar_set_button_relief (GTK_TOOLBAR (data), GTK_RELIEF_NORMAL);
671 set_toolbar_borderless (GtkWidget *widget,
674 gtk_toolbar_set_button_relief (GTK_TOOLBAR (data), GTK_RELIEF_NONE);
678 set_toolbar_space_style_empty (GtkWidget *widget,
681 gtk_toolbar_set_space_style (GTK_TOOLBAR (data), GTK_TOOLBAR_SPACE_EMPTY);
685 set_toolbar_space_style_line (GtkWidget *widget,
688 gtk_toolbar_set_space_style (GTK_TOOLBAR (data), GTK_TOOLBAR_SPACE_LINE);
692 create_toolbar (void)
694 static GtkWidget *window = NULL;
700 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
701 gtk_window_set_title (GTK_WINDOW (window), "Toolbar test");
702 gtk_window_set_policy (GTK_WINDOW (window), FALSE, TRUE, TRUE);
704 gtk_signal_connect (GTK_OBJECT (window), "destroy",
705 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
708 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
709 gtk_widget_realize (window);
711 toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_BOTH);
712 gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NONE);
714 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
715 "Horizontal", "Horizontal toolbar layout", "Toolbar/Horizontal",
716 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
717 (GtkSignalFunc) set_toolbar_horizontal, toolbar);
718 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
719 "Vertical", "Vertical toolbar layout", "Toolbar/Vertical",
720 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
721 (GtkSignalFunc) set_toolbar_vertical, toolbar);
723 gtk_toolbar_append_space (GTK_TOOLBAR(toolbar));
725 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
726 "Icons", "Only show toolbar icons", "Toolbar/IconsOnly",
727 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
728 (GtkSignalFunc) set_toolbar_icons, toolbar);
729 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
730 "Text", "Only show toolbar text", "Toolbar/TextOnly",
731 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
732 (GtkSignalFunc) set_toolbar_text, toolbar);
733 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
734 "Both", "Show toolbar icons and text", "Toolbar/Both",
735 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
736 (GtkSignalFunc) set_toolbar_both, toolbar);
737 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
739 "Show toolbar icons and text in a horizontal fashion",
741 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
742 (GtkSignalFunc) set_toolbar_both_horiz, toolbar);
744 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
746 entry = gtk_entry_new ();
748 gtk_toolbar_append_widget (GTK_TOOLBAR (toolbar), entry, "This is an unusable GtkEntry ;)", "Hey don't click me!!!");
750 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
752 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
753 "Small", "Use small spaces", "Toolbar/Small",
754 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
755 (GtkSignalFunc) set_toolbar_small_space, toolbar);
756 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
757 "Big", "Use big spaces", "Toolbar/Big",
758 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
759 (GtkSignalFunc) set_toolbar_big_space, toolbar);
761 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
763 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
764 "Enable", "Enable tooltips", NULL,
765 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
766 (GtkSignalFunc) set_toolbar_enable, toolbar);
767 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
768 "Disable", "Disable tooltips", NULL,
769 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
770 (GtkSignalFunc) set_toolbar_disable, toolbar);
772 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
774 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
775 "Borders", "Show Borders", NULL,
776 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
777 (GtkSignalFunc) set_toolbar_borders, toolbar);
778 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
779 "Borderless", "Hide Borders", NULL,
780 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
781 (GtkSignalFunc) set_toolbar_borderless, toolbar);
783 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
785 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
786 "Empty", "Empty spaces", NULL,
787 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
788 (GtkSignalFunc) set_toolbar_space_style_empty, toolbar);
789 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
790 "Lines", "Lines in spaces", NULL,
791 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
792 (GtkSignalFunc) set_toolbar_space_style_line, toolbar);
794 gtk_container_add (GTK_CONTAINER (window), toolbar);
797 if (!GTK_WIDGET_VISIBLE (window))
798 gtk_widget_show_all (window);
800 gtk_widget_destroy (window);
804 make_toolbar (GtkWidget *window)
808 if (!GTK_WIDGET_REALIZED (window))
809 gtk_widget_realize (window);
811 toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_BOTH);
812 gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NONE);
814 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
815 "Horizontal", "Horizontal toolbar layout", NULL,
816 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
817 (GtkSignalFunc) set_toolbar_horizontal, toolbar);
818 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
819 "Vertical", "Vertical toolbar layout", NULL,
820 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
821 (GtkSignalFunc) set_toolbar_vertical, toolbar);
823 gtk_toolbar_append_space (GTK_TOOLBAR(toolbar));
825 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
826 "Icons", "Only show toolbar icons", NULL,
827 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
828 (GtkSignalFunc) set_toolbar_icons, toolbar);
829 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
830 "Text", "Only show toolbar text", NULL,
831 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
832 (GtkSignalFunc) set_toolbar_text, toolbar);
833 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
834 "Both", "Show toolbar icons and text", NULL,
835 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
836 (GtkSignalFunc) set_toolbar_both, toolbar);
838 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
840 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
841 "Small", "Use small spaces", NULL,
842 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
843 (GtkSignalFunc) set_toolbar_small_space, toolbar);
844 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
845 "Big", "Use big spaces", "Toolbar/Big",
846 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
847 (GtkSignalFunc) set_toolbar_big_space, toolbar);
849 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
851 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
852 "Enable", "Enable tooltips", NULL,
853 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
854 (GtkSignalFunc) set_toolbar_enable, toolbar);
855 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
856 "Disable", "Disable tooltips", NULL,
857 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
858 (GtkSignalFunc) set_toolbar_disable, toolbar);
860 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
862 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
863 "Borders", "Show Borders", NULL,
864 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
865 (GtkSignalFunc) set_toolbar_borders, toolbar);
866 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
867 "Borderless", "Hide Borders", NULL,
868 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
869 (GtkSignalFunc) set_toolbar_borderless, toolbar);
878 static guint statusbar_counter = 1;
881 statusbar_push (GtkWidget *button,
882 GtkStatusbar *statusbar)
886 sprintf (text, "something %d", statusbar_counter++);
888 gtk_statusbar_push (statusbar, 1, text);
892 statusbar_pop (GtkWidget *button,
893 GtkStatusbar *statusbar)
895 gtk_statusbar_pop (statusbar, 1);
899 statusbar_steal (GtkWidget *button,
900 GtkStatusbar *statusbar)
902 gtk_statusbar_remove (statusbar, 1, 4);
906 statusbar_popped (GtkStatusbar *statusbar,
910 if (!statusbar->messages)
911 statusbar_counter = 1;
915 statusbar_contexts (GtkStatusbar *statusbar)
919 string = "any context";
920 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
922 gtk_statusbar_get_context_id (statusbar, string));
924 string = "idle messages";
925 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
927 gtk_statusbar_get_context_id (statusbar, string));
929 string = "some text";
930 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
932 gtk_statusbar_get_context_id (statusbar, string));
934 string = "hit the mouse";
935 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
937 gtk_statusbar_get_context_id (statusbar, string));
939 string = "hit the mouse2";
940 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
942 gtk_statusbar_get_context_id (statusbar, string));
946 statusbar_dump_stack (GtkStatusbar *statusbar)
950 for (list = statusbar->messages; list; list = list->next)
952 GtkStatusbarMsg *msg;
955 g_print ("context_id: %d, message_id: %d, status_text: \"%s\"\n",
963 create_statusbar (void)
965 static GtkWidget *window = NULL;
969 GtkWidget *separator;
970 GtkWidget *statusbar;
974 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
976 gtk_signal_connect (GTK_OBJECT (window), "destroy",
977 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
980 gtk_window_set_title (GTK_WINDOW (window), "statusbar");
981 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
983 box1 = gtk_vbox_new (FALSE, 0);
984 gtk_container_add (GTK_CONTAINER (window), box1);
986 box2 = gtk_vbox_new (FALSE, 10);
987 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
988 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
990 statusbar = gtk_statusbar_new ();
991 gtk_box_pack_end (GTK_BOX (box1), statusbar, TRUE, TRUE, 0);
992 gtk_signal_connect (GTK_OBJECT (statusbar),
994 GTK_SIGNAL_FUNC (statusbar_popped),
997 button = gtk_widget_new (gtk_button_get_type (),
998 "label", "push something",
1001 "signal::clicked", statusbar_push, statusbar,
1004 button = gtk_widget_new (gtk_button_get_type (),
1008 "signal_after::clicked", statusbar_pop, statusbar,
1011 button = gtk_widget_new (gtk_button_get_type (),
1012 "label", "steal #4",
1015 "signal_after::clicked", statusbar_steal, statusbar,
1018 button = gtk_widget_new (gtk_button_get_type (),
1019 "label", "dump stack",
1022 "object_signal::clicked", statusbar_dump_stack, statusbar,
1025 button = gtk_widget_new (gtk_button_get_type (),
1026 "label", "test contexts",
1029 "object_signal_after::clicked", statusbar_contexts, statusbar,
1032 separator = gtk_hseparator_new ();
1033 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
1035 box2 = gtk_vbox_new (FALSE, 10);
1036 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
1037 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
1039 button = gtk_button_new_with_label ("close");
1040 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
1041 GTK_SIGNAL_FUNC(gtk_widget_destroy),
1042 GTK_OBJECT (window));
1043 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
1044 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
1045 gtk_widget_grab_default (button);
1048 if (!GTK_WIDGET_VISIBLE (window))
1049 gtk_widget_show_all (window);
1051 gtk_widget_destroy (window);
1059 cb_tree_destroy_event(GtkWidget* w)
1061 sTreeButtons* tree_buttons;
1063 /* free buttons structure associate at this tree */
1064 tree_buttons = gtk_object_get_user_data (GTK_OBJECT (w));
1065 g_free (tree_buttons);
1069 cb_add_new_item(GtkWidget* w, GtkTree* tree)
1071 sTreeButtons* tree_buttons;
1072 GList* selected_list;
1073 GtkWidget* selected_item;
1075 GtkWidget* item_new;
1078 tree_buttons = gtk_object_get_user_data(GTK_OBJECT(tree));
1080 selected_list = GTK_TREE_SELECTION(tree);
1082 if(selected_list == NULL)
1084 /* there is no item in tree */
1085 subtree = GTK_WIDGET(tree);
1089 /* list can have only one element */
1090 selected_item = GTK_WIDGET(selected_list->data);
1092 subtree = GTK_TREE_ITEM_SUBTREE(selected_item);
1096 /* current selected item have not subtree ... create it */
1097 subtree = gtk_tree_new();
1098 gtk_tree_item_set_subtree(GTK_TREE_ITEM(selected_item),
1103 /* at this point, we know which subtree will be used to add new item */
1104 /* create a new item */
1105 sprintf(buffer, "item add %d", tree_buttons->nb_item_add);
1106 item_new = gtk_tree_item_new_with_label(buffer);
1107 gtk_tree_append(GTK_TREE(subtree), item_new);
1108 gtk_widget_show(item_new);
1110 tree_buttons->nb_item_add++;
1114 cb_remove_item(GtkWidget*w, GtkTree* tree)
1116 GList* selected_list;
1119 selected_list = GTK_TREE_SELECTION(tree);
1123 while (selected_list)
1125 clear_list = g_list_prepend (clear_list, selected_list->data);
1126 selected_list = selected_list->next;
1129 clear_list = g_list_reverse (clear_list);
1130 gtk_tree_remove_items(tree, clear_list);
1132 g_list_free (clear_list);
1136 cb_remove_subtree(GtkWidget*w, GtkTree* tree)
1138 GList* selected_list;
1141 selected_list = GTK_TREE_SELECTION(tree);
1145 item = GTK_TREE_ITEM (selected_list->data);
1147 gtk_tree_item_remove_subtree (item);
1152 cb_tree_changed(GtkTree* tree)
1154 sTreeButtons* tree_buttons;
1155 GList* selected_list;
1158 tree_buttons = gtk_object_get_user_data(GTK_OBJECT(tree));
1160 selected_list = GTK_TREE_SELECTION(tree);
1161 nb_selected = g_list_length(selected_list);
1163 if(nb_selected == 0)
1165 if(tree->children == NULL)
1166 gtk_widget_set_sensitive(tree_buttons->add_button, TRUE);
1168 gtk_widget_set_sensitive(tree_buttons->add_button, FALSE);
1169 gtk_widget_set_sensitive(tree_buttons->remove_button, FALSE);
1170 gtk_widget_set_sensitive(tree_buttons->subtree_button, FALSE);
1174 gtk_widget_set_sensitive(tree_buttons->remove_button, TRUE);
1175 gtk_widget_set_sensitive(tree_buttons->add_button, (nb_selected == 1));
1176 gtk_widget_set_sensitive(tree_buttons->subtree_button, (nb_selected == 1));
1181 create_subtree(GtkWidget* item, guint level, guint nb_item_max, guint recursion_level_max)
1183 GtkWidget* item_subtree;
1184 GtkWidget* item_new;
1189 if(level == recursion_level_max) return;
1193 /* query with no root item */
1195 item_subtree = item;
1200 /* query with no root item */
1201 /* create subtree and associate it with current item */
1202 item_subtree = gtk_tree_new();
1206 for(nb_item = 0; nb_item < nb_item_max; nb_item++)
1208 sprintf(buffer, "item %d-%d", level, nb_item);
1209 item_new = gtk_tree_item_new_with_label(buffer);
1210 gtk_tree_append(GTK_TREE(item_subtree), item_new);
1211 create_subtree(item_new, level+1, nb_item_max, recursion_level_max);
1212 gtk_widget_show(item_new);
1216 gtk_tree_item_set_subtree(GTK_TREE_ITEM(item), item_subtree);
1220 create_tree_sample(guint selection_mode,
1221 guint draw_line, guint view_line, guint no_root_item,
1222 guint nb_item_max, guint recursion_level_max)
1227 GtkWidget* separator;
1229 GtkWidget* scrolled_win;
1230 GtkWidget* root_tree;
1231 GtkWidget* root_item;
1232 sTreeButtons* tree_buttons;
1234 /* create tree buttons struct */
1235 if ((tree_buttons = g_malloc (sizeof (sTreeButtons))) == NULL)
1237 g_error("can't allocate memory for tree structure !\n");
1240 tree_buttons->nb_item_add = 0;
1242 /* create top level window */
1243 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
1244 gtk_window_set_title(GTK_WINDOW(window), "Tree Sample");
1245 gtk_signal_connect(GTK_OBJECT(window), "destroy",
1246 (GtkSignalFunc) cb_tree_destroy_event, NULL);
1247 gtk_object_set_user_data(GTK_OBJECT(window), tree_buttons);
1249 box1 = gtk_vbox_new(FALSE, 0);
1250 gtk_container_add(GTK_CONTAINER(window), box1);
1251 gtk_widget_show(box1);
1253 /* create tree box */
1254 box2 = gtk_vbox_new(FALSE, 0);
1255 gtk_box_pack_start(GTK_BOX(box1), box2, TRUE, TRUE, 0);
1256 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1257 gtk_widget_show(box2);
1259 /* create scrolled window */
1260 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
1261 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
1262 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1263 gtk_box_pack_start (GTK_BOX (box2), scrolled_win, TRUE, TRUE, 0);
1264 gtk_widget_set_usize (scrolled_win, 200, 200);
1265 gtk_widget_show (scrolled_win);
1267 /* create root tree widget */
1268 root_tree = gtk_tree_new();
1269 gtk_signal_connect(GTK_OBJECT(root_tree), "selection_changed",
1270 (GtkSignalFunc)cb_tree_changed,
1272 gtk_object_set_user_data(GTK_OBJECT(root_tree), tree_buttons);
1273 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_win), root_tree);
1274 gtk_tree_set_selection_mode(GTK_TREE(root_tree), selection_mode);
1275 gtk_tree_set_view_lines(GTK_TREE(root_tree), draw_line);
1276 gtk_tree_set_view_mode(GTK_TREE(root_tree), !view_line);
1277 gtk_widget_show(root_tree);
1281 /* set root tree to subtree function with root item variable */
1282 root_item = GTK_WIDGET(root_tree);
1286 /* create root tree item widget */
1287 root_item = gtk_tree_item_new_with_label("root item");
1288 gtk_tree_append(GTK_TREE(root_tree), root_item);
1289 gtk_widget_show(root_item);
1291 create_subtree(root_item, -no_root_item, nb_item_max, recursion_level_max);
1293 box2 = gtk_vbox_new(FALSE, 0);
1294 gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, FALSE, 0);
1295 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1296 gtk_widget_show(box2);
1298 button = gtk_button_new_with_label("Add Item");
1299 gtk_widget_set_sensitive(button, FALSE);
1300 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1301 (GtkSignalFunc) cb_add_new_item,
1302 (gpointer)root_tree);
1303 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1304 gtk_widget_show(button);
1305 tree_buttons->add_button = button;
1307 button = gtk_button_new_with_label("Remove Item(s)");
1308 gtk_widget_set_sensitive(button, FALSE);
1309 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1310 (GtkSignalFunc) cb_remove_item,
1311 (gpointer)root_tree);
1312 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1313 gtk_widget_show(button);
1314 tree_buttons->remove_button = button;
1316 button = gtk_button_new_with_label("Remove Subtree");
1317 gtk_widget_set_sensitive(button, FALSE);
1318 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1319 (GtkSignalFunc) cb_remove_subtree,
1320 (gpointer)root_tree);
1321 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1322 gtk_widget_show(button);
1323 tree_buttons->subtree_button = button;
1325 /* create separator */
1326 separator = gtk_hseparator_new();
1327 gtk_box_pack_start(GTK_BOX(box1), separator, FALSE, FALSE, 0);
1328 gtk_widget_show(separator);
1330 /* create button box */
1331 box2 = gtk_vbox_new(FALSE, 0);
1332 gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, FALSE, 0);
1333 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1334 gtk_widget_show(box2);
1336 button = gtk_button_new_with_label("Close");
1337 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1338 gtk_signal_connect_object(GTK_OBJECT (button), "clicked",
1339 (GtkSignalFunc) gtk_widget_destroy,
1340 GTK_OBJECT(window));
1341 gtk_widget_show(button);
1343 gtk_widget_show(window);
1347 cb_create_tree(GtkWidget* w)
1349 guint selection_mode = GTK_SELECTION_SINGLE;
1354 guint recursion_level;
1356 /* get selection mode choice */
1357 if(GTK_TOGGLE_BUTTON(sTreeSampleSelection.single_button)->active)
1358 selection_mode = GTK_SELECTION_SINGLE;
1360 if(GTK_TOGGLE_BUTTON(sTreeSampleSelection.browse_button)->active)
1361 selection_mode = GTK_SELECTION_BROWSE;
1363 selection_mode = GTK_SELECTION_MULTIPLE;
1365 /* get options choice */
1366 draw_line = GTK_TOGGLE_BUTTON(sTreeSampleSelection.draw_line_button)->active;
1367 view_line = GTK_TOGGLE_BUTTON(sTreeSampleSelection.view_line_button)->active;
1368 no_root_item = GTK_TOGGLE_BUTTON(sTreeSampleSelection.no_root_item_button)->active;
1371 nb_item = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(sTreeSampleSelection.nb_item_spinner));
1372 recursion_level = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(sTreeSampleSelection.recursion_spinner));
1374 if (pow (nb_item, recursion_level) > 10000)
1376 g_print ("%g total items? That will take a very long time. Try less\n",
1377 pow (nb_item, recursion_level));
1381 create_tree_sample(selection_mode, draw_line, view_line, no_root_item, nb_item, recursion_level);
1385 create_tree_mode_window(void)
1387 static GtkWidget* window;
1395 GtkWidget* separator;
1402 /* create toplevel window */
1403 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
1404 gtk_window_set_title(GTK_WINDOW(window), "Set Tree Parameters");
1405 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1406 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
1408 box1 = gtk_vbox_new(FALSE, 0);
1409 gtk_container_add(GTK_CONTAINER(window), box1);
1411 /* create upper box - selection box */
1412 box2 = gtk_vbox_new(FALSE, 5);
1413 gtk_box_pack_start(GTK_BOX(box1), box2, TRUE, TRUE, 0);
1414 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1416 box3 = gtk_hbox_new(FALSE, 5);
1417 gtk_box_pack_start(GTK_BOX(box2), box3, TRUE, TRUE, 0);
1419 /* create selection mode frame */
1420 frame = gtk_frame_new("Selection Mode");
1421 gtk_box_pack_start(GTK_BOX(box3), frame, TRUE, TRUE, 0);
1423 box4 = gtk_vbox_new(FALSE, 0);
1424 gtk_container_add(GTK_CONTAINER(frame), box4);
1425 gtk_container_set_border_width(GTK_CONTAINER(box4), 5);
1427 /* create radio button */
1428 button = gtk_radio_button_new_with_label(NULL, "SINGLE");
1429 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1430 sTreeSampleSelection.single_button = button;
1432 button = gtk_radio_button_new_with_label(gtk_radio_button_group (GTK_RADIO_BUTTON (button)),
1434 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1435 sTreeSampleSelection.browse_button = button;
1437 button = gtk_radio_button_new_with_label(gtk_radio_button_group (GTK_RADIO_BUTTON (button)),
1439 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1440 sTreeSampleSelection.multiple_button = button;
1442 sTreeSampleSelection.selection_mode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (button));
1444 /* create option mode frame */
1445 frame = gtk_frame_new("Options");
1446 gtk_box_pack_start(GTK_BOX(box3), frame, TRUE, TRUE, 0);
1448 box4 = gtk_vbox_new(FALSE, 0);
1449 gtk_container_add(GTK_CONTAINER(frame), box4);
1450 gtk_container_set_border_width(GTK_CONTAINER(box4), 5);
1452 /* create check button */
1453 button = gtk_check_button_new_with_label("Draw line");
1454 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1455 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
1456 sTreeSampleSelection.draw_line_button = button;
1458 button = gtk_check_button_new_with_label("View Line mode");
1459 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1460 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
1461 sTreeSampleSelection.view_line_button = button;
1463 button = gtk_check_button_new_with_label("Without Root item");
1464 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1465 sTreeSampleSelection.no_root_item_button = button;
1467 /* create recursion parameter */
1468 frame = gtk_frame_new("Size Parameters");
1469 gtk_box_pack_start(GTK_BOX(box2), frame, TRUE, TRUE, 0);
1471 box4 = gtk_hbox_new(FALSE, 5);
1472 gtk_container_add(GTK_CONTAINER(frame), box4);
1473 gtk_container_set_border_width(GTK_CONTAINER(box4), 5);
1475 /* create number of item spin button */
1476 box5 = gtk_hbox_new(FALSE, 5);
1477 gtk_box_pack_start(GTK_BOX(box4), box5, FALSE, FALSE, 0);
1479 label = gtk_label_new("Number of items : ");
1480 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
1481 gtk_box_pack_start (GTK_BOX (box5), label, FALSE, TRUE, 0);
1483 adj = (GtkAdjustment *) gtk_adjustment_new ((gfloat)DEFAULT_NUMBER_OF_ITEM, 1.0, 255.0, 1.0,
1485 spinner = gtk_spin_button_new (adj, 0, 0);
1486 gtk_box_pack_start (GTK_BOX (box5), spinner, FALSE, TRUE, 0);
1487 sTreeSampleSelection.nb_item_spinner = spinner;
1489 /* create recursion level spin button */
1490 box5 = gtk_hbox_new(FALSE, 5);
1491 gtk_box_pack_start(GTK_BOX(box4), box5, FALSE, FALSE, 0);
1493 label = gtk_label_new("Depth : ");
1494 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
1495 gtk_box_pack_start (GTK_BOX (box5), label, FALSE, TRUE, 0);
1497 adj = (GtkAdjustment *) gtk_adjustment_new ((gfloat)DEFAULT_RECURSION_LEVEL, 0.0, 255.0, 1.0,
1499 spinner = gtk_spin_button_new (adj, 0, 0);
1500 gtk_box_pack_start (GTK_BOX (box5), spinner, FALSE, TRUE, 0);
1501 sTreeSampleSelection.recursion_spinner = spinner;
1503 /* create horizontal separator */
1504 separator = gtk_hseparator_new();
1505 gtk_box_pack_start(GTK_BOX(box1), separator, FALSE, FALSE, 0);
1507 /* create bottom button box */
1508 box2 = gtk_hbox_new(TRUE, 10);
1509 gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, FALSE, 0);
1510 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1512 button = gtk_button_new_with_label("Create Tree");
1513 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1514 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1515 (GtkSignalFunc) cb_create_tree, NULL);
1517 button = gtk_button_new_with_label("Close");
1518 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1519 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
1520 GTK_SIGNAL_FUNC(gtk_widget_destroy),
1521 GTK_OBJECT (window));
1523 if (!GTK_WIDGET_VISIBLE (window))
1524 gtk_widget_show_all (window);
1526 gtk_widget_destroy (window);
1534 handle_box_child_signal (GtkHandleBox *hb,
1536 const gchar *action)
1538 printf ("%s: child <%s> %sed\n",
1539 gtk_type_name (GTK_OBJECT_TYPE (hb)),
1540 gtk_type_name (GTK_OBJECT_TYPE (child)),
1545 create_handle_box (void)
1547 static GtkWidget* window = NULL;
1548 GtkWidget *handle_box;
1549 GtkWidget *handle_box2;
1554 GtkWidget *separator;
1558 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1559 gtk_window_set_title (GTK_WINDOW (window),
1561 gtk_window_set_policy (GTK_WINDOW (window),
1566 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1567 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
1570 gtk_container_set_border_width (GTK_CONTAINER (window), 20);
1572 vbox = gtk_vbox_new (FALSE, 0);
1573 gtk_container_add (GTK_CONTAINER (window), vbox);
1574 gtk_widget_show (vbox);
1576 label = gtk_label_new ("Above");
1577 gtk_container_add (GTK_CONTAINER (vbox), label);
1578 gtk_widget_show (label);
1580 separator = gtk_hseparator_new ();
1581 gtk_container_add (GTK_CONTAINER (vbox), separator);
1582 gtk_widget_show (separator);
1584 hbox = gtk_hbox_new (FALSE, 10);
1585 gtk_container_add (GTK_CONTAINER (vbox), hbox);
1586 gtk_widget_show (hbox);
1588 separator = gtk_hseparator_new ();
1589 gtk_container_add (GTK_CONTAINER (vbox), separator);
1590 gtk_widget_show (separator);
1592 label = gtk_label_new ("Below");
1593 gtk_container_add (GTK_CONTAINER (vbox), label);
1594 gtk_widget_show (label);
1596 handle_box = gtk_handle_box_new ();
1597 gtk_box_pack_start (GTK_BOX (hbox), handle_box, FALSE, FALSE, 0);
1598 gtk_signal_connect (GTK_OBJECT (handle_box),
1600 GTK_SIGNAL_FUNC (handle_box_child_signal),
1602 gtk_signal_connect (GTK_OBJECT (handle_box),
1604 GTK_SIGNAL_FUNC (handle_box_child_signal),
1606 gtk_widget_show (handle_box);
1608 toolbar = make_toolbar (window);
1609 gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NORMAL);
1610 gtk_container_add (GTK_CONTAINER (handle_box), toolbar);
1611 gtk_widget_show (toolbar);
1613 handle_box = gtk_handle_box_new ();
1614 gtk_box_pack_start (GTK_BOX (hbox), handle_box, FALSE, FALSE, 0);
1615 gtk_signal_connect (GTK_OBJECT (handle_box),
1617 GTK_SIGNAL_FUNC (handle_box_child_signal),
1619 gtk_signal_connect (GTK_OBJECT (handle_box),
1621 GTK_SIGNAL_FUNC (handle_box_child_signal),
1623 gtk_widget_show (handle_box);
1625 handle_box2 = gtk_handle_box_new ();
1626 gtk_container_add (GTK_CONTAINER (handle_box), handle_box2);
1627 gtk_signal_connect (GTK_OBJECT (handle_box2),
1629 GTK_SIGNAL_FUNC (handle_box_child_signal),
1631 gtk_signal_connect (GTK_OBJECT (handle_box2),
1633 GTK_SIGNAL_FUNC (handle_box_child_signal),
1635 gtk_widget_show (handle_box2);
1637 label = gtk_label_new ("Fooo!");
1638 gtk_container_add (GTK_CONTAINER (handle_box2), label);
1639 gtk_widget_show (label);
1642 if (!GTK_WIDGET_VISIBLE (window))
1643 gtk_widget_show (window);
1645 gtk_widget_destroy (window);
1651 void create_labels (void)
1653 static GtkWidget *window = NULL;
1661 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1662 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1663 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
1666 gtk_window_set_title (GTK_WINDOW (window), "Label");
1667 vbox = gtk_vbox_new (FALSE, 5);
1668 hbox = gtk_hbox_new (FALSE, 5);
1669 gtk_container_add (GTK_CONTAINER (window), hbox);
1670 gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);
1671 gtk_container_set_border_width (GTK_CONTAINER (window), 5);
1673 frame = gtk_frame_new ("Normal Label");
1674 label = gtk_label_new ("This is a Normal label");
1675 gtk_container_add (GTK_CONTAINER (frame), label);
1676 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
1678 frame = gtk_frame_new ("Multi-line Label");
1679 label = gtk_label_new ("This is a Multi-line label.\nSecond line\nThird line");
1680 gtk_container_add (GTK_CONTAINER (frame), label);
1681 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
1683 frame = gtk_frame_new ("Left Justified Label");
1684 label = gtk_label_new ("This is a Left-Justified\nMulti-line label.\nThird line");
1685 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
1686 gtk_container_add (GTK_CONTAINER (frame), label);
1687 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
1689 frame = gtk_frame_new ("Right Justified Label");
1690 label = gtk_label_new ("This is a Right-Justified\nMulti-line label.\nFourth line, (j/k)");
1691 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_RIGHT);
1692 gtk_container_add (GTK_CONTAINER (frame), label);
1693 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
1695 vbox = gtk_vbox_new (FALSE, 5);
1696 gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);
1697 frame = gtk_frame_new ("Line wrapped label");
1698 label = gtk_label_new ("This is an example of a line-wrapped label. It should not be taking "\
1699 "up the entire "/* big space to test spacing */\
1700 "width allocated to it, but automatically wraps the words to fit. "\
1701 "The time has come, for all good men, to come to the aid of their party. "\
1702 "The sixth sheik's six sheep's sick.\n"\
1703 " It supports multiple paragraphs correctly, and correctly adds "\
1704 "many extra spaces. ");
1706 gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
1707 gtk_container_add (GTK_CONTAINER (frame), label);
1708 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
1710 frame = gtk_frame_new ("Filled, wrapped label");
1711 label = gtk_label_new ("This is an example of a line-wrapped, filled label. It should be taking "\
1712 "up the entire width allocated to it. Here is a seneance to prove "\
1713 "my point. Here is another sentence. "\
1714 "Here comes the sun, do de do de do.\n"\
1715 " This is a new paragraph.\n"\
1716 " This is another newer, longer, better paragraph. It is coming to an end, "\
1718 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_FILL);
1719 gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
1720 gtk_container_add (GTK_CONTAINER (frame), label);
1721 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
1723 frame = gtk_frame_new ("Underlined label");
1724 label = gtk_label_new ("This label is underlined!\n"
1725 "This one is underlined in ÆüËܸì¤ÎÆþÍÑquite a funky fashion");
1726 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
1727 gtk_label_set_pattern (GTK_LABEL (label), "_________________________ _ _________ _ _____ _ __ __ ___ ____ _____");
1728 gtk_container_add (GTK_CONTAINER (frame), label);
1729 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
1732 if (!GTK_WIDGET_VISIBLE (window))
1733 gtk_widget_show_all (window);
1735 gtk_widget_destroy (window);
1743 reparent_label (GtkWidget *widget,
1744 GtkWidget *new_parent)
1748 label = gtk_object_get_user_data (GTK_OBJECT (widget));
1750 gtk_widget_reparent (label, new_parent);
1754 set_parent_signal (GtkWidget *child,
1755 GtkWidget *old_parent,
1758 g_print ("set_parent for \"%s\": new parent: \"%s\", old parent: \"%s\", data: %d\n",
1759 gtk_type_name (GTK_OBJECT_TYPE (child)),
1760 child->parent ? gtk_type_name (GTK_OBJECT_TYPE (child->parent)) : "NULL",
1761 old_parent ? gtk_type_name (GTK_OBJECT_TYPE (old_parent)) : "NULL",
1762 GPOINTER_TO_INT (func_data));
1766 create_reparent (void)
1768 static GtkWidget *window = NULL;
1775 GtkWidget *separator;
1779 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1781 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1782 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
1785 gtk_window_set_title (GTK_WINDOW (window), "reparent");
1786 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
1788 box1 = gtk_vbox_new (FALSE, 0);
1789 gtk_container_add (GTK_CONTAINER (window), box1);
1791 box2 = gtk_hbox_new (FALSE, 5);
1792 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
1793 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
1795 label = gtk_label_new ("Hello World");
1797 frame = gtk_frame_new ("Frame 1");
1798 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
1800 box3 = gtk_vbox_new (FALSE, 5);
1801 gtk_container_set_border_width (GTK_CONTAINER (box3), 5);
1802 gtk_container_add (GTK_CONTAINER (frame), box3);
1804 button = gtk_button_new_with_label ("switch");
1805 gtk_signal_connect (GTK_OBJECT (button), "clicked",
1806 GTK_SIGNAL_FUNC(reparent_label),
1808 gtk_object_set_user_data (GTK_OBJECT (button), label);
1809 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
1811 gtk_box_pack_start (GTK_BOX (box3), label, FALSE, TRUE, 0);
1812 gtk_signal_connect (GTK_OBJECT (label),
1814 GTK_SIGNAL_FUNC (set_parent_signal),
1815 GINT_TO_POINTER (42));
1817 frame = gtk_frame_new ("Frame 2");
1818 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
1820 box3 = gtk_vbox_new (FALSE, 5);
1821 gtk_container_set_border_width (GTK_CONTAINER (box3), 5);
1822 gtk_container_add (GTK_CONTAINER (frame), box3);
1824 button = gtk_button_new_with_label ("switch");
1825 gtk_signal_connect (GTK_OBJECT (button), "clicked",
1826 GTK_SIGNAL_FUNC(reparent_label),
1828 gtk_object_set_user_data (GTK_OBJECT (button), label);
1829 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
1831 separator = gtk_hseparator_new ();
1832 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
1834 box2 = gtk_vbox_new (FALSE, 10);
1835 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
1836 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
1838 button = gtk_button_new_with_label ("close");
1839 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
1840 GTK_SIGNAL_FUNC(gtk_widget_destroy),
1841 GTK_OBJECT (window));
1842 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
1843 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
1844 gtk_widget_grab_default (button);
1847 if (!GTK_WIDGET_VISIBLE (window))
1848 gtk_widget_show_all (window);
1850 gtk_widget_destroy (window);
1856 gint upositionx = 0;
1857 gint upositiony = 0;
1860 uposition_configure (GtkWidget *window)
1866 lx = gtk_object_get_data (GTK_OBJECT (window), "x");
1867 ly = gtk_object_get_data (GTK_OBJECT (window), "y");
1869 gdk_window_get_root_origin (window->window, &upositionx, &upositiony);
1870 sprintf (buffer, "%d", upositionx);
1871 gtk_label_set_text (lx, buffer);
1872 sprintf (buffer, "%d", upositiony);
1873 gtk_label_set_text (ly, buffer);
1879 create_saved_position (void)
1881 static GtkWidget *window = NULL;
1886 GtkWidget *main_vbox;
1894 window = gtk_widget_new (GTK_TYPE_WINDOW,
1895 "type", GTK_WINDOW_TOPLEVEL,
1896 "signal::configure_event", uposition_configure, NULL,
1899 "title", "Saved Position",
1902 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1903 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
1906 main_vbox = gtk_vbox_new (FALSE, 5);
1907 gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 0);
1908 gtk_container_add (GTK_CONTAINER (window), main_vbox);
1911 gtk_widget_new (gtk_vbox_get_type (),
1912 "GtkBox::homogeneous", FALSE,
1913 "GtkBox::spacing", 5,
1914 "GtkContainer::border_width", 10,
1915 "GtkWidget::parent", main_vbox,
1916 "GtkWidget::visible", TRUE,
1919 hbox = gtk_hbox_new (FALSE, 0);
1920 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
1921 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
1923 label = gtk_label_new ("X Origin : ");
1924 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
1925 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
1927 x_label = gtk_label_new ("");
1928 gtk_box_pack_start (GTK_BOX (hbox), x_label, TRUE, TRUE, 0);
1929 gtk_object_set_data (GTK_OBJECT (window), "x", x_label);
1931 hbox = gtk_hbox_new (FALSE, 0);
1932 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
1933 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
1935 label = gtk_label_new ("Y Origin : ");
1936 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
1937 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
1939 y_label = gtk_label_new ("");
1940 gtk_box_pack_start (GTK_BOX (hbox), y_label, TRUE, TRUE, 0);
1941 gtk_object_set_data (GTK_OBJECT (window), "y", y_label);
1944 gtk_widget_new (gtk_hseparator_get_type (),
1945 "GtkWidget::visible", TRUE,
1947 gtk_box_pack_start (GTK_BOX (main_vbox), any, FALSE, TRUE, 0);
1949 hbox = gtk_hbox_new (FALSE, 0);
1950 gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
1951 gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
1953 button = gtk_button_new_with_label ("Close");
1954 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
1955 GTK_SIGNAL_FUNC (gtk_widget_destroy),
1956 GTK_OBJECT (window));
1957 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
1958 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
1959 gtk_widget_grab_default (button);
1961 gtk_widget_show_all (window);
1964 gtk_widget_destroy (window);
1972 create_pixmap (void)
1974 static GtkWidget *window = NULL;
1980 GtkWidget *separator;
1981 GtkWidget *pixmapwid;
1987 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1989 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1990 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
1993 gtk_window_set_title (GTK_WINDOW (window), "GtkPixmap");
1994 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
1995 gtk_widget_realize(window);
1997 box1 = gtk_vbox_new (FALSE, 0);
1998 gtk_container_add (GTK_CONTAINER (window), box1);
2000 box2 = gtk_vbox_new (FALSE, 10);
2001 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2002 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2004 button = gtk_button_new ();
2005 gtk_box_pack_start (GTK_BOX (box2), button, FALSE, FALSE, 0);
2007 pixmap = gdk_pixmap_create_from_xpm (window->window, &mask, NULL,
2009 pixmapwid = gtk_pixmap_new (pixmap, mask);
2010 gdk_pixmap_unref (pixmap);
2011 gdk_pixmap_unref (mask);
2013 label = gtk_label_new ("Pixmap\ntest");
2014 box3 = gtk_hbox_new (FALSE, 0);
2015 gtk_container_set_border_width (GTK_CONTAINER (box3), 2);
2016 gtk_container_add (GTK_CONTAINER (box3), pixmapwid);
2017 gtk_container_add (GTK_CONTAINER (box3), label);
2018 gtk_container_add (GTK_CONTAINER (button), box3);
2020 separator = gtk_hseparator_new ();
2021 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2023 box2 = gtk_vbox_new (FALSE, 10);
2024 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2025 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2027 button = gtk_button_new_with_label ("close");
2028 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2029 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2030 GTK_OBJECT (window));
2031 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2032 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2033 gtk_widget_grab_default (button);
2036 if (!GTK_WIDGET_VISIBLE (window))
2037 gtk_widget_show_all (window);
2039 gtk_widget_destroy (window);
2043 tips_query_widget_entered (GtkTipsQuery *tips_query,
2045 const gchar *tip_text,
2046 const gchar *tip_private,
2049 if (GTK_TOGGLE_BUTTON (toggle)->active)
2051 gtk_label_set_text (GTK_LABEL (tips_query), tip_text ? "There is a Tip!" : "There is no Tip!");
2052 /* don't let GtkTipsQuery reset it's label */
2053 gtk_signal_emit_stop_by_name (GTK_OBJECT (tips_query), "widget_entered");
2058 tips_query_widget_selected (GtkWidget *tips_query,
2060 const gchar *tip_text,
2061 const gchar *tip_private,
2062 GdkEventButton *event,
2066 g_print ("Help \"%s\" requested for <%s>\n",
2067 tip_private ? tip_private : "None",
2068 gtk_type_name (GTK_OBJECT_TYPE (widget)));
2073 create_tooltips (void)
2075 static GtkWidget *window = NULL;
2082 GtkWidget *tips_query;
2083 GtkWidget *separator;
2084 GtkTooltips *tooltips;
2089 gtk_widget_new (gtk_window_get_type (),
2090 "GtkWindow::type", GTK_WINDOW_TOPLEVEL,
2091 "GtkContainer::border_width", 0,
2092 "GtkWindow::title", "Tooltips",
2093 "GtkWindow::allow_shrink", TRUE,
2094 "GtkWindow::allow_grow", FALSE,
2095 "GtkWindow::auto_shrink", TRUE,
2096 "GtkWidget::width", 200,
2099 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2100 GTK_SIGNAL_FUNC (destroy_tooltips),
2103 tooltips=gtk_tooltips_new();
2104 gtk_object_set_data (GTK_OBJECT (window), "tooltips", tooltips);
2106 box1 = gtk_vbox_new (FALSE, 0);
2107 gtk_container_add (GTK_CONTAINER (window), box1);
2109 box2 = gtk_vbox_new (FALSE, 10);
2110 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2111 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2113 button = gtk_toggle_button_new_with_label ("button1");
2114 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2116 gtk_tooltips_set_tip (tooltips,button,"This is button 1", "ContextHelp/buttons/1");
2118 button = gtk_toggle_button_new_with_label ("button2");
2119 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2121 gtk_tooltips_set_tip (tooltips,
2123 "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.",
2124 "ContextHelp/buttons/2_long");
2126 toggle = gtk_toggle_button_new_with_label ("Override TipsQuery Label");
2127 gtk_box_pack_start (GTK_BOX (box2), toggle, TRUE, TRUE, 0);
2129 gtk_tooltips_set_tip (tooltips, toggle, "Toggle TipsQuery view.", "Hi msw! ;)");
2132 gtk_widget_new (gtk_vbox_get_type (),
2133 "GtkBox::homogeneous", FALSE,
2134 "GtkBox::spacing", 5,
2135 "GtkContainer::border_width", 5,
2136 "GtkWidget::visible", TRUE,
2139 tips_query = gtk_tips_query_new ();
2142 gtk_widget_new (gtk_button_get_type (),
2143 "GtkButton::label", "[?]",
2144 "GtkWidget::visible", TRUE,
2145 "GtkWidget::parent", box3,
2146 "GtkObject::object_signal::clicked", gtk_tips_query_start_query, tips_query,
2148 gtk_box_set_child_packing (GTK_BOX (box3), button, FALSE, FALSE, 0, GTK_PACK_START);
2149 gtk_tooltips_set_tip (tooltips,
2151 "Start the Tooltips Inspector",
2152 "ContextHelp/buttons/?");
2155 gtk_widget_set (tips_query,
2156 "GtkWidget::visible", TRUE,
2157 "GtkWidget::parent", box3,
2158 "GtkTipsQuery::caller", button,
2159 "GtkObject::signal::widget_entered", tips_query_widget_entered, toggle,
2160 "GtkObject::signal::widget_selected", tips_query_widget_selected, NULL,
2164 gtk_widget_new (gtk_frame_get_type (),
2165 "GtkFrame::label", "ToolTips Inspector",
2166 "GtkFrame::label_xalign", (double) 0.5,
2167 "GtkContainer::border_width", 0,
2168 "GtkWidget::visible", TRUE,
2169 "GtkWidget::parent", box2,
2170 "GtkContainer::child", box3,
2172 gtk_box_set_child_packing (GTK_BOX (box2), frame, TRUE, TRUE, 10, GTK_PACK_START);
2174 separator = gtk_hseparator_new ();
2175 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2177 box2 = gtk_vbox_new (FALSE, 10);
2178 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2179 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2181 button = gtk_button_new_with_label ("close");
2182 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2183 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2184 GTK_OBJECT (window));
2185 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2186 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2187 gtk_widget_grab_default (button);
2189 gtk_tooltips_set_tip (tooltips, button, "Push this button to close window", "ContextHelp/buttons/Close");
2192 if (!GTK_WIDGET_VISIBLE (window))
2193 gtk_widget_show_all (window);
2195 gtk_widget_destroy (window);
2203 create_menu (gint depth, gboolean tearoff)
2206 GtkWidget *menuitem;
2214 menu = gtk_menu_new ();
2219 menuitem = gtk_tearoff_menu_item_new ();
2220 gtk_menu_append (GTK_MENU (menu), menuitem);
2221 gtk_widget_show (menuitem);
2224 for (i = 0, j = 1; i < 5; i++, j++)
2226 sprintf (buf, "item %2d - %d", depth, j);
2227 menuitem = gtk_radio_menu_item_new_with_label (group, buf);
2228 group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menuitem));
2230 gtk_check_menu_item_set_show_toggle (GTK_CHECK_MENU_ITEM (menuitem), TRUE);
2231 gtk_menu_append (GTK_MENU (menu), menuitem);
2232 gtk_widget_show (menuitem);
2234 gtk_widget_set_sensitive (menuitem, FALSE);
2236 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (depth - 1, TRUE));
2245 static GtkWidget *window = NULL;
2249 GtkWidget *optionmenu;
2250 GtkWidget *separator;
2256 GtkWidget *menuitem;
2257 GtkAccelGroup *accel_group;
2259 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2261 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2262 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2264 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
2265 GTK_SIGNAL_FUNC (gtk_true),
2268 accel_group = gtk_accel_group_new ();
2269 gtk_accel_group_attach (accel_group, GTK_OBJECT (window));
2271 gtk_window_set_title (GTK_WINDOW (window), "menus");
2272 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
2275 box1 = gtk_vbox_new (FALSE, 0);
2276 gtk_container_add (GTK_CONTAINER (window), box1);
2277 gtk_widget_show (box1);
2279 menubar = gtk_menu_bar_new ();
2280 gtk_box_pack_start (GTK_BOX (box1), menubar, FALSE, TRUE, 0);
2281 gtk_widget_show (menubar);
2283 menu = create_menu (2, TRUE);
2285 menuitem = gtk_menu_item_new_with_label ("test\nline2");
2286 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), menu);
2287 gtk_menu_bar_append (GTK_MENU_BAR (menubar), menuitem);
2288 gtk_widget_show (menuitem);
2290 menuitem = gtk_menu_item_new_with_label ("foo");
2291 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (3, TRUE));
2292 gtk_menu_bar_append (GTK_MENU_BAR (menubar), menuitem);
2293 gtk_widget_show (menuitem);
2295 menuitem = gtk_menu_item_new_with_label ("bar");
2296 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (4, TRUE));
2297 gtk_menu_item_right_justify (GTK_MENU_ITEM (menuitem));
2298 gtk_menu_bar_append (GTK_MENU_BAR (menubar), menuitem);
2299 gtk_widget_show (menuitem);
2301 box2 = gtk_vbox_new (FALSE, 10);
2302 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2303 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2304 gtk_widget_show (box2);
2306 menu = create_menu (1, FALSE);
2307 gtk_menu_set_accel_group (GTK_MENU (menu), accel_group);
2309 menuitem = gtk_check_menu_item_new_with_label ("Accelerate Me");
2310 gtk_menu_append (GTK_MENU (menu), menuitem);
2311 gtk_widget_show (menuitem);
2312 gtk_widget_add_accelerator (menuitem,
2317 GTK_ACCEL_VISIBLE | GTK_ACCEL_SIGNAL_VISIBLE);
2318 menuitem = gtk_check_menu_item_new_with_label ("Accelerator Locked");
2319 gtk_menu_append (GTK_MENU (menu), menuitem);
2320 gtk_widget_show (menuitem);
2321 gtk_widget_add_accelerator (menuitem,
2326 GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
2327 menuitem = gtk_check_menu_item_new_with_label ("Accelerators Frozen");
2328 gtk_menu_append (GTK_MENU (menu), menuitem);
2329 gtk_widget_show (menuitem);
2330 gtk_widget_add_accelerator (menuitem,
2336 gtk_widget_add_accelerator (menuitem,
2342 gtk_widget_lock_accelerators (menuitem);
2344 optionmenu = gtk_option_menu_new ();
2345 gtk_option_menu_set_menu (GTK_OPTION_MENU (optionmenu), menu);
2346 gtk_option_menu_set_history (GTK_OPTION_MENU (optionmenu), 3);
2347 gtk_box_pack_start (GTK_BOX (box2), optionmenu, TRUE, TRUE, 0);
2348 gtk_widget_show (optionmenu);
2350 separator = gtk_hseparator_new ();
2351 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2352 gtk_widget_show (separator);
2354 box2 = gtk_vbox_new (FALSE, 10);
2355 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2356 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2357 gtk_widget_show (box2);
2359 button = gtk_button_new_with_label ("close");
2360 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2361 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2362 GTK_OBJECT (window));
2363 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2364 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2365 gtk_widget_grab_default (button);
2366 gtk_widget_show (button);
2369 if (!GTK_WIDGET_VISIBLE (window))
2370 gtk_widget_show (window);
2372 gtk_widget_destroy (window);
2376 gtk_ifactory_cb (gpointer callback_data,
2377 guint callback_action,
2380 g_message ("ItemFactory: activated \"%s\"", gtk_item_factory_path_from_widget (widget));
2383 static GtkItemFactoryEntry menu_items[] =
2385 { "/_File", NULL, 0, 0, "<Branch>" },
2386 { "/File/tearoff1", NULL, gtk_ifactory_cb, 0, "<Tearoff>" },
2387 { "/File/_New", "<control>N", gtk_ifactory_cb, 0 },
2388 { "/File/_Open", "<control>O", gtk_ifactory_cb, 0 },
2389 { "/File/_Save", "<control>S", gtk_ifactory_cb, 0 },
2390 { "/File/Save _As...", NULL, gtk_ifactory_cb, 0 },
2391 { "/File/sep1", NULL, gtk_ifactory_cb, 0, "<Separator>" },
2392 { "/File/_Quit", "<control>Q", gtk_ifactory_cb, 0 },
2394 { "/_Preferences", NULL, 0, 0, "<Branch>" },
2395 { "/_Preferences/_Color", NULL, 0, 0, "<Branch>" },
2396 { "/_Preferences/Color/_Red", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
2397 { "/_Preferences/Color/_Green", NULL, gtk_ifactory_cb, 0, "/Preferences/Color/Red" },
2398 { "/_Preferences/Color/_Blue", NULL, gtk_ifactory_cb, 0, "/Preferences/Color/Red" },
2399 { "/_Preferences/_Shape", NULL, 0, 0, "<Branch>" },
2400 { "/_Preferences/Shape/_Square", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
2401 { "/_Preferences/Shape/_Rectangle", NULL, gtk_ifactory_cb, 0, "/Preferences/Shape/Square" },
2402 { "/_Preferences/Shape/_Oval", NULL, gtk_ifactory_cb, 0, "/Preferences/Shape/Rectangle" },
2404 { "/_Help", NULL, 0, 0, "<LastBranch>" },
2405 { "/Help/_About", NULL, gtk_ifactory_cb, 0 },
2408 static int nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]);
2411 create_item_factory (void)
2413 static GtkWidget *window = NULL;
2419 GtkWidget *separator;
2422 GtkAccelGroup *accel_group;
2423 GtkItemFactory *item_factory;
2425 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2427 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2428 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2430 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
2431 GTK_SIGNAL_FUNC (gtk_true),
2434 accel_group = gtk_accel_group_new ();
2435 item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>", accel_group);
2436 gtk_object_set_data_full (GTK_OBJECT (window),
2439 (GtkDestroyNotify) gtk_object_unref);
2440 gtk_accel_group_attach (accel_group, GTK_OBJECT (window));
2441 gtk_window_set_title (GTK_WINDOW (window), "Item Factory");
2442 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
2443 gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL);
2445 /* preselect /Preferences/Shape/Oval over the other radios
2447 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (gtk_item_factory_get_item (item_factory,
2448 "/Preferences/Shape/Oval")),
2451 box1 = gtk_vbox_new (FALSE, 0);
2452 gtk_container_add (GTK_CONTAINER (window), box1);
2454 gtk_box_pack_start (GTK_BOX (box1),
2455 gtk_item_factory_get_widget (item_factory, "<main>"),
2458 label = gtk_label_new ("Type\n<alt>\nto start");
2459 gtk_widget_set_usize (label, 200, 200);
2460 gtk_misc_set_alignment (GTK_MISC (label), 0.5, 0.5);
2461 gtk_box_pack_start (GTK_BOX (box1), label, TRUE, TRUE, 0);
2464 separator = gtk_hseparator_new ();
2465 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2468 box2 = gtk_vbox_new (FALSE, 10);
2469 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2470 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2472 button = gtk_button_new_with_label ("close");
2473 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2474 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2475 GTK_OBJECT (window));
2476 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2477 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2478 gtk_widget_grab_default (button);
2480 gtk_widget_show_all (window);
2483 gtk_widget_destroy (window);
2491 scrolled_windows_remove (GtkWidget *widget, GtkWidget *scrollwin)
2493 static GtkWidget *parent = NULL;
2494 static GtkWidget *float_parent;
2498 gtk_widget_reparent (scrollwin, parent);
2499 gtk_widget_destroy (float_parent);
2500 float_parent = NULL;
2505 parent = widget->parent;
2506 float_parent = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2507 gtk_widget_reparent (scrollwin, float_parent);
2508 gtk_widget_show (float_parent);
2517 cmw_destroy_cb(GtkWidget *widget)
2519 /* This is needed to get out of gtk_main */
2526 cmw_color (GtkWidget *widget, GtkWidget *parent)
2530 csd=gtk_color_selection_dialog_new ("This is a modal color selection dialog");
2533 gtk_window_set_modal (GTK_WINDOW(csd),TRUE);
2535 /* And mark it as a transient dialog */
2536 gtk_window_set_transient_for (GTK_WINDOW (csd), GTK_WINDOW (parent));
2538 gtk_signal_connect (GTK_OBJECT(csd), "destroy",
2539 GTK_SIGNAL_FUNC(cmw_destroy_cb),NULL);
2541 gtk_signal_connect_object (GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(csd)->ok_button),
2542 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
2544 gtk_signal_connect_object (GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(csd)->cancel_button),
2545 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
2548 /* wait until destroy calls gtk_main_quit */
2549 gtk_widget_show (csd);
2554 cmw_file (GtkWidget *widget, GtkWidget *parent)
2558 fs = gtk_file_selection_new("This is a modal file selection dialog");
2561 gtk_window_set_modal (GTK_WINDOW(fs),TRUE);
2563 /* And mark it as a transient dialog */
2564 gtk_window_set_transient_for (GTK_WINDOW (fs), GTK_WINDOW (parent));
2566 gtk_signal_connect (GTK_OBJECT(fs), "destroy",
2567 GTK_SIGNAL_FUNC(cmw_destroy_cb),NULL);
2569 gtk_signal_connect_object (GTK_OBJECT(GTK_FILE_SELECTION(fs)->ok_button),
2570 "clicked",GTK_SIGNAL_FUNC(gtk_widget_destroy),
2572 gtk_signal_connect_object (GTK_OBJECT(GTK_FILE_SELECTION(fs)->cancel_button),
2573 "clicked",GTK_SIGNAL_FUNC(gtk_widget_destroy),
2576 /* wait until destroy calls gtk_main_quit */
2577 gtk_widget_show (fs);
2584 create_modal_window (void)
2586 GtkWidget *window = NULL;
2587 GtkWidget *box1,*box2;
2589 GtkWidget *btnColor,*btnFile,*btnClose;
2591 /* Create modal window (Here you can use any window descendent )*/
2592 window=gtk_window_new (GTK_WINDOW_TOPLEVEL);
2593 gtk_window_set_title (GTK_WINDOW(window),"This window is modal");
2595 /* Set window as modal */
2596 gtk_window_set_modal (GTK_WINDOW(window),TRUE);
2598 /* Create widgets */
2599 box1 = gtk_vbox_new (FALSE,5);
2600 frame1 = gtk_frame_new ("Standard dialogs in modal form");
2601 box2 = gtk_vbox_new (TRUE,5);
2602 btnColor = gtk_button_new_with_label ("Color");
2603 btnFile = gtk_button_new_with_label ("File Selection");
2604 btnClose = gtk_button_new_with_label ("Close");
2607 gtk_container_set_border_width (GTK_CONTAINER(box1),3);
2608 gtk_container_set_border_width (GTK_CONTAINER(box2),3);
2611 gtk_container_add (GTK_CONTAINER (window), box1);
2612 gtk_box_pack_start (GTK_BOX (box1), frame1, TRUE, TRUE, 4);
2613 gtk_container_add (GTK_CONTAINER (frame1), box2);
2614 gtk_box_pack_start (GTK_BOX (box2), btnColor, FALSE, FALSE, 4);
2615 gtk_box_pack_start (GTK_BOX (box2), btnFile, FALSE, FALSE, 4);
2616 gtk_box_pack_start (GTK_BOX (box1), gtk_hseparator_new (), FALSE, FALSE, 4);
2617 gtk_box_pack_start (GTK_BOX (box1), btnClose, FALSE, FALSE, 4);
2619 /* connect signals */
2620 gtk_signal_connect_object (GTK_OBJECT (btnClose), "clicked",
2621 GTK_SIGNAL_FUNC (gtk_widget_destroy),
2622 GTK_OBJECT (window));
2624 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2625 GTK_SIGNAL_FUNC (cmw_destroy_cb),NULL);
2627 gtk_signal_connect (GTK_OBJECT (btnColor), "clicked",
2628 GTK_SIGNAL_FUNC (cmw_color),window);
2629 gtk_signal_connect (GTK_OBJECT (btnFile), "clicked",
2630 GTK_SIGNAL_FUNC (cmw_file),window);
2633 gtk_widget_show_all (window);
2635 /* wait until dialog get destroyed */
2644 create_scrolled_windows (void)
2646 static GtkWidget *window;
2647 GtkWidget *scrolled_window;
2655 window = gtk_dialog_new ();
2657 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2658 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2661 gtk_window_set_title (GTK_WINDOW (window), "dialog");
2662 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
2665 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
2666 gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10);
2667 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
2668 GTK_POLICY_AUTOMATIC,
2669 GTK_POLICY_AUTOMATIC);
2670 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
2671 scrolled_window, TRUE, TRUE, 0);
2672 gtk_widget_show (scrolled_window);
2674 table = gtk_table_new (20, 20, FALSE);
2675 gtk_table_set_row_spacings (GTK_TABLE (table), 10);
2676 gtk_table_set_col_spacings (GTK_TABLE (table), 10);
2677 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), table);
2678 gtk_container_set_focus_hadjustment (GTK_CONTAINER (table),
2679 gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
2680 gtk_container_set_focus_vadjustment (GTK_CONTAINER (table),
2681 gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
2682 gtk_widget_show (table);
2684 for (i = 0; i < 20; i++)
2685 for (j = 0; j < 20; j++)
2687 sprintf (buffer, "button (%d,%d)\n", i, j);
2688 button = gtk_toggle_button_new_with_label (buffer);
2689 gtk_table_attach_defaults (GTK_TABLE (table), button,
2691 gtk_widget_show (button);
2695 button = gtk_button_new_with_label ("close");
2696 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2697 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2698 GTK_OBJECT (window));
2699 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2700 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
2701 button, TRUE, TRUE, 0);
2702 gtk_widget_grab_default (button);
2703 gtk_widget_show (button);
2705 button = gtk_button_new_with_label ("remove");
2706 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2707 GTK_SIGNAL_FUNC(scrolled_windows_remove),
2708 GTK_OBJECT (scrolled_window));
2709 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2710 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
2711 button, TRUE, TRUE, 0);
2712 gtk_widget_grab_default (button);
2713 gtk_widget_show (button);
2715 gtk_window_set_default_size (GTK_WINDOW (window), 300, 300);
2718 if (!GTK_WIDGET_VISIBLE (window))
2719 gtk_widget_show (window);
2721 gtk_widget_destroy (window);
2729 entry_toggle_editable (GtkWidget *checkbutton,
2732 gtk_entry_set_editable(GTK_ENTRY(entry),
2733 GTK_TOGGLE_BUTTON(checkbutton)->active);
2737 entry_toggle_sensitive (GtkWidget *checkbutton,
2740 gtk_widget_set_sensitive (entry, GTK_TOGGLE_BUTTON(checkbutton)->active);
2744 entry_toggle_visibility (GtkWidget *checkbutton,
2747 gtk_entry_set_visibility(GTK_ENTRY(entry),
2748 GTK_TOGGLE_BUTTON(checkbutton)->active);
2754 static GtkWidget *window = NULL;
2757 GtkWidget *editable_check;
2758 GtkWidget *sensitive_check;
2759 GtkWidget *entry, *cb;
2761 GtkWidget *separator;
2762 GList *cbitems = NULL;
2766 cbitems = g_list_append(cbitems, "item0");
2767 cbitems = g_list_append(cbitems, "item1 item1");
2768 cbitems = g_list_append(cbitems, "item2 item2 item2");
2769 cbitems = g_list_append(cbitems, "item3 item3 item3 item3");
2770 cbitems = g_list_append(cbitems, "item4 item4 item4 item4 item4");
2771 cbitems = g_list_append(cbitems, "item5 item5 item5 item5 item5 item5");
2772 cbitems = g_list_append(cbitems, "item6 item6 item6 item6 item6");
2773 cbitems = g_list_append(cbitems, "item7 item7 item7 item7");
2774 cbitems = g_list_append(cbitems, "item8 item8 item8");
2775 cbitems = g_list_append(cbitems, "item9 item9");
2777 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2779 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2780 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2783 gtk_window_set_title (GTK_WINDOW (window), "entry");
2784 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
2787 box1 = gtk_vbox_new (FALSE, 0);
2788 gtk_container_add (GTK_CONTAINER (window), box1);
2789 gtk_widget_show (box1);
2792 box2 = gtk_vbox_new (FALSE, 10);
2793 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2794 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2795 gtk_widget_show (box2);
2797 entry = gtk_entry_new ();
2798 gtk_entry_set_text (GTK_ENTRY (entry), "hello world");
2799 gtk_editable_select_region (GTK_EDITABLE (entry), 0, 5);
2800 gtk_box_pack_start (GTK_BOX (box2), entry, TRUE, TRUE, 0);
2801 gtk_widget_show (entry);
2803 cb = gtk_combo_new ();
2804 gtk_combo_set_popdown_strings (GTK_COMBO (cb), cbitems);
2805 gtk_entry_set_text (GTK_ENTRY (GTK_COMBO(cb)->entry), "hello world");
2806 gtk_editable_select_region (GTK_EDITABLE (GTK_COMBO(cb)->entry),
2808 gtk_box_pack_start (GTK_BOX (box2), cb, TRUE, TRUE, 0);
2809 gtk_widget_show (cb);
2811 editable_check = gtk_check_button_new_with_label("Editable");
2812 gtk_box_pack_start (GTK_BOX (box2), editable_check, FALSE, TRUE, 0);
2813 gtk_signal_connect (GTK_OBJECT(editable_check), "toggled",
2814 GTK_SIGNAL_FUNC(entry_toggle_editable), entry);
2815 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(editable_check), TRUE);
2816 gtk_widget_show (editable_check);
2818 editable_check = gtk_check_button_new_with_label("Visible");
2819 gtk_box_pack_start (GTK_BOX (box2), editable_check, FALSE, TRUE, 0);
2820 gtk_signal_connect (GTK_OBJECT(editable_check), "toggled",
2821 GTK_SIGNAL_FUNC(entry_toggle_visibility), entry);
2822 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(editable_check), TRUE);
2823 gtk_widget_show (editable_check);
2825 sensitive_check = gtk_check_button_new_with_label("Sensitive");
2826 gtk_box_pack_start (GTK_BOX (box2), sensitive_check, FALSE, TRUE, 0);
2827 gtk_signal_connect (GTK_OBJECT(sensitive_check), "toggled",
2828 GTK_SIGNAL_FUNC(entry_toggle_sensitive), entry);
2829 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(sensitive_check), TRUE);
2830 gtk_widget_show (sensitive_check);
2832 separator = gtk_hseparator_new ();
2833 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2834 gtk_widget_show (separator);
2837 box2 = gtk_vbox_new (FALSE, 10);
2838 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2839 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2840 gtk_widget_show (box2);
2843 button = gtk_button_new_with_label ("close");
2844 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2845 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2846 GTK_OBJECT (window));
2847 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2848 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2849 gtk_widget_grab_default (button);
2850 gtk_widget_show (button);
2853 if (!GTK_WIDGET_VISIBLE (window))
2854 gtk_widget_show (window);
2856 gtk_widget_destroy (window);
2863 static GtkWidget *spinner1;
2866 toggle_snap (GtkWidget *widget, GtkSpinButton *spin)
2868 gtk_spin_button_set_snap_to_ticks (spin, GTK_TOGGLE_BUTTON (widget)->active);
2872 toggle_numeric (GtkWidget *widget, GtkSpinButton *spin)
2874 gtk_spin_button_set_numeric (spin, GTK_TOGGLE_BUTTON (widget)->active);
2878 change_digits (GtkWidget *widget, GtkSpinButton *spin)
2880 gtk_spin_button_set_digits (GTK_SPIN_BUTTON (spinner1),
2881 gtk_spin_button_get_value_as_int (spin));
2885 get_value (GtkWidget *widget, gpointer data)
2889 GtkSpinButton *spin;
2891 spin = GTK_SPIN_BUTTON (spinner1);
2892 label = GTK_LABEL (gtk_object_get_user_data (GTK_OBJECT (widget)));
2893 if (GPOINTER_TO_INT (data) == 1)
2894 sprintf (buf, "%d", gtk_spin_button_get_value_as_int (spin));
2896 sprintf (buf, "%0.*f", spin->digits,
2897 gtk_spin_button_get_value_as_float (spin));
2898 gtk_label_set_text (label, buf);
2902 spin_button_time_output_func (GtkSpinButton *spin_button)
2904 static gchar buf[6];
2908 hours = spin_button->adjustment->value / 60.0;
2909 minutes = (fabs(floor (hours) - hours) < 1e-5) ? 0.0 : 30;
2910 sprintf (buf, "%02.0f:%02.0f", floor (hours), minutes);
2911 if (strcmp (buf, gtk_entry_get_text (GTK_ENTRY (spin_button))))
2912 gtk_entry_set_text (GTK_ENTRY (spin_button), buf);
2917 spin_button_month_input_func (GtkSpinButton *spin_button,
2921 static gchar *month[12] = { "January", "February", "March", "April",
2922 "May", "June", "July", "August",
2923 "September", "October", "November", "December" };
2925 gboolean found = FALSE;
2927 for (i = 1; i <= 12; i++)
2929 tmp1 = g_strdup (month[i-1]);
2931 tmp2 = g_strdup (gtk_entry_get_text (GTK_ENTRY (spin_button)));
2933 if (strstr (tmp1, tmp2) == tmp1)
2945 *new_val = (gfloat) i;
2950 spin_button_month_output_func (GtkSpinButton *spin_button)
2953 static gchar *month[12] = { "January", "February", "March", "April",
2954 "May", "June", "July", "August", "September",
2955 "October", "November", "December" };
2957 for (i = 1; i <= 12; i++)
2958 if (fabs (spin_button->adjustment->value - (double)i) < 1e-5)
2960 if (strcmp (month[i-1], gtk_entry_get_text (GTK_ENTRY (spin_button))))
2961 gtk_entry_set_text (GTK_ENTRY (spin_button), month[i-1]);
2967 spin_button_hex_input_func (GtkSpinButton *spin_button,
2974 buf = gtk_entry_get_text (GTK_ENTRY (spin_button));
2975 res = (gfloat)(strtol(buf, &err, 16));
2984 spin_button_hex_output_func (GtkSpinButton *spin_button)
2986 static gchar buf[7];
2989 val = (gint) spin_button->adjustment->value;
2990 if (fabs (val) < 1e-5)
2991 sprintf (buf, "0x00");
2993 sprintf (buf, "0x%.2X", val);
2994 if (strcmp (buf, gtk_entry_get_text (GTK_ENTRY (spin_button))))
2995 gtk_entry_set_text (GTK_ENTRY (spin_button), buf);
3002 static GtkWidget *window = NULL;
3005 GtkWidget *main_vbox;
3008 GtkWidget *spinner2;
3012 GtkWidget *val_label;
3017 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3019 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3020 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
3023 gtk_window_set_title (GTK_WINDOW (window), "GtkSpinButton");
3025 main_vbox = gtk_vbox_new (FALSE, 5);
3026 gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 10);
3027 gtk_container_add (GTK_CONTAINER (window), main_vbox);
3029 frame = gtk_frame_new ("Not accelerated");
3030 gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0);
3032 vbox = gtk_vbox_new (FALSE, 0);
3033 gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
3034 gtk_container_add (GTK_CONTAINER (frame), vbox);
3036 /* Time, month, hex spinners */
3038 hbox = gtk_hbox_new (FALSE, 0);
3039 gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 5);
3041 vbox2 = gtk_vbox_new (FALSE, 0);
3042 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
3044 label = gtk_label_new ("Time :");
3045 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
3046 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
3048 adj = (GtkAdjustment *) gtk_adjustment_new (0, 0, 1410, 30, 60, 0);
3049 spinner = gtk_spin_button_new (adj, 0, 0);
3050 gtk_editable_set_editable (GTK_EDITABLE (spinner), FALSE);
3051 gtk_signal_connect (GTK_OBJECT (spinner),
3053 GTK_SIGNAL_FUNC (spin_button_time_output_func),
3055 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
3056 gtk_widget_set_usize (spinner, 55, -1);
3057 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
3059 vbox2 = gtk_vbox_new (FALSE, 0);
3060 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
3062 label = gtk_label_new ("Month :");
3063 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
3064 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
3066 adj = (GtkAdjustment *) gtk_adjustment_new (1.0, 1.0, 12.0, 1.0,
3068 spinner = gtk_spin_button_new (adj, 0, 0);
3069 gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (spinner),
3070 GTK_UPDATE_IF_VALID);
3071 gtk_signal_connect (GTK_OBJECT (spinner),
3073 GTK_SIGNAL_FUNC (spin_button_month_input_func),
3075 gtk_signal_connect (GTK_OBJECT (spinner),
3077 GTK_SIGNAL_FUNC (spin_button_month_output_func),
3079 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
3080 gtk_widget_set_usize (spinner, 85, -1);
3081 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
3083 vbox2 = gtk_vbox_new (FALSE, 0);
3084 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
3086 label = gtk_label_new ("Hex :");
3087 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
3088 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
3090 adj = (GtkAdjustment *) gtk_adjustment_new (0, 0, 255, 1, 16, 0);
3091 spinner = gtk_spin_button_new (adj, 0, 0);
3092 gtk_editable_set_editable (GTK_EDITABLE (spinner), TRUE);
3093 gtk_signal_connect (GTK_OBJECT (spinner),
3095 GTK_SIGNAL_FUNC (spin_button_hex_input_func),
3097 gtk_signal_connect (GTK_OBJECT (spinner),
3099 GTK_SIGNAL_FUNC (spin_button_hex_output_func),
3101 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
3102 gtk_widget_set_usize (spinner, 55, 0);
3103 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
3105 frame = gtk_frame_new ("Accelerated");
3106 gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0);
3108 vbox = gtk_vbox_new (FALSE, 0);
3109 gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
3110 gtk_container_add (GTK_CONTAINER (frame), vbox);
3112 hbox = gtk_hbox_new (FALSE, 0);
3113 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
3115 vbox2 = gtk_vbox_new (FALSE, 0);
3116 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
3118 label = gtk_label_new ("Value :");
3119 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
3120 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
3122 adj = (GtkAdjustment *) gtk_adjustment_new (0.0, -10000.0, 10000.0,
3124 spinner1 = gtk_spin_button_new (adj, 1.0, 2);
3125 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner1), TRUE);
3126 gtk_widget_set_usize (spinner1, 100, 0);
3127 gtk_box_pack_start (GTK_BOX (vbox2), spinner1, FALSE, TRUE, 0);
3129 vbox2 = gtk_vbox_new (FALSE, 0);
3130 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
3132 label = gtk_label_new ("Digits :");
3133 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
3134 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
3136 adj = (GtkAdjustment *) gtk_adjustment_new (2, 1, 5, 1, 1, 0);
3137 spinner2 = gtk_spin_button_new (adj, 0.0, 0);
3138 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
3139 GTK_SIGNAL_FUNC (change_digits),
3140 (gpointer) spinner2);
3141 gtk_box_pack_start (GTK_BOX (vbox2), spinner2, FALSE, TRUE, 0);
3143 hbox = gtk_hbox_new (FALSE, 0);
3144 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
3146 button = gtk_check_button_new_with_label ("Snap to 0.5-ticks");
3147 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3148 GTK_SIGNAL_FUNC (toggle_snap),
3150 gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
3151 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
3153 button = gtk_check_button_new_with_label ("Numeric only input mode");
3154 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3155 GTK_SIGNAL_FUNC (toggle_numeric),
3157 gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
3158 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
3160 val_label = gtk_label_new ("");
3162 hbox = gtk_hbox_new (FALSE, 0);
3163 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
3165 button = gtk_button_new_with_label ("Value as Int");
3166 gtk_object_set_user_data (GTK_OBJECT (button), val_label);
3167 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3168 GTK_SIGNAL_FUNC (get_value),
3169 GINT_TO_POINTER (1));
3170 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
3172 button = gtk_button_new_with_label ("Value as Float");
3173 gtk_object_set_user_data (GTK_OBJECT (button), val_label);
3174 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3175 GTK_SIGNAL_FUNC (get_value),
3176 GINT_TO_POINTER (2));
3177 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
3179 gtk_box_pack_start (GTK_BOX (vbox), val_label, TRUE, TRUE, 0);
3180 gtk_label_set_text (GTK_LABEL (val_label), "0");
3182 hbox = gtk_hbox_new (FALSE, 0);
3183 gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
3185 button = gtk_button_new_with_label ("Close");
3186 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
3187 GTK_SIGNAL_FUNC (gtk_widget_destroy),
3188 GTK_OBJECT (window));
3189 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
3192 if (!GTK_WIDGET_VISIBLE (window))
3193 gtk_widget_show_all (window);
3195 gtk_widget_destroy (window);
3204 cursor_expose_event (GtkWidget *widget,
3208 GtkDrawingArea *darea;
3209 GdkDrawable *drawable;
3216 g_return_val_if_fail (widget != NULL, TRUE);
3217 g_return_val_if_fail (GTK_IS_DRAWING_AREA (widget), TRUE);
3219 darea = GTK_DRAWING_AREA (widget);
3220 drawable = widget->window;
3221 white_gc = widget->style->white_gc;
3222 gray_gc = widget->style->bg_gc[GTK_STATE_NORMAL];
3223 black_gc = widget->style->black_gc;
3224 max_width = widget->allocation.width;
3225 max_height = widget->allocation.height;
3227 gdk_draw_rectangle (drawable, white_gc,
3234 gdk_draw_rectangle (drawable, black_gc,
3241 gdk_draw_rectangle (drawable, gray_gc,
3252 set_cursor (GtkWidget *spinner,
3260 c = CLAMP (gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spinner)), 0, 152);
3263 label = gtk_object_get_user_data (GTK_OBJECT (spinner));
3264 vals = gtk_type_enum_get_values (GTK_TYPE_GDK_CURSOR_TYPE);
3265 while (vals && vals->value != c)
3268 gtk_label_set_text (GTK_LABEL (label), vals->value_nick);
3270 gtk_label_set_text (GTK_LABEL (label), "<unknown>");
3272 cursor = gdk_cursor_new (c);
3273 gdk_window_set_cursor (widget->window, cursor);
3274 gdk_cursor_destroy (cursor);
3278 cursor_event (GtkWidget *widget,
3280 GtkSpinButton *spinner)
3282 if ((event->type == GDK_BUTTON_PRESS) &&
3283 ((event->button.button == 1) ||
3284 (event->button.button == 3)))
3286 gtk_spin_button_spin (spinner, event->button.button == 1 ?
3287 GTK_SPIN_STEP_FORWARD : GTK_SPIN_STEP_BACKWARD, 0);
3295 create_cursors (void)
3297 static GtkWidget *window = NULL;
3300 GtkWidget *main_vbox;
3311 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3313 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3314 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
3317 gtk_window_set_title (GTK_WINDOW (window), "Cursors");
3319 main_vbox = gtk_vbox_new (FALSE, 5);
3320 gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 0);
3321 gtk_container_add (GTK_CONTAINER (window), main_vbox);
3324 gtk_widget_new (gtk_vbox_get_type (),
3325 "GtkBox::homogeneous", FALSE,
3326 "GtkBox::spacing", 5,
3327 "GtkContainer::border_width", 10,
3328 "GtkWidget::parent", main_vbox,
3329 "GtkWidget::visible", TRUE,
3332 hbox = gtk_hbox_new (FALSE, 0);
3333 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
3334 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
3336 label = gtk_label_new ("Cursor Value : ");
3337 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
3338 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
3340 adj = (GtkAdjustment *) gtk_adjustment_new (0,
3344 spinner = gtk_spin_button_new (adj, 0, 0);
3345 gtk_box_pack_start (GTK_BOX (hbox), spinner, TRUE, TRUE, 0);
3348 gtk_widget_new (gtk_frame_get_type (),
3349 "GtkFrame::shadow", GTK_SHADOW_ETCHED_IN,
3350 "GtkFrame::label_xalign", 0.5,
3351 "GtkFrame::label", "Cursor Area",
3352 "GtkContainer::border_width", 10,
3353 "GtkWidget::parent", vbox,
3354 "GtkWidget::visible", TRUE,
3357 darea = gtk_drawing_area_new ();
3358 gtk_widget_set_usize (darea, 80, 80);
3359 gtk_container_add (GTK_CONTAINER (frame), darea);
3360 gtk_signal_connect (GTK_OBJECT (darea),
3362 GTK_SIGNAL_FUNC (cursor_expose_event),
3364 gtk_widget_set_events (darea, GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK);
3365 gtk_signal_connect (GTK_OBJECT (darea),
3366 "button_press_event",
3367 GTK_SIGNAL_FUNC (cursor_event),
3369 gtk_widget_show (darea);
3371 gtk_signal_connect (GTK_OBJECT (spinner), "changed",
3372 GTK_SIGNAL_FUNC (set_cursor),
3375 label = gtk_widget_new (GTK_TYPE_LABEL,
3380 gtk_container_child_set (GTK_CONTAINER (vbox), label,
3383 gtk_object_set_user_data (GTK_OBJECT (spinner), label);
3386 gtk_widget_new (gtk_hseparator_get_type (),
3387 "GtkWidget::visible", TRUE,
3389 gtk_box_pack_start (GTK_BOX (main_vbox), any, FALSE, TRUE, 0);
3391 hbox = gtk_hbox_new (FALSE, 0);
3392 gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
3393 gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
3395 button = gtk_button_new_with_label ("Close");
3396 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
3397 GTK_SIGNAL_FUNC (gtk_widget_destroy),
3398 GTK_OBJECT (window));
3399 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
3401 gtk_widget_show_all (window);
3403 set_cursor (spinner, darea);
3406 gtk_widget_destroy (window);
3414 list_add (GtkWidget *widget,
3419 GtkWidget *list_item;
3420 GtkContainer *container;
3422 container = GTK_CONTAINER (list);
3424 sprintf (buffer, "added item %d", i++);
3425 list_item = gtk_list_item_new_with_label (buffer);
3426 gtk_widget_show (list_item);
3428 gtk_container_add (container, list_item);
3432 list_remove (GtkWidget *widget,
3435 GList *clear_list = NULL;
3436 GList *sel_row = NULL;
3439 if (list->selection_mode == GTK_SELECTION_EXTENDED)
3443 item = GTK_CONTAINER (list)->focus_child;
3444 if (!item && list->selection)
3445 item = list->selection->data;
3449 work = g_list_find (list->children, item);
3450 for (sel_row = work; sel_row; sel_row = sel_row->next)
3451 if (GTK_WIDGET (sel_row->data)->state != GTK_STATE_SELECTED)
3456 for (sel_row = work; sel_row; sel_row = sel_row->prev)
3457 if (GTK_WIDGET (sel_row->data)->state != GTK_STATE_SELECTED)
3463 for (work = list->selection; work; work = work->next)
3464 clear_list = g_list_prepend (clear_list, work->data);
3466 clear_list = g_list_reverse (clear_list);
3467 gtk_list_remove_items (GTK_LIST (list), clear_list);
3468 g_list_free (clear_list);
3470 if (list->selection_mode == GTK_SELECTION_EXTENDED && sel_row)
3471 gtk_list_select_child (list, GTK_WIDGET(sel_row->data));
3475 list_clear (GtkWidget *widget,
3478 gtk_list_clear_items (GTK_LIST (list), 0, -1);
3481 #define RADIOMENUTOGGLED(_rmi_, __i) { \
3484 __g = gtk_radio_menu_item_group(_rmi_); \
3485 while( __g && !((GtkCheckMenuItem *)(__g->data))->active) { \
3491 static GtkWidget *list_omenu;
3494 list_toggle_sel_mode (GtkWidget *widget, GtkList *list)
3498 if (!GTK_WIDGET_MAPPED (widget))
3501 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
3502 (((GtkOptionMenu *)list_omenu)->menu_item), i);
3504 gtk_list_set_selection_mode (list, (GtkSelectionMode) (3-i));
3510 static GtkWidget *window = NULL;
3512 static OptionMenuItem items[] =
3514 { "Single", list_toggle_sel_mode },
3515 { "Browse", list_toggle_sel_mode },
3516 { "Multiple", list_toggle_sel_mode },
3517 { "Extended", list_toggle_sel_mode }
3526 GtkWidget *scrolled_win;
3529 GtkWidget *separator;
3532 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3534 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3535 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
3538 gtk_window_set_title (GTK_WINDOW (window), "list");
3539 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
3541 vbox = gtk_vbox_new (FALSE, 0);
3542 gtk_container_add (GTK_CONTAINER (window), vbox);
3544 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
3545 gtk_container_set_border_width (GTK_CONTAINER (scrolled_win), 5);
3546 gtk_widget_set_usize (scrolled_win, -1, 300);
3547 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
3548 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
3549 GTK_POLICY_AUTOMATIC,
3550 GTK_POLICY_AUTOMATIC);
3552 list = gtk_list_new ();
3553 gtk_list_set_selection_mode (GTK_LIST (list), GTK_SELECTION_EXTENDED);
3554 gtk_scrolled_window_add_with_viewport
3555 (GTK_SCROLLED_WINDOW (scrolled_win), list);
3556 gtk_container_set_focus_vadjustment
3557 (GTK_CONTAINER (list),
3558 gtk_scrolled_window_get_vadjustment
3559 (GTK_SCROLLED_WINDOW (scrolled_win)));
3560 gtk_container_set_focus_hadjustment
3561 (GTK_CONTAINER (list),
3562 gtk_scrolled_window_get_hadjustment
3563 (GTK_SCROLLED_WINDOW (scrolled_win)));
3565 if ((infile = fopen("gtkenums.h", "r")))
3571 while (fgets (buffer, 256, infile))
3573 if ((pos = strchr (buffer, '\n')))
3575 item = gtk_list_item_new_with_label (buffer);
3576 gtk_container_add (GTK_CONTAINER (list), item);
3583 hbox = gtk_hbox_new (TRUE, 5);
3584 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
3585 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
3587 button = gtk_button_new_with_label ("Insert Row");
3588 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
3589 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3590 GTK_SIGNAL_FUNC (list_add),
3593 button = gtk_button_new_with_label ("Clear List");
3594 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
3595 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3596 GTK_SIGNAL_FUNC (list_clear),
3599 button = gtk_button_new_with_label ("Remove Selection");
3600 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
3601 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3602 GTK_SIGNAL_FUNC (list_remove),
3605 cbox = gtk_hbox_new (FALSE, 0);
3606 gtk_box_pack_start (GTK_BOX (vbox), cbox, FALSE, TRUE, 0);
3608 hbox = gtk_hbox_new (FALSE, 5);
3609 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
3610 gtk_box_pack_start (GTK_BOX (cbox), hbox, TRUE, FALSE, 0);
3612 label = gtk_label_new ("Selection Mode :");
3613 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
3615 list_omenu = build_option_menu (items, 4, 3, list);
3616 gtk_box_pack_start (GTK_BOX (hbox), list_omenu, FALSE, TRUE, 0);
3618 separator = gtk_hseparator_new ();
3619 gtk_box_pack_start (GTK_BOX (vbox), separator, FALSE, TRUE, 0);
3621 cbox = gtk_hbox_new (FALSE, 0);
3622 gtk_box_pack_start (GTK_BOX (vbox), cbox, FALSE, TRUE, 0);
3624 button = gtk_button_new_with_label ("close");
3625 gtk_container_set_border_width (GTK_CONTAINER (button), 10);
3626 gtk_box_pack_start (GTK_BOX (cbox), button, TRUE, TRUE, 0);
3627 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
3628 GTK_SIGNAL_FUNC(gtk_widget_destroy),
3629 GTK_OBJECT (window));
3631 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
3632 gtk_widget_grab_default (button);
3635 if (!GTK_WIDGET_VISIBLE (window))
3636 gtk_widget_show_all (window);
3638 gtk_widget_destroy (window);
3645 static char * book_open_xpm[] = {
3668 static char * book_closed_xpm[] = {
3693 static char * mini_page_xpm[] = {
3716 static char * gtk_mini_xpm[] = {
3756 #define TESTGTK_CLIST_COLUMNS 12
3757 static gint clist_rows = 0;
3758 static GtkWidget *clist_omenu;
3761 add1000_clist (GtkWidget *widget, gpointer data)
3764 char text[TESTGTK_CLIST_COLUMNS][50];
3765 char *texts[TESTGTK_CLIST_COLUMNS];
3770 clist = GTK_CLIST (data);
3772 pixmap = gdk_pixmap_create_from_xpm_d (clist->clist_window,
3774 >K_WIDGET (data)->style->white,
3777 for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++)
3780 sprintf (text[i], "Column %d", i);
3784 sprintf (text[1], "Right");
3785 sprintf (text[2], "Center");
3787 gtk_clist_freeze (GTK_CLIST (data));
3788 for (i = 0; i < 1000; i++)
3790 sprintf (text[0], "CListRow %d", rand() % 10000);
3791 row = gtk_clist_append (clist, texts);
3792 gtk_clist_set_pixtext (clist, row, 3, "gtk+", 5, pixmap, mask);
3795 gtk_clist_thaw (GTK_CLIST (data));
3797 gdk_pixmap_unref (pixmap);
3798 gdk_bitmap_unref (mask);
3802 add10000_clist (GtkWidget *widget, gpointer data)
3805 char text[TESTGTK_CLIST_COLUMNS][50];
3806 char *texts[TESTGTK_CLIST_COLUMNS];
3808 for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++)
3811 sprintf (text[i], "Column %d", i);
3814 sprintf (text[1], "Right");
3815 sprintf (text[2], "Center");
3817 gtk_clist_freeze (GTK_CLIST (data));
3818 for (i = 0; i < 10000; i++)
3820 sprintf (text[0], "CListRow %d", rand() % 10000);
3821 gtk_clist_append (GTK_CLIST (data), texts);
3823 gtk_clist_thaw (GTK_CLIST (data));
3827 clear_clist (GtkWidget *widget, gpointer data)
3829 gtk_clist_clear (GTK_CLIST (data));
3833 void clist_remove_selection (GtkWidget *widget, GtkCList *clist)
3835 gtk_clist_freeze (clist);
3837 while (clist->selection)
3842 row = GPOINTER_TO_INT (clist->selection->data);
3844 gtk_clist_remove (clist, row);
3846 if (clist->selection_mode == GTK_SELECTION_BROWSE)
3850 if (clist->selection_mode == GTK_SELECTION_EXTENDED && !clist->selection &&
3851 clist->focus_row >= 0)
3852 gtk_clist_select_row (clist, clist->focus_row, -1);
3854 gtk_clist_thaw (clist);
3857 void toggle_title_buttons (GtkWidget *widget, GtkCList *clist)
3859 if (GTK_TOGGLE_BUTTON (widget)->active)
3860 gtk_clist_column_titles_show (clist);
3862 gtk_clist_column_titles_hide (clist);
3865 void toggle_reorderable (GtkWidget *widget, GtkCList *clist)
3867 gtk_clist_set_reorderable (clist, GTK_TOGGLE_BUTTON (widget)->active);
3871 insert_row_clist (GtkWidget *widget, gpointer data)
3873 static char *text[] =
3875 "This", "is an", "inserted", "row.",
3876 "This", "is an", "inserted", "row.",
3877 "This", "is an", "inserted", "row."
3880 static GtkStyle *style1 = NULL;
3881 static GtkStyle *style2 = NULL;
3882 static GtkStyle *style3 = NULL;
3885 if (GTK_CLIST (data)->focus_row >= 0)
3886 row = gtk_clist_insert (GTK_CLIST (data), GTK_CLIST (data)->focus_row,
3889 row = gtk_clist_prepend (GTK_CLIST (data), text);
3903 style1 = gtk_style_copy (GTK_WIDGET (data)->style);
3904 style1->base[GTK_STATE_NORMAL] = col1;
3905 style1->base[GTK_STATE_SELECTED] = col2;
3907 style2 = gtk_style_copy (GTK_WIDGET (data)->style);
3908 style2->fg[GTK_STATE_NORMAL] = col1;
3909 style2->fg[GTK_STATE_SELECTED] = col2;
3911 style3 = gtk_style_copy (GTK_WIDGET (data)->style);
3912 style3->fg[GTK_STATE_NORMAL] = col1;
3913 style3->base[GTK_STATE_NORMAL] = col2;
3914 gdk_font_unref (style3->font);
3916 gdk_font_load ("-*-courier-medium-*-*-*-*-120-*-*-*-*-*-*");
3919 gtk_clist_set_cell_style (GTK_CLIST (data), row, 3, style1);
3920 gtk_clist_set_cell_style (GTK_CLIST (data), row, 4, style2);
3921 gtk_clist_set_cell_style (GTK_CLIST (data), row, 0, style3);
3927 clist_warning_test (GtkWidget *button,
3931 static gboolean add_remove = FALSE;
3933 add_remove = !add_remove;
3935 child = gtk_label_new ("Test");
3936 gtk_widget_ref (child);
3937 gtk_object_sink (GTK_OBJECT (child));
3940 gtk_container_add (GTK_CONTAINER (clist), child);
3943 child->parent = clist;
3944 gtk_container_remove (GTK_CONTAINER (clist), child);
3945 child->parent = NULL;
3948 gtk_widget_destroy (child);
3949 gtk_widget_unref (child);
3953 undo_selection (GtkWidget *button, GtkCList *clist)
3955 gtk_clist_undo_selection (clist);
3959 clist_toggle_sel_mode (GtkWidget *widget, GtkCList *clist)
3963 if (!GTK_WIDGET_MAPPED (widget))
3966 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
3967 (((GtkOptionMenu *)clist_omenu)->menu_item), i);
3969 gtk_clist_set_selection_mode (clist, (GtkSelectionMode) (3-i));
3973 clist_click_column (GtkCList *clist, gint column, gpointer data)
3976 gtk_clist_set_column_visibility (clist, column, FALSE);
3977 else if (column == clist->sort_column)
3979 if (clist->sort_type == GTK_SORT_ASCENDING)
3980 clist->sort_type = GTK_SORT_DESCENDING;
3982 clist->sort_type = GTK_SORT_ASCENDING;
3985 gtk_clist_set_sort_column (clist, column);
3987 gtk_clist_sort (clist);
3994 static GtkWidget *window = NULL;
3996 static char *titles[] =
3998 "auto resize", "not resizeable", "max width 100", "min width 50",
3999 "hide column", "Title 5", "Title 6", "Title 7",
4000 "Title 8", "Title 9", "Title 10", "Title 11"
4003 static OptionMenuItem items[] =
4005 { "Single", clist_toggle_sel_mode },
4006 { "Browse", clist_toggle_sel_mode },
4007 { "Multiple", clist_toggle_sel_mode },
4008 { "Extended", clist_toggle_sel_mode }
4011 char text[TESTGTK_CLIST_COLUMNS][50];
4012 char *texts[TESTGTK_CLIST_COLUMNS];
4018 GtkWidget *separator;
4019 GtkWidget *scrolled_win;
4022 GtkWidget *undo_button;
4032 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
4034 gtk_signal_connect (GTK_OBJECT (window), "destroy",
4035 GTK_SIGNAL_FUNC (gtk_widget_destroyed), &window);
4037 gtk_window_set_title (GTK_WINDOW (window), "clist");
4038 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
4040 vbox = gtk_vbox_new (FALSE, 0);
4041 gtk_container_add (GTK_CONTAINER (window), vbox);
4043 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
4044 gtk_container_set_border_width (GTK_CONTAINER (scrolled_win), 5);
4045 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
4046 GTK_POLICY_AUTOMATIC,
4047 GTK_POLICY_AUTOMATIC);
4049 /* create GtkCList here so we have a pointer to throw at the
4050 * button callbacks -- more is done with it later */
4051 clist = gtk_clist_new_with_titles (TESTGTK_CLIST_COLUMNS, titles);
4052 gtk_container_add (GTK_CONTAINER (scrolled_win), clist);
4053 gtk_signal_connect (GTK_OBJECT (clist), "click_column",
4054 (GtkSignalFunc) clist_click_column, NULL);
4056 /* control buttons */
4057 hbox = gtk_hbox_new (FALSE, 5);
4058 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4059 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
4061 button = gtk_button_new_with_label ("Insert Row");
4062 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4063 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4064 (GtkSignalFunc) insert_row_clist, (gpointer) clist);
4066 button = gtk_button_new_with_label ("Add 1,000 Rows With Pixmaps");
4067 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4068 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4069 (GtkSignalFunc) add1000_clist, (gpointer) clist);
4071 button = gtk_button_new_with_label ("Add 10,000 Rows");
4072 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4073 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4074 (GtkSignalFunc) add10000_clist, (gpointer) clist);
4076 /* second layer of buttons */
4077 hbox = gtk_hbox_new (FALSE, 5);
4078 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4079 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
4081 button = gtk_button_new_with_label ("Clear List");
4082 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4083 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4084 (GtkSignalFunc) clear_clist, (gpointer) clist);
4086 button = gtk_button_new_with_label ("Remove Selection");
4087 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4088 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4089 (GtkSignalFunc) clist_remove_selection,
4092 undo_button = gtk_button_new_with_label ("Undo Selection");
4093 gtk_box_pack_start (GTK_BOX (hbox), undo_button, TRUE, TRUE, 0);
4094 gtk_signal_connect (GTK_OBJECT (undo_button), "clicked",
4095 (GtkSignalFunc) undo_selection, (gpointer) clist);
4097 button = gtk_button_new_with_label ("Warning Test");
4098 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4099 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4100 (GtkSignalFunc) clist_warning_test,(gpointer) clist);
4102 /* third layer of buttons */
4103 hbox = gtk_hbox_new (FALSE, 5);
4104 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4105 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
4107 check = gtk_check_button_new_with_label ("Show Title Buttons");
4108 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
4109 gtk_signal_connect (GTK_OBJECT (check), "clicked",
4110 GTK_SIGNAL_FUNC (toggle_title_buttons), clist);
4111 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE);
4113 check = gtk_check_button_new_with_label ("Reorderable");
4114 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
4115 gtk_signal_connect (GTK_OBJECT (check), "clicked",
4116 GTK_SIGNAL_FUNC (toggle_reorderable), clist);
4117 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE);
4119 label = gtk_label_new ("Selection Mode :");
4120 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
4122 clist_omenu = build_option_menu (items, 4, 3, clist);
4123 gtk_box_pack_start (GTK_BOX (hbox), clist_omenu, FALSE, TRUE, 0);
4126 * the rest of the clist configuration
4129 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
4130 gtk_clist_set_row_height (GTK_CLIST (clist), 18);
4131 gtk_widget_set_usize (clist, -1, 300);
4133 for (i = 1; i < TESTGTK_CLIST_COLUMNS; i++)
4134 gtk_clist_set_column_width (GTK_CLIST (clist), i, 80);
4136 gtk_clist_set_column_auto_resize (GTK_CLIST (clist), 0, TRUE);
4137 gtk_clist_set_column_resizeable (GTK_CLIST (clist), 1, FALSE);
4138 gtk_clist_set_column_max_width (GTK_CLIST (clist), 2, 100);
4139 gtk_clist_set_column_min_width (GTK_CLIST (clist), 3, 50);
4140 gtk_clist_set_selection_mode (GTK_CLIST (clist), GTK_SELECTION_EXTENDED);
4141 gtk_clist_set_column_justification (GTK_CLIST (clist), 1,
4143 gtk_clist_set_column_justification (GTK_CLIST (clist), 2,
4144 GTK_JUSTIFY_CENTER);
4146 for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++)
4149 sprintf (text[i], "Column %d", i);
4152 sprintf (text[1], "Right");
4153 sprintf (text[2], "Center");
4162 style = gtk_style_new ();
4163 style->fg[GTK_STATE_NORMAL] = col1;
4164 style->base[GTK_STATE_NORMAL] = col2;
4166 gdk_font_unref (style->font);
4168 gdk_font_load ("-adobe-helvetica-bold-r-*-*-*-140-*-*-*-*-*-*");
4170 for (i = 0; i < 10; i++)
4172 sprintf (text[0], "CListRow %d", clist_rows++);
4173 gtk_clist_append (GTK_CLIST (clist), texts);
4178 gtk_clist_set_row_style (GTK_CLIST (clist), i, style);
4181 gtk_clist_set_cell_style (GTK_CLIST (clist), i, i % 4, style);
4186 separator = gtk_hseparator_new ();
4187 gtk_box_pack_start (GTK_BOX (vbox), separator, FALSE, TRUE, 0);
4189 hbox = gtk_hbox_new (FALSE, 0);
4190 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
4192 button = gtk_button_new_with_label ("close");
4193 gtk_container_set_border_width (GTK_CONTAINER (button), 10);
4194 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4195 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
4196 GTK_SIGNAL_FUNC(gtk_widget_destroy),
4197 GTK_OBJECT (window));
4199 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
4200 gtk_widget_grab_default (button);
4203 if (!GTK_WIDGET_VISIBLE (window))
4204 gtk_widget_show_all (window);
4208 gtk_widget_destroy (window);
4223 static gint books = 0;
4224 static gint pages = 0;
4226 static GtkWidget *book_label;
4227 static GtkWidget *page_label;
4228 static GtkWidget *sel_label;
4229 static GtkWidget *vis_label;
4230 static GtkWidget *omenu1;
4231 static GtkWidget *omenu2;
4232 static GtkWidget *omenu3;
4233 static GtkWidget *omenu4;
4234 static GtkWidget *spin1;
4235 static GtkWidget *spin2;
4236 static GtkWidget *spin3;
4237 static gint line_style;
4239 void after_press (GtkCTree *ctree, gpointer data)
4243 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->selection));
4244 gtk_label_set_text (GTK_LABEL (sel_label), buf);
4246 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->row_list));
4247 gtk_label_set_text (GTK_LABEL (vis_label), buf);
4249 sprintf (buf, "%d", books);
4250 gtk_label_set_text (GTK_LABEL (book_label), buf);
4252 sprintf (buf, "%d", pages);
4253 gtk_label_set_text (GTK_LABEL (page_label), buf);
4256 void after_move (GtkCTree *ctree, GtkCTreeNode *child, GtkCTreeNode *parent,
4257 GtkCTreeNode *sibling, gpointer data)
4263 gtk_ctree_get_node_info (ctree, child, &source,
4264 NULL, NULL, NULL, NULL, NULL, NULL, NULL);
4266 gtk_ctree_get_node_info (ctree, parent, &target1,
4267 NULL, NULL, NULL, NULL, NULL, NULL, NULL);
4269 gtk_ctree_get_node_info (ctree, sibling, &target2,
4270 NULL, NULL, NULL, NULL, NULL, NULL, NULL);
4272 g_print ("Moving \"%s\" to \"%s\" with sibling \"%s\".\n", source,
4273 (parent) ? target1 : "nil", (sibling) ? target2 : "nil");
4276 void count_items (GtkCTree *ctree, GtkCTreeNode *list)
4278 if (GTK_CTREE_ROW (list)->is_leaf)
4284 void expand_all (GtkWidget *widget, GtkCTree *ctree)
4286 gtk_ctree_expand_recursive (ctree, NULL);
4287 after_press (ctree, NULL);
4290 void collapse_all (GtkWidget *widget, GtkCTree *ctree)
4292 gtk_ctree_collapse_recursive (ctree, NULL);
4293 after_press (ctree, NULL);
4296 void select_all (GtkWidget *widget, GtkCTree *ctree)
4298 gtk_ctree_select_recursive (ctree, NULL);
4299 after_press (ctree, NULL);
4302 void change_style (GtkWidget *widget, GtkCTree *ctree)
4304 static GtkStyle *style1 = NULL;
4305 static GtkStyle *style2 = NULL;
4311 if (GTK_CLIST (ctree)->focus_row >= 0)
4312 node = GTK_CTREE_NODE
4313 (g_list_nth (GTK_CLIST (ctree)->row_list,GTK_CLIST (ctree)->focus_row));
4315 node = GTK_CTREE_NODE (GTK_CLIST (ctree)->row_list);
4329 style1 = gtk_style_new ();
4330 style1->base[GTK_STATE_NORMAL] = col1;
4331 style1->fg[GTK_STATE_SELECTED] = col2;
4333 style2 = gtk_style_new ();
4334 style2->base[GTK_STATE_SELECTED] = col2;
4335 style2->fg[GTK_STATE_NORMAL] = col1;
4336 style2->base[GTK_STATE_NORMAL] = col2;
4337 gdk_font_unref (style2->font);
4339 gdk_font_load ("-*-courier-medium-*-*-*-*-300-*-*-*-*-*-*");
4342 gtk_ctree_node_set_cell_style (ctree, node, 1, style1);
4343 gtk_ctree_node_set_cell_style (ctree, node, 0, style2);
4345 if (GTK_CTREE_ROW (node)->children)
4346 gtk_ctree_node_set_row_style (ctree, GTK_CTREE_ROW (node)->children,
4350 void unselect_all (GtkWidget *widget, GtkCTree *ctree)
4352 gtk_ctree_unselect_recursive (ctree, NULL);
4353 after_press (ctree, NULL);
4356 void remove_selection (GtkWidget *widget, GtkCTree *ctree)
4361 clist = GTK_CLIST (ctree);
4363 gtk_clist_freeze (clist);
4365 while (clist->selection)
4367 node = clist->selection->data;
4369 if (GTK_CTREE_ROW (node)->is_leaf)
4372 gtk_ctree_post_recursive (ctree, node,
4373 (GtkCTreeFunc) count_items, NULL);
4375 gtk_ctree_remove_node (ctree, node);
4377 if (clist->selection_mode == GTK_SELECTION_BROWSE)
4381 if (clist->selection_mode == GTK_SELECTION_EXTENDED && !clist->selection &&
4382 clist->focus_row >= 0)
4384 node = gtk_ctree_node_nth (ctree, clist->focus_row);
4387 gtk_ctree_select (ctree, node);
4390 gtk_clist_thaw (clist);
4391 after_press (ctree, NULL);
4394 struct _ExportStruct {
4400 typedef struct _ExportStruct ExportStruct;
4403 gnode2ctree (GtkCTree *ctree,
4406 GtkCTreeNode *cnode,
4410 GdkPixmap *pixmap_closed;
4411 GdkBitmap *mask_closed;
4412 GdkPixmap *pixmap_opened;
4413 GdkBitmap *mask_opened;
4415 if (!cnode || !gnode || (!(es = gnode->data)))
4420 pixmap_closed = pixmap3;
4421 mask_closed = mask3;
4422 pixmap_opened = NULL;
4427 pixmap_closed = pixmap1;
4428 mask_closed = mask1;
4429 pixmap_opened = pixmap2;
4430 mask_opened = mask2;
4433 gtk_ctree_set_node_info (ctree, cnode, es->tree, 2, pixmap_closed,
4434 mask_closed, pixmap_opened, mask_opened,
4435 es->is_leaf, (depth < 3));
4436 gtk_ctree_node_set_text (ctree, cnode, 1, es->info);
4444 ctree2gnode (GtkCTree *ctree,
4447 GtkCTreeNode *cnode,
4452 if (!cnode || !gnode)
4455 es = g_new (ExportStruct, 1);
4457 es->is_leaf = GTK_CTREE_ROW (cnode)->is_leaf;
4458 es->tree = GTK_CELL_PIXTEXT (GTK_CTREE_ROW (cnode)->row.cell[0])->text;
4459 es->info = GTK_CELL_PIXTEXT (GTK_CTREE_ROW (cnode)->row.cell[1])->text;
4463 void export_ctree (GtkWidget *widget, GtkCTree *ctree)
4465 char *title[] = { "Tree" , "Info" };
4466 static GtkWidget *export_window = NULL;
4467 static GtkCTree *export_ctree;
4469 GtkWidget *scrolled_win;
4477 export_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
4479 gtk_signal_connect (GTK_OBJECT (export_window), "destroy",
4480 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
4483 gtk_window_set_title (GTK_WINDOW (export_window), "exported ctree");
4484 gtk_container_set_border_width (GTK_CONTAINER (export_window), 5);
4486 vbox = gtk_vbox_new (FALSE, 0);
4487 gtk_container_add (GTK_CONTAINER (export_window), vbox);
4489 button = gtk_button_new_with_label ("Close");
4490 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, TRUE, 0);
4492 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
4493 (GtkSignalFunc) gtk_widget_destroy,
4494 GTK_OBJECT(export_window));
4496 sep = gtk_hseparator_new ();
4497 gtk_box_pack_end (GTK_BOX (vbox), sep, FALSE, TRUE, 10);
4499 export_ctree = GTK_CTREE (gtk_ctree_new_with_titles (2, 0, title));
4500 gtk_ctree_set_line_style (export_ctree, GTK_CTREE_LINES_DOTTED);
4502 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
4503 gtk_container_add (GTK_CONTAINER (scrolled_win),
4504 GTK_WIDGET (export_ctree));
4505 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
4506 GTK_POLICY_AUTOMATIC,
4507 GTK_POLICY_AUTOMATIC);
4508 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
4509 gtk_clist_set_selection_mode (GTK_CLIST (export_ctree),
4510 GTK_SELECTION_EXTENDED);
4511 gtk_clist_set_column_width (GTK_CLIST (export_ctree), 0, 200);
4512 gtk_clist_set_column_width (GTK_CLIST (export_ctree), 1, 200);
4513 gtk_widget_set_usize (GTK_WIDGET (export_ctree), 300, 200);
4516 if (!GTK_WIDGET_VISIBLE (export_window))
4517 gtk_widget_show_all (export_window);
4519 gtk_clist_clear (GTK_CLIST (export_ctree));
4521 node = GTK_CTREE_NODE (g_list_nth (GTK_CLIST (ctree)->row_list,
4522 GTK_CLIST (ctree)->focus_row));
4526 gnode = gtk_ctree_export_to_gnode (ctree, NULL, NULL, node,
4530 gtk_ctree_insert_gnode (export_ctree, NULL, NULL, gnode,
4532 g_node_destroy (gnode);
4536 void change_indent (GtkWidget *widget, GtkCTree *ctree)
4538 gtk_ctree_set_indent (ctree, GTK_ADJUSTMENT (widget)->value);
4541 void change_spacing (GtkWidget *widget, GtkCTree *ctree)
4543 gtk_ctree_set_spacing (ctree, GTK_ADJUSTMENT (widget)->value);
4546 void change_row_height (GtkWidget *widget, GtkCList *clist)
4548 gtk_clist_set_row_height (clist, GTK_ADJUSTMENT (widget)->value);
4551 void set_background (GtkCTree *ctree, GtkCTreeNode *node, gpointer data)
4553 GtkStyle *style = NULL;
4558 if (ctree->line_style != GTK_CTREE_LINES_TABBED)
4560 if (!GTK_CTREE_ROW (node)->is_leaf)
4561 style = GTK_CTREE_ROW (node)->row.data;
4562 else if (GTK_CTREE_ROW (node)->parent)
4563 style = GTK_CTREE_ROW (GTK_CTREE_ROW (node)->parent)->row.data;
4566 gtk_ctree_node_set_row_style (ctree, node, style);
4569 void ctree_toggle_line_style (GtkWidget *widget, GtkCTree *ctree)
4573 if (!GTK_WIDGET_MAPPED (widget))
4576 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
4577 (((GtkOptionMenu *)omenu1)->menu_item), i);
4579 if ((ctree->line_style == GTK_CTREE_LINES_TABBED &&
4580 ((GtkCTreeLineStyle) (3 - i)) != GTK_CTREE_LINES_TABBED) ||
4581 (ctree->line_style != GTK_CTREE_LINES_TABBED &&
4582 ((GtkCTreeLineStyle) (3 - i)) == GTK_CTREE_LINES_TABBED))
4583 gtk_ctree_pre_recursive (ctree, NULL, set_background, NULL);
4584 gtk_ctree_set_line_style (ctree, 3 - i);
4588 void ctree_toggle_expander_style (GtkWidget *widget, GtkCTree *ctree)
4592 if (!GTK_WIDGET_MAPPED (widget))
4595 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
4596 (((GtkOptionMenu *)omenu2)->menu_item), i);
4598 gtk_ctree_set_expander_style (ctree, (GtkCTreeExpanderStyle) (3 - i));
4601 void ctree_toggle_justify (GtkWidget *widget, GtkCTree *ctree)
4605 if (!GTK_WIDGET_MAPPED (widget))
4608 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
4609 (((GtkOptionMenu *)omenu3)->menu_item), i);
4611 gtk_clist_set_column_justification (GTK_CLIST (ctree), ctree->tree_column,
4612 (GtkJustification) (1 - i));
4615 void ctree_toggle_sel_mode (GtkWidget *widget, GtkCTree *ctree)
4619 if (!GTK_WIDGET_MAPPED (widget))
4622 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
4623 (((GtkOptionMenu *)omenu4)->menu_item), i);
4625 gtk_clist_set_selection_mode (GTK_CLIST (ctree), (GtkSelectionMode) (3 - i));
4626 after_press (ctree, NULL);
4629 void build_recursive (GtkCTree *ctree, gint cur_depth, gint depth,
4630 gint num_books, gint num_pages, GtkCTreeNode *parent)
4635 GtkCTreeNode *sibling;
4642 for (i = num_pages + num_books; i > num_books; i--)
4645 sprintf (buf1, "Page %02d", (gint) rand() % 100);
4646 sprintf (buf2, "Item %d-%d", cur_depth, i);
4647 sibling = gtk_ctree_insert_node (ctree, parent, sibling, text, 5,
4648 pixmap3, mask3, NULL, NULL,
4651 if (parent && ctree->line_style == GTK_CTREE_LINES_TABBED)
4652 gtk_ctree_node_set_row_style (ctree, sibling,
4653 GTK_CTREE_ROW (parent)->row.style);
4656 if (cur_depth == depth)
4659 for (i = num_books; i > 0; i--)
4664 sprintf (buf1, "Book %02d", (gint) rand() % 100);
4665 sprintf (buf2, "Item %d-%d", cur_depth, i);
4666 sibling = gtk_ctree_insert_node (ctree, parent, sibling, text, 5,
4667 pixmap1, mask1, pixmap2, mask2,
4670 style = gtk_style_new ();
4671 switch (cur_depth % 3)
4674 style->base[GTK_STATE_NORMAL].red = 10000 * (cur_depth % 6);
4675 style->base[GTK_STATE_NORMAL].green = 0;
4676 style->base[GTK_STATE_NORMAL].blue = 65535 - ((i * 10000) % 65535);
4679 style->base[GTK_STATE_NORMAL].red = 10000 * (cur_depth % 6);
4680 style->base[GTK_STATE_NORMAL].green = 65535 - ((i * 10000) % 65535);
4681 style->base[GTK_STATE_NORMAL].blue = 0;
4684 style->base[GTK_STATE_NORMAL].red = 65535 - ((i * 10000) % 65535);
4685 style->base[GTK_STATE_NORMAL].green = 0;
4686 style->base[GTK_STATE_NORMAL].blue = 10000 * (cur_depth % 6);
4689 gtk_ctree_node_set_row_data_full (ctree, sibling, style,
4690 (GtkDestroyNotify) gtk_style_unref);
4692 if (ctree->line_style == GTK_CTREE_LINES_TABBED)
4693 gtk_ctree_node_set_row_style (ctree, sibling, style);
4695 build_recursive (ctree, cur_depth + 1, depth, num_books, num_pages,
4700 void rebuild_tree (GtkWidget *widget, GtkCTree *ctree)
4703 gchar label1[] = "Root";
4704 gchar label2[] = "";
4705 GtkCTreeNode *parent;
4712 d = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin1));
4713 b = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin2));
4714 p = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin3));
4716 n = ((pow (b, d) - 1) / (b - 1)) * (p + 1);
4720 g_print ("%d total items? Try less\n",n);
4724 gtk_clist_freeze (GTK_CLIST (ctree));
4725 gtk_clist_clear (GTK_CLIST (ctree));
4730 parent = gtk_ctree_insert_node (ctree, NULL, NULL, text, 5, pixmap1,
4731 mask1, pixmap2, mask2, FALSE, TRUE);
4733 style = gtk_style_new ();
4734 style->base[GTK_STATE_NORMAL].red = 0;
4735 style->base[GTK_STATE_NORMAL].green = 45000;
4736 style->base[GTK_STATE_NORMAL].blue = 55000;
4737 gtk_ctree_node_set_row_data_full (ctree, parent, style,
4738 (GtkDestroyNotify) gtk_style_unref);
4740 if (ctree->line_style == GTK_CTREE_LINES_TABBED)
4741 gtk_ctree_node_set_row_style (ctree, parent, style);
4743 build_recursive (ctree, 1, d, b, p, parent);
4744 gtk_clist_thaw (GTK_CLIST (ctree));
4745 after_press (ctree, NULL);
4749 ctree_click_column (GtkCTree *ctree, gint column, gpointer data)
4753 clist = GTK_CLIST (ctree);
4755 if (column == clist->sort_column)
4757 if (clist->sort_type == GTK_SORT_ASCENDING)
4758 clist->sort_type = GTK_SORT_DESCENDING;
4760 clist->sort_type = GTK_SORT_ASCENDING;
4763 gtk_clist_set_sort_column (clist, column);
4765 gtk_ctree_sort_recursive (ctree, NULL);
4768 void create_ctree (void)
4770 static GtkWidget *window = NULL;
4771 GtkTooltips *tooltips;
4773 GtkWidget *scrolled_win;
4785 GdkColor transparent = { 0 };
4787 char *title[] = { "Tree" , "Info" };
4790 static OptionMenuItem items1[] =
4792 { "No lines", ctree_toggle_line_style },
4793 { "Solid", ctree_toggle_line_style },
4794 { "Dotted", ctree_toggle_line_style },
4795 { "Tabbed", ctree_toggle_line_style }
4798 static OptionMenuItem items2[] =
4800 { "None", ctree_toggle_expander_style },
4801 { "Square", ctree_toggle_expander_style },
4802 { "Triangle", ctree_toggle_expander_style },
4803 { "Circular", ctree_toggle_expander_style }
4806 static OptionMenuItem items3[] =
4808 { "Left", ctree_toggle_justify },
4809 { "Right", ctree_toggle_justify }
4812 static OptionMenuItem items4[] =
4814 { "Single", ctree_toggle_sel_mode },
4815 { "Browse", ctree_toggle_sel_mode },
4816 { "Multiple", ctree_toggle_sel_mode },
4817 { "Extended", ctree_toggle_sel_mode }
4822 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
4824 gtk_signal_connect (GTK_OBJECT (window), "destroy",
4825 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
4828 gtk_window_set_title (GTK_WINDOW (window), "GtkCTree");
4829 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
4831 tooltips = gtk_tooltips_new ();
4832 gtk_object_ref (GTK_OBJECT (tooltips));
4833 gtk_object_sink (GTK_OBJECT (tooltips));
4835 gtk_object_set_data_full (GTK_OBJECT (window), "tooltips", tooltips,
4836 (GtkDestroyNotify) gtk_object_unref);
4838 vbox = gtk_vbox_new (FALSE, 0);
4839 gtk_container_add (GTK_CONTAINER (window), vbox);
4841 hbox = gtk_hbox_new (FALSE, 5);
4842 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4843 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
4845 label = gtk_label_new ("Depth :");
4846 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
4848 adj = (GtkAdjustment *) gtk_adjustment_new (4, 1, 10, 1, 5, 0);
4849 spin1 = gtk_spin_button_new (adj, 0, 0);
4850 gtk_box_pack_start (GTK_BOX (hbox), spin1, FALSE, TRUE, 5);
4852 label = gtk_label_new ("Books :");
4853 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
4855 adj = (GtkAdjustment *) gtk_adjustment_new (3, 1, 20, 1, 5, 0);
4856 spin2 = gtk_spin_button_new (adj, 0, 0);
4857 gtk_box_pack_start (GTK_BOX (hbox), spin2, FALSE, TRUE, 5);
4859 label = gtk_label_new ("Pages :");
4860 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
4862 adj = (GtkAdjustment *) gtk_adjustment_new (5, 1, 20, 1, 5, 0);
4863 spin3 = gtk_spin_button_new (adj, 0, 0);
4864 gtk_box_pack_start (GTK_BOX (hbox), spin3, FALSE, TRUE, 5);
4866 button = gtk_button_new_with_label ("Close");
4867 gtk_box_pack_end (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4869 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
4870 (GtkSignalFunc) gtk_widget_destroy,
4871 GTK_OBJECT(window));
4873 button = gtk_button_new_with_label ("Rebuild Tree");
4874 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4876 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
4877 gtk_container_set_border_width (GTK_CONTAINER (scrolled_win), 5);
4878 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
4879 GTK_POLICY_AUTOMATIC,
4881 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
4883 ctree = GTK_CTREE (gtk_ctree_new_with_titles (2, 0, title));
4884 gtk_container_add (GTK_CONTAINER (scrolled_win), GTK_WIDGET (ctree));
4886 gtk_clist_set_column_auto_resize (GTK_CLIST (ctree), 0, TRUE);
4887 gtk_clist_set_column_width (GTK_CLIST (ctree), 1, 200);
4888 gtk_clist_set_selection_mode (GTK_CLIST (ctree), GTK_SELECTION_EXTENDED);
4889 gtk_ctree_set_line_style (ctree, GTK_CTREE_LINES_DOTTED);
4890 line_style = GTK_CTREE_LINES_DOTTED;
4892 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4893 GTK_SIGNAL_FUNC (rebuild_tree), ctree);
4894 gtk_signal_connect (GTK_OBJECT (ctree), "click_column",
4895 (GtkSignalFunc) ctree_click_column, NULL);
4897 gtk_signal_connect_after (GTK_OBJECT (ctree), "button_press_event",
4898 GTK_SIGNAL_FUNC (after_press), NULL);
4899 gtk_signal_connect_after (GTK_OBJECT (ctree), "button_release_event",
4900 GTK_SIGNAL_FUNC (after_press), NULL);
4901 gtk_signal_connect_after (GTK_OBJECT (ctree), "tree_move",
4902 GTK_SIGNAL_FUNC (after_move), NULL);
4903 gtk_signal_connect_after (GTK_OBJECT (ctree), "end_selection",
4904 GTK_SIGNAL_FUNC (after_press), NULL);
4905 gtk_signal_connect_after (GTK_OBJECT (ctree), "toggle_focus_row",
4906 GTK_SIGNAL_FUNC (after_press), NULL);
4907 gtk_signal_connect_after (GTK_OBJECT (ctree), "select_all",
4908 GTK_SIGNAL_FUNC (after_press), NULL);
4909 gtk_signal_connect_after (GTK_OBJECT (ctree), "unselect_all",
4910 GTK_SIGNAL_FUNC (after_press), NULL);
4911 gtk_signal_connect_after (GTK_OBJECT (ctree), "scroll_vertical",
4912 GTK_SIGNAL_FUNC (after_press), NULL);
4914 bbox = gtk_hbox_new (FALSE, 5);
4915 gtk_container_set_border_width (GTK_CONTAINER (bbox), 5);
4916 gtk_box_pack_start (GTK_BOX (vbox), bbox, FALSE, TRUE, 0);
4918 mbox = gtk_vbox_new (TRUE, 5);
4919 gtk_box_pack_start (GTK_BOX (bbox), mbox, FALSE, TRUE, 0);
4921 label = gtk_label_new ("Row Height :");
4922 gtk_box_pack_start (GTK_BOX (mbox), label, FALSE, FALSE, 0);
4924 label = gtk_label_new ("Indent :");
4925 gtk_box_pack_start (GTK_BOX (mbox), label, FALSE, FALSE, 0);
4927 label = gtk_label_new ("Spacing :");
4928 gtk_box_pack_start (GTK_BOX (mbox), label, FALSE, FALSE, 0);
4930 mbox = gtk_vbox_new (TRUE, 5);
4931 gtk_box_pack_start (GTK_BOX (bbox), mbox, FALSE, TRUE, 0);
4933 adj = (GtkAdjustment *) gtk_adjustment_new (20, 12, 100, 1, 10, 0);
4934 spinner = gtk_spin_button_new (adj, 0, 0);
4935 gtk_box_pack_start (GTK_BOX (mbox), spinner, FALSE, FALSE, 5);
4936 gtk_tooltips_set_tip (tooltips, spinner,
4937 "Row height of list items", NULL);
4938 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
4939 GTK_SIGNAL_FUNC (change_row_height), ctree);
4940 gtk_clist_set_row_height ( GTK_CLIST (ctree), adj->value);
4942 adj = (GtkAdjustment *) gtk_adjustment_new (20, 0, 60, 1, 10, 0);
4943 spinner = gtk_spin_button_new (adj, 0, 0);
4944 gtk_box_pack_start (GTK_BOX (mbox), spinner, FALSE, FALSE, 5);
4945 gtk_tooltips_set_tip (tooltips, spinner, "Tree Indentation.", NULL);
4946 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
4947 GTK_SIGNAL_FUNC (change_indent), ctree);
4949 adj = (GtkAdjustment *) gtk_adjustment_new (5, 0, 60, 1, 10, 0);
4950 spinner = gtk_spin_button_new (adj, 0, 0);
4951 gtk_box_pack_start (GTK_BOX (mbox), spinner, FALSE, FALSE, 5);
4952 gtk_tooltips_set_tip (tooltips, spinner, "Tree Spacing.", NULL);
4953 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
4954 GTK_SIGNAL_FUNC (change_spacing), ctree);
4956 mbox = gtk_vbox_new (TRUE, 5);
4957 gtk_box_pack_start (GTK_BOX (bbox), mbox, FALSE, TRUE, 0);
4959 hbox = gtk_hbox_new (FALSE, 5);
4960 gtk_box_pack_start (GTK_BOX (mbox), hbox, FALSE, FALSE, 0);
4962 button = gtk_button_new_with_label ("Expand All");
4963 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4964 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4965 GTK_SIGNAL_FUNC (expand_all), ctree);
4967 button = gtk_button_new_with_label ("Collapse All");
4968 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4969 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4970 GTK_SIGNAL_FUNC (collapse_all), ctree);
4972 button = gtk_button_new_with_label ("Change Style");
4973 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4974 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4975 GTK_SIGNAL_FUNC (change_style), ctree);
4977 button = gtk_button_new_with_label ("Export Tree");
4978 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4979 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4980 GTK_SIGNAL_FUNC (export_ctree), ctree);
4982 hbox = gtk_hbox_new (FALSE, 5);
4983 gtk_box_pack_start (GTK_BOX (mbox), hbox, FALSE, FALSE, 0);
4985 button = gtk_button_new_with_label ("Select All");
4986 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4987 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4988 GTK_SIGNAL_FUNC (select_all), ctree);
4990 button = gtk_button_new_with_label ("Unselect All");
4991 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4992 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4993 GTK_SIGNAL_FUNC (unselect_all), ctree);
4995 button = gtk_button_new_with_label ("Remove Selection");
4996 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4997 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4998 GTK_SIGNAL_FUNC (remove_selection), ctree);
5000 check = gtk_check_button_new_with_label ("Reorderable");
5001 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
5002 gtk_tooltips_set_tip (tooltips, check,
5003 "Tree items can be reordered by dragging.", NULL);
5004 gtk_signal_connect (GTK_OBJECT (check), "clicked",
5005 GTK_SIGNAL_FUNC (toggle_reorderable), ctree);
5006 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE);
5008 hbox = gtk_hbox_new (TRUE, 5);
5009 gtk_box_pack_start (GTK_BOX (mbox), hbox, FALSE, FALSE, 0);
5011 omenu1 = build_option_menu (items1, 4, 2, ctree);
5012 gtk_box_pack_start (GTK_BOX (hbox), omenu1, FALSE, TRUE, 0);
5013 gtk_tooltips_set_tip (tooltips, omenu1, "The tree's line style.", NULL);
5015 omenu2 = build_option_menu (items2, 4, 1, ctree);
5016 gtk_box_pack_start (GTK_BOX (hbox), omenu2, FALSE, TRUE, 0);
5017 gtk_tooltips_set_tip (tooltips, omenu2, "The tree's expander style.",
5020 omenu3 = build_option_menu (items3, 2, 0, ctree);
5021 gtk_box_pack_start (GTK_BOX (hbox), omenu3, FALSE, TRUE, 0);
5022 gtk_tooltips_set_tip (tooltips, omenu3, "The tree's justification.",
5025 omenu4 = build_option_menu (items4, 4, 3, ctree);
5026 gtk_box_pack_start (GTK_BOX (hbox), omenu4, FALSE, TRUE, 0);
5027 gtk_tooltips_set_tip (tooltips, omenu4, "The list's selection mode.",
5030 gtk_widget_realize (window);
5032 pixmap1 = gdk_pixmap_create_from_xpm_d (window->window, &mask1,
5033 &transparent, book_closed_xpm);
5034 pixmap2 = gdk_pixmap_create_from_xpm_d (window->window, &mask2,
5035 &transparent, book_open_xpm);
5036 pixmap3 = gdk_pixmap_create_from_xpm_d (window->window, &mask3,
5037 &transparent, mini_page_xpm);
5039 gtk_widget_set_usize (GTK_WIDGET (ctree), 0, 300);
5041 frame = gtk_frame_new (NULL);
5042 gtk_container_set_border_width (GTK_CONTAINER (frame), 0);
5043 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_OUT);
5044 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
5046 hbox = gtk_hbox_new (TRUE, 2);
5047 gtk_container_set_border_width (GTK_CONTAINER (hbox), 2);
5048 gtk_container_add (GTK_CONTAINER (frame), hbox);
5050 frame = gtk_frame_new (NULL);
5051 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
5052 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
5054 hbox2 = gtk_hbox_new (FALSE, 0);
5055 gtk_container_set_border_width (GTK_CONTAINER (hbox2), 2);
5056 gtk_container_add (GTK_CONTAINER (frame), hbox2);
5058 label = gtk_label_new ("Books :");
5059 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
5061 sprintf (buf, "%d", books);
5062 book_label = gtk_label_new (buf);
5063 gtk_box_pack_end (GTK_BOX (hbox2), book_label, FALSE, TRUE, 5);
5065 frame = gtk_frame_new (NULL);
5066 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
5067 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
5069 hbox2 = gtk_hbox_new (FALSE, 0);
5070 gtk_container_set_border_width (GTK_CONTAINER (hbox2), 2);
5071 gtk_container_add (GTK_CONTAINER (frame), hbox2);
5073 label = gtk_label_new ("Pages :");
5074 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
5076 sprintf (buf, "%d", pages);
5077 page_label = gtk_label_new (buf);
5078 gtk_box_pack_end (GTK_BOX (hbox2), page_label, FALSE, TRUE, 5);
5080 frame = gtk_frame_new (NULL);
5081 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
5082 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
5084 hbox2 = gtk_hbox_new (FALSE, 0);
5085 gtk_container_set_border_width (GTK_CONTAINER (hbox2), 2);
5086 gtk_container_add (GTK_CONTAINER (frame), hbox2);
5088 label = gtk_label_new ("Selected :");
5089 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
5091 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->selection));
5092 sel_label = gtk_label_new (buf);
5093 gtk_box_pack_end (GTK_BOX (hbox2), sel_label, FALSE, TRUE, 5);
5095 frame = gtk_frame_new (NULL);
5096 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
5097 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
5099 hbox2 = gtk_hbox_new (FALSE, 0);
5100 gtk_container_set_border_width (GTK_CONTAINER (hbox2), 2);
5101 gtk_container_add (GTK_CONTAINER (frame), hbox2);
5103 label = gtk_label_new ("Visible :");
5104 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
5106 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->row_list));
5107 vis_label = gtk_label_new (buf);
5108 gtk_box_pack_end (GTK_BOX (hbox2), vis_label, FALSE, TRUE, 5);
5110 rebuild_tree (NULL, ctree);
5113 if (!GTK_WIDGET_VISIBLE (window))
5114 gtk_widget_show_all (window);
5116 gtk_widget_destroy (window);
5124 color_selection_ok (GtkWidget *w,
5125 GtkColorSelectionDialog *cs)
5127 GtkColorSelection *colorsel;
5130 colorsel=GTK_COLOR_SELECTION(cs->colorsel);
5132 gtk_color_selection_get_color(colorsel,color);
5133 gtk_color_selection_set_color(colorsel,color);
5137 color_selection_changed (GtkWidget *w,
5138 GtkColorSelectionDialog *cs)
5140 GtkColorSelection *colorsel;
5143 colorsel=GTK_COLOR_SELECTION(cs->colorsel);
5144 gtk_color_selection_get_color(colorsel,color);
5148 create_color_selection (void)
5150 static GtkWidget *window = NULL;
5154 window = gtk_color_selection_dialog_new ("color selection dialog");
5156 gtk_color_selection_set_opacity (
5157 GTK_COLOR_SELECTION (GTK_COLOR_SELECTION_DIALOG (window)->colorsel),
5160 gtk_color_selection_set_update_policy(
5161 GTK_COLOR_SELECTION (GTK_COLOR_SELECTION_DIALOG (window)->colorsel),
5162 GTK_UPDATE_CONTINUOUS);
5164 gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
5166 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5167 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5170 gtk_signal_connect (
5171 GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (window)->colorsel),
5173 GTK_SIGNAL_FUNC(color_selection_changed),
5176 gtk_signal_connect (
5177 GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (window)->ok_button),
5179 GTK_SIGNAL_FUNC(color_selection_ok),
5182 gtk_signal_connect_object (
5183 GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (window)->cancel_button),
5185 GTK_SIGNAL_FUNC(gtk_widget_destroy),
5186 GTK_OBJECT (window));
5189 if (!GTK_WIDGET_VISIBLE (window))
5190 gtk_widget_show (window);
5192 gtk_widget_destroy (window);
5200 file_selection_hide_fileops (GtkWidget *widget,
5201 GtkFileSelection *fs)
5203 gtk_file_selection_hide_fileop_buttons (fs);
5207 file_selection_ok (GtkWidget *w,
5208 GtkFileSelection *fs)
5210 g_print ("%s\n", gtk_file_selection_get_filename (fs));
5211 gtk_widget_destroy (GTK_WIDGET (fs));
5215 create_file_selection (void)
5217 static GtkWidget *window = NULL;
5222 window = gtk_file_selection_new ("file selection dialog");
5224 gtk_file_selection_hide_fileop_buttons (GTK_FILE_SELECTION (window));
5226 gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
5228 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5229 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5232 gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (window)->ok_button),
5233 "clicked", GTK_SIGNAL_FUNC(file_selection_ok),
5235 gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION (window)->cancel_button),
5236 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
5237 GTK_OBJECT (window));
5239 button = gtk_button_new_with_label ("Hide Fileops");
5240 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5241 (GtkSignalFunc) file_selection_hide_fileops,
5243 gtk_box_pack_start (GTK_BOX (GTK_FILE_SELECTION (window)->action_area),
5244 button, FALSE, FALSE, 0);
5245 gtk_widget_show (button);
5247 button = gtk_button_new_with_label ("Show Fileops");
5248 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5249 (GtkSignalFunc) gtk_file_selection_show_fileop_buttons,
5251 gtk_box_pack_start (GTK_BOX (GTK_FILE_SELECTION (window)->action_area),
5252 button, FALSE, FALSE, 0);
5253 gtk_widget_show (button);
5256 if (!GTK_WIDGET_VISIBLE (window))
5257 gtk_widget_show (window);
5259 gtk_widget_destroy (window);
5267 font_selection_ok (GtkWidget *w,
5268 GtkFontSelectionDialog *fs)
5270 gchar *s = gtk_font_selection_dialog_get_font_name (fs);
5272 g_print ("%s\n", s);
5274 gtk_widget_destroy (GTK_WIDGET (fs));
5278 create_font_selection (void)
5280 static GtkWidget *window = NULL;
5284 window = gtk_font_selection_dialog_new ("Font Selection Dialog");
5286 gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
5288 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5289 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5292 gtk_signal_connect (GTK_OBJECT (GTK_FONT_SELECTION_DIALOG (window)->ok_button),
5293 "clicked", GTK_SIGNAL_FUNC(font_selection_ok),
5294 GTK_FONT_SELECTION_DIALOG (window));
5295 gtk_signal_connect_object (GTK_OBJECT (GTK_FONT_SELECTION_DIALOG (window)->cancel_button),
5296 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
5297 GTK_OBJECT (window));
5300 if (!GTK_WIDGET_VISIBLE (window))
5301 gtk_widget_show (window);
5303 gtk_widget_destroy (window);
5310 static GtkWidget *dialog_window = NULL;
5313 label_toggle (GtkWidget *widget,
5318 *label = gtk_label_new ("Dialog Test");
5319 gtk_signal_connect (GTK_OBJECT (*label),
5321 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
5323 gtk_misc_set_padding (GTK_MISC (*label), 10, 10);
5324 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->vbox),
5325 *label, TRUE, TRUE, 0);
5326 gtk_widget_show (*label);
5329 gtk_widget_destroy (*label);
5333 create_dialog (void)
5335 static GtkWidget *label;
5340 dialog_window = gtk_dialog_new ();
5342 gtk_signal_connect (GTK_OBJECT (dialog_window), "destroy",
5343 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5346 gtk_window_set_title (GTK_WINDOW (dialog_window), "GtkDialog");
5347 gtk_container_set_border_width (GTK_CONTAINER (dialog_window), 0);
5348 gtk_widget_set_usize (dialog_window, 200, 110);
5350 button = gtk_button_new_with_label ("OK");
5351 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5352 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->action_area),
5353 button, TRUE, TRUE, 0);
5354 gtk_widget_grab_default (button);
5355 gtk_widget_show (button);
5357 button = gtk_button_new_with_label ("Toggle");
5358 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5359 GTK_SIGNAL_FUNC (label_toggle),
5361 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5362 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->action_area),
5363 button, TRUE, TRUE, 0);
5364 gtk_widget_show (button);
5369 if (!GTK_WIDGET_VISIBLE (dialog_window))
5370 gtk_widget_show (dialog_window);
5372 gtk_widget_destroy (dialog_window);
5377 static gboolean event_watcher_enter_id = 0;
5378 static gboolean event_watcher_leave_id = 0;
5381 event_watcher (GtkObject *object,
5387 g_print ("Watch: \"%s\" emitted for %s\n",
5388 gtk_signal_name (signal_id),
5389 gtk_type_name (GTK_OBJECT_TYPE (object)));
5395 event_watcher_down (void)
5397 if (event_watcher_enter_id)
5401 signal_id = gtk_signal_lookup ("enter_notify_event", GTK_TYPE_WIDGET);
5402 gtk_signal_remove_emission_hook (signal_id, event_watcher_enter_id);
5403 event_watcher_enter_id = 0;
5404 signal_id = gtk_signal_lookup ("leave_notify_event", GTK_TYPE_WIDGET);
5405 gtk_signal_remove_emission_hook (signal_id, event_watcher_leave_id);
5406 event_watcher_leave_id = 0;
5411 event_watcher_toggle (void)
5413 if (event_watcher_enter_id)
5414 event_watcher_down ();
5419 signal_id = gtk_signal_lookup ("enter_notify_event", GTK_TYPE_WIDGET);
5420 event_watcher_enter_id = gtk_signal_add_emission_hook (signal_id, event_watcher, NULL);
5421 signal_id = gtk_signal_lookup ("leave_notify_event", GTK_TYPE_WIDGET);
5422 event_watcher_leave_id = gtk_signal_add_emission_hook (signal_id, event_watcher, NULL);
5427 create_event_watcher (void)
5433 dialog_window = gtk_dialog_new ();
5435 gtk_signal_connect (GTK_OBJECT (dialog_window), "destroy",
5436 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
5438 gtk_signal_connect (GTK_OBJECT (dialog_window),
5440 GTK_SIGNAL_FUNC (event_watcher_down),
5443 gtk_window_set_title (GTK_WINDOW (dialog_window), "Event Watcher");
5444 gtk_container_set_border_width (GTK_CONTAINER (dialog_window), 0);
5445 gtk_widget_set_usize (dialog_window, 200, 110);
5447 button = gtk_toggle_button_new_with_label ("Activate Watch");
5448 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5449 GTK_SIGNAL_FUNC (event_watcher_toggle),
5451 gtk_container_set_border_width (GTK_CONTAINER (button), 10);
5452 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->vbox),
5453 button, TRUE, TRUE, 0);
5454 gtk_widget_show (button);
5456 button = gtk_button_new_with_label ("Close");
5457 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5458 GTK_SIGNAL_FUNC (gtk_widget_destroy),
5459 (GtkObject*) dialog_window);
5460 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5461 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->action_area),
5462 button, TRUE, TRUE, 0);
5463 gtk_widget_grab_default (button);
5464 gtk_widget_show (button);
5467 if (!GTK_WIDGET_VISIBLE (dialog_window))
5468 gtk_widget_show (dialog_window);
5470 gtk_widget_destroy (dialog_window);
5478 create_range_controls (void)
5480 static GtkWidget *window = NULL;
5484 GtkWidget *scrollbar;
5486 GtkWidget *separator;
5487 GtkObject *adjustment;
5491 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5493 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5494 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5497 gtk_window_set_title (GTK_WINDOW (window), "range controls");
5498 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
5501 box1 = gtk_vbox_new (FALSE, 0);
5502 gtk_container_add (GTK_CONTAINER (window), box1);
5503 gtk_widget_show (box1);
5506 box2 = gtk_vbox_new (FALSE, 10);
5507 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
5508 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
5509 gtk_widget_show (box2);
5512 adjustment = gtk_adjustment_new (0.0, 0.0, 101.0, 0.1, 1.0, 1.0);
5514 scale = gtk_hscale_new (GTK_ADJUSTMENT (adjustment));
5515 gtk_widget_set_usize (GTK_WIDGET (scale), 150, 30);
5516 gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED);
5517 gtk_scale_set_digits (GTK_SCALE (scale), 1);
5518 gtk_scale_set_draw_value (GTK_SCALE (scale), TRUE);
5519 gtk_box_pack_start (GTK_BOX (box2), scale, TRUE, TRUE, 0);
5520 gtk_widget_show (scale);
5522 scrollbar = gtk_hscrollbar_new (GTK_ADJUSTMENT (adjustment));
5523 gtk_range_set_update_policy (GTK_RANGE (scrollbar),
5524 GTK_UPDATE_CONTINUOUS);
5525 gtk_box_pack_start (GTK_BOX (box2), scrollbar, TRUE, TRUE, 0);
5526 gtk_widget_show (scrollbar);
5529 separator = gtk_hseparator_new ();
5530 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
5531 gtk_widget_show (separator);
5534 box2 = gtk_vbox_new (FALSE, 10);
5535 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
5536 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
5537 gtk_widget_show (box2);
5540 button = gtk_button_new_with_label ("close");
5541 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5542 GTK_SIGNAL_FUNC(gtk_widget_destroy),
5543 GTK_OBJECT (window));
5544 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
5545 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5546 gtk_widget_grab_default (button);
5547 gtk_widget_show (button);
5550 if (!GTK_WIDGET_VISIBLE (window))
5551 gtk_widget_show (window);
5553 gtk_widget_destroy (window);
5561 create_rulers (void)
5563 static GtkWidget *window = NULL;
5569 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5570 gtk_window_set_policy (GTK_WINDOW (window), TRUE, TRUE, FALSE);
5572 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5573 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5576 gtk_window_set_title (GTK_WINDOW (window), "rulers");
5577 gtk_widget_set_usize (window, 300, 300);
5578 gtk_widget_set_events (window,
5579 GDK_POINTER_MOTION_MASK
5580 | GDK_POINTER_MOTION_HINT_MASK);
5581 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
5583 table = gtk_table_new (2, 2, FALSE);
5584 gtk_container_add (GTK_CONTAINER (window), table);
5585 gtk_widget_show (table);
5587 ruler = gtk_hruler_new ();
5588 gtk_ruler_set_metric (GTK_RULER (ruler), GTK_CENTIMETERS);
5589 gtk_ruler_set_range (GTK_RULER (ruler), 100, 0, 0, 20);
5591 gtk_signal_connect_object (
5592 GTK_OBJECT (window),
5593 "motion_notify_event",
5595 GTK_WIDGET_CLASS (GTK_OBJECT (ruler)->klass)->motion_notify_event),
5596 GTK_OBJECT (ruler));
5598 gtk_table_attach (GTK_TABLE (table), ruler, 1, 2, 0, 1,
5599 GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
5600 gtk_widget_show (ruler);
5603 ruler = gtk_vruler_new ();
5604 gtk_ruler_set_range (GTK_RULER (ruler), 5, 15, 0, 20);
5606 gtk_signal_connect_object (
5607 GTK_OBJECT (window),
5608 "motion_notify_event",
5609 GTK_SIGNAL_FUNC (GTK_WIDGET_CLASS (GTK_OBJECT (ruler)->klass)->motion_notify_event),
5610 GTK_OBJECT (ruler));
5612 gtk_table_attach (GTK_TABLE (table), ruler, 0, 1, 1, 2,
5613 GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
5614 gtk_widget_show (ruler);
5617 if (!GTK_WIDGET_VISIBLE (window))
5618 gtk_widget_show (window);
5620 gtk_widget_destroy (window);
5624 text_toggle_editable (GtkWidget *checkbutton,
5627 gtk_text_set_editable(GTK_TEXT(text),
5628 GTK_TOGGLE_BUTTON(checkbutton)->active);
5632 text_toggle_word_wrap (GtkWidget *checkbutton,
5635 gtk_text_set_word_wrap(GTK_TEXT(text),
5636 GTK_TOGGLE_BUTTON(checkbutton)->active);
5643 { { 0, 0x0000, 0x0000, 0x0000 }, "black" },
5644 { { 0, 0xFFFF, 0xFFFF, 0xFFFF }, "white" },
5645 { { 0, 0xFFFF, 0x0000, 0x0000 }, "red" },
5646 { { 0, 0x0000, 0xFFFF, 0x0000 }, "green" },
5647 { { 0, 0x0000, 0x0000, 0xFFFF }, "blue" },
5648 { { 0, 0x0000, 0xFFFF, 0xFFFF }, "cyan" },
5649 { { 0, 0xFFFF, 0x0000, 0xFFFF }, "magenta" },
5650 { { 0, 0xFFFF, 0xFFFF, 0x0000 }, "yellow" }
5653 int ntext_colors = sizeof(text_colors) / sizeof(text_colors[0]);
5659 text_insert_random (GtkWidget *w, GtkText *text)
5663 for (i=0; i<10; i++)
5665 c = 'A' + rand() % ('Z' - 'A');
5666 gtk_text_set_point (text, rand() % gtk_text_get_length (text));
5667 gtk_text_insert (text, NULL, NULL, NULL, &c, 1);
5676 static GtkWidget *window = NULL;
5682 GtkWidget *separator;
5683 GtkWidget *scrolled_window;
5691 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5692 gtk_widget_set_name (window, "text window");
5693 gtk_widget_set_usize (window, 500, 500);
5694 gtk_window_set_policy (GTK_WINDOW(window), TRUE, TRUE, FALSE);
5696 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5697 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5700 gtk_window_set_title (GTK_WINDOW (window), "test");
5701 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
5704 box1 = gtk_vbox_new (FALSE, 0);
5705 gtk_container_add (GTK_CONTAINER (window), box1);
5706 gtk_widget_show (box1);
5709 box2 = gtk_vbox_new (FALSE, 10);
5710 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
5711 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
5712 gtk_widget_show (box2);
5715 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
5716 gtk_box_pack_start (GTK_BOX (box2), scrolled_window, TRUE, TRUE, 0);
5717 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
5720 gtk_widget_show (scrolled_window);
5722 text = gtk_text_new (NULL, NULL);
5723 gtk_text_set_editable (GTK_TEXT (text), TRUE);
5724 gtk_container_add (GTK_CONTAINER (scrolled_window), text);
5725 gtk_widget_grab_focus (text);
5726 gtk_widget_show (text);
5729 gtk_text_freeze (GTK_TEXT (text));
5731 font = gdk_font_load ("-adobe-courier-medium-r-normal--*-120-*-*-*-*-*-*");
5733 for (i=0; i<ntext_colors; i++)
5735 gtk_text_insert (GTK_TEXT (text), font, NULL, NULL,
5736 text_colors[i].name, -1);
5737 gtk_text_insert (GTK_TEXT (text), font, NULL, NULL, "\t", -1);
5739 for (j=0; j<ntext_colors; j++)
5741 gtk_text_insert (GTK_TEXT (text), font,
5742 &text_colors[j].color, &text_colors[i].color,
5745 gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL, "\n", -1);
5748 /* The Text widget will reference count the font, so we
5749 * unreference it here
5751 gdk_font_unref (font);
5753 infile = fopen("testgtk.c", "r");
5758 int nbytes_read, nbytes_alloc;
5761 nbytes_alloc = 1024;
5762 buffer = g_new (char, nbytes_alloc);
5766 if (nbytes_alloc < nbytes_read + 1024)
5769 buffer = g_realloc (buffer, nbytes_alloc);
5771 len = fread (buffer + nbytes_read, 1, 1024, infile);
5777 gtk_text_insert (GTK_TEXT (text), NULL, NULL,
5778 NULL, buffer, nbytes_read);
5783 gtk_text_thaw (GTK_TEXT (text));
5785 hbox = gtk_hbutton_box_new ();
5786 gtk_box_pack_start (GTK_BOX (box2), hbox, FALSE, FALSE, 0);
5787 gtk_widget_show (hbox);
5789 check = gtk_check_button_new_with_label("Editable");
5790 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, FALSE, 0);
5791 gtk_signal_connect (GTK_OBJECT(check), "toggled",
5792 GTK_SIGNAL_FUNC(text_toggle_editable), text);
5793 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), TRUE);
5794 gtk_widget_show (check);
5796 check = gtk_check_button_new_with_label("Wrap Words");
5797 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
5798 gtk_signal_connect (GTK_OBJECT(check), "toggled",
5799 GTK_SIGNAL_FUNC(text_toggle_word_wrap), text);
5800 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), FALSE);
5801 gtk_widget_show (check);
5803 separator = gtk_hseparator_new ();
5804 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
5805 gtk_widget_show (separator);
5808 box2 = gtk_vbox_new (FALSE, 10);
5809 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
5810 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
5811 gtk_widget_show (box2);
5814 button = gtk_button_new_with_label ("insert random");
5815 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5816 GTK_SIGNAL_FUNC(text_insert_random),
5818 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
5819 gtk_widget_show (button);
5821 button = gtk_button_new_with_label ("close");
5822 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5823 GTK_SIGNAL_FUNC(gtk_widget_destroy),
5824 GTK_OBJECT (window));
5825 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
5826 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5827 gtk_widget_grab_default (button);
5828 gtk_widget_show (button);
5831 if (!GTK_WIDGET_VISIBLE (window))
5832 gtk_widget_show (window);
5834 gtk_widget_destroy (window);
5841 GdkPixmap *book_open;
5842 GdkPixmap *book_closed;
5843 GdkBitmap *book_open_mask;
5844 GdkBitmap *book_closed_mask;
5845 GtkWidget *sample_notebook;
5848 page_switch (GtkWidget *widget, GtkNotebookPage *page, gint page_num)
5850 GtkNotebookPage *oldpage;
5853 oldpage = GTK_NOTEBOOK (widget)->cur_page;
5855 if (page == oldpage)
5857 pixwid = ((GtkBoxChild*)
5858 (GTK_BOX (page->tab_label)->children->data))->widget;
5859 gtk_pixmap_set (GTK_PIXMAP (pixwid), book_open, book_open_mask);
5860 pixwid = ((GtkBoxChild*)
5861 (GTK_BOX (page->menu_label)->children->data))->widget;
5862 gtk_pixmap_set (GTK_PIXMAP (pixwid), book_open, book_open_mask);
5866 pixwid = ((GtkBoxChild*)
5867 (GTK_BOX (oldpage->tab_label)->children->data))->widget;
5868 gtk_pixmap_set (GTK_PIXMAP (pixwid), book_closed, book_closed_mask);
5869 pixwid = ((GtkBoxChild*)
5870 (GTK_BOX (oldpage->menu_label)->children->data))->widget;
5871 gtk_pixmap_set (GTK_PIXMAP (pixwid), book_closed, book_closed_mask);
5876 tab_fill (GtkToggleButton *button, GtkWidget *child)
5879 GtkPackType pack_type;
5881 gtk_notebook_query_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
5882 &expand, NULL, &pack_type);
5883 gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
5884 expand, button->active, pack_type);
5888 tab_expand (GtkToggleButton *button, GtkWidget *child)
5891 GtkPackType pack_type;
5893 gtk_notebook_query_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
5894 NULL, &fill, &pack_type);
5895 gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
5896 button->active, fill, pack_type);
5900 tab_pack (GtkToggleButton *button, GtkWidget *child)
5906 gtk_notebook_query_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
5907 &expand, &fill, NULL);
5908 gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
5909 expand, fill, button->active);
5913 create_pages (GtkNotebook *notebook, gint start, gint end)
5915 GtkWidget *child = NULL;
5920 GtkWidget *label_box;
5921 GtkWidget *menu_box;
5926 for (i = start; i <= end; i++)
5928 sprintf (buffer, "Page %d", i);
5930 child = gtk_frame_new (buffer);
5931 gtk_container_set_border_width (GTK_CONTAINER (child), 10);
5933 vbox = gtk_vbox_new (TRUE,0);
5934 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
5935 gtk_container_add (GTK_CONTAINER (child), vbox);
5937 hbox = gtk_hbox_new (TRUE,0);
5938 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
5940 button = gtk_check_button_new_with_label ("Fill Tab");
5941 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
5942 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
5943 gtk_signal_connect (GTK_OBJECT (button), "toggled",
5944 GTK_SIGNAL_FUNC (tab_fill), child);
5946 button = gtk_check_button_new_with_label ("Expand Tab");
5947 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
5948 gtk_signal_connect (GTK_OBJECT (button), "toggled",
5949 GTK_SIGNAL_FUNC (tab_expand), child);
5951 button = gtk_check_button_new_with_label ("Pack end");
5952 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
5953 gtk_signal_connect (GTK_OBJECT (button), "toggled",
5954 GTK_SIGNAL_FUNC (tab_pack), child);
5956 button = gtk_button_new_with_label ("Hide Page");
5957 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 5);
5958 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5959 GTK_SIGNAL_FUNC (gtk_widget_hide),
5960 GTK_OBJECT (child));
5962 gtk_widget_show_all (child);
5964 label_box = gtk_hbox_new (FALSE, 0);
5965 pixwid = gtk_pixmap_new (book_closed, book_closed_mask);
5966 gtk_box_pack_start (GTK_BOX (label_box), pixwid, FALSE, TRUE, 0);
5967 gtk_misc_set_padding (GTK_MISC (pixwid), 3, 1);
5968 label = gtk_label_new (buffer);
5969 gtk_box_pack_start (GTK_BOX (label_box), label, FALSE, TRUE, 0);
5970 gtk_widget_show_all (label_box);
5972 menu_box = gtk_hbox_new (FALSE, 0);
5973 pixwid = gtk_pixmap_new (book_closed, book_closed_mask);
5974 gtk_box_pack_start (GTK_BOX (menu_box), pixwid, FALSE, TRUE, 0);
5975 gtk_misc_set_padding (GTK_MISC (pixwid), 3, 1);
5976 label = gtk_label_new (buffer);
5977 gtk_box_pack_start (GTK_BOX (menu_box), label, FALSE, TRUE, 0);
5978 gtk_widget_show_all (menu_box);
5979 gtk_notebook_append_page_menu (notebook, child, label_box, menu_box);
5984 rotate_notebook (GtkButton *button,
5985 GtkNotebook *notebook)
5987 gtk_notebook_set_tab_pos (notebook, (notebook->tab_pos + 1) % 4);
5991 show_all_pages (GtkButton *button,
5992 GtkNotebook *notebook)
5994 gtk_container_foreach (GTK_CONTAINER (notebook),
5995 (GtkCallback) gtk_widget_show, NULL);
5999 standard_notebook (GtkButton *button,
6000 GtkNotebook *notebook)
6004 gtk_notebook_set_show_tabs (notebook, TRUE);
6005 gtk_notebook_set_scrollable (notebook, FALSE);
6006 if (g_list_length (notebook->children) == 15)
6007 for (i = 0; i < 10; i++)
6008 gtk_notebook_remove_page (notebook, 5);
6012 notabs_notebook (GtkButton *button,
6013 GtkNotebook *notebook)
6017 gtk_notebook_set_show_tabs (notebook, FALSE);
6018 if (g_list_length (notebook->children) == 15)
6019 for (i = 0; i < 10; i++)
6020 gtk_notebook_remove_page (notebook, 5);
6024 scrollable_notebook (GtkButton *button,
6025 GtkNotebook *notebook)
6027 gtk_notebook_set_show_tabs (notebook, TRUE);
6028 gtk_notebook_set_scrollable (notebook, TRUE);
6029 if (g_list_length (notebook->children) == 5)
6030 create_pages (notebook, 6, 15);
6034 notebook_popup (GtkToggleButton *button,
6035 GtkNotebook *notebook)
6038 gtk_notebook_popup_enable (notebook);
6040 gtk_notebook_popup_disable (notebook);
6044 notebook_homogeneous (GtkToggleButton *button,
6045 GtkNotebook *notebook)
6047 gtk_notebook_set_homogeneous_tabs (notebook, button->active);
6051 create_notebook (void)
6053 static GtkWidget *window = NULL;
6057 GtkWidget *separator;
6059 GdkColor *transparent = NULL;
6062 static OptionMenuItem items[] =
6064 { "Standard", standard_notebook },
6065 { "No tabs", notabs_notebook },
6066 { "Scrollable", scrollable_notebook }
6071 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6073 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6074 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6077 gtk_window_set_title (GTK_WINDOW (window), "notebook");
6078 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6080 box1 = gtk_vbox_new (FALSE, 0);
6081 gtk_container_add (GTK_CONTAINER (window), box1);
6083 sample_notebook = gtk_notebook_new ();
6084 gtk_signal_connect (GTK_OBJECT (sample_notebook), "switch_page",
6085 GTK_SIGNAL_FUNC (page_switch), NULL);
6086 gtk_notebook_set_tab_pos (GTK_NOTEBOOK (sample_notebook), GTK_POS_TOP);
6087 gtk_box_pack_start (GTK_BOX (box1), sample_notebook, TRUE, TRUE, 0);
6088 gtk_container_set_border_width (GTK_CONTAINER (sample_notebook), 10);
6090 gtk_widget_realize (sample_notebook);
6091 book_open = gdk_pixmap_create_from_xpm_d (sample_notebook->window,
6095 book_closed = gdk_pixmap_create_from_xpm_d (sample_notebook->window,
6100 create_pages (GTK_NOTEBOOK (sample_notebook), 1, 5);
6102 separator = gtk_hseparator_new ();
6103 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 10);
6105 box2 = gtk_hbox_new (FALSE, 5);
6106 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6107 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6109 button = gtk_check_button_new_with_label ("popup menu");
6110 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, FALSE, 0);
6111 gtk_signal_connect (GTK_OBJECT(button), "clicked",
6112 GTK_SIGNAL_FUNC (notebook_popup),
6113 GTK_OBJECT (sample_notebook));
6115 button = gtk_check_button_new_with_label ("homogeneous tabs");
6116 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, FALSE, 0);
6117 gtk_signal_connect (GTK_OBJECT(button), "clicked",
6118 GTK_SIGNAL_FUNC (notebook_homogeneous),
6119 GTK_OBJECT (sample_notebook));
6121 box2 = gtk_hbox_new (FALSE, 5);
6122 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6123 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6125 label = gtk_label_new ("Notebook Style :");
6126 gtk_box_pack_start (GTK_BOX (box2), label, FALSE, TRUE, 0);
6128 omenu = build_option_menu (items, 3, 0, sample_notebook);
6129 gtk_box_pack_start (GTK_BOX (box2), omenu, FALSE, TRUE, 0);
6131 button = gtk_button_new_with_label ("Show all Pages");
6132 gtk_box_pack_start (GTK_BOX (box2), button, FALSE, TRUE, 0);
6133 gtk_signal_connect (GTK_OBJECT (button), "clicked",
6134 GTK_SIGNAL_FUNC (show_all_pages), sample_notebook);
6136 box2 = gtk_hbox_new (TRUE, 10);
6137 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6138 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6140 button = gtk_button_new_with_label ("prev");
6141 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6142 GTK_SIGNAL_FUNC (gtk_notebook_prev_page),
6143 GTK_OBJECT (sample_notebook));
6144 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6146 button = gtk_button_new_with_label ("next");
6147 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6148 GTK_SIGNAL_FUNC (gtk_notebook_next_page),
6149 GTK_OBJECT (sample_notebook));
6150 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6152 button = gtk_button_new_with_label ("rotate");
6153 gtk_signal_connect (GTK_OBJECT (button), "clicked",
6154 GTK_SIGNAL_FUNC (rotate_notebook), sample_notebook);
6155 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6157 separator = gtk_hseparator_new ();
6158 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 5);
6160 button = gtk_button_new_with_label ("close");
6161 gtk_container_set_border_width (GTK_CONTAINER (button), 5);
6162 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6163 GTK_SIGNAL_FUNC (gtk_widget_destroy),
6164 GTK_OBJECT (window));
6165 gtk_box_pack_start (GTK_BOX (box1), button, FALSE, FALSE, 0);
6166 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6167 gtk_widget_grab_default (button);
6170 if (!GTK_WIDGET_VISIBLE (window))
6171 gtk_widget_show_all (window);
6173 gtk_widget_destroy (window);
6181 toggle_resize (GtkWidget *widget, GtkWidget *child)
6183 GtkPaned *paned = GTK_PANED (child->parent);
6184 gboolean is_child1 = (child == paned->child1);
6185 gboolean resize, shrink;
6187 resize = is_child1 ? paned->child1_resize : paned->child2_resize;
6188 shrink = is_child1 ? paned->child1_shrink : paned->child2_shrink;
6190 gtk_widget_ref (child);
6191 gtk_container_remove (GTK_CONTAINER (child->parent), child);
6193 gtk_paned_pack1 (paned, child, !resize, shrink);
6195 gtk_paned_pack2 (paned, child, !resize, shrink);
6196 gtk_widget_unref (child);
6200 toggle_shrink (GtkWidget *widget, GtkWidget *child)
6202 GtkPaned *paned = GTK_PANED (child->parent);
6203 gboolean is_child1 = (child == paned->child1);
6204 gboolean resize, shrink;
6206 resize = is_child1 ? paned->child1_resize : paned->child2_resize;
6207 shrink = is_child1 ? paned->child1_shrink : paned->child2_shrink;
6209 gtk_widget_ref (child);
6210 gtk_container_remove (GTK_CONTAINER (child->parent), child);
6212 gtk_paned_pack1 (paned, child, resize, !shrink);
6214 gtk_paned_pack2 (paned, child, resize, !shrink);
6215 gtk_widget_unref (child);
6219 create_pane_options (GtkPaned *paned,
6220 const gchar *frame_label,
6221 const gchar *label1,
6222 const gchar *label2)
6227 GtkWidget *check_button;
6229 frame = gtk_frame_new (frame_label);
6230 gtk_container_set_border_width (GTK_CONTAINER (frame), 4);
6232 table = gtk_table_new (3, 2, 4);
6233 gtk_container_add (GTK_CONTAINER (frame), table);
6235 label = gtk_label_new (label1);
6236 gtk_table_attach_defaults (GTK_TABLE (table), label,
6239 check_button = gtk_check_button_new_with_label ("Resize");
6240 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
6242 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
6243 GTK_SIGNAL_FUNC (toggle_resize),
6246 check_button = gtk_check_button_new_with_label ("Shrink");
6247 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
6249 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
6251 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
6252 GTK_SIGNAL_FUNC (toggle_shrink),
6255 label = gtk_label_new (label2);
6256 gtk_table_attach_defaults (GTK_TABLE (table), label,
6259 check_button = gtk_check_button_new_with_label ("Resize");
6260 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
6262 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
6264 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
6265 GTK_SIGNAL_FUNC (toggle_resize),
6268 check_button = gtk_check_button_new_with_label ("Shrink");
6269 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
6271 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
6273 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
6274 GTK_SIGNAL_FUNC (toggle_shrink),
6283 static GtkWidget *window = NULL;
6292 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6294 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6295 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6298 gtk_window_set_title (GTK_WINDOW (window), "Panes");
6299 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6301 vbox = gtk_vbox_new (FALSE, 0);
6302 gtk_container_add (GTK_CONTAINER (window), vbox);
6304 vpaned = gtk_vpaned_new ();
6305 gtk_box_pack_start (GTK_BOX (vbox), vpaned, TRUE, TRUE, 0);
6306 gtk_container_set_border_width (GTK_CONTAINER(vpaned), 5);
6308 hpaned = gtk_hpaned_new ();
6309 gtk_paned_add1 (GTK_PANED (vpaned), hpaned);
6311 frame = gtk_frame_new (NULL);
6312 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
6313 gtk_widget_set_usize (frame, 60, 60);
6314 gtk_paned_add1 (GTK_PANED (hpaned), frame);
6316 button = gtk_button_new_with_label ("Hi there");
6317 gtk_container_add (GTK_CONTAINER(frame), button);
6319 frame = gtk_frame_new (NULL);
6320 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
6321 gtk_widget_set_usize (frame, 80, 60);
6322 gtk_paned_add2 (GTK_PANED (hpaned), frame);
6324 frame = gtk_frame_new (NULL);
6325 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
6326 gtk_widget_set_usize (frame, 60, 80);
6327 gtk_paned_add2 (GTK_PANED (vpaned), frame);
6329 /* Now create toggle buttons to control sizing */
6331 gtk_box_pack_start (GTK_BOX (vbox),
6332 create_pane_options (GTK_PANED (hpaned),
6338 gtk_box_pack_start (GTK_BOX (vbox),
6339 create_pane_options (GTK_PANED (vpaned),
6345 gtk_widget_show_all (vbox);
6348 if (!GTK_WIDGET_VISIBLE (window))
6349 gtk_widget_show (window);
6351 gtk_widget_destroy (window);
6360 dnd_drop_destroy_popup (GtkWidget *widget, GtkWindow **window)
6362 if(GTK_IS_BUTTON(widget)) /* I.e. they clicked the close button */
6363 gtk_widget_destroy(GTK_WIDGET(*window));
6365 gtk_grab_remove(GTK_WIDGET(*window));
6373 dnd_drop (GtkWidget *button, GdkEvent *event)
6375 static GtkWidget *window = NULL;
6376 GtkWidget *vbox, *lbl, *btn;
6379 /* DND doesn't obey gtk_grab's, so check if we're already displaying
6380 * drop modal dialog first
6385 window = gtk_window_new(GTK_WINDOW_DIALOG);
6386 gtk_container_set_border_width (GTK_CONTAINER(window), 10);
6388 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6389 GTK_SIGNAL_FUNC(dnd_drop_destroy_popup),
6391 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
6392 GTK_SIGNAL_FUNC(gtk_false),
6395 vbox = gtk_vbox_new(FALSE, 5);
6397 /* Display message that we got from drop source */
6398 msg = g_malloc(strlen(event->dropdataavailable.data)
6399 + strlen(event->dropdataavailable.data_type) + 100);
6400 sprintf(msg, "Drop data of type %s was:\n\n%s",
6401 event->dropdataavailable.data_type,
6402 (char *)event->dropdataavailable.data);
6403 lbl = gtk_label_new(msg);
6404 gtk_label_set_justify(GTK_LABEL(lbl), GTK_JUSTIFY_FILL);
6406 gtk_widget_show(lbl);
6407 gtk_box_pack_start_defaults(GTK_BOX(vbox), lbl);
6409 /* Provide an obvious way out of this heinousness */
6410 btn = gtk_button_new_with_label("Continue with life in\nspite of this oppression");
6411 gtk_signal_connect_object (GTK_OBJECT (btn), "clicked",
6412 GTK_SIGNAL_FUNC(gtk_widget_destroy),
6413 GTK_OBJECT (window));
6414 gtk_widget_show(btn);
6415 gtk_box_pack_start_defaults(GTK_BOX(vbox), btn);
6417 gtk_container_add(GTK_CONTAINER(window), vbox);
6419 gtk_widget_show(vbox);
6420 gtk_grab_add(window);
6421 gtk_widget_show(window);
6425 dnd_drag_request (GtkWidget *button, GdkEvent *event)
6427 #define DND_STRING "Bill Gates demands royalties for\nyour use of his innovation."
6428 gtk_widget_dnd_data_set (button, event, DND_STRING, strlen(DND_STRING) + 1);
6434 static GtkWidget *window = NULL;
6440 GtkWidget *separator;
6442 /* For clarity... */
6443 char *possible_drag_types[] = {"text/plain"};
6444 char *accepted_drop_types[] = {"text/plain"};
6446 static GtkWidget *drag_icon = NULL;
6447 static GtkWidget *drop_icon = NULL;
6451 GdkPoint hotspot = {5,5};
6455 drag_icon = shape_create_icon ("Modeller.xpm",
6456 440, 140, 0,0, GTK_WINDOW_POPUP);
6458 gtk_signal_connect (GTK_OBJECT (drag_icon), "destroy",
6459 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6462 gtk_widget_hide (drag_icon);
6467 drop_icon = shape_create_icon ("3DRings.xpm",
6468 440, 140, 0,0, GTK_WINDOW_POPUP);
6470 gtk_signal_connect (GTK_OBJECT (drop_icon), "destroy",
6471 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6474 gtk_widget_hide (drop_icon);
6477 gdk_dnd_set_drag_shape(drag_icon->window,
6482 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6484 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6485 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6488 gtk_window_set_title (GTK_WINDOW (window), "Drag -N- Drop");
6489 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6491 box1 = gtk_vbox_new (FALSE, 0);
6492 gtk_container_add (GTK_CONTAINER (window), box1);
6493 gtk_widget_show (box1);
6495 box2 = gtk_hbox_new (FALSE, 5);
6496 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6497 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
6498 gtk_widget_show (box2);
6500 frame = gtk_frame_new ("Drag");
6501 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
6502 gtk_widget_show (frame);
6504 box3 = gtk_vbox_new (FALSE, 5);
6505 gtk_container_set_border_width (GTK_CONTAINER (box3), 5);
6506 gtk_container_add (GTK_CONTAINER (frame), box3);
6507 gtk_widget_show (box3);
6512 button = gtk_button_new_with_label ("Drag me!");
6513 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
6514 gtk_widget_show (button);
6517 * currently, the widget has to be realized to
6518 * set dnd on it, this needs to change
6520 gtk_widget_realize (button);
6521 gtk_signal_connect (GTK_OBJECT (button),
6522 "drag_request_event",
6523 GTK_SIGNAL_FUNC(dnd_drag_request),
6526 gtk_widget_dnd_drag_set (button, TRUE, possible_drag_types, 1);
6529 frame = gtk_frame_new ("Drop");
6530 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
6531 gtk_widget_show (frame);
6533 box3 = gtk_vbox_new (FALSE, 5);
6534 gtk_container_set_border_width (GTK_CONTAINER (box3), 5);
6535 gtk_container_add (GTK_CONTAINER (frame), box3);
6536 gtk_widget_show (box3);
6542 button = gtk_button_new_with_label ("To");
6543 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
6544 gtk_widget_show (button);
6546 gtk_widget_realize (button);
6547 gtk_signal_connect (GTK_OBJECT (button),
6548 "drop_data_available_event",
6549 GTK_SIGNAL_FUNC(dnd_drop),
6552 gtk_widget_dnd_drop_set (button, TRUE, accepted_drop_types, 1, FALSE);
6555 separator = gtk_hseparator_new ();
6556 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
6557 gtk_widget_show (separator);
6560 box2 = gtk_vbox_new (FALSE, 10);
6561 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6562 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6563 gtk_widget_show (box2);
6566 button = gtk_button_new_with_label ("close");
6568 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6569 GTK_SIGNAL_FUNC(gtk_widget_destroy),
6570 GTK_OBJECT (window));
6572 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6573 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6574 gtk_widget_grab_default (button);
6575 gtk_widget_show (button);
6578 if (!GTK_WIDGET_VISIBLE (window))
6579 gtk_widget_show (window);
6581 gtk_widget_destroy (window);
6589 typedef struct _cursoroffset {gint x,y;} CursorOffset;
6592 shape_pressed (GtkWidget *widget, GdkEventButton *event)
6596 /* ignore double and triple click */
6597 if (event->type != GDK_BUTTON_PRESS)
6600 p = gtk_object_get_user_data (GTK_OBJECT(widget));
6601 p->x = (int) event->x;
6602 p->y = (int) event->y;
6604 gtk_grab_add (widget);
6605 gdk_pointer_grab (widget->window, TRUE,
6606 GDK_BUTTON_RELEASE_MASK |
6607 GDK_BUTTON_MOTION_MASK |
6608 GDK_POINTER_MOTION_HINT_MASK,
6613 shape_released (GtkWidget *widget)
6615 gtk_grab_remove (widget);
6616 gdk_pointer_ungrab (0);
6620 shape_motion (GtkWidget *widget,
6621 GdkEventMotion *event)
6625 GdkModifierType mask;
6627 p = gtk_object_get_user_data (GTK_OBJECT (widget));
6630 * Can't use event->x / event->y here
6631 * because I need absolute coordinates.
6633 gdk_window_get_pointer (NULL, &xp, &yp, &mask);
6634 gtk_widget_set_uposition (widget, xp - p->x, yp - p->y);
6638 shape_create_icon (char *xpm_file,
6648 CursorOffset* icon_pos;
6650 GdkBitmap *gdk_pixmap_mask;
6651 GdkPixmap *gdk_pixmap;
6654 style = gtk_widget_get_default_style ();
6655 gc = style->black_gc;
6658 * GDK_WINDOW_TOPLEVEL works also, giving you a title border
6660 window = gtk_window_new (window_type);
6662 fixed = gtk_fixed_new ();
6663 gtk_widget_set_usize (fixed, 100,100);
6664 gtk_container_add (GTK_CONTAINER (window), fixed);
6665 gtk_widget_show (fixed);
6667 gtk_widget_set_events (window,
6668 gtk_widget_get_events (window) |
6669 GDK_BUTTON_MOTION_MASK |
6670 GDK_POINTER_MOTION_HINT_MASK |
6671 GDK_BUTTON_PRESS_MASK);
6673 gtk_widget_realize (window);
6674 gdk_pixmap = gdk_pixmap_create_from_xpm (window->window, &gdk_pixmap_mask,
6675 &style->bg[GTK_STATE_NORMAL],
6678 pixmap = gtk_pixmap_new (gdk_pixmap, gdk_pixmap_mask);
6679 gtk_fixed_put (GTK_FIXED (fixed), pixmap, px,py);
6680 gtk_widget_show (pixmap);
6682 gtk_widget_shape_combine_mask (window, gdk_pixmap_mask, px,py);
6685 gtk_signal_connect (GTK_OBJECT (window), "button_press_event",
6686 GTK_SIGNAL_FUNC (shape_pressed),NULL);
6687 gtk_signal_connect (GTK_OBJECT (window), "button_release_event",
6688 GTK_SIGNAL_FUNC (shape_released),NULL);
6689 gtk_signal_connect (GTK_OBJECT (window), "motion_notify_event",
6690 GTK_SIGNAL_FUNC (shape_motion),NULL);
6692 icon_pos = g_new (CursorOffset, 1);
6693 gtk_object_set_user_data(GTK_OBJECT(window), icon_pos);
6695 gtk_widget_set_uposition (window, x, y);
6696 gtk_widget_show (window);
6702 create_shapes (void)
6704 /* Variables used by the Drag/Drop and Shape Window demos */
6705 static GtkWidget *modeller = NULL;
6706 static GtkWidget *sheets = NULL;
6707 static GtkWidget *rings = NULL;
6711 modeller = shape_create_icon ("Modeller.xpm",
6712 440, 140, 0,0, GTK_WINDOW_POPUP);
6714 gtk_signal_connect (GTK_OBJECT (modeller), "destroy",
6715 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6719 gtk_widget_destroy (modeller);
6723 sheets = shape_create_icon ("FilesQueue.xpm",
6724 580, 170, 0,0, GTK_WINDOW_POPUP);
6726 gtk_signal_connect (GTK_OBJECT (sheets), "destroy",
6727 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6732 gtk_widget_destroy (sheets);
6736 rings = shape_create_icon ("3DRings.xpm",
6737 460, 270, 25,25, GTK_WINDOW_TOPLEVEL);
6739 gtk_signal_connect (GTK_OBJECT (rings), "destroy",
6740 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6744 gtk_widget_destroy (rings);
6752 create_wmhints (void)
6754 static GtkWidget *window = NULL;
6756 GtkWidget *separator;
6765 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6767 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6768 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6771 gtk_window_set_title (GTK_WINDOW (window), "WM Hints");
6772 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6774 gtk_widget_realize (window);
6776 circles = gdk_bitmap_create_from_data (window->window,
6780 gdk_window_set_icon (window->window, NULL,
6783 gdk_window_set_icon_name (window->window, "WMHints Test Icon");
6785 gdk_window_set_decorations (window->window, GDK_DECOR_ALL | GDK_DECOR_MENU);
6786 gdk_window_set_functions (window->window, GDK_FUNC_ALL | GDK_FUNC_RESIZE);
6788 box1 = gtk_vbox_new (FALSE, 0);
6789 gtk_container_add (GTK_CONTAINER (window), box1);
6790 gtk_widget_show (box1);
6792 label = gtk_label_new ("Try iconizing me!");
6793 gtk_widget_set_usize (label, 150, 50);
6794 gtk_box_pack_start (GTK_BOX (box1), label, TRUE, TRUE, 0);
6795 gtk_widget_show (label);
6798 separator = gtk_hseparator_new ();
6799 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
6800 gtk_widget_show (separator);
6803 box2 = gtk_vbox_new (FALSE, 10);
6804 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6805 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6806 gtk_widget_show (box2);
6809 button = gtk_button_new_with_label ("close");
6811 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6812 GTK_SIGNAL_FUNC(gtk_widget_destroy),
6813 GTK_OBJECT (window));
6815 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6816 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6817 gtk_widget_grab_default (button);
6818 gtk_widget_show (button);
6821 if (!GTK_WIDGET_VISIBLE (window))
6822 gtk_widget_show (window);
6824 gtk_widget_destroy (window);
6831 typedef struct _ProgressData {
6834 GtkWidget *block_spin;
6835 GtkWidget *x_align_spin;
6836 GtkWidget *y_align_spin;
6837 GtkWidget *step_spin;
6838 GtkWidget *act_blocks_spin;
6847 progress_timeout (gpointer data)
6852 adj = GTK_PROGRESS (data)->adjustment;
6854 new_val = adj->value + 1;
6855 if (new_val > adj->upper)
6856 new_val = adj->lower;
6858 gtk_progress_set_value (GTK_PROGRESS (data), new_val);
6864 destroy_progress (GtkWidget *widget,
6865 ProgressData **pdata)
6867 gtk_timeout_remove ((*pdata)->timer);
6868 (*pdata)->timer = 0;
6869 (*pdata)->window = NULL;
6875 progressbar_toggle_orientation (GtkWidget *widget, ProgressData *pdata)
6879 if (!GTK_WIDGET_MAPPED (widget))
6882 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
6883 (((GtkOptionMenu *)(pdata->omenu1))->menu_item), i);
6885 gtk_progress_bar_set_orientation (GTK_PROGRESS_BAR (pdata->pbar),
6886 (GtkProgressBarOrientation) (3-i));
6890 toggle_show_text (GtkWidget *widget, ProgressData *pdata)
6892 gtk_progress_set_show_text (GTK_PROGRESS (pdata->pbar),
6893 GTK_TOGGLE_BUTTON (widget)->active);
6894 gtk_widget_set_sensitive (pdata->entry, GTK_TOGGLE_BUTTON (widget)->active);
6895 gtk_widget_set_sensitive (pdata->x_align_spin,
6896 GTK_TOGGLE_BUTTON (widget)->active);
6897 gtk_widget_set_sensitive (pdata->y_align_spin,
6898 GTK_TOGGLE_BUTTON (widget)->active);
6902 progressbar_toggle_bar_style (GtkWidget *widget, ProgressData *pdata)
6906 if (!GTK_WIDGET_MAPPED (widget))
6909 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
6910 (((GtkOptionMenu *)(pdata->omenu2))->menu_item), i);
6915 gtk_widget_set_sensitive (pdata->block_spin, TRUE);
6917 gtk_widget_set_sensitive (pdata->block_spin, FALSE);
6919 gtk_progress_bar_set_bar_style (GTK_PROGRESS_BAR (pdata->pbar),
6920 (GtkProgressBarStyle) i);
6924 progress_value_changed (GtkAdjustment *adj, ProgressData *pdata)
6928 if (GTK_PROGRESS (pdata->pbar)->activity_mode)
6929 sprintf (buf, "???");
6931 sprintf (buf, "%.0f%%", 100 *
6932 gtk_progress_get_current_percentage (GTK_PROGRESS (pdata->pbar)));
6933 gtk_label_set_text (GTK_LABEL (pdata->label), buf);
6937 adjust_blocks (GtkAdjustment *adj, ProgressData *pdata)
6939 gtk_progress_set_percentage (GTK_PROGRESS (pdata->pbar), 0);
6940 gtk_progress_bar_set_discrete_blocks (GTK_PROGRESS_BAR (pdata->pbar),
6941 gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (pdata->block_spin)));
6945 adjust_step (GtkAdjustment *adj, ProgressData *pdata)
6947 gtk_progress_bar_set_activity_step (GTK_PROGRESS_BAR (pdata->pbar),
6948 gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (pdata->step_spin)));
6952 adjust_act_blocks (GtkAdjustment *adj, ProgressData *pdata)
6954 gtk_progress_bar_set_activity_blocks (GTK_PROGRESS_BAR (pdata->pbar),
6955 gtk_spin_button_get_value_as_int
6956 (GTK_SPIN_BUTTON (pdata->act_blocks_spin)));
6960 adjust_align (GtkAdjustment *adj, ProgressData *pdata)
6962 gtk_progress_set_text_alignment (GTK_PROGRESS (pdata->pbar),
6963 gtk_spin_button_get_value_as_float
6964 (GTK_SPIN_BUTTON (pdata->x_align_spin)),
6965 gtk_spin_button_get_value_as_float
6966 (GTK_SPIN_BUTTON (pdata->y_align_spin)));
6970 toggle_activity_mode (GtkWidget *widget, ProgressData *pdata)
6972 gtk_progress_set_activity_mode (GTK_PROGRESS (pdata->pbar),
6973 GTK_TOGGLE_BUTTON (widget)->active);
6974 gtk_widget_set_sensitive (pdata->step_spin,
6975 GTK_TOGGLE_BUTTON (widget)->active);
6976 gtk_widget_set_sensitive (pdata->act_blocks_spin,
6977 GTK_TOGGLE_BUTTON (widget)->active);
6981 entry_changed (GtkWidget *widget, ProgressData *pdata)
6983 gtk_progress_set_format_string (GTK_PROGRESS (pdata->pbar),
6984 gtk_entry_get_text (GTK_ENTRY (pdata->entry)));
6988 create_progress_bar (void)
7000 static ProgressData *pdata = NULL;
7002 static OptionMenuItem items1[] =
7004 { "Left-Right", progressbar_toggle_orientation },
7005 { "Right-Left", progressbar_toggle_orientation },
7006 { "Bottom-Top", progressbar_toggle_orientation },
7007 { "Top-Bottom", progressbar_toggle_orientation }
7010 static OptionMenuItem items2[] =
7012 { "Continuous", progressbar_toggle_bar_style },
7013 { "Discrete", progressbar_toggle_bar_style }
7017 pdata = g_new0 (ProgressData, 1);
7021 pdata->window = gtk_dialog_new ();
7023 gtk_window_set_policy (GTK_WINDOW (pdata->window), FALSE, FALSE, TRUE);
7025 gtk_signal_connect (GTK_OBJECT (pdata->window), "destroy",
7026 GTK_SIGNAL_FUNC (destroy_progress),
7031 gtk_window_set_title (GTK_WINDOW (pdata->window), "GtkProgressBar");
7032 gtk_container_set_border_width (GTK_CONTAINER (pdata->window), 0);
7034 vbox = gtk_vbox_new (FALSE, 5);
7035 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
7036 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (pdata->window)->vbox),
7037 vbox, FALSE, TRUE, 0);
7039 frame = gtk_frame_new ("Progress");
7040 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
7042 vbox2 = gtk_vbox_new (FALSE, 5);
7043 gtk_container_add (GTK_CONTAINER (frame), vbox2);
7045 align = gtk_alignment_new (0.5, 0.5, 0, 0);
7046 gtk_box_pack_start (GTK_BOX (vbox2), align, FALSE, FALSE, 5);
7048 adj = (GtkAdjustment *) gtk_adjustment_new (0, 1, 300, 0, 0, 0);
7049 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
7050 GTK_SIGNAL_FUNC (progress_value_changed), pdata);
7052 pdata->pbar = gtk_progress_bar_new_with_adjustment (adj);
7053 gtk_progress_set_format_string (GTK_PROGRESS (pdata->pbar),
7054 "%v from [%l,%u] (=%p%%)");
7055 gtk_container_add (GTK_CONTAINER (align), pdata->pbar);
7056 pdata->timer = gtk_timeout_add (100, progress_timeout, pdata->pbar);
7058 align = gtk_alignment_new (0.5, 0.5, 0, 0);
7059 gtk_box_pack_start (GTK_BOX (vbox2), align, FALSE, FALSE, 5);
7061 hbox = gtk_hbox_new (FALSE, 5);
7062 gtk_container_add (GTK_CONTAINER (align), hbox);
7063 label = gtk_label_new ("Label updated by user :");
7064 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
7065 pdata->label = gtk_label_new ("");
7066 gtk_box_pack_start (GTK_BOX (hbox), pdata->label, FALSE, TRUE, 0);
7068 frame = gtk_frame_new ("Options");
7069 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
7071 vbox2 = gtk_vbox_new (FALSE, 5);
7072 gtk_container_add (GTK_CONTAINER (frame), vbox2);
7074 tab = gtk_table_new (7, 2, FALSE);
7075 gtk_box_pack_start (GTK_BOX (vbox2), tab, FALSE, TRUE, 0);
7077 label = gtk_label_new ("Orientation :");
7078 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 0, 1,
7079 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7081 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
7083 pdata->omenu1 = build_option_menu (items1, 4, 0, pdata);
7084 hbox = gtk_hbox_new (FALSE, 0);
7085 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 0, 1,
7086 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7088 gtk_box_pack_start (GTK_BOX (hbox), pdata->omenu1, TRUE, TRUE, 0);
7090 check = gtk_check_button_new_with_label ("Show text");
7091 gtk_signal_connect (GTK_OBJECT (check), "clicked",
7092 GTK_SIGNAL_FUNC (toggle_show_text),
7094 gtk_table_attach (GTK_TABLE (tab), check, 0, 1, 1, 2,
7095 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7098 hbox = gtk_hbox_new (FALSE, 0);
7099 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 1, 2,
7100 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7103 label = gtk_label_new ("Format : ");
7104 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
7106 pdata->entry = gtk_entry_new ();
7107 gtk_signal_connect (GTK_OBJECT (pdata->entry), "changed",
7108 GTK_SIGNAL_FUNC (entry_changed),
7110 gtk_box_pack_start (GTK_BOX (hbox), pdata->entry, TRUE, TRUE, 0);
7111 gtk_entry_set_text (GTK_ENTRY (pdata->entry), "%v from [%l,%u] (=%p%%)");
7112 gtk_widget_set_usize (pdata->entry, 100, -1);
7113 gtk_widget_set_sensitive (pdata->entry, FALSE);
7115 label = gtk_label_new ("Text align :");
7116 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 2, 3,
7117 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7119 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
7121 hbox = gtk_hbox_new (FALSE, 0);
7122 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 2, 3,
7123 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7126 label = gtk_label_new ("x :");
7127 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 5);
7129 adj = (GtkAdjustment *) gtk_adjustment_new (0.5, 0, 1, 0.1, 0.1, 0);
7130 pdata->x_align_spin = gtk_spin_button_new (adj, 0, 1);
7131 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
7132 GTK_SIGNAL_FUNC (adjust_align), pdata);
7133 gtk_box_pack_start (GTK_BOX (hbox), pdata->x_align_spin, FALSE, TRUE, 0);
7134 gtk_widget_set_sensitive (pdata->x_align_spin, FALSE);
7136 label = gtk_label_new ("y :");
7137 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 5);
7139 adj = (GtkAdjustment *) gtk_adjustment_new (0.5, 0, 1, 0.1, 0.1, 0);
7140 pdata->y_align_spin = gtk_spin_button_new (adj, 0, 1);
7141 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
7142 GTK_SIGNAL_FUNC (adjust_align), pdata);
7143 gtk_box_pack_start (GTK_BOX (hbox), pdata->y_align_spin, FALSE, TRUE, 0);
7144 gtk_widget_set_sensitive (pdata->y_align_spin, FALSE);
7146 label = gtk_label_new ("Bar Style :");
7147 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 3, 4,
7148 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7150 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
7152 pdata->omenu2 = build_option_menu (items2, 2, 0, pdata);
7153 hbox = gtk_hbox_new (FALSE, 0);
7154 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 3, 4,
7155 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7157 gtk_box_pack_start (GTK_BOX (hbox), pdata->omenu2, TRUE, TRUE, 0);
7159 label = gtk_label_new ("Block count :");
7160 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 4, 5,
7161 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7163 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
7165 hbox = gtk_hbox_new (FALSE, 0);
7166 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 4, 5,
7167 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7169 adj = (GtkAdjustment *) gtk_adjustment_new (10, 2, 20, 1, 5, 0);
7170 pdata->block_spin = gtk_spin_button_new (adj, 0, 0);
7171 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
7172 GTK_SIGNAL_FUNC (adjust_blocks), pdata);
7173 gtk_box_pack_start (GTK_BOX (hbox), pdata->block_spin, FALSE, TRUE, 0);
7174 gtk_widget_set_sensitive (pdata->block_spin, FALSE);
7176 check = gtk_check_button_new_with_label ("Activity mode");
7177 gtk_signal_connect (GTK_OBJECT (check), "clicked",
7178 GTK_SIGNAL_FUNC (toggle_activity_mode),
7180 gtk_table_attach (GTK_TABLE (tab), check, 0, 1, 5, 6,
7181 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7184 hbox = gtk_hbox_new (FALSE, 0);
7185 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 5, 6,
7186 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7188 label = gtk_label_new ("Step size : ");
7189 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
7190 adj = (GtkAdjustment *) gtk_adjustment_new (3, 1, 20, 1, 5, 0);
7191 pdata->step_spin = gtk_spin_button_new (adj, 0, 0);
7192 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
7193 GTK_SIGNAL_FUNC (adjust_step), pdata);
7194 gtk_box_pack_start (GTK_BOX (hbox), pdata->step_spin, FALSE, TRUE, 0);
7195 gtk_widget_set_sensitive (pdata->step_spin, FALSE);
7197 hbox = gtk_hbox_new (FALSE, 0);
7198 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 6, 7,
7199 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7201 label = gtk_label_new ("Blocks : ");
7202 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
7203 adj = (GtkAdjustment *) gtk_adjustment_new (5, 2, 10, 1, 5, 0);
7204 pdata->act_blocks_spin = gtk_spin_button_new (adj, 0, 0);
7205 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
7206 GTK_SIGNAL_FUNC (adjust_act_blocks), pdata);
7207 gtk_box_pack_start (GTK_BOX (hbox), pdata->act_blocks_spin, FALSE, TRUE,
7209 gtk_widget_set_sensitive (pdata->act_blocks_spin, FALSE);
7211 button = gtk_button_new_with_label ("close");
7212 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7213 GTK_SIGNAL_FUNC (gtk_widget_destroy),
7214 GTK_OBJECT (pdata->window));
7215 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7216 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (pdata->window)->action_area),
7217 button, TRUE, TRUE, 0);
7218 gtk_widget_grab_default (button);
7221 if (!GTK_WIDGET_VISIBLE (pdata->window))
7222 gtk_widget_show_all (pdata->window);
7224 gtk_widget_destroy (pdata->window);
7231 static int color_idle = 0;
7234 color_idle_func (GtkWidget *preview)
7236 static int count = 1;
7240 for (i = 0; i < 256; i++)
7242 for (j = 0, k = 0; j < 256; j++)
7244 buf[k+0] = i + count;
7246 buf[k+2] = j + count;
7250 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
7255 gtk_widget_draw (preview, NULL);
7261 color_preview_destroy (GtkWidget *widget,
7264 gtk_idle_remove (color_idle);
7271 create_color_preview (void)
7273 static GtkWidget *window = NULL;
7280 gtk_widget_push_visual (gdk_rgb_get_visual ());
7281 gtk_widget_push_colormap (gdk_rgb_get_cmap ());
7282 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7283 gtk_widget_pop_colormap ();
7284 gtk_widget_pop_visual ();
7286 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7287 GTK_SIGNAL_FUNC(color_preview_destroy),
7290 gtk_window_set_title (GTK_WINDOW (window), "test");
7291 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
7293 preview = gtk_preview_new (GTK_PREVIEW_COLOR);
7294 gtk_preview_size (GTK_PREVIEW (preview), 256, 256);
7295 gtk_container_add (GTK_CONTAINER (window), preview);
7297 for (i = 0; i < 256; i++)
7299 for (j = 0, k = 0; j < 256; j++)
7307 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
7310 color_idle = gtk_idle_add ((GtkFunction) color_idle_func, preview);
7313 if (!GTK_WIDGET_VISIBLE (window))
7314 gtk_widget_show_all (window);
7316 gtk_widget_destroy (window);
7323 static int gray_idle = 0;
7326 gray_idle_func (GtkWidget *preview)
7328 static int count = 1;
7332 for (i = 0; i < 256; i++)
7334 for (j = 0; j < 256; j++)
7335 buf[j] = i + j + count;
7337 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
7342 gtk_widget_draw (preview, NULL);
7348 gray_preview_destroy (GtkWidget *widget,
7351 gtk_idle_remove (gray_idle);
7358 create_gray_preview (void)
7360 static GtkWidget *window = NULL;
7367 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7369 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7370 GTK_SIGNAL_FUNC(gray_preview_destroy),
7373 gtk_window_set_title (GTK_WINDOW (window), "test");
7374 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
7376 preview = gtk_preview_new (GTK_PREVIEW_GRAYSCALE);
7377 gtk_preview_size (GTK_PREVIEW (preview), 256, 256);
7378 gtk_container_add (GTK_CONTAINER (window), preview);
7380 for (i = 0; i < 256; i++)
7382 for (j = 0; j < 256; j++)
7385 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
7388 gray_idle = gtk_idle_add ((GtkFunction) gray_idle_func, preview);
7391 if (!GTK_WIDGET_VISIBLE (window))
7392 gtk_widget_show_all (window);
7394 gtk_widget_destroy (window);
7403 selection_test_received (GtkWidget *list, GtkSelectionData *data)
7406 GtkWidget *list_item;
7410 if (data->length < 0)
7412 g_print ("Selection retrieval failed\n");
7415 if (data->type != GDK_SELECTION_TYPE_ATOM)
7417 g_print ("Selection \"TARGETS\" was not returned as atoms!\n");
7421 /* Clear out any current list items */
7423 gtk_list_clear_items (GTK_LIST(list), 0, -1);
7425 /* Add new items to list */
7427 atoms = (GdkAtom *)data->data;
7430 l = data->length / sizeof (GdkAtom);
7431 for (i = 0; i < l; i++)
7434 name = gdk_atom_name (atoms[i]);
7437 list_item = gtk_list_item_new_with_label (name);
7441 list_item = gtk_list_item_new_with_label ("(bad atom)");
7443 gtk_widget_show (list_item);
7444 item_list = g_list_append (item_list, list_item);
7447 gtk_list_append_items (GTK_LIST (list), item_list);
7453 selection_test_get_targets (GtkWidget *widget, GtkWidget *list)
7455 static GdkAtom targets_atom = GDK_NONE;
7457 if (targets_atom == GDK_NONE)
7458 targets_atom = gdk_atom_intern ("TARGETS", FALSE);
7460 gtk_selection_convert (list, GDK_SELECTION_PRIMARY, targets_atom,
7465 create_selection_test (void)
7467 static GtkWidget *window = NULL;
7470 GtkWidget *scrolled_win;
7476 window = gtk_dialog_new ();
7478 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7479 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7482 gtk_window_set_title (GTK_WINDOW (window), "Selection Test");
7483 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
7485 /* Create the list */
7487 vbox = gtk_vbox_new (FALSE, 5);
7488 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
7489 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), vbox,
7492 label = gtk_label_new ("Gets available targets for current selection");
7493 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
7495 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
7496 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
7497 GTK_POLICY_AUTOMATIC,
7498 GTK_POLICY_AUTOMATIC);
7499 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
7500 gtk_widget_set_usize (scrolled_win, 100, 200);
7502 list = gtk_list_new ();
7503 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_win), list);
7505 gtk_signal_connect (GTK_OBJECT(list), "selection_received",
7506 GTK_SIGNAL_FUNC (selection_test_received), NULL);
7508 /* .. And create some buttons */
7509 button = gtk_button_new_with_label ("Get Targets");
7510 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7511 button, TRUE, TRUE, 0);
7513 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7514 GTK_SIGNAL_FUNC (selection_test_get_targets), list);
7516 button = gtk_button_new_with_label ("Quit");
7517 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7518 button, TRUE, TRUE, 0);
7520 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7521 GTK_SIGNAL_FUNC (gtk_widget_destroy),
7522 GTK_OBJECT (window));
7525 if (!GTK_WIDGET_VISIBLE (window))
7526 gtk_widget_show_all (window);
7528 gtk_widget_destroy (window);
7536 create_gamma_curve (void)
7538 static GtkWidget *window = NULL, *curve;
7539 static int count = 0;
7546 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7547 gtk_window_set_title (GTK_WINDOW (window), "test");
7548 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
7550 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7551 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7554 curve = gtk_gamma_curve_new ();
7555 gtk_container_add (GTK_CONTAINER (window), curve);
7556 gtk_widget_show (curve);
7559 max = 127 + (count % 2)*128;
7560 gtk_curve_set_range (GTK_CURVE (GTK_GAMMA_CURVE (curve)->curve),
7562 for (i = 0; i < max; ++i)
7563 vec[i] = (127 / sqrt (max)) * sqrt (i);
7564 gtk_curve_set_vector (GTK_CURVE (GTK_GAMMA_CURVE (curve)->curve),
7567 if (!GTK_WIDGET_VISIBLE (window))
7568 gtk_widget_show (window);
7569 else if (count % 4 == 3)
7571 gtk_widget_destroy (window);
7582 static int scroll_test_pos = 0.0;
7583 static GdkGC *scroll_test_gc = NULL;
7586 scroll_test_expose (GtkWidget *widget, GdkEventExpose *event,
7590 gint imin, imax, jmin, jmax;
7592 imin = (event->area.x) / 10;
7593 imax = (event->area.x + event->area.width + 9) / 10;
7595 jmin = ((int)adj->value + event->area.y) / 10;
7596 jmax = ((int)adj->value + event->area.y + event->area.height + 9) / 10;
7598 gdk_window_clear_area (widget->window,
7599 event->area.x, event->area.y,
7600 event->area.width, event->area.height);
7602 for (i=imin; i<imax; i++)
7603 for (j=jmin; j<jmax; j++)
7605 gdk_draw_rectangle (widget->window,
7606 widget->style->black_gc,
7608 10*i, 10*j - (int)adj->value, 1+i%10, 1+j%10);
7614 scroll_test_configure (GtkWidget *widget, GdkEventConfigure *event,
7617 adj->page_increment = 0.9 * widget->allocation.height;
7618 adj->page_size = widget->allocation.height;
7620 gtk_signal_emit_by_name (GTK_OBJECT (adj), "changed");
7624 scroll_test_adjustment_changed (GtkAdjustment *adj, GtkWidget *widget)
7626 gint source_min = (int)adj->value - scroll_test_pos;
7627 gint source_max = source_min + widget->allocation.height;
7629 gint dest_max = widget->allocation.height;
7633 scroll_test_pos = adj->value;
7635 if (!GTK_WIDGET_DRAWABLE (widget))
7642 rect.width = widget->allocation.width;
7643 rect.height = -source_min;
7644 if (rect.height > widget->allocation.height)
7645 rect.height = widget->allocation.height;
7648 dest_min = rect.height;
7653 rect.y = 2*widget->allocation.height - source_max;
7656 rect.width = widget->allocation.width;
7657 rect.height = widget->allocation.height - rect.y;
7659 source_max = widget->allocation.height;
7663 if (source_min != source_max)
7665 if (scroll_test_gc == NULL)
7667 scroll_test_gc = gdk_gc_new (widget->window);
7668 gdk_gc_set_exposures (scroll_test_gc, TRUE);
7671 gdk_draw_pixmap (widget->window,
7676 widget->allocation.width,
7677 source_max - source_min);
7679 /* Make sure graphics expose events are processed before scrolling
7682 while ((event = gdk_event_get_graphics_expose (widget->window)) != NULL)
7684 gtk_widget_event (widget, event);
7685 if (event->expose.count == 0)
7687 gdk_event_free (event);
7690 gdk_event_free (event);
7694 if (rect.height != 0)
7695 gtk_widget_draw (widget, &rect);
7700 create_scroll_test (void)
7702 static GtkWidget *window = NULL;
7704 GtkWidget *drawing_area;
7705 GtkWidget *scrollbar;
7708 GdkGeometry geometry;
7709 GdkWindowHints geometry_mask;
7713 window = gtk_dialog_new ();
7715 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7716 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7719 gtk_window_set_title (GTK_WINDOW (window), "Scroll Test");
7720 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
7722 hbox = gtk_hbox_new (FALSE, 0);
7723 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), hbox,
7725 gtk_widget_show (hbox);
7727 drawing_area = gtk_drawing_area_new ();
7728 gtk_drawing_area_size (GTK_DRAWING_AREA (drawing_area), 200, 200);
7729 gtk_box_pack_start (GTK_BOX (hbox), drawing_area, TRUE, TRUE, 0);
7730 gtk_widget_show (drawing_area);
7732 gtk_widget_set_events (drawing_area, GDK_EXPOSURE_MASK);
7734 adj = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.0, 1000.0, 1.0, 180.0, 200.0));
7735 scroll_test_pos = 0.0;
7737 scrollbar = gtk_vscrollbar_new (adj);
7738 gtk_box_pack_start (GTK_BOX (hbox), scrollbar, FALSE, FALSE, 0);
7739 gtk_widget_show (scrollbar);
7741 gtk_signal_connect (GTK_OBJECT (drawing_area), "expose_event",
7742 GTK_SIGNAL_FUNC (scroll_test_expose), adj);
7743 gtk_signal_connect (GTK_OBJECT (drawing_area), "configure_event",
7744 GTK_SIGNAL_FUNC (scroll_test_configure), adj);
7747 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
7748 GTK_SIGNAL_FUNC (scroll_test_adjustment_changed),
7751 /* .. And create some buttons */
7753 button = gtk_button_new_with_label ("Quit");
7754 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7755 button, TRUE, TRUE, 0);
7757 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7758 GTK_SIGNAL_FUNC (gtk_widget_destroy),
7759 GTK_OBJECT (window));
7760 gtk_widget_show (button);
7762 /* Set up gridded geometry */
7764 geometry_mask = GDK_HINT_MIN_SIZE |
7765 GDK_HINT_BASE_SIZE |
7766 GDK_HINT_RESIZE_INC;
7768 geometry.min_width = 20;
7769 geometry.min_height = 20;
7770 geometry.base_width = 0;
7771 geometry.base_height = 0;
7772 geometry.width_inc = 10;
7773 geometry.height_inc = 10;
7775 gtk_window_set_geometry_hints (GTK_WINDOW (window),
7776 drawing_area, &geometry, geometry_mask);
7779 if (!GTK_WIDGET_VISIBLE (window))
7780 gtk_widget_show (window);
7782 gtk_widget_destroy (window);
7789 static int timer = 0;
7792 timeout_test (GtkWidget *label)
7794 static int count = 0;
7795 static char buffer[32];
7797 sprintf (buffer, "count: %d", ++count);
7798 gtk_label_set_text (GTK_LABEL (label), buffer);
7804 start_timeout_test (GtkWidget *widget,
7809 timer = gtk_timeout_add (100, (GtkFunction) timeout_test, label);
7814 stop_timeout_test (GtkWidget *widget,
7819 gtk_timeout_remove (timer);
7825 destroy_timeout_test (GtkWidget *widget,
7828 stop_timeout_test (NULL, NULL);
7834 create_timeout_test (void)
7836 static GtkWidget *window = NULL;
7842 window = gtk_dialog_new ();
7844 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7845 GTK_SIGNAL_FUNC(destroy_timeout_test),
7848 gtk_window_set_title (GTK_WINDOW (window), "Timeout Test");
7849 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
7851 label = gtk_label_new ("count: 0");
7852 gtk_misc_set_padding (GTK_MISC (label), 10, 10);
7853 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
7854 label, TRUE, TRUE, 0);
7855 gtk_widget_show (label);
7857 button = gtk_button_new_with_label ("close");
7858 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7859 GTK_SIGNAL_FUNC(gtk_widget_destroy),
7860 GTK_OBJECT (window));
7861 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7862 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7863 button, TRUE, TRUE, 0);
7864 gtk_widget_grab_default (button);
7865 gtk_widget_show (button);
7867 button = gtk_button_new_with_label ("start");
7868 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7869 GTK_SIGNAL_FUNC(start_timeout_test),
7871 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7872 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7873 button, TRUE, TRUE, 0);
7874 gtk_widget_show (button);
7876 button = gtk_button_new_with_label ("stop");
7877 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7878 GTK_SIGNAL_FUNC(stop_timeout_test),
7880 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7881 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7882 button, TRUE, TRUE, 0);
7883 gtk_widget_show (button);
7886 if (!GTK_WIDGET_VISIBLE (window))
7887 gtk_widget_show (window);
7889 gtk_widget_destroy (window);
7896 static int idle_id = 0;
7899 idle_test (GtkWidget *label)
7901 static int count = 0;
7902 static char buffer[32];
7904 sprintf (buffer, "count: %d", ++count);
7905 gtk_label_set_text (GTK_LABEL (label), buffer);
7911 start_idle_test (GtkWidget *widget,
7916 idle_id = gtk_idle_add ((GtkFunction) idle_test, label);
7921 stop_idle_test (GtkWidget *widget,
7926 gtk_idle_remove (idle_id);
7932 destroy_idle_test (GtkWidget *widget,
7935 stop_idle_test (NULL, NULL);
7941 toggle_idle_container (GtkObject *button,
7942 GtkContainer *container)
7944 gtk_container_set_resize_mode (container, GPOINTER_TO_INT (gtk_object_get_user_data (button)));
7948 create_idle_test (void)
7950 static GtkWidget *window = NULL;
7953 GtkWidget *container;
7960 window = gtk_dialog_new ();
7962 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7963 GTK_SIGNAL_FUNC(destroy_idle_test),
7966 gtk_window_set_title (GTK_WINDOW (window), "Idle Test");
7967 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
7969 label = gtk_label_new ("count: 0");
7970 gtk_misc_set_padding (GTK_MISC (label), 10, 10);
7971 gtk_widget_show (label);
7974 gtk_widget_new (GTK_TYPE_HBOX,
7975 "GtkWidget::visible", TRUE,
7976 /* "GtkContainer::child", gtk_widget_new (GTK_TYPE_HBOX,
7977 * "GtkWidget::visible", TRUE,
7979 "GtkContainer::child", label,
7982 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
7983 container, TRUE, TRUE, 0);
7986 gtk_widget_new (GTK_TYPE_FRAME,
7987 "GtkContainer::border_width", 5,
7988 "GtkFrame::label", "Label Container",
7989 "GtkWidget::visible", TRUE,
7990 "GtkWidget::parent", GTK_DIALOG (window)->vbox,
7993 gtk_widget_new (GTK_TYPE_VBOX,
7994 "GtkWidget::visible", TRUE,
7995 "GtkWidget::parent", frame,
7998 gtk_widget_new (GTK_TYPE_RADIO_BUTTON,
7999 "GtkButton::label", "Resize-Parent",
8000 "GtkObject::user_data", (void*)GTK_RESIZE_PARENT,
8001 "GtkObject::signal::clicked", toggle_idle_container, container,
8002 "GtkWidget::visible", TRUE,
8003 "GtkWidget::parent", box,
8006 gtk_widget_new (GTK_TYPE_RADIO_BUTTON,
8007 "GtkButton::label", "Resize-Queue",
8008 "GtkObject::user_data", (void*)GTK_RESIZE_QUEUE,
8009 "GtkObject::signal::clicked", toggle_idle_container, container,
8010 "GtkRadioButton::group", button,
8011 "GtkWidget::visible", TRUE,
8012 "GtkWidget::parent", box,
8015 gtk_widget_new (GTK_TYPE_RADIO_BUTTON,
8016 "GtkButton::label", "Resize-Immediate",
8017 "GtkObject::user_data", (void*)GTK_RESIZE_IMMEDIATE,
8018 "GtkObject::signal::clicked", toggle_idle_container, container,
8019 "GtkRadioButton::group", button,
8020 "GtkWidget::visible", TRUE,
8021 "GtkWidget::parent", box,
8025 button = gtk_button_new_with_label ("close");
8026 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
8027 GTK_SIGNAL_FUNC(gtk_widget_destroy),
8028 GTK_OBJECT (window));
8029 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8030 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8031 button, TRUE, TRUE, 0);
8032 gtk_widget_grab_default (button);
8033 gtk_widget_show (button);
8035 button = gtk_button_new_with_label ("start");
8036 gtk_signal_connect (GTK_OBJECT (button), "clicked",
8037 GTK_SIGNAL_FUNC(start_idle_test),
8039 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8040 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8041 button, TRUE, TRUE, 0);
8042 gtk_widget_show (button);
8044 button = gtk_button_new_with_label ("stop");
8045 gtk_signal_connect (GTK_OBJECT (button), "clicked",
8046 GTK_SIGNAL_FUNC(stop_idle_test),
8048 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8049 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8050 button, TRUE, TRUE, 0);
8051 gtk_widget_show (button);
8054 if (!GTK_WIDGET_VISIBLE (window))
8055 gtk_widget_show (window);
8057 gtk_widget_destroy (window);
8065 reload_rc_file (void)
8069 if (gtk_rc_reparse_all ())
8071 toplevels = gdk_window_get_toplevels();
8075 gdk_window_get_user_data (toplevels->data, (gpointer *)&widget);
8078 gtk_widget_reset_rc_styles (widget);
8080 toplevels = toplevels->next;
8082 g_list_free (toplevels);
8087 reload_all_rc_files (void)
8089 static GdkAtom atom_rcfiles = GDK_NONE;
8095 atom_rcfiles = gdk_atom_intern("_GTK_READ_RCFILES", FALSE);
8097 for(i = 0; i < 5; i++)
8099 sev.data_format = 32;
8100 sev.message_type = atom_rcfiles;
8101 gdk_event_send_clientmessage_toall ((GdkEvent *) &sev);
8105 create_rc_file (void)
8107 static GtkWidget *window = NULL;
8112 window = gtk_dialog_new ();
8114 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8115 GTK_SIGNAL_FUNC(destroy_idle_test),
8118 gtk_window_set_title (GTK_WINDOW (window), "Reload Rc file");
8119 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
8121 button = gtk_button_new_with_label ("Reload");
8122 gtk_signal_connect (GTK_OBJECT (button), "clicked",
8123 GTK_SIGNAL_FUNC(reload_rc_file), NULL);
8124 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8125 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8126 button, TRUE, TRUE, 0);
8127 gtk_widget_grab_default (button);
8128 gtk_widget_show (button);
8130 button = gtk_button_new_with_label ("Reload All");
8131 gtk_signal_connect (GTK_OBJECT (button), "clicked",
8132 GTK_SIGNAL_FUNC(reload_all_rc_files), NULL);
8133 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8134 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8135 button, TRUE, TRUE, 0);
8136 gtk_widget_show (button);
8138 button = gtk_button_new_with_label ("Close");
8139 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
8140 GTK_SIGNAL_FUNC(gtk_widget_destroy),
8141 GTK_OBJECT (window));
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_show (button);
8149 if (!GTK_WIDGET_VISIBLE (window))
8150 gtk_widget_show (window);
8152 gtk_widget_destroy (window);
8156 * Test of recursive mainloop
8160 mainloop_destroyed (GtkWidget *w, GtkWidget **window)
8167 create_mainloop (void)
8169 static GtkWidget *window = NULL;
8175 window = gtk_dialog_new ();
8177 gtk_window_set_title (GTK_WINDOW (window), "Test Main Loop");
8179 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8180 GTK_SIGNAL_FUNC(mainloop_destroyed),
8183 label = gtk_label_new ("In recursive main loop...");
8184 gtk_misc_set_padding (GTK_MISC(label), 20, 20);
8186 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), label,
8188 gtk_widget_show (label);
8190 button = gtk_button_new_with_label ("Leave");
8191 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area), button,
8194 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
8195 GTK_SIGNAL_FUNC (gtk_widget_destroy),
8196 GTK_OBJECT (window));
8198 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8199 gtk_widget_grab_default (button);
8201 gtk_widget_show (button);
8204 if (!GTK_WIDGET_VISIBLE (window))
8206 gtk_widget_show (window);
8208 g_print ("create_mainloop: start\n");
8210 g_print ("create_mainloop: done\n");
8213 gtk_widget_destroy (window);
8217 layout_expose_handler (GtkWidget *widget, GdkEventExpose *event)
8222 gint imin, imax, jmin, jmax;
8224 layout = GTK_LAYOUT (widget);
8226 imin = (layout->xoffset + event->area.x) / 10;
8227 imax = (layout->xoffset + event->area.x + event->area.width + 9) / 10;
8229 jmin = (layout->yoffset + event->area.y) / 10;
8230 jmax = (layout->yoffset + event->area.y + event->area.height + 9) / 10;
8232 gdk_window_clear_area (widget->window,
8233 event->area.x, event->area.y,
8234 event->area.width, event->area.height);
8236 for (i=imin; i<imax; i++)
8237 for (j=jmin; j<jmax; j++)
8239 gdk_draw_rectangle (layout->bin_window,
8240 widget->style->black_gc,
8242 10*i - layout->xoffset, 10*j - layout->yoffset,
8248 void create_layout (void)
8250 static GtkWidget *window = NULL;
8252 GtkWidget *scrolledwindow;
8261 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
8262 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8263 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
8266 gtk_window_set_title (GTK_WINDOW (window), "Layout");
8267 gtk_widget_set_usize (window, 200, 200);
8269 scrolledwindow = gtk_scrolled_window_new (NULL, NULL);
8271 gtk_container_add (GTK_CONTAINER (window), scrolledwindow);
8273 layout = gtk_layout_new (NULL, NULL);
8274 gtk_container_add (GTK_CONTAINER (scrolledwindow), layout);
8276 /* We set step sizes here since GtkLayout does not set
8279 GTK_LAYOUT (layout)->hadjustment->step_increment = 10.0;
8280 GTK_LAYOUT (layout)->vadjustment->step_increment = 10.0;
8282 gtk_widget_set_events (layout, GDK_EXPOSURE_MASK);
8283 gtk_signal_connect (GTK_OBJECT (layout), "expose_event",
8284 GTK_SIGNAL_FUNC (layout_expose_handler), NULL);
8286 gtk_layout_set_size (GTK_LAYOUT (layout), 1600, 128000);
8288 for (i=0 ; i < 16 ; i++)
8289 for (j=0 ; j < 16 ; j++)
8291 sprintf(buf, "Button %d, %d", i, j);
8293 button = gtk_button_new_with_label (buf);
8295 button = gtk_label_new (buf);
8297 gtk_layout_put (GTK_LAYOUT (layout), button,
8301 for (i=16; i < 1280; i++)
8303 sprintf(buf, "Button %d, %d", i, 0);
8305 button = gtk_button_new_with_label (buf);
8307 button = gtk_label_new (buf);
8309 gtk_layout_put (GTK_LAYOUT (layout), button,
8314 if (!GTK_WIDGET_VISIBLE (window))
8315 gtk_widget_show_all (window);
8317 gtk_widget_destroy (window);
8321 * Main Window and Exit
8325 do_exit (GtkWidget *widget, GtkWidget *window)
8327 gtk_widget_destroy (window);
8332 create_main_window (void)
8339 { "button box", create_button_box },
8340 { "buttons", create_buttons },
8341 { "check buttons", create_check_buttons },
8342 { "clist", create_clist},
8343 { "color selection", create_color_selection },
8344 { "ctree", create_ctree },
8345 { "cursors", create_cursors },
8346 { "dialog", create_dialog },
8347 /* { "dnd", create_dnd }, */
8348 { "entry", create_entry },
8349 { "event watcher", create_event_watcher },
8350 { "file selection", create_file_selection },
8351 { "font selection", create_font_selection },
8352 { "gamma curve", create_gamma_curve },
8353 { "handle box", create_handle_box },
8354 { "item factory", create_item_factory },
8355 { "labels", create_labels },
8356 { "layout", create_layout },
8357 { "list", create_list },
8358 { "menus", create_menus },
8359 { "modal window", create_modal_window },
8360 { "notebook", create_notebook },
8361 { "panes", create_panes },
8362 { "pixmap", create_pixmap },
8363 { "preview color", create_color_preview },
8364 { "preview gray", create_gray_preview },
8365 { "progress bar", create_progress_bar },
8366 { "radio buttons", create_radio_buttons },
8367 { "range controls", create_range_controls },
8368 { "rc file", create_rc_file },
8369 { "reparent", create_reparent },
8370 { "rulers", create_rulers },
8371 { "saved position", create_saved_position },
8372 { "scrolled windows", create_scrolled_windows },
8373 { "shapes", create_shapes },
8374 { "spinbutton", create_spins },
8375 { "statusbar", create_statusbar },
8376 { "test idle", create_idle_test },
8377 { "test mainloop", create_mainloop },
8378 { "test scrolling", create_scroll_test },
8379 { "test selection", create_selection_test },
8380 { "test timeout", create_timeout_test },
8381 { "text", create_text },
8382 { "toggle buttons", create_toggle_buttons },
8383 { "toolbar", create_toolbar },
8384 { "tooltips", create_tooltips },
8385 { "tree", create_tree_mode_window},
8386 { "WM hints", create_wmhints },
8388 int nbuttons = sizeof (buttons) / sizeof (buttons[0]);
8392 GtkWidget *scrolled_window;
8396 GtkWidget *separator;
8399 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
8400 gtk_window_set_policy (GTK_WINDOW (window), FALSE, FALSE, FALSE);
8401 gtk_widget_set_name (window, "main window");
8402 gtk_widget_set_usize (window, 200, 400);
8403 gtk_widget_set_uposition (window, 20, 20);
8405 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8406 GTK_SIGNAL_FUNC(gtk_main_quit),
8408 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
8409 GTK_SIGNAL_FUNC (gtk_false),
8412 box1 = gtk_vbox_new (FALSE, 0);
8413 gtk_container_add (GTK_CONTAINER (window), box1);
8415 if (gtk_micro_version > 0)
8427 label = gtk_label_new (buffer);
8428 gtk_box_pack_start (GTK_BOX (box1), label, FALSE, FALSE, 0);
8430 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
8431 gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10);
8432 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
8433 GTK_POLICY_AUTOMATIC,
8434 GTK_POLICY_AUTOMATIC);
8435 gtk_box_pack_start (GTK_BOX (box1), scrolled_window, TRUE, TRUE, 0);
8437 box2 = gtk_vbox_new (FALSE, 0);
8438 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
8439 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), box2);
8440 gtk_container_set_focus_vadjustment (GTK_CONTAINER (box2),
8441 gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
8442 gtk_widget_show (box2);
8444 for (i = 0; i < nbuttons; i++)
8446 button = gtk_button_new_with_label (buttons[i].label);
8447 if (buttons[i].func)
8448 gtk_signal_connect (GTK_OBJECT (button),
8450 GTK_SIGNAL_FUNC(buttons[i].func),
8453 gtk_widget_set_sensitive (button, FALSE);
8454 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
8457 separator = gtk_hseparator_new ();
8458 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
8460 box2 = gtk_vbox_new (FALSE, 10);
8461 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
8462 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
8464 button = gtk_button_new_with_label ("close");
8465 gtk_signal_connect (GTK_OBJECT (button), "clicked",
8466 GTK_SIGNAL_FUNC (do_exit),
8468 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
8469 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8470 gtk_widget_grab_default (button);
8472 gtk_widget_show_all (window);
8476 main (int argc, char *argv[])
8478 GtkBindingSet *binding_set;
8479 struct stat statbuf;
8481 srand (time (NULL));
8485 /* Check to see if we are being run from the correct
8488 if (stat("./testgtkrc", &statbuf) < 0)
8490 fprintf (stderr, "*** The testgtk program must be run from within the\n"
8491 "*** gtk/ subdirectory of the GTK+ distribution.\n");
8495 gtk_rc_add_default_file ("testgtkrc");
8497 gtk_init (&argc, &argv);
8503 binding_set = gtk_binding_set_by_class (gtk_type_class (GTK_TYPE_WIDGET));
8504 gtk_binding_entry_add_signal (binding_set,
8505 '9', GDK_CONTROL_MASK | GDK_RELEASE_MASK,
8508 GTK_TYPE_STRING, "GtkWidgetClass <ctrl><release>9 test");
8510 create_main_window ();