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/.
36 #include "gdk/gdkkeysyms.h"
39 #include "circles.xbm"
41 typedef struct _OptionMenuItem
48 shape_create_icon (char *xpm_file,
56 build_option_menu (OptionMenuItem items[],
61 /* macro, structure and variables used by tree window demos */
62 #define DEFAULT_NUMBER_OF_ITEM 3
63 #define DEFAULT_RECURSION_LEVEL 3
66 GSList* selection_mode_group;
67 GtkWidget* single_button;
68 GtkWidget* browse_button;
69 GtkWidget* multiple_button;
70 GtkWidget* draw_line_button;
71 GtkWidget* view_line_button;
72 GtkWidget* no_root_item_button;
73 GtkWidget* nb_item_spinner;
74 GtkWidget* recursion_spinner;
75 } sTreeSampleSelection;
77 typedef struct sTreeButtons {
79 GtkWidget* add_button;
80 GtkWidget* remove_button;
81 GtkWidget* subtree_button;
83 /* end of tree section */
86 build_option_menu (OptionMenuItem items[],
97 omenu = gtk_option_menu_new ();
99 menu = gtk_menu_new ();
102 for (i = 0; i < num_items; i++)
104 menu_item = gtk_radio_menu_item_new_with_label (group, items[i].name);
105 gtk_signal_connect (GTK_OBJECT (menu_item), "activate",
106 (GtkSignalFunc) items[i].func, data);
107 group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menu_item));
108 gtk_menu_append (GTK_MENU (menu), menu_item);
110 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_item), TRUE);
111 gtk_widget_show (menu_item);
114 gtk_option_menu_set_menu (GTK_OPTION_MENU (omenu), menu);
115 gtk_option_menu_set_history (GTK_OPTION_MENU (omenu), history);
121 destroy_tooltips (GtkWidget *widget, GtkWindow **window)
123 GtkTooltips *tt = gtk_object_get_data (GTK_OBJECT (*window), "tooltips");
124 gtk_object_unref (GTK_OBJECT (tt));
133 button_window (GtkWidget *widget,
136 if (!GTK_WIDGET_VISIBLE (button))
137 gtk_widget_show (button);
139 gtk_widget_hide (button);
143 create_buttons (void)
145 static GtkWidget *window = NULL;
149 GtkWidget *button[10];
150 GtkWidget *separator;
154 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
156 gtk_signal_connect (GTK_OBJECT (window), "destroy",
157 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
160 gtk_window_set_title (GTK_WINDOW (window), "GtkButton");
161 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
163 box1 = gtk_vbox_new (FALSE, 0);
164 gtk_container_add (GTK_CONTAINER (window), box1);
166 table = gtk_table_new (3, 3, FALSE);
167 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
168 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
169 gtk_container_set_border_width (GTK_CONTAINER (table), 10);
170 gtk_box_pack_start (GTK_BOX (box1), table, TRUE, TRUE, 0);
172 button[0] = gtk_button_new_with_label ("button1");
173 button[1] = gtk_button_new_with_label ("button2");
174 button[2] = gtk_button_new_with_label ("button3");
175 button[3] = gtk_button_new_with_label ("button4");
176 button[4] = gtk_button_new_with_label ("button5");
177 button[5] = gtk_button_new_with_label ("button6");
178 button[6] = gtk_button_new_with_label ("button7");
179 button[7] = gtk_button_new_with_label ("button8");
180 button[8] = gtk_button_new_with_label ("button9");
182 gtk_signal_connect (GTK_OBJECT (button[0]), "clicked",
183 GTK_SIGNAL_FUNC(button_window),
186 gtk_table_attach (GTK_TABLE (table), button[0], 0, 1, 0, 1,
187 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
189 gtk_signal_connect (GTK_OBJECT (button[1]), "clicked",
190 GTK_SIGNAL_FUNC(button_window),
193 gtk_table_attach (GTK_TABLE (table), button[1], 1, 2, 1, 2,
194 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
196 gtk_signal_connect (GTK_OBJECT (button[2]), "clicked",
197 GTK_SIGNAL_FUNC(button_window),
199 gtk_table_attach (GTK_TABLE (table), button[2], 2, 3, 2, 3,
200 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
202 gtk_signal_connect (GTK_OBJECT (button[3]), "clicked",
203 GTK_SIGNAL_FUNC(button_window),
205 gtk_table_attach (GTK_TABLE (table), button[3], 0, 1, 2, 3,
206 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
208 gtk_signal_connect (GTK_OBJECT (button[4]), "clicked",
209 GTK_SIGNAL_FUNC(button_window),
211 gtk_table_attach (GTK_TABLE (table), button[4], 2, 3, 0, 1,
212 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
214 gtk_signal_connect (GTK_OBJECT (button[5]), "clicked",
215 GTK_SIGNAL_FUNC(button_window),
217 gtk_table_attach (GTK_TABLE (table), button[5], 1, 2, 2, 3,
218 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
220 gtk_signal_connect (GTK_OBJECT (button[6]), "clicked",
221 GTK_SIGNAL_FUNC(button_window),
223 gtk_table_attach (GTK_TABLE (table), button[6], 1, 2, 0, 1,
224 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
226 gtk_signal_connect (GTK_OBJECT (button[7]), "clicked",
227 GTK_SIGNAL_FUNC(button_window),
229 gtk_table_attach (GTK_TABLE (table), button[7], 2, 3, 1, 2,
230 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
232 gtk_signal_connect (GTK_OBJECT (button[8]), "clicked",
233 GTK_SIGNAL_FUNC(button_window),
235 gtk_table_attach (GTK_TABLE (table), button[8], 0, 1, 1, 2,
236 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
238 separator = gtk_hseparator_new ();
239 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
241 box2 = gtk_vbox_new (FALSE, 10);
242 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
243 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
245 button[9] = gtk_button_new_with_label ("close");
246 gtk_signal_connect_object (GTK_OBJECT (button[9]), "clicked",
247 GTK_SIGNAL_FUNC(gtk_widget_destroy),
248 GTK_OBJECT (window));
249 gtk_box_pack_start (GTK_BOX (box2), button[9], TRUE, TRUE, 0);
250 GTK_WIDGET_SET_FLAGS (button[9], GTK_CAN_DEFAULT);
251 gtk_widget_grab_default (button[9]);
254 if (!GTK_WIDGET_VISIBLE (window))
255 gtk_widget_show_all (window);
257 gtk_widget_destroy (window);
265 create_toggle_buttons (void)
267 static GtkWidget *window = NULL;
271 GtkWidget *separator;
275 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
277 gtk_signal_connect (GTK_OBJECT (window), "destroy",
278 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
281 gtk_window_set_title (GTK_WINDOW (window), "GtkToggleButton");
282 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
284 box1 = gtk_vbox_new (FALSE, 0);
285 gtk_container_add (GTK_CONTAINER (window), box1);
287 box2 = gtk_vbox_new (FALSE, 10);
288 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
289 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
291 button = gtk_toggle_button_new_with_label ("button1");
292 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
294 button = gtk_toggle_button_new_with_label ("button2");
295 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
297 button = gtk_toggle_button_new_with_label ("button3");
298 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
300 separator = gtk_hseparator_new ();
301 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
303 box2 = gtk_vbox_new (FALSE, 10);
304 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
305 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
307 button = gtk_button_new_with_label ("close");
308 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
309 GTK_SIGNAL_FUNC(gtk_widget_destroy),
310 GTK_OBJECT (window));
311 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
312 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
313 gtk_widget_grab_default (button);
316 if (!GTK_WIDGET_VISIBLE (window))
317 gtk_widget_show_all (window);
319 gtk_widget_destroy (window);
327 create_check_buttons (void)
329 static GtkWidget *window = NULL;
333 GtkWidget *separator;
337 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
339 gtk_signal_connect (GTK_OBJECT (window), "destroy",
340 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
343 gtk_window_set_title (GTK_WINDOW (window), "GtkCheckButton");
344 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
346 box1 = gtk_vbox_new (FALSE, 0);
347 gtk_container_add (GTK_CONTAINER (window), box1);
349 box2 = gtk_vbox_new (FALSE, 10);
350 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
351 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
353 button = gtk_check_button_new_with_label ("button1");
354 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
356 button = gtk_check_button_new_with_label ("button2");
357 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
359 button = gtk_check_button_new_with_label ("button3");
360 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
362 separator = gtk_hseparator_new ();
363 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
365 box2 = gtk_vbox_new (FALSE, 10);
366 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
367 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
369 button = gtk_button_new_with_label ("close");
370 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
371 GTK_SIGNAL_FUNC(gtk_widget_destroy),
372 GTK_OBJECT (window));
373 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
374 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
375 gtk_widget_grab_default (button);
378 if (!GTK_WIDGET_VISIBLE (window))
379 gtk_widget_show_all (window);
381 gtk_widget_destroy (window);
389 create_radio_buttons (void)
391 static GtkWidget *window = NULL;
395 GtkWidget *separator;
399 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
401 gtk_signal_connect (GTK_OBJECT (window), "destroy",
402 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
405 gtk_window_set_title (GTK_WINDOW (window), "radio buttons");
406 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
408 box1 = gtk_vbox_new (FALSE, 0);
409 gtk_container_add (GTK_CONTAINER (window), box1);
411 box2 = gtk_vbox_new (FALSE, 10);
412 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
413 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
415 button = gtk_radio_button_new_with_label (NULL, "button1");
416 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
418 button = gtk_radio_button_new_with_label (
419 gtk_radio_button_group (GTK_RADIO_BUTTON (button)),
421 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
422 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
424 button = gtk_radio_button_new_with_label (
425 gtk_radio_button_group (GTK_RADIO_BUTTON (button)),
427 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
429 separator = gtk_hseparator_new ();
430 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
432 box2 = gtk_vbox_new (FALSE, 10);
433 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
434 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
436 button = gtk_button_new_with_label ("close");
437 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
438 GTK_SIGNAL_FUNC(gtk_widget_destroy),
439 GTK_OBJECT (window));
440 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
441 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
442 gtk_widget_grab_default (button);
445 if (!GTK_WIDGET_VISIBLE (window))
446 gtk_widget_show_all (window);
448 gtk_widget_destroy (window);
456 create_bbox (gint horizontal,
467 frame = gtk_frame_new (title);
470 bbox = gtk_hbutton_box_new ();
472 bbox = gtk_vbutton_box_new ();
474 gtk_container_set_border_width (GTK_CONTAINER (bbox), 5);
475 gtk_container_add (GTK_CONTAINER (frame), bbox);
477 gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), layout);
478 gtk_button_box_set_spacing (GTK_BUTTON_BOX (bbox), spacing);
479 gtk_button_box_set_child_size (GTK_BUTTON_BOX (bbox), child_w, child_h);
481 button = gtk_button_new_with_label ("OK");
482 gtk_container_add (GTK_CONTAINER (bbox), button);
484 button = gtk_button_new_with_label ("Cancel");
485 gtk_container_add (GTK_CONTAINER (bbox), button);
487 button = gtk_button_new_with_label ("Help");
488 gtk_container_add (GTK_CONTAINER (bbox), button);
494 create_button_box (void)
496 static GtkWidget* window = NULL;
497 GtkWidget *main_vbox;
500 GtkWidget *frame_horz;
501 GtkWidget *frame_vert;
505 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
506 gtk_window_set_title (GTK_WINDOW (window), "Button Boxes");
508 gtk_signal_connect (GTK_OBJECT (window), "destroy",
509 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
512 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
514 main_vbox = gtk_vbox_new (FALSE, 0);
515 gtk_container_add (GTK_CONTAINER (window), main_vbox);
517 frame_horz = gtk_frame_new ("Horizontal Button Boxes");
518 gtk_box_pack_start (GTK_BOX (main_vbox), frame_horz, TRUE, TRUE, 10);
520 vbox = gtk_vbox_new (FALSE, 0);
521 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
522 gtk_container_add (GTK_CONTAINER (frame_horz), vbox);
524 gtk_box_pack_start (GTK_BOX (vbox),
525 create_bbox (TRUE, "Spread", 40, 85, 20, GTK_BUTTONBOX_SPREAD),
528 gtk_box_pack_start (GTK_BOX (vbox),
529 create_bbox (TRUE, "Edge", 40, 85, 20, GTK_BUTTONBOX_EDGE),
532 gtk_box_pack_start (GTK_BOX (vbox),
533 create_bbox (TRUE, "Start", 40, 85, 20, GTK_BUTTONBOX_START),
536 gtk_box_pack_start (GTK_BOX (vbox),
537 create_bbox (TRUE, "End", 40, 85, 20, GTK_BUTTONBOX_END),
540 frame_vert = gtk_frame_new ("Vertical Button Boxes");
541 gtk_box_pack_start (GTK_BOX (main_vbox), frame_vert, TRUE, TRUE, 10);
543 hbox = gtk_hbox_new (FALSE, 0);
544 gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
545 gtk_container_add (GTK_CONTAINER (frame_vert), hbox);
547 gtk_box_pack_start (GTK_BOX (hbox),
548 create_bbox (FALSE, "Spread", 30, 85, 20, GTK_BUTTONBOX_SPREAD),
551 gtk_box_pack_start (GTK_BOX (hbox),
552 create_bbox (FALSE, "Edge", 30, 85, 20, GTK_BUTTONBOX_EDGE),
555 gtk_box_pack_start (GTK_BOX (hbox),
556 create_bbox (FALSE, "Start", 30, 85, 20, GTK_BUTTONBOX_START),
559 gtk_box_pack_start (GTK_BOX (hbox),
560 create_bbox (FALSE, "End", 30, 85, 20, GTK_BUTTONBOX_END),
564 if (!GTK_WIDGET_VISIBLE (window))
565 gtk_widget_show_all (window);
567 gtk_widget_destroy (window);
575 new_pixmap (char *filename,
577 GdkColor *background)
583 pixmap = gdk_pixmap_create_from_xpm (window, &mask,
586 wpixmap = gtk_pixmap_new (pixmap, mask);
592 set_toolbar_horizontal (GtkWidget *widget,
595 gtk_toolbar_set_orientation (GTK_TOOLBAR (data), GTK_ORIENTATION_HORIZONTAL);
599 set_toolbar_vertical (GtkWidget *widget,
602 gtk_toolbar_set_orientation (GTK_TOOLBAR (data), GTK_ORIENTATION_VERTICAL);
606 set_toolbar_icons (GtkWidget *widget,
609 gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_ICONS);
613 set_toolbar_text (GtkWidget *widget,
616 gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_TEXT);
620 set_toolbar_both (GtkWidget *widget,
623 gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_BOTH);
627 set_toolbar_both_horiz (GtkWidget *widget,
630 gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_BOTH_HORIZ);
634 set_toolbar_small_space (GtkWidget *widget,
637 gtk_toolbar_set_space_size (GTK_TOOLBAR (data), 5);
641 set_toolbar_big_space (GtkWidget *widget,
644 gtk_toolbar_set_space_size (GTK_TOOLBAR (data), 10);
648 set_toolbar_enable (GtkWidget *widget,
651 gtk_toolbar_set_tooltips (GTK_TOOLBAR (data), TRUE);
655 set_toolbar_disable (GtkWidget *widget,
658 gtk_toolbar_set_tooltips (GTK_TOOLBAR (data), FALSE);
662 set_toolbar_borders (GtkWidget *widget,
665 gtk_toolbar_set_button_relief (GTK_TOOLBAR (data), GTK_RELIEF_NORMAL);
669 set_toolbar_borderless (GtkWidget *widget,
672 gtk_toolbar_set_button_relief (GTK_TOOLBAR (data), GTK_RELIEF_NONE);
676 set_toolbar_space_style_empty (GtkWidget *widget,
679 gtk_toolbar_set_space_style (GTK_TOOLBAR (data), GTK_TOOLBAR_SPACE_EMPTY);
683 set_toolbar_space_style_line (GtkWidget *widget,
686 gtk_toolbar_set_space_style (GTK_TOOLBAR (data), GTK_TOOLBAR_SPACE_LINE);
690 create_toolbar (void)
692 static GtkWidget *window = NULL;
698 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
699 gtk_window_set_title (GTK_WINDOW (window), "Toolbar test");
700 gtk_window_set_policy (GTK_WINDOW (window), FALSE, TRUE, TRUE);
702 gtk_signal_connect (GTK_OBJECT (window), "destroy",
703 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
706 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
707 gtk_widget_realize (window);
709 toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_BOTH);
710 gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NONE);
712 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
713 "Horizontal", "Horizontal toolbar layout", "Toolbar/Horizontal",
714 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
715 (GtkSignalFunc) set_toolbar_horizontal, toolbar);
716 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
717 "Vertical", "Vertical toolbar layout", "Toolbar/Vertical",
718 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
719 (GtkSignalFunc) set_toolbar_vertical, toolbar);
721 gtk_toolbar_append_space (GTK_TOOLBAR(toolbar));
723 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
724 "Icons", "Only show toolbar icons", "Toolbar/IconsOnly",
725 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
726 (GtkSignalFunc) set_toolbar_icons, toolbar);
727 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
728 "Text", "Only show toolbar text", "Toolbar/TextOnly",
729 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
730 (GtkSignalFunc) set_toolbar_text, toolbar);
731 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
732 "Both", "Show toolbar icons and text", "Toolbar/Both",
733 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
734 (GtkSignalFunc) set_toolbar_both, toolbar);
735 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
737 "Show toolbar icons and text in a horizontal fashion",
739 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
740 (GtkSignalFunc) set_toolbar_both_horiz, toolbar);
742 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
744 entry = gtk_entry_new ();
746 gtk_toolbar_append_widget (GTK_TOOLBAR (toolbar), entry, "This is an unusable GtkEntry ;)", "Hey don't click me!!!");
748 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
750 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
751 "Small", "Use small spaces", "Toolbar/Small",
752 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
753 (GtkSignalFunc) set_toolbar_small_space, toolbar);
754 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
755 "Big", "Use big spaces", "Toolbar/Big",
756 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
757 (GtkSignalFunc) set_toolbar_big_space, toolbar);
759 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
761 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
762 "Enable", "Enable tooltips", NULL,
763 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
764 (GtkSignalFunc) set_toolbar_enable, toolbar);
765 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
766 "Disable", "Disable tooltips", NULL,
767 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
768 (GtkSignalFunc) set_toolbar_disable, toolbar);
770 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
772 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
773 "Borders", "Show Borders", NULL,
774 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
775 (GtkSignalFunc) set_toolbar_borders, toolbar);
776 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
777 "Borderless", "Hide Borders", NULL,
778 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
779 (GtkSignalFunc) set_toolbar_borderless, toolbar);
781 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
783 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
784 "Empty", "Empty spaces", NULL,
785 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
786 (GtkSignalFunc) set_toolbar_space_style_empty, toolbar);
787 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
788 "Lines", "Lines in spaces", NULL,
789 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
790 (GtkSignalFunc) set_toolbar_space_style_line, toolbar);
792 gtk_container_add (GTK_CONTAINER (window), toolbar);
795 if (!GTK_WIDGET_VISIBLE (window))
796 gtk_widget_show_all (window);
798 gtk_widget_destroy (window);
802 make_toolbar (GtkWidget *window)
806 if (!GTK_WIDGET_REALIZED (window))
807 gtk_widget_realize (window);
809 toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_BOTH);
810 gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NONE);
812 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
813 "Horizontal", "Horizontal toolbar layout", NULL,
814 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
815 (GtkSignalFunc) set_toolbar_horizontal, toolbar);
816 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
817 "Vertical", "Vertical toolbar layout", NULL,
818 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
819 (GtkSignalFunc) set_toolbar_vertical, toolbar);
821 gtk_toolbar_append_space (GTK_TOOLBAR(toolbar));
823 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
824 "Icons", "Only show toolbar icons", NULL,
825 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
826 (GtkSignalFunc) set_toolbar_icons, toolbar);
827 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
828 "Text", "Only show toolbar text", NULL,
829 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
830 (GtkSignalFunc) set_toolbar_text, toolbar);
831 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
832 "Both", "Show toolbar icons and text", NULL,
833 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
834 (GtkSignalFunc) set_toolbar_both, toolbar);
836 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
838 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
839 "Small", "Use small spaces", NULL,
840 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
841 (GtkSignalFunc) set_toolbar_small_space, toolbar);
842 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
843 "Big", "Use big spaces", "Toolbar/Big",
844 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
845 (GtkSignalFunc) set_toolbar_big_space, toolbar);
847 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
849 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
850 "Enable", "Enable tooltips", NULL,
851 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
852 (GtkSignalFunc) set_toolbar_enable, toolbar);
853 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
854 "Disable", "Disable tooltips", NULL,
855 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
856 (GtkSignalFunc) set_toolbar_disable, toolbar);
858 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
860 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
861 "Borders", "Show Borders", NULL,
862 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
863 (GtkSignalFunc) set_toolbar_borders, toolbar);
864 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
865 "Borderless", "Hide Borders", NULL,
866 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
867 (GtkSignalFunc) set_toolbar_borderless, toolbar);
876 static guint statusbar_counter = 1;
879 statusbar_push (GtkWidget *button,
880 GtkStatusbar *statusbar)
884 sprintf (text, "something %d", statusbar_counter++);
886 gtk_statusbar_push (statusbar, 1, text);
890 statusbar_pop (GtkWidget *button,
891 GtkStatusbar *statusbar)
893 gtk_statusbar_pop (statusbar, 1);
897 statusbar_steal (GtkWidget *button,
898 GtkStatusbar *statusbar)
900 gtk_statusbar_remove (statusbar, 1, 4);
904 statusbar_popped (GtkStatusbar *statusbar,
908 if (!statusbar->messages)
909 statusbar_counter = 1;
913 statusbar_contexts (GtkStatusbar *statusbar)
917 string = "any context";
918 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
920 gtk_statusbar_get_context_id (statusbar, string));
922 string = "idle messages";
923 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
925 gtk_statusbar_get_context_id (statusbar, string));
927 string = "some text";
928 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
930 gtk_statusbar_get_context_id (statusbar, string));
932 string = "hit the mouse";
933 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
935 gtk_statusbar_get_context_id (statusbar, string));
937 string = "hit the mouse2";
938 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
940 gtk_statusbar_get_context_id (statusbar, string));
944 statusbar_dump_stack (GtkStatusbar *statusbar)
948 for (list = statusbar->messages; list; list = list->next)
950 GtkStatusbarMsg *msg;
953 g_print ("context_id: %d, message_id: %d, status_text: \"%s\"\n",
961 create_statusbar (void)
963 static GtkWidget *window = NULL;
967 GtkWidget *separator;
968 GtkWidget *statusbar;
972 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
974 gtk_signal_connect (GTK_OBJECT (window), "destroy",
975 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
978 gtk_window_set_title (GTK_WINDOW (window), "statusbar");
979 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
981 box1 = gtk_vbox_new (FALSE, 0);
982 gtk_container_add (GTK_CONTAINER (window), box1);
984 box2 = gtk_vbox_new (FALSE, 10);
985 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
986 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
988 statusbar = gtk_statusbar_new ();
989 gtk_box_pack_end (GTK_BOX (box1), statusbar, TRUE, TRUE, 0);
990 gtk_signal_connect (GTK_OBJECT (statusbar),
992 GTK_SIGNAL_FUNC (statusbar_popped),
995 button = gtk_widget_new (gtk_button_get_type (),
996 "label", "push something",
999 "signal::clicked", statusbar_push, statusbar,
1002 button = gtk_widget_new (gtk_button_get_type (),
1006 "signal_after::clicked", statusbar_pop, statusbar,
1009 button = gtk_widget_new (gtk_button_get_type (),
1010 "label", "steal #4",
1013 "signal_after::clicked", statusbar_steal, statusbar,
1016 button = gtk_widget_new (gtk_button_get_type (),
1017 "label", "dump stack",
1020 "object_signal::clicked", statusbar_dump_stack, statusbar,
1023 button = gtk_widget_new (gtk_button_get_type (),
1024 "label", "test contexts",
1027 "object_signal_after::clicked", statusbar_contexts, statusbar,
1030 separator = gtk_hseparator_new ();
1031 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
1033 box2 = gtk_vbox_new (FALSE, 10);
1034 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
1035 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
1037 button = gtk_button_new_with_label ("close");
1038 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
1039 GTK_SIGNAL_FUNC(gtk_widget_destroy),
1040 GTK_OBJECT (window));
1041 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
1042 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
1043 gtk_widget_grab_default (button);
1046 if (!GTK_WIDGET_VISIBLE (window))
1047 gtk_widget_show_all (window);
1049 gtk_widget_destroy (window);
1057 cb_tree_destroy_event(GtkWidget* w)
1059 sTreeButtons* tree_buttons;
1061 /* free buttons structure associate at this tree */
1062 tree_buttons = gtk_object_get_user_data (GTK_OBJECT (w));
1063 g_free (tree_buttons);
1067 cb_add_new_item(GtkWidget* w, GtkTree* tree)
1069 sTreeButtons* tree_buttons;
1070 GList* selected_list;
1071 GtkWidget* selected_item;
1073 GtkWidget* item_new;
1076 tree_buttons = gtk_object_get_user_data(GTK_OBJECT(tree));
1078 selected_list = GTK_TREE_SELECTION(tree);
1080 if(selected_list == NULL)
1082 /* there is no item in tree */
1083 subtree = GTK_WIDGET(tree);
1087 /* list can have only one element */
1088 selected_item = GTK_WIDGET(selected_list->data);
1090 subtree = GTK_TREE_ITEM_SUBTREE(selected_item);
1094 /* current selected item have not subtree ... create it */
1095 subtree = gtk_tree_new();
1096 gtk_tree_item_set_subtree(GTK_TREE_ITEM(selected_item),
1101 /* at this point, we know which subtree will be used to add new item */
1102 /* create a new item */
1103 sprintf(buffer, "item add %d", tree_buttons->nb_item_add);
1104 item_new = gtk_tree_item_new_with_label(buffer);
1105 gtk_tree_append(GTK_TREE(subtree), item_new);
1106 gtk_widget_show(item_new);
1108 tree_buttons->nb_item_add++;
1112 cb_remove_item(GtkWidget*w, GtkTree* tree)
1114 GList* selected_list;
1117 selected_list = GTK_TREE_SELECTION(tree);
1121 while (selected_list)
1123 clear_list = g_list_prepend (clear_list, selected_list->data);
1124 selected_list = selected_list->next;
1127 clear_list = g_list_reverse (clear_list);
1128 gtk_tree_remove_items(tree, clear_list);
1130 g_list_free (clear_list);
1134 cb_remove_subtree(GtkWidget*w, GtkTree* tree)
1136 GList* selected_list;
1139 selected_list = GTK_TREE_SELECTION(tree);
1143 item = GTK_TREE_ITEM (selected_list->data);
1145 gtk_tree_item_remove_subtree (item);
1150 cb_tree_changed(GtkTree* tree)
1152 sTreeButtons* tree_buttons;
1153 GList* selected_list;
1156 tree_buttons = gtk_object_get_user_data(GTK_OBJECT(tree));
1158 selected_list = GTK_TREE_SELECTION(tree);
1159 nb_selected = g_list_length(selected_list);
1161 if(nb_selected == 0)
1163 if(tree->children == NULL)
1164 gtk_widget_set_sensitive(tree_buttons->add_button, TRUE);
1166 gtk_widget_set_sensitive(tree_buttons->add_button, FALSE);
1167 gtk_widget_set_sensitive(tree_buttons->remove_button, FALSE);
1168 gtk_widget_set_sensitive(tree_buttons->subtree_button, FALSE);
1172 gtk_widget_set_sensitive(tree_buttons->remove_button, TRUE);
1173 gtk_widget_set_sensitive(tree_buttons->add_button, (nb_selected == 1));
1174 gtk_widget_set_sensitive(tree_buttons->subtree_button, (nb_selected == 1));
1179 create_subtree(GtkWidget* item, guint level, guint nb_item_max, guint recursion_level_max)
1181 GtkWidget* item_subtree;
1182 GtkWidget* item_new;
1187 if(level == recursion_level_max) return;
1191 /* query with no root item */
1193 item_subtree = item;
1198 /* query with no root item */
1199 /* create subtree and associate it with current item */
1200 item_subtree = gtk_tree_new();
1204 for(nb_item = 0; nb_item < nb_item_max; nb_item++)
1206 sprintf(buffer, "item %d-%d", level, nb_item);
1207 item_new = gtk_tree_item_new_with_label(buffer);
1208 gtk_tree_append(GTK_TREE(item_subtree), item_new);
1209 create_subtree(item_new, level+1, nb_item_max, recursion_level_max);
1210 gtk_widget_show(item_new);
1214 gtk_tree_item_set_subtree(GTK_TREE_ITEM(item), item_subtree);
1218 create_tree_sample(guint selection_mode,
1219 guint draw_line, guint view_line, guint no_root_item,
1220 guint nb_item_max, guint recursion_level_max)
1225 GtkWidget* separator;
1227 GtkWidget* scrolled_win;
1228 GtkWidget* root_tree;
1229 GtkWidget* root_item;
1230 sTreeButtons* tree_buttons;
1232 /* create tree buttons struct */
1233 if ((tree_buttons = g_malloc (sizeof (sTreeButtons))) == NULL)
1235 g_error("can't allocate memory for tree structure !\n");
1238 tree_buttons->nb_item_add = 0;
1240 /* create top level window */
1241 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
1242 gtk_window_set_title(GTK_WINDOW(window), "Tree Sample");
1243 gtk_signal_connect(GTK_OBJECT(window), "destroy",
1244 (GtkSignalFunc) cb_tree_destroy_event, NULL);
1245 gtk_object_set_user_data(GTK_OBJECT(window), tree_buttons);
1247 box1 = gtk_vbox_new(FALSE, 0);
1248 gtk_container_add(GTK_CONTAINER(window), box1);
1249 gtk_widget_show(box1);
1251 /* create tree box */
1252 box2 = gtk_vbox_new(FALSE, 0);
1253 gtk_box_pack_start(GTK_BOX(box1), box2, TRUE, TRUE, 0);
1254 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1255 gtk_widget_show(box2);
1257 /* create scrolled window */
1258 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
1259 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
1260 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1261 gtk_box_pack_start (GTK_BOX (box2), scrolled_win, TRUE, TRUE, 0);
1262 gtk_widget_set_usize (scrolled_win, 200, 200);
1263 gtk_widget_show (scrolled_win);
1265 /* create root tree widget */
1266 root_tree = gtk_tree_new();
1267 gtk_signal_connect(GTK_OBJECT(root_tree), "selection_changed",
1268 (GtkSignalFunc)cb_tree_changed,
1270 gtk_object_set_user_data(GTK_OBJECT(root_tree), tree_buttons);
1271 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_win), root_tree);
1272 gtk_tree_set_selection_mode(GTK_TREE(root_tree), selection_mode);
1273 gtk_tree_set_view_lines(GTK_TREE(root_tree), draw_line);
1274 gtk_tree_set_view_mode(GTK_TREE(root_tree), !view_line);
1275 gtk_widget_show(root_tree);
1279 /* set root tree to subtree function with root item variable */
1280 root_item = GTK_WIDGET(root_tree);
1284 /* create root tree item widget */
1285 root_item = gtk_tree_item_new_with_label("root item");
1286 gtk_tree_append(GTK_TREE(root_tree), root_item);
1287 gtk_widget_show(root_item);
1289 create_subtree(root_item, -no_root_item, nb_item_max, recursion_level_max);
1291 box2 = gtk_vbox_new(FALSE, 0);
1292 gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, FALSE, 0);
1293 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1294 gtk_widget_show(box2);
1296 button = gtk_button_new_with_label("Add Item");
1297 gtk_widget_set_sensitive(button, FALSE);
1298 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1299 (GtkSignalFunc) cb_add_new_item,
1300 (gpointer)root_tree);
1301 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1302 gtk_widget_show(button);
1303 tree_buttons->add_button = button;
1305 button = gtk_button_new_with_label("Remove Item(s)");
1306 gtk_widget_set_sensitive(button, FALSE);
1307 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1308 (GtkSignalFunc) cb_remove_item,
1309 (gpointer)root_tree);
1310 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1311 gtk_widget_show(button);
1312 tree_buttons->remove_button = button;
1314 button = gtk_button_new_with_label("Remove Subtree");
1315 gtk_widget_set_sensitive(button, FALSE);
1316 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1317 (GtkSignalFunc) cb_remove_subtree,
1318 (gpointer)root_tree);
1319 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1320 gtk_widget_show(button);
1321 tree_buttons->subtree_button = button;
1323 /* create separator */
1324 separator = gtk_hseparator_new();
1325 gtk_box_pack_start(GTK_BOX(box1), separator, FALSE, FALSE, 0);
1326 gtk_widget_show(separator);
1328 /* create button box */
1329 box2 = gtk_vbox_new(FALSE, 0);
1330 gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, FALSE, 0);
1331 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1332 gtk_widget_show(box2);
1334 button = gtk_button_new_with_label("Close");
1335 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1336 gtk_signal_connect_object(GTK_OBJECT (button), "clicked",
1337 (GtkSignalFunc) gtk_widget_destroy,
1338 GTK_OBJECT(window));
1339 gtk_widget_show(button);
1341 gtk_widget_show(window);
1345 cb_create_tree(GtkWidget* w)
1347 guint selection_mode = GTK_SELECTION_SINGLE;
1352 guint recursion_level;
1354 /* get selection mode choice */
1355 if(GTK_TOGGLE_BUTTON(sTreeSampleSelection.single_button)->active)
1356 selection_mode = GTK_SELECTION_SINGLE;
1358 if(GTK_TOGGLE_BUTTON(sTreeSampleSelection.browse_button)->active)
1359 selection_mode = GTK_SELECTION_BROWSE;
1361 selection_mode = GTK_SELECTION_MULTIPLE;
1363 /* get options choice */
1364 draw_line = GTK_TOGGLE_BUTTON(sTreeSampleSelection.draw_line_button)->active;
1365 view_line = GTK_TOGGLE_BUTTON(sTreeSampleSelection.view_line_button)->active;
1366 no_root_item = GTK_TOGGLE_BUTTON(sTreeSampleSelection.no_root_item_button)->active;
1369 nb_item = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(sTreeSampleSelection.nb_item_spinner));
1370 recursion_level = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(sTreeSampleSelection.recursion_spinner));
1372 if (pow (nb_item, recursion_level) > 10000)
1374 g_print ("%g total items? That will take a very long time. Try less\n",
1375 pow (nb_item, recursion_level));
1379 create_tree_sample(selection_mode, draw_line, view_line, no_root_item, nb_item, recursion_level);
1383 create_tree_mode_window(void)
1385 static GtkWidget* window;
1393 GtkWidget* separator;
1400 /* create toplevel window */
1401 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
1402 gtk_window_set_title(GTK_WINDOW(window), "Set Tree Parameters");
1403 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1404 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
1406 box1 = gtk_vbox_new(FALSE, 0);
1407 gtk_container_add(GTK_CONTAINER(window), box1);
1409 /* create upper box - selection box */
1410 box2 = gtk_vbox_new(FALSE, 5);
1411 gtk_box_pack_start(GTK_BOX(box1), box2, TRUE, TRUE, 0);
1412 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1414 box3 = gtk_hbox_new(FALSE, 5);
1415 gtk_box_pack_start(GTK_BOX(box2), box3, TRUE, TRUE, 0);
1417 /* create selection mode frame */
1418 frame = gtk_frame_new("Selection Mode");
1419 gtk_box_pack_start(GTK_BOX(box3), frame, TRUE, TRUE, 0);
1421 box4 = gtk_vbox_new(FALSE, 0);
1422 gtk_container_add(GTK_CONTAINER(frame), box4);
1423 gtk_container_set_border_width(GTK_CONTAINER(box4), 5);
1425 /* create radio button */
1426 button = gtk_radio_button_new_with_label(NULL, "SINGLE");
1427 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1428 sTreeSampleSelection.single_button = button;
1430 button = gtk_radio_button_new_with_label(gtk_radio_button_group (GTK_RADIO_BUTTON (button)),
1432 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1433 sTreeSampleSelection.browse_button = button;
1435 button = gtk_radio_button_new_with_label(gtk_radio_button_group (GTK_RADIO_BUTTON (button)),
1437 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1438 sTreeSampleSelection.multiple_button = button;
1440 sTreeSampleSelection.selection_mode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (button));
1442 /* create option mode frame */
1443 frame = gtk_frame_new("Options");
1444 gtk_box_pack_start(GTK_BOX(box3), frame, TRUE, TRUE, 0);
1446 box4 = gtk_vbox_new(FALSE, 0);
1447 gtk_container_add(GTK_CONTAINER(frame), box4);
1448 gtk_container_set_border_width(GTK_CONTAINER(box4), 5);
1450 /* create check button */
1451 button = gtk_check_button_new_with_label("Draw line");
1452 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1453 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
1454 sTreeSampleSelection.draw_line_button = button;
1456 button = gtk_check_button_new_with_label("View Line mode");
1457 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1458 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
1459 sTreeSampleSelection.view_line_button = button;
1461 button = gtk_check_button_new_with_label("Without Root item");
1462 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1463 sTreeSampleSelection.no_root_item_button = button;
1465 /* create recursion parameter */
1466 frame = gtk_frame_new("Size Parameters");
1467 gtk_box_pack_start(GTK_BOX(box2), frame, TRUE, TRUE, 0);
1469 box4 = gtk_hbox_new(FALSE, 5);
1470 gtk_container_add(GTK_CONTAINER(frame), box4);
1471 gtk_container_set_border_width(GTK_CONTAINER(box4), 5);
1473 /* create number of item spin button */
1474 box5 = gtk_hbox_new(FALSE, 5);
1475 gtk_box_pack_start(GTK_BOX(box4), box5, FALSE, FALSE, 0);
1477 label = gtk_label_new("Number of items : ");
1478 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
1479 gtk_box_pack_start (GTK_BOX (box5), label, FALSE, TRUE, 0);
1481 adj = (GtkAdjustment *) gtk_adjustment_new ((gfloat)DEFAULT_NUMBER_OF_ITEM, 1.0, 255.0, 1.0,
1483 spinner = gtk_spin_button_new (adj, 0, 0);
1484 gtk_box_pack_start (GTK_BOX (box5), spinner, FALSE, TRUE, 0);
1485 sTreeSampleSelection.nb_item_spinner = spinner;
1487 /* create recursion level spin button */
1488 box5 = gtk_hbox_new(FALSE, 5);
1489 gtk_box_pack_start(GTK_BOX(box4), box5, FALSE, FALSE, 0);
1491 label = gtk_label_new("Depth : ");
1492 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
1493 gtk_box_pack_start (GTK_BOX (box5), label, FALSE, TRUE, 0);
1495 adj = (GtkAdjustment *) gtk_adjustment_new ((gfloat)DEFAULT_RECURSION_LEVEL, 0.0, 255.0, 1.0,
1497 spinner = gtk_spin_button_new (adj, 0, 0);
1498 gtk_box_pack_start (GTK_BOX (box5), spinner, FALSE, TRUE, 0);
1499 sTreeSampleSelection.recursion_spinner = spinner;
1501 /* create horizontal separator */
1502 separator = gtk_hseparator_new();
1503 gtk_box_pack_start(GTK_BOX(box1), separator, FALSE, FALSE, 0);
1505 /* create bottom button box */
1506 box2 = gtk_hbox_new(TRUE, 10);
1507 gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, FALSE, 0);
1508 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1510 button = gtk_button_new_with_label("Create Tree");
1511 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1512 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1513 (GtkSignalFunc) cb_create_tree, NULL);
1515 button = gtk_button_new_with_label("Close");
1516 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1517 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
1518 GTK_SIGNAL_FUNC(gtk_widget_destroy),
1519 GTK_OBJECT (window));
1521 if (!GTK_WIDGET_VISIBLE (window))
1522 gtk_widget_show_all (window);
1524 gtk_widget_destroy (window);
1532 handle_box_child_signal (GtkHandleBox *hb,
1534 const gchar *action)
1536 printf ("%s: child <%s> %sed\n",
1537 gtk_type_name (GTK_OBJECT_TYPE (hb)),
1538 gtk_type_name (GTK_OBJECT_TYPE (child)),
1543 create_handle_box (void)
1545 static GtkWidget* window = NULL;
1546 GtkWidget *handle_box;
1547 GtkWidget *handle_box2;
1552 GtkWidget *separator;
1556 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1557 gtk_window_set_title (GTK_WINDOW (window),
1559 gtk_window_set_policy (GTK_WINDOW (window),
1564 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1565 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
1568 gtk_container_set_border_width (GTK_CONTAINER (window), 20);
1570 vbox = gtk_vbox_new (FALSE, 0);
1571 gtk_container_add (GTK_CONTAINER (window), vbox);
1572 gtk_widget_show (vbox);
1574 label = gtk_label_new ("Above");
1575 gtk_container_add (GTK_CONTAINER (vbox), label);
1576 gtk_widget_show (label);
1578 separator = gtk_hseparator_new ();
1579 gtk_container_add (GTK_CONTAINER (vbox), separator);
1580 gtk_widget_show (separator);
1582 hbox = gtk_hbox_new (FALSE, 10);
1583 gtk_container_add (GTK_CONTAINER (vbox), hbox);
1584 gtk_widget_show (hbox);
1586 separator = gtk_hseparator_new ();
1587 gtk_container_add (GTK_CONTAINER (vbox), separator);
1588 gtk_widget_show (separator);
1590 label = gtk_label_new ("Below");
1591 gtk_container_add (GTK_CONTAINER (vbox), label);
1592 gtk_widget_show (label);
1594 handle_box = gtk_handle_box_new ();
1595 gtk_box_pack_start (GTK_BOX (hbox), handle_box, FALSE, FALSE, 0);
1596 gtk_signal_connect (GTK_OBJECT (handle_box),
1598 GTK_SIGNAL_FUNC (handle_box_child_signal),
1600 gtk_signal_connect (GTK_OBJECT (handle_box),
1602 GTK_SIGNAL_FUNC (handle_box_child_signal),
1604 gtk_widget_show (handle_box);
1606 toolbar = make_toolbar (window);
1607 gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NORMAL);
1608 gtk_container_add (GTK_CONTAINER (handle_box), toolbar);
1609 gtk_widget_show (toolbar);
1611 handle_box = gtk_handle_box_new ();
1612 gtk_box_pack_start (GTK_BOX (hbox), handle_box, FALSE, FALSE, 0);
1613 gtk_signal_connect (GTK_OBJECT (handle_box),
1615 GTK_SIGNAL_FUNC (handle_box_child_signal),
1617 gtk_signal_connect (GTK_OBJECT (handle_box),
1619 GTK_SIGNAL_FUNC (handle_box_child_signal),
1621 gtk_widget_show (handle_box);
1623 handle_box2 = gtk_handle_box_new ();
1624 gtk_container_add (GTK_CONTAINER (handle_box), handle_box2);
1625 gtk_signal_connect (GTK_OBJECT (handle_box2),
1627 GTK_SIGNAL_FUNC (handle_box_child_signal),
1629 gtk_signal_connect (GTK_OBJECT (handle_box2),
1631 GTK_SIGNAL_FUNC (handle_box_child_signal),
1633 gtk_widget_show (handle_box2);
1635 label = gtk_label_new ("Fooo!");
1636 gtk_container_add (GTK_CONTAINER (handle_box2), label);
1637 gtk_widget_show (label);
1640 if (!GTK_WIDGET_VISIBLE (window))
1641 gtk_widget_show (window);
1643 gtk_widget_destroy (window);
1649 void create_labels (void)
1651 static GtkWidget *window = NULL;
1659 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1660 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1661 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
1664 gtk_window_set_title (GTK_WINDOW (window), "Label");
1665 vbox = gtk_vbox_new (FALSE, 5);
1666 hbox = gtk_hbox_new (FALSE, 5);
1667 gtk_container_add (GTK_CONTAINER (window), hbox);
1668 gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);
1669 gtk_container_set_border_width (GTK_CONTAINER (window), 5);
1671 frame = gtk_frame_new ("Normal Label");
1672 label = gtk_label_new ("This is a Normal label");
1673 gtk_container_add (GTK_CONTAINER (frame), label);
1674 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
1676 frame = gtk_frame_new ("Multi-line Label");
1677 label = gtk_label_new ("This is a Multi-line label.\nSecond line\nThird line");
1678 gtk_container_add (GTK_CONTAINER (frame), label);
1679 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
1681 frame = gtk_frame_new ("Left Justified Label");
1682 label = gtk_label_new ("This is a Left-Justified\nMulti-line label.\nThird line");
1683 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
1684 gtk_container_add (GTK_CONTAINER (frame), label);
1685 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
1687 frame = gtk_frame_new ("Right Justified Label");
1688 label = gtk_label_new ("This is a Right-Justified\nMulti-line label.\nFourth line, (j/k)");
1689 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_RIGHT);
1690 gtk_container_add (GTK_CONTAINER (frame), label);
1691 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
1693 vbox = gtk_vbox_new (FALSE, 5);
1694 gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);
1695 frame = gtk_frame_new ("Line wrapped label");
1696 label = gtk_label_new ("This is an example of a line-wrapped label. It should not be taking "\
1697 "up the entire "/* big space to test spacing */\
1698 "width allocated to it, but automatically wraps the words to fit. "\
1699 "The time has come, for all good men, to come to the aid of their party. "\
1700 "The sixth sheik's six sheep's sick.\n"\
1701 " It supports multiple paragraphs correctly, and correctly adds "\
1702 "many extra spaces. ");
1704 gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
1705 gtk_container_add (GTK_CONTAINER (frame), label);
1706 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
1708 frame = gtk_frame_new ("Filled, wrapped label");
1709 label = gtk_label_new ("This is an example of a line-wrapped, filled label. It should be taking "\
1710 "up the entire width allocated to it. Here is a seneance to prove "\
1711 "my point. Here is another sentence. "\
1712 "Here comes the sun, do de do de do.\n"\
1713 " This is a new paragraph.\n"\
1714 " This is another newer, longer, better paragraph. It is coming to an end, "\
1716 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_FILL);
1717 gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
1718 gtk_container_add (GTK_CONTAINER (frame), label);
1719 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
1721 frame = gtk_frame_new ("Underlined label");
1722 label = gtk_label_new ("This label is underlined!\n"
1723 "This one is underlined in ÆüËܸì¤ÎÆþÍÑquite a funky fashion");
1724 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
1725 gtk_label_set_pattern (GTK_LABEL (label), "_________________________ _ _________ _ _____ _ __ __ ___ ____ _____");
1726 gtk_container_add (GTK_CONTAINER (frame), label);
1727 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
1730 if (!GTK_WIDGET_VISIBLE (window))
1731 gtk_widget_show_all (window);
1733 gtk_widget_destroy (window);
1741 reparent_label (GtkWidget *widget,
1742 GtkWidget *new_parent)
1746 label = gtk_object_get_user_data (GTK_OBJECT (widget));
1748 gtk_widget_reparent (label, new_parent);
1752 set_parent_signal (GtkWidget *child,
1753 GtkWidget *old_parent,
1756 g_print ("set_parent for \"%s\": new parent: \"%s\", old parent: \"%s\", data: %d\n",
1757 gtk_type_name (GTK_OBJECT_TYPE (child)),
1758 child->parent ? gtk_type_name (GTK_OBJECT_TYPE (child->parent)) : "NULL",
1759 old_parent ? gtk_type_name (GTK_OBJECT_TYPE (old_parent)) : "NULL",
1760 GPOINTER_TO_INT (func_data));
1764 create_reparent (void)
1766 static GtkWidget *window = NULL;
1773 GtkWidget *separator;
1777 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1779 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1780 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
1783 gtk_window_set_title (GTK_WINDOW (window), "reparent");
1784 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
1786 box1 = gtk_vbox_new (FALSE, 0);
1787 gtk_container_add (GTK_CONTAINER (window), box1);
1789 box2 = gtk_hbox_new (FALSE, 5);
1790 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
1791 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
1793 label = gtk_label_new ("Hello World");
1795 frame = gtk_frame_new ("Frame 1");
1796 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
1798 box3 = gtk_vbox_new (FALSE, 5);
1799 gtk_container_set_border_width (GTK_CONTAINER (box3), 5);
1800 gtk_container_add (GTK_CONTAINER (frame), box3);
1802 button = gtk_button_new_with_label ("switch");
1803 gtk_signal_connect (GTK_OBJECT (button), "clicked",
1804 GTK_SIGNAL_FUNC(reparent_label),
1806 gtk_object_set_user_data (GTK_OBJECT (button), label);
1807 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
1809 gtk_box_pack_start (GTK_BOX (box3), label, FALSE, TRUE, 0);
1810 gtk_signal_connect (GTK_OBJECT (label),
1812 GTK_SIGNAL_FUNC (set_parent_signal),
1813 GINT_TO_POINTER (42));
1815 frame = gtk_frame_new ("Frame 2");
1816 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
1818 box3 = gtk_vbox_new (FALSE, 5);
1819 gtk_container_set_border_width (GTK_CONTAINER (box3), 5);
1820 gtk_container_add (GTK_CONTAINER (frame), box3);
1822 button = gtk_button_new_with_label ("switch");
1823 gtk_signal_connect (GTK_OBJECT (button), "clicked",
1824 GTK_SIGNAL_FUNC(reparent_label),
1826 gtk_object_set_user_data (GTK_OBJECT (button), label);
1827 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
1829 separator = gtk_hseparator_new ();
1830 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
1832 box2 = gtk_vbox_new (FALSE, 10);
1833 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
1834 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
1836 button = gtk_button_new_with_label ("close");
1837 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
1838 GTK_SIGNAL_FUNC(gtk_widget_destroy),
1839 GTK_OBJECT (window));
1840 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
1841 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
1842 gtk_widget_grab_default (button);
1845 if (!GTK_WIDGET_VISIBLE (window))
1846 gtk_widget_show_all (window);
1848 gtk_widget_destroy (window);
1854 gint upositionx = 0;
1855 gint upositiony = 0;
1858 uposition_configure (GtkWidget *window)
1864 lx = gtk_object_get_data (GTK_OBJECT (window), "x");
1865 ly = gtk_object_get_data (GTK_OBJECT (window), "y");
1867 gdk_window_get_root_origin (window->window, &upositionx, &upositiony);
1868 sprintf (buffer, "%d", upositionx);
1869 gtk_label_set_text (lx, buffer);
1870 sprintf (buffer, "%d", upositiony);
1871 gtk_label_set_text (ly, buffer);
1877 create_saved_position (void)
1879 static GtkWidget *window = NULL;
1884 GtkWidget *main_vbox;
1892 window = gtk_widget_new (GTK_TYPE_WINDOW,
1893 "type", GTK_WINDOW_TOPLEVEL,
1894 "signal::configure_event", uposition_configure, NULL,
1897 "title", "Saved Position",
1900 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1901 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
1904 main_vbox = gtk_vbox_new (FALSE, 5);
1905 gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 0);
1906 gtk_container_add (GTK_CONTAINER (window), main_vbox);
1909 gtk_widget_new (gtk_vbox_get_type (),
1910 "GtkBox::homogeneous", FALSE,
1911 "GtkBox::spacing", 5,
1912 "GtkContainer::border_width", 10,
1913 "GtkWidget::parent", main_vbox,
1914 "GtkWidget::visible", TRUE,
1917 hbox = gtk_hbox_new (FALSE, 0);
1918 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
1919 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
1921 label = gtk_label_new ("X Origin : ");
1922 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
1923 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
1925 x_label = gtk_label_new ("");
1926 gtk_box_pack_start (GTK_BOX (hbox), x_label, TRUE, TRUE, 0);
1927 gtk_object_set_data (GTK_OBJECT (window), "x", x_label);
1929 hbox = gtk_hbox_new (FALSE, 0);
1930 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
1931 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
1933 label = gtk_label_new ("Y Origin : ");
1934 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
1935 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
1937 y_label = gtk_label_new ("");
1938 gtk_box_pack_start (GTK_BOX (hbox), y_label, TRUE, TRUE, 0);
1939 gtk_object_set_data (GTK_OBJECT (window), "y", y_label);
1942 gtk_widget_new (gtk_hseparator_get_type (),
1943 "GtkWidget::visible", TRUE,
1945 gtk_box_pack_start (GTK_BOX (main_vbox), any, FALSE, TRUE, 0);
1947 hbox = gtk_hbox_new (FALSE, 0);
1948 gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
1949 gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
1951 button = gtk_button_new_with_label ("Close");
1952 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
1953 GTK_SIGNAL_FUNC (gtk_widget_destroy),
1954 GTK_OBJECT (window));
1955 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
1956 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
1957 gtk_widget_grab_default (button);
1959 gtk_widget_show_all (window);
1962 gtk_widget_destroy (window);
1970 create_pixmap (void)
1972 static GtkWidget *window = NULL;
1978 GtkWidget *separator;
1979 GtkWidget *pixmapwid;
1985 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1987 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1988 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
1991 gtk_window_set_title (GTK_WINDOW (window), "GtkPixmap");
1992 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
1993 gtk_widget_realize(window);
1995 box1 = gtk_vbox_new (FALSE, 0);
1996 gtk_container_add (GTK_CONTAINER (window), box1);
1998 box2 = gtk_vbox_new (FALSE, 10);
1999 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2000 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2002 button = gtk_button_new ();
2003 gtk_box_pack_start (GTK_BOX (box2), button, FALSE, FALSE, 0);
2005 pixmap = gdk_pixmap_create_from_xpm (window->window, &mask, NULL,
2007 pixmapwid = gtk_pixmap_new (pixmap, mask);
2008 gdk_pixmap_unref (pixmap);
2009 gdk_pixmap_unref (mask);
2011 label = gtk_label_new ("Pixmap\ntest");
2012 box3 = gtk_hbox_new (FALSE, 0);
2013 gtk_container_set_border_width (GTK_CONTAINER (box3), 2);
2014 gtk_container_add (GTK_CONTAINER (box3), pixmapwid);
2015 gtk_container_add (GTK_CONTAINER (box3), label);
2016 gtk_container_add (GTK_CONTAINER (button), box3);
2018 separator = gtk_hseparator_new ();
2019 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2021 box2 = gtk_vbox_new (FALSE, 10);
2022 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2023 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2025 button = gtk_button_new_with_label ("close");
2026 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2027 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2028 GTK_OBJECT (window));
2029 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2030 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2031 gtk_widget_grab_default (button);
2034 if (!GTK_WIDGET_VISIBLE (window))
2035 gtk_widget_show_all (window);
2037 gtk_widget_destroy (window);
2041 tips_query_widget_entered (GtkTipsQuery *tips_query,
2043 const gchar *tip_text,
2044 const gchar *tip_private,
2047 if (GTK_TOGGLE_BUTTON (toggle)->active)
2049 gtk_label_set_text (GTK_LABEL (tips_query), tip_text ? "There is a Tip!" : "There is no Tip!");
2050 /* don't let GtkTipsQuery reset it's label */
2051 gtk_signal_emit_stop_by_name (GTK_OBJECT (tips_query), "widget_entered");
2056 tips_query_widget_selected (GtkWidget *tips_query,
2058 const gchar *tip_text,
2059 const gchar *tip_private,
2060 GdkEventButton *event,
2064 g_print ("Help \"%s\" requested for <%s>\n",
2065 tip_private ? tip_private : "None",
2066 gtk_type_name (GTK_OBJECT_TYPE (widget)));
2071 create_tooltips (void)
2073 static GtkWidget *window = NULL;
2080 GtkWidget *tips_query;
2081 GtkWidget *separator;
2082 GtkTooltips *tooltips;
2087 gtk_widget_new (gtk_window_get_type (),
2088 "GtkWindow::type", GTK_WINDOW_TOPLEVEL,
2089 "GtkContainer::border_width", 0,
2090 "GtkWindow::title", "Tooltips",
2091 "GtkWindow::allow_shrink", TRUE,
2092 "GtkWindow::allow_grow", FALSE,
2093 "GtkWindow::auto_shrink", TRUE,
2094 "GtkWidget::width", 200,
2097 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2098 GTK_SIGNAL_FUNC (destroy_tooltips),
2101 tooltips=gtk_tooltips_new();
2102 gtk_object_set_data (GTK_OBJECT (window), "tooltips", tooltips);
2104 box1 = gtk_vbox_new (FALSE, 0);
2105 gtk_container_add (GTK_CONTAINER (window), box1);
2107 box2 = gtk_vbox_new (FALSE, 10);
2108 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2109 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2111 button = gtk_toggle_button_new_with_label ("button1");
2112 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2114 gtk_tooltips_set_tip (tooltips,button,"This is button 1", "ContextHelp/buttons/1");
2116 button = gtk_toggle_button_new_with_label ("button2");
2117 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2119 gtk_tooltips_set_tip (tooltips,
2121 "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.",
2122 "ContextHelp/buttons/2_long");
2124 toggle = gtk_toggle_button_new_with_label ("Override TipsQuery Label");
2125 gtk_box_pack_start (GTK_BOX (box2), toggle, TRUE, TRUE, 0);
2127 gtk_tooltips_set_tip (tooltips, toggle, "Toggle TipsQuery view.", "Hi msw! ;)");
2130 gtk_widget_new (gtk_vbox_get_type (),
2131 "GtkBox::homogeneous", FALSE,
2132 "GtkBox::spacing", 5,
2133 "GtkContainer::border_width", 5,
2134 "GtkWidget::visible", TRUE,
2137 tips_query = gtk_tips_query_new ();
2140 gtk_widget_new (gtk_button_get_type (),
2141 "GtkButton::label", "[?]",
2142 "GtkWidget::visible", TRUE,
2143 "GtkWidget::parent", box3,
2144 "GtkObject::object_signal::clicked", gtk_tips_query_start_query, tips_query,
2146 gtk_box_set_child_packing (GTK_BOX (box3), button, FALSE, FALSE, 0, GTK_PACK_START);
2147 gtk_tooltips_set_tip (tooltips,
2149 "Start the Tooltips Inspector",
2150 "ContextHelp/buttons/?");
2153 gtk_widget_set (tips_query,
2154 "GtkWidget::visible", TRUE,
2155 "GtkWidget::parent", box3,
2156 "GtkTipsQuery::caller", button,
2157 "GtkObject::signal::widget_entered", tips_query_widget_entered, toggle,
2158 "GtkObject::signal::widget_selected", tips_query_widget_selected, NULL,
2162 gtk_widget_new (gtk_frame_get_type (),
2163 "GtkFrame::label", "ToolTips Inspector",
2164 "GtkFrame::label_xalign", (double) 0.5,
2165 "GtkContainer::border_width", 0,
2166 "GtkWidget::visible", TRUE,
2167 "GtkWidget::parent", box2,
2168 "GtkContainer::child", box3,
2170 gtk_box_set_child_packing (GTK_BOX (box2), frame, TRUE, TRUE, 10, GTK_PACK_START);
2172 separator = gtk_hseparator_new ();
2173 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2175 box2 = gtk_vbox_new (FALSE, 10);
2176 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2177 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2179 button = gtk_button_new_with_label ("close");
2180 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2181 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2182 GTK_OBJECT (window));
2183 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2184 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2185 gtk_widget_grab_default (button);
2187 gtk_tooltips_set_tip (tooltips, button, "Push this button to close window", "ContextHelp/buttons/Close");
2190 if (!GTK_WIDGET_VISIBLE (window))
2191 gtk_widget_show_all (window);
2193 gtk_widget_destroy (window);
2201 create_menu (gint depth, gboolean tearoff)
2204 GtkWidget *menuitem;
2212 menu = gtk_menu_new ();
2217 menuitem = gtk_tearoff_menu_item_new ();
2218 gtk_menu_append (GTK_MENU (menu), menuitem);
2219 gtk_widget_show (menuitem);
2222 for (i = 0, j = 1; i < 5; i++, j++)
2224 sprintf (buf, "item %2d - %d", depth, j);
2225 menuitem = gtk_radio_menu_item_new_with_label (group, buf);
2226 group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menuitem));
2228 gtk_check_menu_item_set_show_toggle (GTK_CHECK_MENU_ITEM (menuitem), TRUE);
2229 gtk_menu_append (GTK_MENU (menu), menuitem);
2230 gtk_widget_show (menuitem);
2232 gtk_widget_set_sensitive (menuitem, FALSE);
2234 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (depth - 1, TRUE));
2243 static GtkWidget *window = NULL;
2247 GtkWidget *optionmenu;
2248 GtkWidget *separator;
2254 GtkWidget *menuitem;
2255 GtkAccelGroup *accel_group;
2257 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2259 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2260 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2262 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
2263 GTK_SIGNAL_FUNC (gtk_true),
2266 accel_group = gtk_accel_group_new ();
2267 gtk_accel_group_attach (accel_group, GTK_OBJECT (window));
2269 gtk_window_set_title (GTK_WINDOW (window), "menus");
2270 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
2273 box1 = gtk_vbox_new (FALSE, 0);
2274 gtk_container_add (GTK_CONTAINER (window), box1);
2275 gtk_widget_show (box1);
2277 menubar = gtk_menu_bar_new ();
2278 gtk_box_pack_start (GTK_BOX (box1), menubar, FALSE, TRUE, 0);
2279 gtk_widget_show (menubar);
2281 menu = create_menu (2, TRUE);
2283 menuitem = gtk_menu_item_new_with_label ("test\nline2");
2284 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), menu);
2285 gtk_menu_bar_append (GTK_MENU_BAR (menubar), menuitem);
2286 gtk_widget_show (menuitem);
2288 menuitem = gtk_menu_item_new_with_label ("foo");
2289 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (3, TRUE));
2290 gtk_menu_bar_append (GTK_MENU_BAR (menubar), menuitem);
2291 gtk_widget_show (menuitem);
2293 menuitem = gtk_menu_item_new_with_label ("bar");
2294 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (4, TRUE));
2295 gtk_menu_item_right_justify (GTK_MENU_ITEM (menuitem));
2296 gtk_menu_bar_append (GTK_MENU_BAR (menubar), menuitem);
2297 gtk_widget_show (menuitem);
2299 box2 = gtk_vbox_new (FALSE, 10);
2300 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2301 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2302 gtk_widget_show (box2);
2304 menu = create_menu (1, FALSE);
2305 gtk_menu_set_accel_group (GTK_MENU (menu), accel_group);
2307 menuitem = gtk_check_menu_item_new_with_label ("Accelerate Me");
2308 gtk_menu_append (GTK_MENU (menu), menuitem);
2309 gtk_widget_show (menuitem);
2310 gtk_widget_add_accelerator (menuitem,
2315 GTK_ACCEL_VISIBLE | GTK_ACCEL_SIGNAL_VISIBLE);
2316 menuitem = gtk_check_menu_item_new_with_label ("Accelerator Locked");
2317 gtk_menu_append (GTK_MENU (menu), menuitem);
2318 gtk_widget_show (menuitem);
2319 gtk_widget_add_accelerator (menuitem,
2324 GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
2325 menuitem = gtk_check_menu_item_new_with_label ("Accelerators Frozen");
2326 gtk_menu_append (GTK_MENU (menu), menuitem);
2327 gtk_widget_show (menuitem);
2328 gtk_widget_add_accelerator (menuitem,
2334 gtk_widget_add_accelerator (menuitem,
2340 gtk_widget_lock_accelerators (menuitem);
2342 optionmenu = gtk_option_menu_new ();
2343 gtk_option_menu_set_menu (GTK_OPTION_MENU (optionmenu), menu);
2344 gtk_option_menu_set_history (GTK_OPTION_MENU (optionmenu), 3);
2345 gtk_box_pack_start (GTK_BOX (box2), optionmenu, TRUE, TRUE, 0);
2346 gtk_widget_show (optionmenu);
2348 separator = gtk_hseparator_new ();
2349 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2350 gtk_widget_show (separator);
2352 box2 = gtk_vbox_new (FALSE, 10);
2353 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2354 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2355 gtk_widget_show (box2);
2357 button = gtk_button_new_with_label ("close");
2358 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2359 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2360 GTK_OBJECT (window));
2361 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2362 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2363 gtk_widget_grab_default (button);
2364 gtk_widget_show (button);
2367 if (!GTK_WIDGET_VISIBLE (window))
2368 gtk_widget_show (window);
2370 gtk_widget_destroy (window);
2374 gtk_ifactory_cb (gpointer callback_data,
2375 guint callback_action,
2378 g_message ("ItemFactory: activated \"%s\"", gtk_item_factory_path_from_widget (widget));
2381 static GtkItemFactoryEntry menu_items[] =
2383 { "/_File", NULL, 0, 0, "<Branch>" },
2384 { "/File/tearoff1", NULL, gtk_ifactory_cb, 0, "<Tearoff>" },
2385 { "/File/_New", "<control>N", gtk_ifactory_cb, 0 },
2386 { "/File/_Open", "<control>O", gtk_ifactory_cb, 0 },
2387 { "/File/_Save", "<control>S", gtk_ifactory_cb, 0 },
2388 { "/File/Save _As...", NULL, gtk_ifactory_cb, 0 },
2389 { "/File/sep1", NULL, gtk_ifactory_cb, 0, "<Separator>" },
2390 { "/File/_Quit", "<control>Q", gtk_ifactory_cb, 0 },
2392 { "/_Preferences", NULL, 0, 0, "<Branch>" },
2393 { "/_Preferences/_Color", NULL, 0, 0, "<Branch>" },
2394 { "/_Preferences/Color/_Red", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
2395 { "/_Preferences/Color/_Green", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
2396 { "/_Preferences/Color/_Blue", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
2397 { "/_Preferences/_Shape", NULL, 0, 0, "<Branch>" },
2398 { "/_Preferences/Shape/_Square", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
2399 { "/_Preferences/Shape/_Rectangle", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
2400 { "/_Preferences/Shape/_Oval", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
2402 { "/_Help", NULL, 0, 0, "<LastBranch>" },
2403 { "/Help/_About", NULL, gtk_ifactory_cb, 0 },
2406 static int nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]);
2409 create_item_factory (void)
2411 static GtkWidget *window = NULL;
2417 GtkWidget *separator;
2420 GtkAccelGroup *accel_group;
2421 GtkItemFactory *item_factory;
2423 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2425 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2426 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2428 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
2429 GTK_SIGNAL_FUNC (gtk_true),
2432 accel_group = gtk_accel_group_new ();
2433 item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>", accel_group);
2434 gtk_object_set_data_full (GTK_OBJECT (window),
2437 (GtkDestroyNotify) gtk_object_unref);
2438 gtk_accel_group_attach (accel_group, GTK_OBJECT (window));
2439 gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL);
2440 gtk_window_set_title (GTK_WINDOW (window), "Item Factory");
2441 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
2443 box1 = gtk_vbox_new (FALSE, 0);
2444 gtk_container_add (GTK_CONTAINER (window), box1);
2446 gtk_box_pack_start (GTK_BOX (box1),
2447 gtk_item_factory_get_widget (item_factory, "<main>"),
2450 label = gtk_label_new ("Type\n<alt>\nto start");
2451 gtk_widget_set_usize (label, 200, 200);
2452 gtk_misc_set_alignment (GTK_MISC (label), 0.5, 0.5);
2453 gtk_box_pack_start (GTK_BOX (box1), label, TRUE, TRUE, 0);
2456 separator = gtk_hseparator_new ();
2457 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2460 box2 = gtk_vbox_new (FALSE, 10);
2461 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2462 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2464 button = gtk_button_new_with_label ("close");
2465 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2466 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2467 GTK_OBJECT (window));
2468 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2469 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2470 gtk_widget_grab_default (button);
2472 gtk_widget_show_all (window);
2475 gtk_widget_destroy (window);
2483 scrolled_windows_remove (GtkWidget *widget, GtkWidget *scrollwin)
2485 static GtkWidget *parent = NULL;
2486 static GtkWidget *float_parent;
2490 gtk_widget_reparent (scrollwin, parent);
2491 gtk_widget_destroy (float_parent);
2492 float_parent = NULL;
2497 parent = widget->parent;
2498 float_parent = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2499 gtk_widget_reparent (scrollwin, float_parent);
2500 gtk_widget_show (float_parent);
2509 cmw_destroy_cb(GtkWidget *widget)
2511 /* This is needed to get out of gtk_main */
2518 cmw_color (GtkWidget *widget, GtkWidget *parent)
2522 csd=gtk_color_selection_dialog_new ("This is a modal color selection dialog");
2525 gtk_window_set_modal (GTK_WINDOW(csd),TRUE);
2527 /* And mark it as a transient dialog */
2528 gtk_window_set_transient_for (GTK_WINDOW (csd), GTK_WINDOW (parent));
2530 gtk_signal_connect (GTK_OBJECT(csd), "destroy",
2531 GTK_SIGNAL_FUNC(cmw_destroy_cb),NULL);
2533 gtk_signal_connect_object (GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(csd)->ok_button),
2534 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
2536 gtk_signal_connect_object (GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(csd)->cancel_button),
2537 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
2540 /* wait until destroy calls gtk_main_quit */
2541 gtk_widget_show (csd);
2546 cmw_file (GtkWidget *widget, GtkWidget *parent)
2550 fs = gtk_file_selection_new("This is a modal file selection dialog");
2553 gtk_window_set_modal (GTK_WINDOW(fs),TRUE);
2555 /* And mark it as a transient dialog */
2556 gtk_window_set_transient_for (GTK_WINDOW (fs), GTK_WINDOW (parent));
2558 gtk_signal_connect (GTK_OBJECT(fs), "destroy",
2559 GTK_SIGNAL_FUNC(cmw_destroy_cb),NULL);
2561 gtk_signal_connect_object (GTK_OBJECT(GTK_FILE_SELECTION(fs)->ok_button),
2562 "clicked",GTK_SIGNAL_FUNC(gtk_widget_destroy),
2564 gtk_signal_connect_object (GTK_OBJECT(GTK_FILE_SELECTION(fs)->cancel_button),
2565 "clicked",GTK_SIGNAL_FUNC(gtk_widget_destroy),
2568 /* wait until destroy calls gtk_main_quit */
2569 gtk_widget_show (fs);
2576 create_modal_window (void)
2578 GtkWidget *window = NULL;
2579 GtkWidget *box1,*box2;
2581 GtkWidget *btnColor,*btnFile,*btnClose;
2583 /* Create modal window (Here you can use any window descendent )*/
2584 window=gtk_window_new (GTK_WINDOW_TOPLEVEL);
2585 gtk_window_set_title (GTK_WINDOW(window),"This window is modal");
2587 /* Set window as modal */
2588 gtk_window_set_modal (GTK_WINDOW(window),TRUE);
2590 /* Create widgets */
2591 box1 = gtk_vbox_new (FALSE,5);
2592 frame1 = gtk_frame_new ("Standard dialogs in modal form");
2593 box2 = gtk_vbox_new (TRUE,5);
2594 btnColor = gtk_button_new_with_label ("Color");
2595 btnFile = gtk_button_new_with_label ("File Selection");
2596 btnClose = gtk_button_new_with_label ("Close");
2599 gtk_container_set_border_width (GTK_CONTAINER(box1),3);
2600 gtk_container_set_border_width (GTK_CONTAINER(box2),3);
2603 gtk_container_add (GTK_CONTAINER (window), box1);
2604 gtk_box_pack_start (GTK_BOX (box1), frame1, TRUE, TRUE, 4);
2605 gtk_container_add (GTK_CONTAINER (frame1), box2);
2606 gtk_box_pack_start (GTK_BOX (box2), btnColor, FALSE, FALSE, 4);
2607 gtk_box_pack_start (GTK_BOX (box2), btnFile, FALSE, FALSE, 4);
2608 gtk_box_pack_start (GTK_BOX (box1), gtk_hseparator_new (), FALSE, FALSE, 4);
2609 gtk_box_pack_start (GTK_BOX (box1), btnClose, FALSE, FALSE, 4);
2611 /* connect signals */
2612 gtk_signal_connect_object (GTK_OBJECT (btnClose), "clicked",
2613 GTK_SIGNAL_FUNC (gtk_widget_destroy),
2614 GTK_OBJECT (window));
2616 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2617 GTK_SIGNAL_FUNC (cmw_destroy_cb),NULL);
2619 gtk_signal_connect (GTK_OBJECT (btnColor), "clicked",
2620 GTK_SIGNAL_FUNC (cmw_color),window);
2621 gtk_signal_connect (GTK_OBJECT (btnFile), "clicked",
2622 GTK_SIGNAL_FUNC (cmw_file),window);
2625 gtk_widget_show_all (window);
2627 /* wait until dialog get destroyed */
2636 create_scrolled_windows (void)
2638 static GtkWidget *window;
2639 GtkWidget *scrolled_window;
2647 window = gtk_dialog_new ();
2649 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2650 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2653 gtk_window_set_title (GTK_WINDOW (window), "dialog");
2654 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
2657 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
2658 gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10);
2659 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
2660 GTK_POLICY_AUTOMATIC,
2661 GTK_POLICY_AUTOMATIC);
2662 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
2663 scrolled_window, TRUE, TRUE, 0);
2664 gtk_widget_show (scrolled_window);
2666 table = gtk_table_new (20, 20, FALSE);
2667 gtk_table_set_row_spacings (GTK_TABLE (table), 10);
2668 gtk_table_set_col_spacings (GTK_TABLE (table), 10);
2669 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), table);
2670 gtk_container_set_focus_hadjustment (GTK_CONTAINER (table),
2671 gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
2672 gtk_container_set_focus_vadjustment (GTK_CONTAINER (table),
2673 gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
2674 gtk_widget_show (table);
2676 for (i = 0; i < 20; i++)
2677 for (j = 0; j < 20; j++)
2679 sprintf (buffer, "button (%d,%d)\n", i, j);
2680 button = gtk_toggle_button_new_with_label (buffer);
2681 gtk_table_attach_defaults (GTK_TABLE (table), button,
2683 gtk_widget_show (button);
2687 button = gtk_button_new_with_label ("close");
2688 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2689 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2690 GTK_OBJECT (window));
2691 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2692 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
2693 button, TRUE, TRUE, 0);
2694 gtk_widget_grab_default (button);
2695 gtk_widget_show (button);
2697 button = gtk_button_new_with_label ("remove");
2698 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2699 GTK_SIGNAL_FUNC(scrolled_windows_remove),
2700 GTK_OBJECT (scrolled_window));
2701 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2702 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
2703 button, TRUE, TRUE, 0);
2704 gtk_widget_grab_default (button);
2705 gtk_widget_show (button);
2707 gtk_window_set_default_size (GTK_WINDOW (window), 300, 300);
2710 if (!GTK_WIDGET_VISIBLE (window))
2711 gtk_widget_show (window);
2713 gtk_widget_destroy (window);
2721 entry_toggle_editable (GtkWidget *checkbutton,
2724 gtk_entry_set_editable(GTK_ENTRY(entry),
2725 GTK_TOGGLE_BUTTON(checkbutton)->active);
2729 entry_toggle_sensitive (GtkWidget *checkbutton,
2732 gtk_widget_set_sensitive (entry, GTK_TOGGLE_BUTTON(checkbutton)->active);
2736 entry_toggle_visibility (GtkWidget *checkbutton,
2739 gtk_entry_set_visibility(GTK_ENTRY(entry),
2740 GTK_TOGGLE_BUTTON(checkbutton)->active);
2746 static GtkWidget *window = NULL;
2749 GtkWidget *editable_check;
2750 GtkWidget *sensitive_check;
2751 GtkWidget *entry, *cb;
2753 GtkWidget *separator;
2754 GList *cbitems = NULL;
2758 cbitems = g_list_append(cbitems, "item0");
2759 cbitems = g_list_append(cbitems, "item1 item1");
2760 cbitems = g_list_append(cbitems, "item2 item2 item2");
2761 cbitems = g_list_append(cbitems, "item3 item3 item3 item3");
2762 cbitems = g_list_append(cbitems, "item4 item4 item4 item4 item4");
2763 cbitems = g_list_append(cbitems, "item5 item5 item5 item5 item5 item5");
2764 cbitems = g_list_append(cbitems, "item6 item6 item6 item6 item6");
2765 cbitems = g_list_append(cbitems, "item7 item7 item7 item7");
2766 cbitems = g_list_append(cbitems, "item8 item8 item8");
2767 cbitems = g_list_append(cbitems, "item9 item9");
2769 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2771 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2772 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2775 gtk_window_set_title (GTK_WINDOW (window), "entry");
2776 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
2779 box1 = gtk_vbox_new (FALSE, 0);
2780 gtk_container_add (GTK_CONTAINER (window), box1);
2781 gtk_widget_show (box1);
2784 box2 = gtk_vbox_new (FALSE, 10);
2785 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2786 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2787 gtk_widget_show (box2);
2789 entry = gtk_entry_new ();
2790 gtk_entry_set_text (GTK_ENTRY (entry), "hello world");
2791 gtk_editable_select_region (GTK_EDITABLE (entry), 0, 5);
2792 gtk_box_pack_start (GTK_BOX (box2), entry, TRUE, TRUE, 0);
2793 gtk_widget_show (entry);
2795 cb = gtk_combo_new ();
2796 gtk_combo_set_popdown_strings (GTK_COMBO (cb), cbitems);
2797 gtk_entry_set_text (GTK_ENTRY (GTK_COMBO(cb)->entry), "hello world");
2798 gtk_editable_select_region (GTK_EDITABLE (GTK_COMBO(cb)->entry),
2800 gtk_box_pack_start (GTK_BOX (box2), cb, TRUE, TRUE, 0);
2801 gtk_widget_show (cb);
2803 editable_check = gtk_check_button_new_with_label("Editable");
2804 gtk_box_pack_start (GTK_BOX (box2), editable_check, FALSE, TRUE, 0);
2805 gtk_signal_connect (GTK_OBJECT(editable_check), "toggled",
2806 GTK_SIGNAL_FUNC(entry_toggle_editable), entry);
2807 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(editable_check), TRUE);
2808 gtk_widget_show (editable_check);
2810 editable_check = gtk_check_button_new_with_label("Visible");
2811 gtk_box_pack_start (GTK_BOX (box2), editable_check, FALSE, TRUE, 0);
2812 gtk_signal_connect (GTK_OBJECT(editable_check), "toggled",
2813 GTK_SIGNAL_FUNC(entry_toggle_visibility), entry);
2814 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(editable_check), TRUE);
2815 gtk_widget_show (editable_check);
2817 sensitive_check = gtk_check_button_new_with_label("Sensitive");
2818 gtk_box_pack_start (GTK_BOX (box2), sensitive_check, FALSE, TRUE, 0);
2819 gtk_signal_connect (GTK_OBJECT(sensitive_check), "toggled",
2820 GTK_SIGNAL_FUNC(entry_toggle_sensitive), entry);
2821 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(sensitive_check), TRUE);
2822 gtk_widget_show (sensitive_check);
2824 separator = gtk_hseparator_new ();
2825 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2826 gtk_widget_show (separator);
2829 box2 = gtk_vbox_new (FALSE, 10);
2830 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2831 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2832 gtk_widget_show (box2);
2835 button = gtk_button_new_with_label ("close");
2836 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2837 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2838 GTK_OBJECT (window));
2839 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2840 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2841 gtk_widget_grab_default (button);
2842 gtk_widget_show (button);
2845 if (!GTK_WIDGET_VISIBLE (window))
2846 gtk_widget_show (window);
2848 gtk_widget_destroy (window);
2855 static GtkWidget *spinner1;
2858 toggle_snap (GtkWidget *widget, GtkSpinButton *spin)
2860 gtk_spin_button_set_snap_to_ticks (spin, GTK_TOGGLE_BUTTON (widget)->active);
2864 toggle_numeric (GtkWidget *widget, GtkSpinButton *spin)
2866 gtk_spin_button_set_numeric (spin, GTK_TOGGLE_BUTTON (widget)->active);
2870 change_digits (GtkWidget *widget, GtkSpinButton *spin)
2872 gtk_spin_button_set_digits (GTK_SPIN_BUTTON (spinner1),
2873 gtk_spin_button_get_value_as_int (spin));
2877 get_value (GtkWidget *widget, gpointer data)
2881 GtkSpinButton *spin;
2883 spin = GTK_SPIN_BUTTON (spinner1);
2884 label = GTK_LABEL (gtk_object_get_user_data (GTK_OBJECT (widget)));
2885 if (GPOINTER_TO_INT (data) == 1)
2886 sprintf (buf, "%d", gtk_spin_button_get_value_as_int (spin));
2888 sprintf (buf, "%0.*f", spin->digits,
2889 gtk_spin_button_get_value_as_float (spin));
2890 gtk_label_set_text (label, buf);
2894 spin_button_time_output_func (GtkSpinButton *spin_button)
2896 static gchar buf[6];
2900 hours = spin_button->adjustment->value / 60.0;
2901 minutes = (fabs(floor (hours) - hours) < 1e-5) ? 0.0 : 30;
2902 sprintf (buf, "%02.0f:%02.0f", floor (hours), minutes);
2903 if (strcmp (buf, gtk_entry_get_text (GTK_ENTRY (spin_button))))
2904 gtk_entry_set_text (GTK_ENTRY (spin_button), buf);
2909 spin_button_month_input_func (GtkSpinButton *spin_button,
2913 static gchar *month[12] = { "January", "February", "March", "April",
2914 "May", "June", "July", "August",
2915 "September", "October", "November", "December" };
2917 gboolean found = FALSE;
2919 for (i = 1; i <= 12; i++)
2921 tmp1 = g_strdup (month[i-1]);
2923 tmp2 = g_strdup (gtk_entry_get_text (GTK_ENTRY (spin_button)));
2925 if (strstr (tmp1, tmp2) == tmp1)
2937 *new_val = (gfloat) i;
2942 spin_button_month_output_func (GtkSpinButton *spin_button)
2945 static gchar *month[12] = { "January", "February", "March", "April",
2946 "May", "June", "July", "August", "September",
2947 "October", "November", "December" };
2949 for (i = 1; i <= 12; i++)
2950 if (fabs (spin_button->adjustment->value - (double)i) < 1e-5)
2952 if (strcmp (month[i-1], gtk_entry_get_text (GTK_ENTRY (spin_button))))
2953 gtk_entry_set_text (GTK_ENTRY (spin_button), month[i-1]);
2959 spin_button_hex_input_func (GtkSpinButton *spin_button,
2966 buf = gtk_entry_get_text (GTK_ENTRY (spin_button));
2967 res = (gfloat)(strtol(buf, &err, 16));
2976 spin_button_hex_output_func (GtkSpinButton *spin_button)
2978 static gchar buf[7];
2981 val = (gint) spin_button->adjustment->value;
2982 if (fabs (val) < 1e-5)
2983 sprintf (buf, "0x00");
2985 sprintf (buf, "0x%.2X", val);
2986 if (strcmp (buf, gtk_entry_get_text (GTK_ENTRY (spin_button))))
2987 gtk_entry_set_text (GTK_ENTRY (spin_button), buf);
2994 static GtkWidget *window = NULL;
2997 GtkWidget *main_vbox;
3000 GtkWidget *spinner2;
3004 GtkWidget *val_label;
3009 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3011 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3012 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
3015 gtk_window_set_title (GTK_WINDOW (window), "GtkSpinButton");
3017 main_vbox = gtk_vbox_new (FALSE, 5);
3018 gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 10);
3019 gtk_container_add (GTK_CONTAINER (window), main_vbox);
3021 frame = gtk_frame_new ("Not accelerated");
3022 gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0);
3024 vbox = gtk_vbox_new (FALSE, 0);
3025 gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
3026 gtk_container_add (GTK_CONTAINER (frame), vbox);
3028 /* Time, month, hex spinners */
3030 hbox = gtk_hbox_new (FALSE, 0);
3031 gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 5);
3033 vbox2 = gtk_vbox_new (FALSE, 0);
3034 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
3036 label = gtk_label_new ("Time :");
3037 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
3038 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
3040 adj = (GtkAdjustment *) gtk_adjustment_new (0, 0, 1410, 30, 60, 0);
3041 spinner = gtk_spin_button_new (adj, 0, 0);
3042 gtk_editable_set_editable (GTK_EDITABLE (spinner), FALSE);
3043 gtk_signal_connect (GTK_OBJECT (spinner),
3045 GTK_SIGNAL_FUNC (spin_button_time_output_func),
3047 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
3048 gtk_widget_set_usize (spinner, 55, -1);
3049 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
3051 vbox2 = gtk_vbox_new (FALSE, 0);
3052 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
3054 label = gtk_label_new ("Month :");
3055 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
3056 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
3058 adj = (GtkAdjustment *) gtk_adjustment_new (1.0, 1.0, 12.0, 1.0,
3060 spinner = gtk_spin_button_new (adj, 0, 0);
3061 gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (spinner),
3062 GTK_UPDATE_IF_VALID);
3063 gtk_signal_connect (GTK_OBJECT (spinner),
3065 GTK_SIGNAL_FUNC (spin_button_month_input_func),
3067 gtk_signal_connect (GTK_OBJECT (spinner),
3069 GTK_SIGNAL_FUNC (spin_button_month_output_func),
3071 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
3072 gtk_widget_set_usize (spinner, 85, -1);
3073 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
3075 vbox2 = gtk_vbox_new (FALSE, 0);
3076 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
3078 label = gtk_label_new ("Hex :");
3079 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
3080 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
3082 adj = (GtkAdjustment *) gtk_adjustment_new (0, 0, 255, 1, 16, 0);
3083 spinner = gtk_spin_button_new (adj, 0, 0);
3084 gtk_editable_set_editable (GTK_EDITABLE (spinner), TRUE);
3085 gtk_signal_connect (GTK_OBJECT (spinner),
3087 GTK_SIGNAL_FUNC (spin_button_hex_input_func),
3089 gtk_signal_connect (GTK_OBJECT (spinner),
3091 GTK_SIGNAL_FUNC (spin_button_hex_output_func),
3093 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
3094 gtk_widget_set_usize (spinner, 55, 0);
3095 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
3097 frame = gtk_frame_new ("Accelerated");
3098 gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0);
3100 vbox = gtk_vbox_new (FALSE, 0);
3101 gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
3102 gtk_container_add (GTK_CONTAINER (frame), vbox);
3104 hbox = gtk_hbox_new (FALSE, 0);
3105 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
3107 vbox2 = gtk_vbox_new (FALSE, 0);
3108 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
3110 label = gtk_label_new ("Value :");
3111 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
3112 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
3114 adj = (GtkAdjustment *) gtk_adjustment_new (0.0, -10000.0, 10000.0,
3116 spinner1 = gtk_spin_button_new (adj, 1.0, 2);
3117 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner1), TRUE);
3118 gtk_widget_set_usize (spinner1, 100, 0);
3119 gtk_box_pack_start (GTK_BOX (vbox2), spinner1, FALSE, TRUE, 0);
3121 vbox2 = gtk_vbox_new (FALSE, 0);
3122 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
3124 label = gtk_label_new ("Digits :");
3125 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
3126 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
3128 adj = (GtkAdjustment *) gtk_adjustment_new (2, 1, 5, 1, 1, 0);
3129 spinner2 = gtk_spin_button_new (adj, 0.0, 0);
3130 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
3131 GTK_SIGNAL_FUNC (change_digits),
3132 (gpointer) spinner2);
3133 gtk_box_pack_start (GTK_BOX (vbox2), spinner2, FALSE, TRUE, 0);
3135 hbox = gtk_hbox_new (FALSE, 0);
3136 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
3138 button = gtk_check_button_new_with_label ("Snap to 0.5-ticks");
3139 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3140 GTK_SIGNAL_FUNC (toggle_snap),
3142 gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
3143 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
3145 button = gtk_check_button_new_with_label ("Numeric only input mode");
3146 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3147 GTK_SIGNAL_FUNC (toggle_numeric),
3149 gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
3150 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
3152 val_label = gtk_label_new ("");
3154 hbox = gtk_hbox_new (FALSE, 0);
3155 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
3157 button = gtk_button_new_with_label ("Value as Int");
3158 gtk_object_set_user_data (GTK_OBJECT (button), val_label);
3159 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3160 GTK_SIGNAL_FUNC (get_value),
3161 GINT_TO_POINTER (1));
3162 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
3164 button = gtk_button_new_with_label ("Value as Float");
3165 gtk_object_set_user_data (GTK_OBJECT (button), val_label);
3166 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3167 GTK_SIGNAL_FUNC (get_value),
3168 GINT_TO_POINTER (2));
3169 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
3171 gtk_box_pack_start (GTK_BOX (vbox), val_label, TRUE, TRUE, 0);
3172 gtk_label_set_text (GTK_LABEL (val_label), "0");
3174 hbox = gtk_hbox_new (FALSE, 0);
3175 gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
3177 button = gtk_button_new_with_label ("Close");
3178 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
3179 GTK_SIGNAL_FUNC (gtk_widget_destroy),
3180 GTK_OBJECT (window));
3181 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
3184 if (!GTK_WIDGET_VISIBLE (window))
3185 gtk_widget_show_all (window);
3187 gtk_widget_destroy (window);
3196 cursor_expose_event (GtkWidget *widget,
3200 GtkDrawingArea *darea;
3201 GdkDrawable *drawable;
3208 g_return_val_if_fail (widget != NULL, TRUE);
3209 g_return_val_if_fail (GTK_IS_DRAWING_AREA (widget), TRUE);
3211 darea = GTK_DRAWING_AREA (widget);
3212 drawable = widget->window;
3213 white_gc = widget->style->white_gc;
3214 gray_gc = widget->style->bg_gc[GTK_STATE_NORMAL];
3215 black_gc = widget->style->black_gc;
3216 max_width = widget->allocation.width;
3217 max_height = widget->allocation.height;
3219 gdk_draw_rectangle (drawable, white_gc,
3226 gdk_draw_rectangle (drawable, black_gc,
3233 gdk_draw_rectangle (drawable, gray_gc,
3244 set_cursor (GtkWidget *spinner,
3252 c = CLAMP (gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spinner)), 0, 152);
3255 label = gtk_object_get_user_data (GTK_OBJECT (spinner));
3256 vals = gtk_type_enum_get_values (GTK_TYPE_GDK_CURSOR_TYPE);
3257 while (vals && vals->value != c)
3260 gtk_label_set_text (GTK_LABEL (label), vals->value_nick);
3262 gtk_label_set_text (GTK_LABEL (label), "<unknown>");
3264 cursor = gdk_cursor_new (c);
3265 gdk_window_set_cursor (widget->window, cursor);
3266 gdk_cursor_destroy (cursor);
3270 cursor_event (GtkWidget *widget,
3272 GtkSpinButton *spinner)
3274 if ((event->type == GDK_BUTTON_PRESS) &&
3275 ((event->button.button == 1) ||
3276 (event->button.button == 3)))
3278 gtk_spin_button_spin (spinner, event->button.button == 1 ?
3279 GTK_SPIN_STEP_FORWARD : GTK_SPIN_STEP_BACKWARD, 0);
3287 create_cursors (void)
3289 static GtkWidget *window = NULL;
3292 GtkWidget *main_vbox;
3303 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3305 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3306 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
3309 gtk_window_set_title (GTK_WINDOW (window), "Cursors");
3311 main_vbox = gtk_vbox_new (FALSE, 5);
3312 gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 0);
3313 gtk_container_add (GTK_CONTAINER (window), main_vbox);
3316 gtk_widget_new (gtk_vbox_get_type (),
3317 "GtkBox::homogeneous", FALSE,
3318 "GtkBox::spacing", 5,
3319 "GtkContainer::border_width", 10,
3320 "GtkWidget::parent", main_vbox,
3321 "GtkWidget::visible", TRUE,
3324 hbox = gtk_hbox_new (FALSE, 0);
3325 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
3326 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
3328 label = gtk_label_new ("Cursor Value : ");
3329 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
3330 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
3332 adj = (GtkAdjustment *) gtk_adjustment_new (0,
3336 spinner = gtk_spin_button_new (adj, 0, 0);
3337 gtk_box_pack_start (GTK_BOX (hbox), spinner, TRUE, TRUE, 0);
3340 gtk_widget_new (gtk_frame_get_type (),
3341 "GtkFrame::shadow", GTK_SHADOW_ETCHED_IN,
3342 "GtkFrame::label_xalign", 0.5,
3343 "GtkFrame::label", "Cursor Area",
3344 "GtkContainer::border_width", 10,
3345 "GtkWidget::parent", vbox,
3346 "GtkWidget::visible", TRUE,
3349 darea = gtk_drawing_area_new ();
3350 gtk_widget_set_usize (darea, 80, 80);
3351 gtk_container_add (GTK_CONTAINER (frame), darea);
3352 gtk_signal_connect (GTK_OBJECT (darea),
3354 GTK_SIGNAL_FUNC (cursor_expose_event),
3356 gtk_widget_set_events (darea, GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK);
3357 gtk_signal_connect (GTK_OBJECT (darea),
3358 "button_press_event",
3359 GTK_SIGNAL_FUNC (cursor_event),
3361 gtk_widget_show (darea);
3363 gtk_signal_connect (GTK_OBJECT (spinner), "changed",
3364 GTK_SIGNAL_FUNC (set_cursor),
3367 label = gtk_widget_new (GTK_TYPE_LABEL,
3372 gtk_container_child_set (GTK_CONTAINER (vbox), label,
3375 gtk_object_set_user_data (GTK_OBJECT (spinner), label);
3378 gtk_widget_new (gtk_hseparator_get_type (),
3379 "GtkWidget::visible", TRUE,
3381 gtk_box_pack_start (GTK_BOX (main_vbox), any, FALSE, TRUE, 0);
3383 hbox = gtk_hbox_new (FALSE, 0);
3384 gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
3385 gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
3387 button = gtk_button_new_with_label ("Close");
3388 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
3389 GTK_SIGNAL_FUNC (gtk_widget_destroy),
3390 GTK_OBJECT (window));
3391 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
3393 gtk_widget_show_all (window);
3395 set_cursor (spinner, darea);
3398 gtk_widget_destroy (window);
3406 list_add (GtkWidget *widget,
3411 GtkWidget *list_item;
3412 GtkContainer *container;
3414 container = GTK_CONTAINER (list);
3416 sprintf (buffer, "added item %d", i++);
3417 list_item = gtk_list_item_new_with_label (buffer);
3418 gtk_widget_show (list_item);
3420 gtk_container_add (container, list_item);
3424 list_remove (GtkWidget *widget,
3427 GList *clear_list = NULL;
3428 GList *sel_row = NULL;
3431 if (list->selection_mode == GTK_SELECTION_EXTENDED)
3435 item = GTK_CONTAINER (list)->focus_child;
3436 if (!item && list->selection)
3437 item = list->selection->data;
3441 work = g_list_find (list->children, item);
3442 for (sel_row = work; sel_row; sel_row = sel_row->next)
3443 if (GTK_WIDGET (sel_row->data)->state != GTK_STATE_SELECTED)
3448 for (sel_row = work; sel_row; sel_row = sel_row->prev)
3449 if (GTK_WIDGET (sel_row->data)->state != GTK_STATE_SELECTED)
3455 for (work = list->selection; work; work = work->next)
3456 clear_list = g_list_prepend (clear_list, work->data);
3458 clear_list = g_list_reverse (clear_list);
3459 gtk_list_remove_items (GTK_LIST (list), clear_list);
3460 g_list_free (clear_list);
3462 if (list->selection_mode == GTK_SELECTION_EXTENDED && sel_row)
3463 gtk_list_select_child (list, GTK_WIDGET(sel_row->data));
3467 list_clear (GtkWidget *widget,
3470 gtk_list_clear_items (GTK_LIST (list), 0, -1);
3473 #define RADIOMENUTOGGLED(_rmi_, __i) { \
3476 __g = gtk_radio_menu_item_group(_rmi_); \
3477 while( __g && !((GtkCheckMenuItem *)(__g->data))->active) { \
3483 static GtkWidget *list_omenu;
3486 list_toggle_sel_mode (GtkWidget *widget, GtkList *list)
3490 if (!GTK_WIDGET_MAPPED (widget))
3493 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
3494 (((GtkOptionMenu *)list_omenu)->menu_item), i);
3496 gtk_list_set_selection_mode (list, (GtkSelectionMode) (3-i));
3502 static GtkWidget *window = NULL;
3504 static OptionMenuItem items[] =
3506 { "Single", list_toggle_sel_mode },
3507 { "Browse", list_toggle_sel_mode },
3508 { "Multiple", list_toggle_sel_mode },
3509 { "Extended", list_toggle_sel_mode }
3518 GtkWidget *scrolled_win;
3521 GtkWidget *separator;
3524 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3526 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3527 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
3530 gtk_window_set_title (GTK_WINDOW (window), "list");
3531 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
3533 vbox = gtk_vbox_new (FALSE, 0);
3534 gtk_container_add (GTK_CONTAINER (window), vbox);
3536 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
3537 gtk_container_set_border_width (GTK_CONTAINER (scrolled_win), 5);
3538 gtk_widget_set_usize (scrolled_win, -1, 300);
3539 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
3540 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
3541 GTK_POLICY_AUTOMATIC,
3542 GTK_POLICY_AUTOMATIC);
3544 list = gtk_list_new ();
3545 gtk_list_set_selection_mode (GTK_LIST (list), GTK_SELECTION_EXTENDED);
3546 gtk_scrolled_window_add_with_viewport
3547 (GTK_SCROLLED_WINDOW (scrolled_win), list);
3548 gtk_container_set_focus_vadjustment
3549 (GTK_CONTAINER (list),
3550 gtk_scrolled_window_get_vadjustment
3551 (GTK_SCROLLED_WINDOW (scrolled_win)));
3552 gtk_container_set_focus_hadjustment
3553 (GTK_CONTAINER (list),
3554 gtk_scrolled_window_get_hadjustment
3555 (GTK_SCROLLED_WINDOW (scrolled_win)));
3557 if ((infile = fopen("gtkenums.h", "r")))
3563 while (fgets (buffer, 256, infile))
3565 if ((pos = strchr (buffer, '\n')))
3567 item = gtk_list_item_new_with_label (buffer);
3568 gtk_container_add (GTK_CONTAINER (list), item);
3575 hbox = gtk_hbox_new (TRUE, 5);
3576 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
3577 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
3579 button = gtk_button_new_with_label ("Insert Row");
3580 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
3581 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3582 GTK_SIGNAL_FUNC (list_add),
3585 button = gtk_button_new_with_label ("Clear List");
3586 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
3587 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3588 GTK_SIGNAL_FUNC (list_clear),
3591 button = gtk_button_new_with_label ("Remove Selection");
3592 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
3593 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3594 GTK_SIGNAL_FUNC (list_remove),
3597 cbox = gtk_hbox_new (FALSE, 0);
3598 gtk_box_pack_start (GTK_BOX (vbox), cbox, FALSE, TRUE, 0);
3600 hbox = gtk_hbox_new (FALSE, 5);
3601 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
3602 gtk_box_pack_start (GTK_BOX (cbox), hbox, TRUE, FALSE, 0);
3604 label = gtk_label_new ("Selection Mode :");
3605 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
3607 list_omenu = build_option_menu (items, 4, 3, list);
3608 gtk_box_pack_start (GTK_BOX (hbox), list_omenu, FALSE, TRUE, 0);
3610 separator = gtk_hseparator_new ();
3611 gtk_box_pack_start (GTK_BOX (vbox), separator, FALSE, TRUE, 0);
3613 cbox = gtk_hbox_new (FALSE, 0);
3614 gtk_box_pack_start (GTK_BOX (vbox), cbox, FALSE, TRUE, 0);
3616 button = gtk_button_new_with_label ("close");
3617 gtk_container_set_border_width (GTK_CONTAINER (button), 10);
3618 gtk_box_pack_start (GTK_BOX (cbox), button, TRUE, TRUE, 0);
3619 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
3620 GTK_SIGNAL_FUNC(gtk_widget_destroy),
3621 GTK_OBJECT (window));
3623 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
3624 gtk_widget_grab_default (button);
3627 if (!GTK_WIDGET_VISIBLE (window))
3628 gtk_widget_show_all (window);
3630 gtk_widget_destroy (window);
3637 static char * book_open_xpm[] = {
3660 static char * book_closed_xpm[] = {
3685 static char * mini_page_xpm[] = {
3708 static char * gtk_mini_xpm[] = {
3748 #define TESTGTK_CLIST_COLUMNS 12
3749 static gint clist_rows = 0;
3750 static GtkWidget *clist_omenu;
3753 add1000_clist (GtkWidget *widget, gpointer data)
3756 char text[TESTGTK_CLIST_COLUMNS][50];
3757 char *texts[TESTGTK_CLIST_COLUMNS];
3762 clist = GTK_CLIST (data);
3764 pixmap = gdk_pixmap_create_from_xpm_d (clist->clist_window,
3766 >K_WIDGET (data)->style->white,
3769 for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++)
3772 sprintf (text[i], "Column %d", i);
3776 sprintf (text[1], "Right");
3777 sprintf (text[2], "Center");
3779 gtk_clist_freeze (GTK_CLIST (data));
3780 for (i = 0; i < 1000; i++)
3782 sprintf (text[0], "CListRow %d", rand() % 10000);
3783 row = gtk_clist_append (clist, texts);
3784 gtk_clist_set_pixtext (clist, row, 3, "gtk+", 5, pixmap, mask);
3787 gtk_clist_thaw (GTK_CLIST (data));
3789 gdk_pixmap_unref (pixmap);
3790 gdk_bitmap_unref (mask);
3794 add10000_clist (GtkWidget *widget, gpointer data)
3797 char text[TESTGTK_CLIST_COLUMNS][50];
3798 char *texts[TESTGTK_CLIST_COLUMNS];
3800 for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++)
3803 sprintf (text[i], "Column %d", i);
3806 sprintf (text[1], "Right");
3807 sprintf (text[2], "Center");
3809 gtk_clist_freeze (GTK_CLIST (data));
3810 for (i = 0; i < 10000; i++)
3812 sprintf (text[0], "CListRow %d", rand() % 10000);
3813 gtk_clist_append (GTK_CLIST (data), texts);
3815 gtk_clist_thaw (GTK_CLIST (data));
3819 clear_clist (GtkWidget *widget, gpointer data)
3821 gtk_clist_clear (GTK_CLIST (data));
3825 void clist_remove_selection (GtkWidget *widget, GtkCList *clist)
3827 gtk_clist_freeze (clist);
3829 while (clist->selection)
3834 row = GPOINTER_TO_INT (clist->selection->data);
3836 gtk_clist_remove (clist, row);
3838 if (clist->selection_mode == GTK_SELECTION_BROWSE)
3842 if (clist->selection_mode == GTK_SELECTION_EXTENDED && !clist->selection &&
3843 clist->focus_row >= 0)
3844 gtk_clist_select_row (clist, clist->focus_row, -1);
3846 gtk_clist_thaw (clist);
3849 void toggle_title_buttons (GtkWidget *widget, GtkCList *clist)
3851 if (GTK_TOGGLE_BUTTON (widget)->active)
3852 gtk_clist_column_titles_show (clist);
3854 gtk_clist_column_titles_hide (clist);
3857 void toggle_reorderable (GtkWidget *widget, GtkCList *clist)
3859 gtk_clist_set_reorderable (clist, GTK_TOGGLE_BUTTON (widget)->active);
3863 insert_row_clist (GtkWidget *widget, gpointer data)
3865 static char *text[] =
3867 "This", "is an", "inserted", "row.",
3868 "This", "is an", "inserted", "row.",
3869 "This", "is an", "inserted", "row."
3872 static GtkStyle *style1 = NULL;
3873 static GtkStyle *style2 = NULL;
3874 static GtkStyle *style3 = NULL;
3877 if (GTK_CLIST (data)->focus_row >= 0)
3878 row = gtk_clist_insert (GTK_CLIST (data), GTK_CLIST (data)->focus_row,
3881 row = gtk_clist_prepend (GTK_CLIST (data), text);
3895 style1 = gtk_style_copy (GTK_WIDGET (data)->style);
3896 style1->base[GTK_STATE_NORMAL] = col1;
3897 style1->base[GTK_STATE_SELECTED] = col2;
3899 style2 = gtk_style_copy (GTK_WIDGET (data)->style);
3900 style2->fg[GTK_STATE_NORMAL] = col1;
3901 style2->fg[GTK_STATE_SELECTED] = col2;
3903 style3 = gtk_style_copy (GTK_WIDGET (data)->style);
3904 style3->fg[GTK_STATE_NORMAL] = col1;
3905 style3->base[GTK_STATE_NORMAL] = col2;
3906 gdk_font_unref (style3->font);
3908 gdk_font_load ("-*-courier-medium-*-*-*-*-120-*-*-*-*-*-*");
3911 gtk_clist_set_cell_style (GTK_CLIST (data), row, 3, style1);
3912 gtk_clist_set_cell_style (GTK_CLIST (data), row, 4, style2);
3913 gtk_clist_set_cell_style (GTK_CLIST (data), row, 0, style3);
3919 clist_warning_test (GtkWidget *button,
3923 static gboolean add_remove = FALSE;
3925 add_remove = !add_remove;
3927 child = gtk_label_new ("Test");
3928 gtk_widget_ref (child);
3929 gtk_object_sink (GTK_OBJECT (child));
3932 gtk_container_add (GTK_CONTAINER (clist), child);
3935 child->parent = clist;
3936 gtk_container_remove (GTK_CONTAINER (clist), child);
3937 child->parent = NULL;
3940 gtk_widget_destroy (child);
3941 gtk_widget_unref (child);
3945 undo_selection (GtkWidget *button, GtkCList *clist)
3947 gtk_clist_undo_selection (clist);
3951 clist_toggle_sel_mode (GtkWidget *widget, GtkCList *clist)
3955 if (!GTK_WIDGET_MAPPED (widget))
3958 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
3959 (((GtkOptionMenu *)clist_omenu)->menu_item), i);
3961 gtk_clist_set_selection_mode (clist, (GtkSelectionMode) (3-i));
3965 clist_click_column (GtkCList *clist, gint column, gpointer data)
3968 gtk_clist_set_column_visibility (clist, column, FALSE);
3969 else if (column == clist->sort_column)
3971 if (clist->sort_type == GTK_SORT_ASCENDING)
3972 clist->sort_type = GTK_SORT_DESCENDING;
3974 clist->sort_type = GTK_SORT_ASCENDING;
3977 gtk_clist_set_sort_column (clist, column);
3979 gtk_clist_sort (clist);
3986 static GtkWidget *window = NULL;
3988 static char *titles[] =
3990 "auto resize", "not resizeable", "max width 100", "min width 50",
3991 "hide column", "Title 5", "Title 6", "Title 7",
3992 "Title 8", "Title 9", "Title 10", "Title 11"
3995 static OptionMenuItem items[] =
3997 { "Single", clist_toggle_sel_mode },
3998 { "Browse", clist_toggle_sel_mode },
3999 { "Multiple", clist_toggle_sel_mode },
4000 { "Extended", clist_toggle_sel_mode }
4003 char text[TESTGTK_CLIST_COLUMNS][50];
4004 char *texts[TESTGTK_CLIST_COLUMNS];
4010 GtkWidget *separator;
4011 GtkWidget *scrolled_win;
4014 GtkWidget *undo_button;
4024 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
4026 gtk_signal_connect (GTK_OBJECT (window), "destroy",
4027 GTK_SIGNAL_FUNC (gtk_widget_destroyed), &window);
4029 gtk_window_set_title (GTK_WINDOW (window), "clist");
4030 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
4032 vbox = gtk_vbox_new (FALSE, 0);
4033 gtk_container_add (GTK_CONTAINER (window), vbox);
4035 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
4036 gtk_container_set_border_width (GTK_CONTAINER (scrolled_win), 5);
4037 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
4038 GTK_POLICY_AUTOMATIC,
4039 GTK_POLICY_AUTOMATIC);
4041 /* create GtkCList here so we have a pointer to throw at the
4042 * button callbacks -- more is done with it later */
4043 clist = gtk_clist_new_with_titles (TESTGTK_CLIST_COLUMNS, titles);
4044 gtk_container_add (GTK_CONTAINER (scrolled_win), clist);
4045 gtk_signal_connect (GTK_OBJECT (clist), "click_column",
4046 (GtkSignalFunc) clist_click_column, NULL);
4048 /* control buttons */
4049 hbox = gtk_hbox_new (FALSE, 5);
4050 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4051 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
4053 button = gtk_button_new_with_label ("Insert Row");
4054 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4055 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4056 (GtkSignalFunc) insert_row_clist, (gpointer) clist);
4058 button = gtk_button_new_with_label ("Add 1,000 Rows With Pixmaps");
4059 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4060 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4061 (GtkSignalFunc) add1000_clist, (gpointer) clist);
4063 button = gtk_button_new_with_label ("Add 10,000 Rows");
4064 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4065 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4066 (GtkSignalFunc) add10000_clist, (gpointer) clist);
4068 /* second layer of buttons */
4069 hbox = gtk_hbox_new (FALSE, 5);
4070 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4071 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
4073 button = gtk_button_new_with_label ("Clear List");
4074 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4075 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4076 (GtkSignalFunc) clear_clist, (gpointer) clist);
4078 button = gtk_button_new_with_label ("Remove Selection");
4079 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4080 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4081 (GtkSignalFunc) clist_remove_selection,
4084 undo_button = gtk_button_new_with_label ("Undo Selection");
4085 gtk_box_pack_start (GTK_BOX (hbox), undo_button, TRUE, TRUE, 0);
4086 gtk_signal_connect (GTK_OBJECT (undo_button), "clicked",
4087 (GtkSignalFunc) undo_selection, (gpointer) clist);
4089 button = gtk_button_new_with_label ("Warning Test");
4090 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4091 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4092 (GtkSignalFunc) clist_warning_test,(gpointer) clist);
4094 /* third layer of buttons */
4095 hbox = gtk_hbox_new (FALSE, 5);
4096 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4097 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
4099 check = gtk_check_button_new_with_label ("Show Title Buttons");
4100 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
4101 gtk_signal_connect (GTK_OBJECT (check), "clicked",
4102 GTK_SIGNAL_FUNC (toggle_title_buttons), clist);
4103 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE);
4105 check = gtk_check_button_new_with_label ("Reorderable");
4106 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
4107 gtk_signal_connect (GTK_OBJECT (check), "clicked",
4108 GTK_SIGNAL_FUNC (toggle_reorderable), clist);
4109 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE);
4111 label = gtk_label_new ("Selection Mode :");
4112 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
4114 clist_omenu = build_option_menu (items, 4, 3, clist);
4115 gtk_box_pack_start (GTK_BOX (hbox), clist_omenu, FALSE, TRUE, 0);
4118 * the rest of the clist configuration
4121 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
4122 gtk_clist_set_row_height (GTK_CLIST (clist), 18);
4123 gtk_widget_set_usize (clist, -1, 300);
4125 for (i = 1; i < TESTGTK_CLIST_COLUMNS; i++)
4126 gtk_clist_set_column_width (GTK_CLIST (clist), i, 80);
4128 gtk_clist_set_column_auto_resize (GTK_CLIST (clist), 0, TRUE);
4129 gtk_clist_set_column_resizeable (GTK_CLIST (clist), 1, FALSE);
4130 gtk_clist_set_column_max_width (GTK_CLIST (clist), 2, 100);
4131 gtk_clist_set_column_min_width (GTK_CLIST (clist), 3, 50);
4132 gtk_clist_set_selection_mode (GTK_CLIST (clist), GTK_SELECTION_EXTENDED);
4133 gtk_clist_set_column_justification (GTK_CLIST (clist), 1,
4135 gtk_clist_set_column_justification (GTK_CLIST (clist), 2,
4136 GTK_JUSTIFY_CENTER);
4138 for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++)
4141 sprintf (text[i], "Column %d", i);
4144 sprintf (text[1], "Right");
4145 sprintf (text[2], "Center");
4154 style = gtk_style_new ();
4155 style->fg[GTK_STATE_NORMAL] = col1;
4156 style->base[GTK_STATE_NORMAL] = col2;
4158 gdk_font_unref (style->font);
4160 gdk_font_load ("-adobe-helvetica-bold-r-*-*-*-140-*-*-*-*-*-*");
4162 for (i = 0; i < 10; i++)
4164 sprintf (text[0], "CListRow %d", clist_rows++);
4165 gtk_clist_append (GTK_CLIST (clist), texts);
4170 gtk_clist_set_row_style (GTK_CLIST (clist), i, style);
4173 gtk_clist_set_cell_style (GTK_CLIST (clist), i, i % 4, style);
4178 separator = gtk_hseparator_new ();
4179 gtk_box_pack_start (GTK_BOX (vbox), separator, FALSE, TRUE, 0);
4181 hbox = gtk_hbox_new (FALSE, 0);
4182 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
4184 button = gtk_button_new_with_label ("close");
4185 gtk_container_set_border_width (GTK_CONTAINER (button), 10);
4186 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4187 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
4188 GTK_SIGNAL_FUNC(gtk_widget_destroy),
4189 GTK_OBJECT (window));
4191 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
4192 gtk_widget_grab_default (button);
4195 if (!GTK_WIDGET_VISIBLE (window))
4196 gtk_widget_show_all (window);
4200 gtk_widget_destroy (window);
4215 static gint books = 0;
4216 static gint pages = 0;
4218 static GtkWidget *book_label;
4219 static GtkWidget *page_label;
4220 static GtkWidget *sel_label;
4221 static GtkWidget *vis_label;
4222 static GtkWidget *omenu1;
4223 static GtkWidget *omenu2;
4224 static GtkWidget *omenu3;
4225 static GtkWidget *omenu4;
4226 static GtkWidget *spin1;
4227 static GtkWidget *spin2;
4228 static GtkWidget *spin3;
4229 static gint line_style;
4231 void after_press (GtkCTree *ctree, gpointer data)
4235 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->selection));
4236 gtk_label_set_text (GTK_LABEL (sel_label), buf);
4238 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->row_list));
4239 gtk_label_set_text (GTK_LABEL (vis_label), buf);
4241 sprintf (buf, "%d", books);
4242 gtk_label_set_text (GTK_LABEL (book_label), buf);
4244 sprintf (buf, "%d", pages);
4245 gtk_label_set_text (GTK_LABEL (page_label), buf);
4248 void after_move (GtkCTree *ctree, GtkCTreeNode *child, GtkCTreeNode *parent,
4249 GtkCTreeNode *sibling, gpointer data)
4255 gtk_ctree_get_node_info (ctree, child, &source,
4256 NULL, NULL, NULL, NULL, NULL, NULL, NULL);
4258 gtk_ctree_get_node_info (ctree, parent, &target1,
4259 NULL, NULL, NULL, NULL, NULL, NULL, NULL);
4261 gtk_ctree_get_node_info (ctree, sibling, &target2,
4262 NULL, NULL, NULL, NULL, NULL, NULL, NULL);
4264 g_print ("Moving \"%s\" to \"%s\" with sibling \"%s\".\n", source,
4265 (parent) ? target1 : "nil", (sibling) ? target2 : "nil");
4268 void count_items (GtkCTree *ctree, GtkCTreeNode *list)
4270 if (GTK_CTREE_ROW (list)->is_leaf)
4276 void expand_all (GtkWidget *widget, GtkCTree *ctree)
4278 gtk_ctree_expand_recursive (ctree, NULL);
4279 after_press (ctree, NULL);
4282 void collapse_all (GtkWidget *widget, GtkCTree *ctree)
4284 gtk_ctree_collapse_recursive (ctree, NULL);
4285 after_press (ctree, NULL);
4288 void select_all (GtkWidget *widget, GtkCTree *ctree)
4290 gtk_ctree_select_recursive (ctree, NULL);
4291 after_press (ctree, NULL);
4294 void change_style (GtkWidget *widget, GtkCTree *ctree)
4296 static GtkStyle *style1 = NULL;
4297 static GtkStyle *style2 = NULL;
4303 if (GTK_CLIST (ctree)->focus_row >= 0)
4304 node = GTK_CTREE_NODE
4305 (g_list_nth (GTK_CLIST (ctree)->row_list,GTK_CLIST (ctree)->focus_row));
4307 node = GTK_CTREE_NODE (GTK_CLIST (ctree)->row_list);
4321 style1 = gtk_style_new ();
4322 style1->base[GTK_STATE_NORMAL] = col1;
4323 style1->fg[GTK_STATE_SELECTED] = col2;
4325 style2 = gtk_style_new ();
4326 style2->base[GTK_STATE_SELECTED] = col2;
4327 style2->fg[GTK_STATE_NORMAL] = col1;
4328 style2->base[GTK_STATE_NORMAL] = col2;
4329 gdk_font_unref (style2->font);
4331 gdk_font_load ("-*-courier-medium-*-*-*-*-300-*-*-*-*-*-*");
4334 gtk_ctree_node_set_cell_style (ctree, node, 1, style1);
4335 gtk_ctree_node_set_cell_style (ctree, node, 0, style2);
4337 if (GTK_CTREE_ROW (node)->children)
4338 gtk_ctree_node_set_row_style (ctree, GTK_CTREE_ROW (node)->children,
4342 void unselect_all (GtkWidget *widget, GtkCTree *ctree)
4344 gtk_ctree_unselect_recursive (ctree, NULL);
4345 after_press (ctree, NULL);
4348 void remove_selection (GtkWidget *widget, GtkCTree *ctree)
4353 clist = GTK_CLIST (ctree);
4355 gtk_clist_freeze (clist);
4357 while (clist->selection)
4359 node = clist->selection->data;
4361 if (GTK_CTREE_ROW (node)->is_leaf)
4364 gtk_ctree_post_recursive (ctree, node,
4365 (GtkCTreeFunc) count_items, NULL);
4367 gtk_ctree_remove_node (ctree, node);
4369 if (clist->selection_mode == GTK_SELECTION_BROWSE)
4373 if (clist->selection_mode == GTK_SELECTION_EXTENDED && !clist->selection &&
4374 clist->focus_row >= 0)
4376 node = gtk_ctree_node_nth (ctree, clist->focus_row);
4379 gtk_ctree_select (ctree, node);
4382 gtk_clist_thaw (clist);
4383 after_press (ctree, NULL);
4386 struct _ExportStruct {
4392 typedef struct _ExportStruct ExportStruct;
4395 gnode2ctree (GtkCTree *ctree,
4398 GtkCTreeNode *cnode,
4402 GdkPixmap *pixmap_closed;
4403 GdkBitmap *mask_closed;
4404 GdkPixmap *pixmap_opened;
4405 GdkBitmap *mask_opened;
4407 if (!cnode || !gnode || (!(es = gnode->data)))
4412 pixmap_closed = pixmap3;
4413 mask_closed = mask3;
4414 pixmap_opened = NULL;
4419 pixmap_closed = pixmap1;
4420 mask_closed = mask1;
4421 pixmap_opened = pixmap2;
4422 mask_opened = mask2;
4425 gtk_ctree_set_node_info (ctree, cnode, es->tree, 2, pixmap_closed,
4426 mask_closed, pixmap_opened, mask_opened,
4427 es->is_leaf, (depth < 3));
4428 gtk_ctree_node_set_text (ctree, cnode, 1, es->info);
4436 ctree2gnode (GtkCTree *ctree,
4439 GtkCTreeNode *cnode,
4444 if (!cnode || !gnode)
4447 es = g_new (ExportStruct, 1);
4449 es->is_leaf = GTK_CTREE_ROW (cnode)->is_leaf;
4450 es->tree = GTK_CELL_PIXTEXT (GTK_CTREE_ROW (cnode)->row.cell[0])->text;
4451 es->info = GTK_CELL_PIXTEXT (GTK_CTREE_ROW (cnode)->row.cell[1])->text;
4455 void export_ctree (GtkWidget *widget, GtkCTree *ctree)
4457 char *title[] = { "Tree" , "Info" };
4458 static GtkWidget *export_window = NULL;
4459 static GtkCTree *export_ctree;
4461 GtkWidget *scrolled_win;
4469 export_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
4471 gtk_signal_connect (GTK_OBJECT (export_window), "destroy",
4472 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
4475 gtk_window_set_title (GTK_WINDOW (export_window), "exported ctree");
4476 gtk_container_set_border_width (GTK_CONTAINER (export_window), 5);
4478 vbox = gtk_vbox_new (FALSE, 0);
4479 gtk_container_add (GTK_CONTAINER (export_window), vbox);
4481 button = gtk_button_new_with_label ("Close");
4482 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, TRUE, 0);
4484 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
4485 (GtkSignalFunc) gtk_widget_destroy,
4486 GTK_OBJECT(export_window));
4488 sep = gtk_hseparator_new ();
4489 gtk_box_pack_end (GTK_BOX (vbox), sep, FALSE, TRUE, 10);
4491 export_ctree = GTK_CTREE (gtk_ctree_new_with_titles (2, 0, title));
4492 gtk_ctree_set_line_style (export_ctree, GTK_CTREE_LINES_DOTTED);
4494 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
4495 gtk_container_add (GTK_CONTAINER (scrolled_win),
4496 GTK_WIDGET (export_ctree));
4497 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
4498 GTK_POLICY_AUTOMATIC,
4499 GTK_POLICY_AUTOMATIC);
4500 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
4501 gtk_clist_set_selection_mode (GTK_CLIST (export_ctree),
4502 GTK_SELECTION_EXTENDED);
4503 gtk_clist_set_column_width (GTK_CLIST (export_ctree), 0, 200);
4504 gtk_clist_set_column_width (GTK_CLIST (export_ctree), 1, 200);
4505 gtk_widget_set_usize (GTK_WIDGET (export_ctree), 300, 200);
4508 if (!GTK_WIDGET_VISIBLE (export_window))
4509 gtk_widget_show_all (export_window);
4511 gtk_clist_clear (GTK_CLIST (export_ctree));
4513 node = GTK_CTREE_NODE (g_list_nth (GTK_CLIST (ctree)->row_list,
4514 GTK_CLIST (ctree)->focus_row));
4518 gnode = gtk_ctree_export_to_gnode (ctree, NULL, NULL, node,
4522 gtk_ctree_insert_gnode (export_ctree, NULL, NULL, gnode,
4524 g_node_destroy (gnode);
4528 void change_indent (GtkWidget *widget, GtkCTree *ctree)
4530 gtk_ctree_set_indent (ctree, GTK_ADJUSTMENT (widget)->value);
4533 void change_spacing (GtkWidget *widget, GtkCTree *ctree)
4535 gtk_ctree_set_spacing (ctree, GTK_ADJUSTMENT (widget)->value);
4538 void change_row_height (GtkWidget *widget, GtkCList *clist)
4540 gtk_clist_set_row_height (clist, GTK_ADJUSTMENT (widget)->value);
4543 void set_background (GtkCTree *ctree, GtkCTreeNode *node, gpointer data)
4545 GtkStyle *style = NULL;
4550 if (ctree->line_style != GTK_CTREE_LINES_TABBED)
4552 if (!GTK_CTREE_ROW (node)->is_leaf)
4553 style = GTK_CTREE_ROW (node)->row.data;
4554 else if (GTK_CTREE_ROW (node)->parent)
4555 style = GTK_CTREE_ROW (GTK_CTREE_ROW (node)->parent)->row.data;
4558 gtk_ctree_node_set_row_style (ctree, node, style);
4561 void ctree_toggle_line_style (GtkWidget *widget, GtkCTree *ctree)
4565 if (!GTK_WIDGET_MAPPED (widget))
4568 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
4569 (((GtkOptionMenu *)omenu1)->menu_item), i);
4571 if ((ctree->line_style == GTK_CTREE_LINES_TABBED &&
4572 ((GtkCTreeLineStyle) (3 - i)) != GTK_CTREE_LINES_TABBED) ||
4573 (ctree->line_style != GTK_CTREE_LINES_TABBED &&
4574 ((GtkCTreeLineStyle) (3 - i)) == GTK_CTREE_LINES_TABBED))
4575 gtk_ctree_pre_recursive (ctree, NULL, set_background, NULL);
4576 gtk_ctree_set_line_style (ctree, 3 - i);
4580 void ctree_toggle_expander_style (GtkWidget *widget, GtkCTree *ctree)
4584 if (!GTK_WIDGET_MAPPED (widget))
4587 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
4588 (((GtkOptionMenu *)omenu2)->menu_item), i);
4590 gtk_ctree_set_expander_style (ctree, (GtkCTreeExpanderStyle) (3 - i));
4593 void ctree_toggle_justify (GtkWidget *widget, GtkCTree *ctree)
4597 if (!GTK_WIDGET_MAPPED (widget))
4600 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
4601 (((GtkOptionMenu *)omenu3)->menu_item), i);
4603 gtk_clist_set_column_justification (GTK_CLIST (ctree), ctree->tree_column,
4604 (GtkJustification) (1 - i));
4607 void ctree_toggle_sel_mode (GtkWidget *widget, GtkCTree *ctree)
4611 if (!GTK_WIDGET_MAPPED (widget))
4614 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
4615 (((GtkOptionMenu *)omenu4)->menu_item), i);
4617 gtk_clist_set_selection_mode (GTK_CLIST (ctree), (GtkSelectionMode) (3 - i));
4618 after_press (ctree, NULL);
4621 void build_recursive (GtkCTree *ctree, gint cur_depth, gint depth,
4622 gint num_books, gint num_pages, GtkCTreeNode *parent)
4627 GtkCTreeNode *sibling;
4634 for (i = num_pages + num_books; i > num_books; i--)
4637 sprintf (buf1, "Page %02d", (gint) rand() % 100);
4638 sprintf (buf2, "Item %d-%d", cur_depth, i);
4639 sibling = gtk_ctree_insert_node (ctree, parent, sibling, text, 5,
4640 pixmap3, mask3, NULL, NULL,
4643 if (parent && ctree->line_style == GTK_CTREE_LINES_TABBED)
4644 gtk_ctree_node_set_row_style (ctree, sibling,
4645 GTK_CTREE_ROW (parent)->row.style);
4648 if (cur_depth == depth)
4651 for (i = num_books; i > 0; i--)
4656 sprintf (buf1, "Book %02d", (gint) rand() % 100);
4657 sprintf (buf2, "Item %d-%d", cur_depth, i);
4658 sibling = gtk_ctree_insert_node (ctree, parent, sibling, text, 5,
4659 pixmap1, mask1, pixmap2, mask2,
4662 style = gtk_style_new ();
4663 switch (cur_depth % 3)
4666 style->base[GTK_STATE_NORMAL].red = 10000 * (cur_depth % 6);
4667 style->base[GTK_STATE_NORMAL].green = 0;
4668 style->base[GTK_STATE_NORMAL].blue = 65535 - ((i * 10000) % 65535);
4671 style->base[GTK_STATE_NORMAL].red = 10000 * (cur_depth % 6);
4672 style->base[GTK_STATE_NORMAL].green = 65535 - ((i * 10000) % 65535);
4673 style->base[GTK_STATE_NORMAL].blue = 0;
4676 style->base[GTK_STATE_NORMAL].red = 65535 - ((i * 10000) % 65535);
4677 style->base[GTK_STATE_NORMAL].green = 0;
4678 style->base[GTK_STATE_NORMAL].blue = 10000 * (cur_depth % 6);
4681 gtk_ctree_node_set_row_data_full (ctree, sibling, style,
4682 (GtkDestroyNotify) gtk_style_unref);
4684 if (ctree->line_style == GTK_CTREE_LINES_TABBED)
4685 gtk_ctree_node_set_row_style (ctree, sibling, style);
4687 build_recursive (ctree, cur_depth + 1, depth, num_books, num_pages,
4692 void rebuild_tree (GtkWidget *widget, GtkCTree *ctree)
4695 gchar label1[] = "Root";
4696 gchar label2[] = "";
4697 GtkCTreeNode *parent;
4704 d = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin1));
4705 b = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin2));
4706 p = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin3));
4708 n = ((pow (b, d) - 1) / (b - 1)) * (p + 1);
4712 g_print ("%d total items? Try less\n",n);
4716 gtk_clist_freeze (GTK_CLIST (ctree));
4717 gtk_clist_clear (GTK_CLIST (ctree));
4722 parent = gtk_ctree_insert_node (ctree, NULL, NULL, text, 5, pixmap1,
4723 mask1, pixmap2, mask2, FALSE, TRUE);
4725 style = gtk_style_new ();
4726 style->base[GTK_STATE_NORMAL].red = 0;
4727 style->base[GTK_STATE_NORMAL].green = 45000;
4728 style->base[GTK_STATE_NORMAL].blue = 55000;
4729 gtk_ctree_node_set_row_data_full (ctree, parent, style,
4730 (GtkDestroyNotify) gtk_style_unref);
4732 if (ctree->line_style == GTK_CTREE_LINES_TABBED)
4733 gtk_ctree_node_set_row_style (ctree, parent, style);
4735 build_recursive (ctree, 1, d, b, p, parent);
4736 gtk_clist_thaw (GTK_CLIST (ctree));
4737 after_press (ctree, NULL);
4741 ctree_click_column (GtkCTree *ctree, gint column, gpointer data)
4745 clist = GTK_CLIST (ctree);
4747 if (column == clist->sort_column)
4749 if (clist->sort_type == GTK_SORT_ASCENDING)
4750 clist->sort_type = GTK_SORT_DESCENDING;
4752 clist->sort_type = GTK_SORT_ASCENDING;
4755 gtk_clist_set_sort_column (clist, column);
4757 gtk_ctree_sort_recursive (ctree, NULL);
4760 void create_ctree (void)
4762 static GtkWidget *window = NULL;
4763 GtkTooltips *tooltips;
4765 GtkWidget *scrolled_win;
4777 GdkColor transparent;
4779 char *title[] = { "Tree" , "Info" };
4782 static OptionMenuItem items1[] =
4784 { "No lines", ctree_toggle_line_style },
4785 { "Solid", ctree_toggle_line_style },
4786 { "Dotted", ctree_toggle_line_style },
4787 { "Tabbed", ctree_toggle_line_style }
4790 static OptionMenuItem items2[] =
4792 { "None", ctree_toggle_expander_style },
4793 { "Square", ctree_toggle_expander_style },
4794 { "Triangle", ctree_toggle_expander_style },
4795 { "Circular", ctree_toggle_expander_style }
4798 static OptionMenuItem items3[] =
4800 { "Left", ctree_toggle_justify },
4801 { "Right", ctree_toggle_justify }
4804 static OptionMenuItem items4[] =
4806 { "Single", ctree_toggle_sel_mode },
4807 { "Browse", ctree_toggle_sel_mode },
4808 { "Multiple", ctree_toggle_sel_mode },
4809 { "Extended", ctree_toggle_sel_mode }
4814 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
4816 gtk_signal_connect (GTK_OBJECT (window), "destroy",
4817 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
4820 gtk_window_set_title (GTK_WINDOW (window), "GtkCTree");
4821 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
4823 tooltips = gtk_tooltips_new ();
4824 gtk_object_ref (GTK_OBJECT (tooltips));
4825 gtk_object_sink (GTK_OBJECT (tooltips));
4827 gtk_object_set_data_full (GTK_OBJECT (window), "tooltips", tooltips,
4828 (GtkDestroyNotify) gtk_object_unref);
4830 vbox = gtk_vbox_new (FALSE, 0);
4831 gtk_container_add (GTK_CONTAINER (window), vbox);
4833 hbox = gtk_hbox_new (FALSE, 5);
4834 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4835 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
4837 label = gtk_label_new ("Depth :");
4838 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
4840 adj = (GtkAdjustment *) gtk_adjustment_new (4, 1, 10, 1, 5, 0);
4841 spin1 = gtk_spin_button_new (adj, 0, 0);
4842 gtk_box_pack_start (GTK_BOX (hbox), spin1, FALSE, TRUE, 5);
4844 label = gtk_label_new ("Books :");
4845 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
4847 adj = (GtkAdjustment *) gtk_adjustment_new (3, 1, 20, 1, 5, 0);
4848 spin2 = gtk_spin_button_new (adj, 0, 0);
4849 gtk_box_pack_start (GTK_BOX (hbox), spin2, FALSE, TRUE, 5);
4851 label = gtk_label_new ("Pages :");
4852 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
4854 adj = (GtkAdjustment *) gtk_adjustment_new (5, 1, 20, 1, 5, 0);
4855 spin3 = gtk_spin_button_new (adj, 0, 0);
4856 gtk_box_pack_start (GTK_BOX (hbox), spin3, FALSE, TRUE, 5);
4858 button = gtk_button_new_with_label ("Close");
4859 gtk_box_pack_end (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4861 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
4862 (GtkSignalFunc) gtk_widget_destroy,
4863 GTK_OBJECT(window));
4865 button = gtk_button_new_with_label ("Rebuild Tree");
4866 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4868 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
4869 gtk_container_set_border_width (GTK_CONTAINER (scrolled_win), 5);
4870 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
4871 GTK_POLICY_AUTOMATIC,
4873 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
4875 ctree = GTK_CTREE (gtk_ctree_new_with_titles (2, 0, title));
4876 gtk_container_add (GTK_CONTAINER (scrolled_win), GTK_WIDGET (ctree));
4878 gtk_clist_set_column_auto_resize (GTK_CLIST (ctree), 0, TRUE);
4879 gtk_clist_set_column_width (GTK_CLIST (ctree), 1, 200);
4880 gtk_clist_set_selection_mode (GTK_CLIST (ctree), GTK_SELECTION_EXTENDED);
4881 gtk_ctree_set_line_style (ctree, GTK_CTREE_LINES_DOTTED);
4882 line_style = GTK_CTREE_LINES_DOTTED;
4884 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4885 GTK_SIGNAL_FUNC (rebuild_tree), ctree);
4886 gtk_signal_connect (GTK_OBJECT (ctree), "click_column",
4887 (GtkSignalFunc) ctree_click_column, NULL);
4889 gtk_signal_connect_after (GTK_OBJECT (ctree), "button_press_event",
4890 GTK_SIGNAL_FUNC (after_press), NULL);
4891 gtk_signal_connect_after (GTK_OBJECT (ctree), "button_release_event",
4892 GTK_SIGNAL_FUNC (after_press), NULL);
4893 gtk_signal_connect_after (GTK_OBJECT (ctree), "tree_move",
4894 GTK_SIGNAL_FUNC (after_move), NULL);
4895 gtk_signal_connect_after (GTK_OBJECT (ctree), "end_selection",
4896 GTK_SIGNAL_FUNC (after_press), NULL);
4897 gtk_signal_connect_after (GTK_OBJECT (ctree), "toggle_focus_row",
4898 GTK_SIGNAL_FUNC (after_press), NULL);
4899 gtk_signal_connect_after (GTK_OBJECT (ctree), "select_all",
4900 GTK_SIGNAL_FUNC (after_press), NULL);
4901 gtk_signal_connect_after (GTK_OBJECT (ctree), "unselect_all",
4902 GTK_SIGNAL_FUNC (after_press), NULL);
4903 gtk_signal_connect_after (GTK_OBJECT (ctree), "scroll_vertical",
4904 GTK_SIGNAL_FUNC (after_press), NULL);
4906 bbox = gtk_hbox_new (FALSE, 5);
4907 gtk_container_set_border_width (GTK_CONTAINER (bbox), 5);
4908 gtk_box_pack_start (GTK_BOX (vbox), bbox, FALSE, TRUE, 0);
4910 mbox = gtk_vbox_new (TRUE, 5);
4911 gtk_box_pack_start (GTK_BOX (bbox), mbox, FALSE, TRUE, 0);
4913 label = gtk_label_new ("Row Height :");
4914 gtk_box_pack_start (GTK_BOX (mbox), label, FALSE, FALSE, 0);
4916 label = gtk_label_new ("Indent :");
4917 gtk_box_pack_start (GTK_BOX (mbox), label, FALSE, FALSE, 0);
4919 label = gtk_label_new ("Spacing :");
4920 gtk_box_pack_start (GTK_BOX (mbox), label, FALSE, FALSE, 0);
4922 mbox = gtk_vbox_new (TRUE, 5);
4923 gtk_box_pack_start (GTK_BOX (bbox), mbox, FALSE, TRUE, 0);
4925 adj = (GtkAdjustment *) gtk_adjustment_new (20, 12, 100, 1, 10, 0);
4926 spinner = gtk_spin_button_new (adj, 0, 0);
4927 gtk_box_pack_start (GTK_BOX (mbox), spinner, FALSE, FALSE, 5);
4928 gtk_tooltips_set_tip (tooltips, spinner,
4929 "Row height of list items", NULL);
4930 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
4931 GTK_SIGNAL_FUNC (change_row_height), ctree);
4932 gtk_clist_set_row_height ( GTK_CLIST (ctree), adj->value);
4934 adj = (GtkAdjustment *) gtk_adjustment_new (20, 0, 60, 1, 10, 0);
4935 spinner = gtk_spin_button_new (adj, 0, 0);
4936 gtk_box_pack_start (GTK_BOX (mbox), spinner, FALSE, FALSE, 5);
4937 gtk_tooltips_set_tip (tooltips, spinner, "Tree Indentation.", NULL);
4938 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
4939 GTK_SIGNAL_FUNC (change_indent), ctree);
4941 adj = (GtkAdjustment *) gtk_adjustment_new (5, 0, 60, 1, 10, 0);
4942 spinner = gtk_spin_button_new (adj, 0, 0);
4943 gtk_box_pack_start (GTK_BOX (mbox), spinner, FALSE, FALSE, 5);
4944 gtk_tooltips_set_tip (tooltips, spinner, "Tree Spacing.", NULL);
4945 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
4946 GTK_SIGNAL_FUNC (change_spacing), ctree);
4948 mbox = gtk_vbox_new (TRUE, 5);
4949 gtk_box_pack_start (GTK_BOX (bbox), mbox, FALSE, TRUE, 0);
4951 hbox = gtk_hbox_new (FALSE, 5);
4952 gtk_box_pack_start (GTK_BOX (mbox), hbox, FALSE, FALSE, 0);
4954 button = gtk_button_new_with_label ("Expand All");
4955 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4956 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4957 GTK_SIGNAL_FUNC (expand_all), ctree);
4959 button = gtk_button_new_with_label ("Collapse All");
4960 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4961 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4962 GTK_SIGNAL_FUNC (collapse_all), ctree);
4964 button = gtk_button_new_with_label ("Change Style");
4965 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4966 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4967 GTK_SIGNAL_FUNC (change_style), ctree);
4969 button = gtk_button_new_with_label ("Export Tree");
4970 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4971 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4972 GTK_SIGNAL_FUNC (export_ctree), ctree);
4974 hbox = gtk_hbox_new (FALSE, 5);
4975 gtk_box_pack_start (GTK_BOX (mbox), hbox, FALSE, FALSE, 0);
4977 button = gtk_button_new_with_label ("Select All");
4978 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4979 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4980 GTK_SIGNAL_FUNC (select_all), ctree);
4982 button = gtk_button_new_with_label ("Unselect All");
4983 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4984 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4985 GTK_SIGNAL_FUNC (unselect_all), ctree);
4987 button = gtk_button_new_with_label ("Remove Selection");
4988 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4989 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4990 GTK_SIGNAL_FUNC (remove_selection), ctree);
4992 check = gtk_check_button_new_with_label ("Reorderable");
4993 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
4994 gtk_tooltips_set_tip (tooltips, check,
4995 "Tree items can be reordered by dragging.", NULL);
4996 gtk_signal_connect (GTK_OBJECT (check), "clicked",
4997 GTK_SIGNAL_FUNC (toggle_reorderable), ctree);
4998 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE);
5000 hbox = gtk_hbox_new (TRUE, 5);
5001 gtk_box_pack_start (GTK_BOX (mbox), hbox, FALSE, FALSE, 0);
5003 omenu1 = build_option_menu (items1, 4, 2, ctree);
5004 gtk_box_pack_start (GTK_BOX (hbox), omenu1, FALSE, TRUE, 0);
5005 gtk_tooltips_set_tip (tooltips, omenu1, "The tree's line style.", NULL);
5007 omenu2 = build_option_menu (items2, 4, 1, ctree);
5008 gtk_box_pack_start (GTK_BOX (hbox), omenu2, FALSE, TRUE, 0);
5009 gtk_tooltips_set_tip (tooltips, omenu2, "The tree's expander style.",
5012 omenu3 = build_option_menu (items3, 2, 0, ctree);
5013 gtk_box_pack_start (GTK_BOX (hbox), omenu3, FALSE, TRUE, 0);
5014 gtk_tooltips_set_tip (tooltips, omenu3, "The tree's justification.",
5017 omenu4 = build_option_menu (items4, 4, 3, ctree);
5018 gtk_box_pack_start (GTK_BOX (hbox), omenu4, FALSE, TRUE, 0);
5019 gtk_tooltips_set_tip (tooltips, omenu4, "The list's selection mode.",
5022 gtk_widget_realize (window);
5024 pixmap1 = gdk_pixmap_create_from_xpm_d (window->window, &mask1,
5025 &transparent, book_closed_xpm);
5026 pixmap2 = gdk_pixmap_create_from_xpm_d (window->window, &mask2,
5027 &transparent, book_open_xpm);
5028 pixmap3 = gdk_pixmap_create_from_xpm_d (window->window, &mask3,
5029 &transparent, mini_page_xpm);
5031 gtk_widget_set_usize (GTK_WIDGET (ctree), 0, 300);
5033 frame = gtk_frame_new (NULL);
5034 gtk_container_set_border_width (GTK_CONTAINER (frame), 0);
5035 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_OUT);
5036 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
5038 hbox = gtk_hbox_new (TRUE, 2);
5039 gtk_container_set_border_width (GTK_CONTAINER (hbox), 2);
5040 gtk_container_add (GTK_CONTAINER (frame), hbox);
5042 frame = gtk_frame_new (NULL);
5043 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
5044 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
5046 hbox2 = gtk_hbox_new (FALSE, 0);
5047 gtk_container_set_border_width (GTK_CONTAINER (hbox2), 2);
5048 gtk_container_add (GTK_CONTAINER (frame), hbox2);
5050 label = gtk_label_new ("Books :");
5051 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
5053 sprintf (buf, "%d", books);
5054 book_label = gtk_label_new (buf);
5055 gtk_box_pack_end (GTK_BOX (hbox2), book_label, FALSE, TRUE, 5);
5057 frame = gtk_frame_new (NULL);
5058 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
5059 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
5061 hbox2 = gtk_hbox_new (FALSE, 0);
5062 gtk_container_set_border_width (GTK_CONTAINER (hbox2), 2);
5063 gtk_container_add (GTK_CONTAINER (frame), hbox2);
5065 label = gtk_label_new ("Pages :");
5066 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
5068 sprintf (buf, "%d", pages);
5069 page_label = gtk_label_new (buf);
5070 gtk_box_pack_end (GTK_BOX (hbox2), page_label, FALSE, TRUE, 5);
5072 frame = gtk_frame_new (NULL);
5073 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
5074 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
5076 hbox2 = gtk_hbox_new (FALSE, 0);
5077 gtk_container_set_border_width (GTK_CONTAINER (hbox2), 2);
5078 gtk_container_add (GTK_CONTAINER (frame), hbox2);
5080 label = gtk_label_new ("Selected :");
5081 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
5083 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->selection));
5084 sel_label = gtk_label_new (buf);
5085 gtk_box_pack_end (GTK_BOX (hbox2), sel_label, FALSE, TRUE, 5);
5087 frame = gtk_frame_new (NULL);
5088 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
5089 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
5091 hbox2 = gtk_hbox_new (FALSE, 0);
5092 gtk_container_set_border_width (GTK_CONTAINER (hbox2), 2);
5093 gtk_container_add (GTK_CONTAINER (frame), hbox2);
5095 label = gtk_label_new ("Visible :");
5096 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
5098 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->row_list));
5099 vis_label = gtk_label_new (buf);
5100 gtk_box_pack_end (GTK_BOX (hbox2), vis_label, FALSE, TRUE, 5);
5102 rebuild_tree (NULL, ctree);
5105 if (!GTK_WIDGET_VISIBLE (window))
5106 gtk_widget_show_all (window);
5108 gtk_widget_destroy (window);
5116 color_selection_ok (GtkWidget *w,
5117 GtkColorSelectionDialog *cs)
5119 GtkColorSelection *colorsel;
5122 colorsel=GTK_COLOR_SELECTION(cs->colorsel);
5124 gtk_color_selection_get_color(colorsel,color);
5125 gtk_color_selection_set_color(colorsel,color);
5129 color_selection_changed (GtkWidget *w,
5130 GtkColorSelectionDialog *cs)
5132 GtkColorSelection *colorsel;
5135 colorsel=GTK_COLOR_SELECTION(cs->colorsel);
5136 gtk_color_selection_get_color(colorsel,color);
5140 create_color_selection (void)
5142 static GtkWidget *window = NULL;
5146 window = gtk_color_selection_dialog_new ("color selection dialog");
5148 gtk_color_selection_set_opacity (
5149 GTK_COLOR_SELECTION (GTK_COLOR_SELECTION_DIALOG (window)->colorsel),
5152 gtk_color_selection_set_update_policy(
5153 GTK_COLOR_SELECTION (GTK_COLOR_SELECTION_DIALOG (window)->colorsel),
5154 GTK_UPDATE_CONTINUOUS);
5156 gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
5158 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5159 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5162 gtk_signal_connect (
5163 GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (window)->colorsel),
5165 GTK_SIGNAL_FUNC(color_selection_changed),
5168 gtk_signal_connect (
5169 GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (window)->ok_button),
5171 GTK_SIGNAL_FUNC(color_selection_ok),
5174 gtk_signal_connect_object (
5175 GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (window)->cancel_button),
5177 GTK_SIGNAL_FUNC(gtk_widget_destroy),
5178 GTK_OBJECT (window));
5181 if (!GTK_WIDGET_VISIBLE (window))
5182 gtk_widget_show (window);
5184 gtk_widget_destroy (window);
5192 file_selection_hide_fileops (GtkWidget *widget,
5193 GtkFileSelection *fs)
5195 gtk_file_selection_hide_fileop_buttons (fs);
5199 file_selection_ok (GtkWidget *w,
5200 GtkFileSelection *fs)
5202 g_print ("%s\n", gtk_file_selection_get_filename (fs));
5203 gtk_widget_destroy (GTK_WIDGET (fs));
5207 create_file_selection (void)
5209 static GtkWidget *window = NULL;
5214 window = gtk_file_selection_new ("file selection dialog");
5216 gtk_file_selection_hide_fileop_buttons (GTK_FILE_SELECTION (window));
5218 gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
5220 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5221 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5224 gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (window)->ok_button),
5225 "clicked", GTK_SIGNAL_FUNC(file_selection_ok),
5227 gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION (window)->cancel_button),
5228 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
5229 GTK_OBJECT (window));
5231 button = gtk_button_new_with_label ("Hide Fileops");
5232 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5233 (GtkSignalFunc) file_selection_hide_fileops,
5235 gtk_box_pack_start (GTK_BOX (GTK_FILE_SELECTION (window)->action_area),
5236 button, FALSE, FALSE, 0);
5237 gtk_widget_show (button);
5239 button = gtk_button_new_with_label ("Show Fileops");
5240 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5241 (GtkSignalFunc) gtk_file_selection_show_fileop_buttons,
5243 gtk_box_pack_start (GTK_BOX (GTK_FILE_SELECTION (window)->action_area),
5244 button, FALSE, FALSE, 0);
5245 gtk_widget_show (button);
5248 if (!GTK_WIDGET_VISIBLE (window))
5249 gtk_widget_show (window);
5251 gtk_widget_destroy (window);
5259 font_selection_ok (GtkWidget *w,
5260 GtkFontSelectionDialog *fs)
5262 g_print ("%s\n", gtk_font_selection_dialog_get_font_name (fs));
5263 gtk_widget_destroy (GTK_WIDGET (fs));
5267 create_font_selection (void)
5269 static GtkWidget *window = NULL;
5273 window = gtk_font_selection_dialog_new ("Font Selection Dialog");
5275 gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
5277 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5278 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5281 gtk_signal_connect (GTK_OBJECT (GTK_FONT_SELECTION_DIALOG (window)->ok_button),
5282 "clicked", GTK_SIGNAL_FUNC(font_selection_ok),
5283 GTK_FONT_SELECTION_DIALOG (window));
5284 gtk_signal_connect_object (GTK_OBJECT (GTK_FONT_SELECTION_DIALOG (window)->cancel_button),
5285 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
5286 GTK_OBJECT (window));
5289 if (!GTK_WIDGET_VISIBLE (window))
5290 gtk_widget_show (window);
5292 gtk_widget_destroy (window);
5299 static GtkWidget *dialog_window = NULL;
5302 label_toggle (GtkWidget *widget,
5307 *label = gtk_label_new ("Dialog Test");
5308 gtk_signal_connect (GTK_OBJECT (*label),
5310 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
5312 gtk_misc_set_padding (GTK_MISC (*label), 10, 10);
5313 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->vbox),
5314 *label, TRUE, TRUE, 0);
5315 gtk_widget_show (*label);
5318 gtk_widget_destroy (*label);
5322 create_dialog (void)
5324 static GtkWidget *label;
5329 dialog_window = gtk_dialog_new ();
5331 gtk_signal_connect (GTK_OBJECT (dialog_window), "destroy",
5332 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5335 gtk_window_set_title (GTK_WINDOW (dialog_window), "GtkDialog");
5336 gtk_container_set_border_width (GTK_CONTAINER (dialog_window), 0);
5337 gtk_widget_set_usize (dialog_window, 200, 110);
5339 button = gtk_button_new_with_label ("OK");
5340 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5341 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->action_area),
5342 button, TRUE, TRUE, 0);
5343 gtk_widget_grab_default (button);
5344 gtk_widget_show (button);
5346 button = gtk_button_new_with_label ("Toggle");
5347 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5348 GTK_SIGNAL_FUNC (label_toggle),
5350 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5351 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->action_area),
5352 button, TRUE, TRUE, 0);
5353 gtk_widget_show (button);
5358 if (!GTK_WIDGET_VISIBLE (dialog_window))
5359 gtk_widget_show (dialog_window);
5361 gtk_widget_destroy (dialog_window);
5366 static gboolean event_watcher_enter_id = 0;
5367 static gboolean event_watcher_leave_id = 0;
5370 event_watcher (GtkObject *object,
5376 g_print ("Watch: \"%s\" emitted for %s\n",
5377 gtk_signal_name (signal_id),
5378 gtk_type_name (GTK_OBJECT_TYPE (object)));
5384 event_watcher_down (void)
5386 if (event_watcher_enter_id)
5390 signal_id = gtk_signal_lookup ("enter_notify_event", GTK_TYPE_WIDGET);
5391 gtk_signal_remove_emission_hook (signal_id, event_watcher_enter_id);
5392 event_watcher_enter_id = 0;
5393 signal_id = gtk_signal_lookup ("leave_notify_event", GTK_TYPE_WIDGET);
5394 gtk_signal_remove_emission_hook (signal_id, event_watcher_leave_id);
5395 event_watcher_leave_id = 0;
5400 event_watcher_toggle (void)
5402 if (event_watcher_enter_id)
5403 event_watcher_down ();
5408 signal_id = gtk_signal_lookup ("enter_notify_event", GTK_TYPE_WIDGET);
5409 event_watcher_enter_id = gtk_signal_add_emission_hook (signal_id, event_watcher, NULL);
5410 signal_id = gtk_signal_lookup ("leave_notify_event", GTK_TYPE_WIDGET);
5411 event_watcher_leave_id = gtk_signal_add_emission_hook (signal_id, event_watcher, NULL);
5416 create_event_watcher (void)
5422 dialog_window = gtk_dialog_new ();
5424 gtk_signal_connect (GTK_OBJECT (dialog_window), "destroy",
5425 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
5427 gtk_signal_connect (GTK_OBJECT (dialog_window),
5429 GTK_SIGNAL_FUNC (event_watcher_down),
5432 gtk_window_set_title (GTK_WINDOW (dialog_window), "Event Watcher");
5433 gtk_container_set_border_width (GTK_CONTAINER (dialog_window), 0);
5434 gtk_widget_set_usize (dialog_window, 200, 110);
5436 button = gtk_toggle_button_new_with_label ("Activate Watch");
5437 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5438 GTK_SIGNAL_FUNC (event_watcher_toggle),
5440 gtk_container_set_border_width (GTK_CONTAINER (button), 10);
5441 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->vbox),
5442 button, TRUE, TRUE, 0);
5443 gtk_widget_show (button);
5445 button = gtk_button_new_with_label ("Close");
5446 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5447 GTK_SIGNAL_FUNC (gtk_widget_destroy),
5448 (GtkObject*) dialog_window);
5449 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5450 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->action_area),
5451 button, TRUE, TRUE, 0);
5452 gtk_widget_grab_default (button);
5453 gtk_widget_show (button);
5456 if (!GTK_WIDGET_VISIBLE (dialog_window))
5457 gtk_widget_show (dialog_window);
5459 gtk_widget_destroy (dialog_window);
5467 create_range_controls (void)
5469 static GtkWidget *window = NULL;
5473 GtkWidget *scrollbar;
5475 GtkWidget *separator;
5476 GtkObject *adjustment;
5480 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5482 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5483 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5486 gtk_window_set_title (GTK_WINDOW (window), "range controls");
5487 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
5490 box1 = gtk_vbox_new (FALSE, 0);
5491 gtk_container_add (GTK_CONTAINER (window), box1);
5492 gtk_widget_show (box1);
5495 box2 = gtk_vbox_new (FALSE, 10);
5496 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
5497 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
5498 gtk_widget_show (box2);
5501 adjustment = gtk_adjustment_new (0.0, 0.0, 101.0, 0.1, 1.0, 1.0);
5503 scale = gtk_hscale_new (GTK_ADJUSTMENT (adjustment));
5504 gtk_widget_set_usize (GTK_WIDGET (scale), 150, 30);
5505 gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED);
5506 gtk_scale_set_digits (GTK_SCALE (scale), 1);
5507 gtk_scale_set_draw_value (GTK_SCALE (scale), TRUE);
5508 gtk_box_pack_start (GTK_BOX (box2), scale, TRUE, TRUE, 0);
5509 gtk_widget_show (scale);
5511 scrollbar = gtk_hscrollbar_new (GTK_ADJUSTMENT (adjustment));
5512 gtk_range_set_update_policy (GTK_RANGE (scrollbar),
5513 GTK_UPDATE_CONTINUOUS);
5514 gtk_box_pack_start (GTK_BOX (box2), scrollbar, TRUE, TRUE, 0);
5515 gtk_widget_show (scrollbar);
5518 separator = gtk_hseparator_new ();
5519 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
5520 gtk_widget_show (separator);
5523 box2 = gtk_vbox_new (FALSE, 10);
5524 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
5525 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
5526 gtk_widget_show (box2);
5529 button = gtk_button_new_with_label ("close");
5530 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5531 GTK_SIGNAL_FUNC(gtk_widget_destroy),
5532 GTK_OBJECT (window));
5533 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
5534 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5535 gtk_widget_grab_default (button);
5536 gtk_widget_show (button);
5539 if (!GTK_WIDGET_VISIBLE (window))
5540 gtk_widget_show (window);
5542 gtk_widget_destroy (window);
5550 create_rulers (void)
5552 static GtkWidget *window = NULL;
5558 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5559 gtk_window_set_policy (GTK_WINDOW (window), TRUE, TRUE, FALSE);
5561 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5562 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5565 gtk_window_set_title (GTK_WINDOW (window), "rulers");
5566 gtk_widget_set_usize (window, 300, 300);
5567 gtk_widget_set_events (window,
5568 GDK_POINTER_MOTION_MASK
5569 | GDK_POINTER_MOTION_HINT_MASK);
5570 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
5572 table = gtk_table_new (2, 2, FALSE);
5573 gtk_container_add (GTK_CONTAINER (window), table);
5574 gtk_widget_show (table);
5576 ruler = gtk_hruler_new ();
5577 gtk_ruler_set_metric (GTK_RULER (ruler), GTK_CENTIMETERS);
5578 gtk_ruler_set_range (GTK_RULER (ruler), 100, 0, 0, 20);
5580 gtk_signal_connect_object (
5581 GTK_OBJECT (window),
5582 "motion_notify_event",
5584 GTK_WIDGET_CLASS (GTK_OBJECT (ruler)->klass)->motion_notify_event),
5585 GTK_OBJECT (ruler));
5587 gtk_table_attach (GTK_TABLE (table), ruler, 1, 2, 0, 1,
5588 GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
5589 gtk_widget_show (ruler);
5592 ruler = gtk_vruler_new ();
5593 gtk_ruler_set_range (GTK_RULER (ruler), 5, 15, 0, 20);
5595 gtk_signal_connect_object (
5596 GTK_OBJECT (window),
5597 "motion_notify_event",
5598 GTK_SIGNAL_FUNC (GTK_WIDGET_CLASS (GTK_OBJECT (ruler)->klass)->motion_notify_event),
5599 GTK_OBJECT (ruler));
5601 gtk_table_attach (GTK_TABLE (table), ruler, 0, 1, 1, 2,
5602 GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
5603 gtk_widget_show (ruler);
5606 if (!GTK_WIDGET_VISIBLE (window))
5607 gtk_widget_show (window);
5609 gtk_widget_destroy (window);
5613 text_toggle_editable (GtkWidget *checkbutton,
5616 gtk_text_set_editable(GTK_TEXT(text),
5617 GTK_TOGGLE_BUTTON(checkbutton)->active);
5621 text_toggle_word_wrap (GtkWidget *checkbutton,
5624 gtk_text_set_word_wrap(GTK_TEXT(text),
5625 GTK_TOGGLE_BUTTON(checkbutton)->active);
5632 { { 0, 0x0000, 0x0000, 0x0000 }, "black" },
5633 { { 0, 0xFFFF, 0xFFFF, 0xFFFF }, "white" },
5634 { { 0, 0xFFFF, 0x0000, 0x0000 }, "red" },
5635 { { 0, 0x0000, 0xFFFF, 0x0000 }, "green" },
5636 { { 0, 0x0000, 0x0000, 0xFFFF }, "blue" },
5637 { { 0, 0x0000, 0xFFFF, 0xFFFF }, "cyan" },
5638 { { 0, 0xFFFF, 0x0000, 0xFFFF }, "magenta" },
5639 { { 0, 0xFFFF, 0xFFFF, 0x0000 }, "yellow" }
5642 int ntext_colors = sizeof(text_colors) / sizeof(text_colors[0]);
5648 text_insert_random (GtkWidget *w, GtkText *text)
5652 for (i=0; i<10; i++)
5654 c = 'A' + rand() % ('Z' - 'A');
5655 gtk_text_set_point (text, rand() % gtk_text_get_length (text));
5656 gtk_text_insert (text, NULL, NULL, NULL, &c, 1);
5665 static GtkWidget *window = NULL;
5671 GtkWidget *separator;
5672 GtkWidget *scrolled_window;
5680 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5681 gtk_widget_set_name (window, "text window");
5682 gtk_widget_set_usize (window, 500, 500);
5683 gtk_window_set_policy (GTK_WINDOW(window), TRUE, TRUE, FALSE);
5685 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5686 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5689 gtk_window_set_title (GTK_WINDOW (window), "test");
5690 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
5693 box1 = gtk_vbox_new (FALSE, 0);
5694 gtk_container_add (GTK_CONTAINER (window), box1);
5695 gtk_widget_show (box1);
5698 box2 = gtk_vbox_new (FALSE, 10);
5699 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
5700 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
5701 gtk_widget_show (box2);
5704 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
5705 gtk_box_pack_start (GTK_BOX (box2), scrolled_window, TRUE, TRUE, 0);
5706 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
5709 gtk_widget_show (scrolled_window);
5711 text = gtk_text_new (NULL, NULL);
5712 gtk_text_set_editable (GTK_TEXT (text), TRUE);
5713 gtk_container_add (GTK_CONTAINER (scrolled_window), text);
5714 gtk_widget_grab_focus (text);
5715 gtk_widget_show (text);
5718 gtk_text_freeze (GTK_TEXT (text));
5720 font = gdk_font_load ("-adobe-courier-medium-r-normal--*-120-*-*-*-*-*-*");
5722 for (i=0; i<ntext_colors; i++)
5724 gtk_text_insert (GTK_TEXT (text), font, NULL, NULL,
5725 text_colors[i].name, -1);
5726 gtk_text_insert (GTK_TEXT (text), font, NULL, NULL, "\t", -1);
5728 for (j=0; j<ntext_colors; j++)
5730 gtk_text_insert (GTK_TEXT (text), font,
5731 &text_colors[j].color, &text_colors[i].color,
5734 gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL, "\n", -1);
5737 /* The Text widget will reference count the font, so we
5738 * unreference it here
5740 gdk_font_unref (font);
5742 infile = fopen("testgtk.c", "r");
5747 int nbytes_read, nbytes_alloc;
5750 nbytes_alloc = 1024;
5751 buffer = g_new (char, nbytes_alloc);
5755 if (nbytes_alloc < nbytes_read + 1024)
5758 buffer = g_realloc (buffer, nbytes_alloc);
5760 len = fread (buffer + nbytes_read, 1, 1024, infile);
5766 gtk_text_insert (GTK_TEXT (text), NULL, NULL,
5767 NULL, buffer, nbytes_read);
5772 gtk_text_thaw (GTK_TEXT (text));
5774 hbox = gtk_hbutton_box_new ();
5775 gtk_box_pack_start (GTK_BOX (box2), hbox, FALSE, FALSE, 0);
5776 gtk_widget_show (hbox);
5778 check = gtk_check_button_new_with_label("Editable");
5779 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, FALSE, 0);
5780 gtk_signal_connect (GTK_OBJECT(check), "toggled",
5781 GTK_SIGNAL_FUNC(text_toggle_editable), text);
5782 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), TRUE);
5783 gtk_widget_show (check);
5785 check = gtk_check_button_new_with_label("Wrap Words");
5786 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
5787 gtk_signal_connect (GTK_OBJECT(check), "toggled",
5788 GTK_SIGNAL_FUNC(text_toggle_word_wrap), text);
5789 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), FALSE);
5790 gtk_widget_show (check);
5792 separator = gtk_hseparator_new ();
5793 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
5794 gtk_widget_show (separator);
5797 box2 = gtk_vbox_new (FALSE, 10);
5798 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
5799 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
5800 gtk_widget_show (box2);
5803 button = gtk_button_new_with_label ("insert random");
5804 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5805 GTK_SIGNAL_FUNC(text_insert_random),
5807 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
5808 gtk_widget_show (button);
5810 button = gtk_button_new_with_label ("close");
5811 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5812 GTK_SIGNAL_FUNC(gtk_widget_destroy),
5813 GTK_OBJECT (window));
5814 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
5815 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5816 gtk_widget_grab_default (button);
5817 gtk_widget_show (button);
5820 if (!GTK_WIDGET_VISIBLE (window))
5821 gtk_widget_show (window);
5823 gtk_widget_destroy (window);
5830 GdkPixmap *book_open;
5831 GdkPixmap *book_closed;
5832 GdkBitmap *book_open_mask;
5833 GdkBitmap *book_closed_mask;
5834 GtkWidget *sample_notebook;
5837 page_switch (GtkWidget *widget, GtkNotebookPage *page, gint page_num)
5839 GtkNotebookPage *oldpage;
5842 oldpage = GTK_NOTEBOOK (widget)->cur_page;
5844 if (page == oldpage)
5846 pixwid = ((GtkBoxChild*)
5847 (GTK_BOX (page->tab_label)->children->data))->widget;
5848 gtk_pixmap_set (GTK_PIXMAP (pixwid), book_open, book_open_mask);
5849 pixwid = ((GtkBoxChild*)
5850 (GTK_BOX (page->menu_label)->children->data))->widget;
5851 gtk_pixmap_set (GTK_PIXMAP (pixwid), book_open, book_open_mask);
5855 pixwid = ((GtkBoxChild*)
5856 (GTK_BOX (oldpage->tab_label)->children->data))->widget;
5857 gtk_pixmap_set (GTK_PIXMAP (pixwid), book_closed, book_closed_mask);
5858 pixwid = ((GtkBoxChild*)
5859 (GTK_BOX (oldpage->menu_label)->children->data))->widget;
5860 gtk_pixmap_set (GTK_PIXMAP (pixwid), book_closed, book_closed_mask);
5865 tab_fill (GtkToggleButton *button, GtkWidget *child)
5868 GtkPackType pack_type;
5870 gtk_notebook_query_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
5871 &expand, NULL, &pack_type);
5872 gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
5873 expand, button->active, pack_type);
5877 tab_expand (GtkToggleButton *button, GtkWidget *child)
5880 GtkPackType pack_type;
5882 gtk_notebook_query_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
5883 NULL, &fill, &pack_type);
5884 gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
5885 button->active, fill, pack_type);
5889 tab_pack (GtkToggleButton *button, GtkWidget *child)
5895 gtk_notebook_query_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
5896 &expand, &fill, NULL);
5897 gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
5898 expand, fill, button->active);
5902 create_pages (GtkNotebook *notebook, gint start, gint end)
5904 GtkWidget *child = NULL;
5909 GtkWidget *label_box;
5910 GtkWidget *menu_box;
5915 for (i = start; i <= end; i++)
5917 sprintf (buffer, "Page %d", i);
5919 child = gtk_frame_new (buffer);
5920 gtk_container_set_border_width (GTK_CONTAINER (child), 10);
5922 vbox = gtk_vbox_new (TRUE,0);
5923 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
5924 gtk_container_add (GTK_CONTAINER (child), vbox);
5926 hbox = gtk_hbox_new (TRUE,0);
5927 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
5929 button = gtk_check_button_new_with_label ("Fill Tab");
5930 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
5931 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
5932 gtk_signal_connect (GTK_OBJECT (button), "toggled",
5933 GTK_SIGNAL_FUNC (tab_fill), child);
5935 button = gtk_check_button_new_with_label ("Expand Tab");
5936 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
5937 gtk_signal_connect (GTK_OBJECT (button), "toggled",
5938 GTK_SIGNAL_FUNC (tab_expand), child);
5940 button = gtk_check_button_new_with_label ("Pack end");
5941 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
5942 gtk_signal_connect (GTK_OBJECT (button), "toggled",
5943 GTK_SIGNAL_FUNC (tab_pack), child);
5945 button = gtk_button_new_with_label ("Hide Page");
5946 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 5);
5947 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5948 GTK_SIGNAL_FUNC (gtk_widget_hide),
5949 GTK_OBJECT (child));
5951 gtk_widget_show_all (child);
5953 label_box = gtk_hbox_new (FALSE, 0);
5954 pixwid = gtk_pixmap_new (book_closed, book_closed_mask);
5955 gtk_box_pack_start (GTK_BOX (label_box), pixwid, FALSE, TRUE, 0);
5956 gtk_misc_set_padding (GTK_MISC (pixwid), 3, 1);
5957 label = gtk_label_new (buffer);
5958 gtk_box_pack_start (GTK_BOX (label_box), label, FALSE, TRUE, 0);
5959 gtk_widget_show_all (label_box);
5961 menu_box = gtk_hbox_new (FALSE, 0);
5962 pixwid = gtk_pixmap_new (book_closed, book_closed_mask);
5963 gtk_box_pack_start (GTK_BOX (menu_box), pixwid, FALSE, TRUE, 0);
5964 gtk_misc_set_padding (GTK_MISC (pixwid), 3, 1);
5965 label = gtk_label_new (buffer);
5966 gtk_box_pack_start (GTK_BOX (menu_box), label, FALSE, TRUE, 0);
5967 gtk_widget_show_all (menu_box);
5968 gtk_notebook_append_page_menu (notebook, child, label_box, menu_box);
5973 rotate_notebook (GtkButton *button,
5974 GtkNotebook *notebook)
5976 gtk_notebook_set_tab_pos (notebook, (notebook->tab_pos + 1) % 4);
5980 show_all_pages (GtkButton *button,
5981 GtkNotebook *notebook)
5983 gtk_container_foreach (GTK_CONTAINER (notebook),
5984 (GtkCallback) gtk_widget_show, NULL);
5988 standard_notebook (GtkButton *button,
5989 GtkNotebook *notebook)
5993 gtk_notebook_set_show_tabs (notebook, TRUE);
5994 gtk_notebook_set_scrollable (notebook, FALSE);
5995 if (g_list_length (notebook->children) == 15)
5996 for (i = 0; i < 10; i++)
5997 gtk_notebook_remove_page (notebook, 5);
6001 notabs_notebook (GtkButton *button,
6002 GtkNotebook *notebook)
6006 gtk_notebook_set_show_tabs (notebook, FALSE);
6007 if (g_list_length (notebook->children) == 15)
6008 for (i = 0; i < 10; i++)
6009 gtk_notebook_remove_page (notebook, 5);
6013 scrollable_notebook (GtkButton *button,
6014 GtkNotebook *notebook)
6016 gtk_notebook_set_show_tabs (notebook, TRUE);
6017 gtk_notebook_set_scrollable (notebook, TRUE);
6018 if (g_list_length (notebook->children) == 5)
6019 create_pages (notebook, 6, 15);
6023 notebook_popup (GtkToggleButton *button,
6024 GtkNotebook *notebook)
6027 gtk_notebook_popup_enable (notebook);
6029 gtk_notebook_popup_disable (notebook);
6033 notebook_homogeneous (GtkToggleButton *button,
6034 GtkNotebook *notebook)
6036 gtk_notebook_set_homogeneous_tabs (notebook, button->active);
6040 create_notebook (void)
6042 static GtkWidget *window = NULL;
6046 GtkWidget *separator;
6048 GdkColor *transparent = NULL;
6051 static OptionMenuItem items[] =
6053 { "Standard", standard_notebook },
6054 { "No tabs", notabs_notebook },
6055 { "Scrollable", scrollable_notebook }
6060 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6062 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6063 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6066 gtk_window_set_title (GTK_WINDOW (window), "notebook");
6067 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6069 box1 = gtk_vbox_new (FALSE, 0);
6070 gtk_container_add (GTK_CONTAINER (window), box1);
6072 sample_notebook = gtk_notebook_new ();
6073 gtk_signal_connect (GTK_OBJECT (sample_notebook), "switch_page",
6074 GTK_SIGNAL_FUNC (page_switch), NULL);
6075 gtk_notebook_set_tab_pos (GTK_NOTEBOOK (sample_notebook), GTK_POS_TOP);
6076 gtk_box_pack_start (GTK_BOX (box1), sample_notebook, TRUE, TRUE, 0);
6077 gtk_container_set_border_width (GTK_CONTAINER (sample_notebook), 10);
6079 gtk_widget_realize (sample_notebook);
6080 book_open = gdk_pixmap_create_from_xpm_d (sample_notebook->window,
6084 book_closed = gdk_pixmap_create_from_xpm_d (sample_notebook->window,
6089 create_pages (GTK_NOTEBOOK (sample_notebook), 1, 5);
6091 separator = gtk_hseparator_new ();
6092 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 10);
6094 box2 = gtk_hbox_new (FALSE, 5);
6095 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6096 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6098 button = gtk_check_button_new_with_label ("popup menu");
6099 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, FALSE, 0);
6100 gtk_signal_connect (GTK_OBJECT(button), "clicked",
6101 GTK_SIGNAL_FUNC (notebook_popup),
6102 GTK_OBJECT (sample_notebook));
6104 button = gtk_check_button_new_with_label ("homogeneous tabs");
6105 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, FALSE, 0);
6106 gtk_signal_connect (GTK_OBJECT(button), "clicked",
6107 GTK_SIGNAL_FUNC (notebook_homogeneous),
6108 GTK_OBJECT (sample_notebook));
6110 box2 = gtk_hbox_new (FALSE, 5);
6111 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6112 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6114 label = gtk_label_new ("Notebook Style :");
6115 gtk_box_pack_start (GTK_BOX (box2), label, FALSE, TRUE, 0);
6117 omenu = build_option_menu (items, 3, 0, sample_notebook);
6118 gtk_box_pack_start (GTK_BOX (box2), omenu, FALSE, TRUE, 0);
6120 button = gtk_button_new_with_label ("Show all Pages");
6121 gtk_box_pack_start (GTK_BOX (box2), button, FALSE, TRUE, 0);
6122 gtk_signal_connect (GTK_OBJECT (button), "clicked",
6123 GTK_SIGNAL_FUNC (show_all_pages), sample_notebook);
6125 box2 = gtk_hbox_new (TRUE, 10);
6126 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6127 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6129 button = gtk_button_new_with_label ("prev");
6130 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6131 GTK_SIGNAL_FUNC (gtk_notebook_prev_page),
6132 GTK_OBJECT (sample_notebook));
6133 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6135 button = gtk_button_new_with_label ("next");
6136 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6137 GTK_SIGNAL_FUNC (gtk_notebook_next_page),
6138 GTK_OBJECT (sample_notebook));
6139 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6141 button = gtk_button_new_with_label ("rotate");
6142 gtk_signal_connect (GTK_OBJECT (button), "clicked",
6143 GTK_SIGNAL_FUNC (rotate_notebook), sample_notebook);
6144 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6146 separator = gtk_hseparator_new ();
6147 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 5);
6149 button = gtk_button_new_with_label ("close");
6150 gtk_container_set_border_width (GTK_CONTAINER (button), 5);
6151 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6152 GTK_SIGNAL_FUNC (gtk_widget_destroy),
6153 GTK_OBJECT (window));
6154 gtk_box_pack_start (GTK_BOX (box1), button, FALSE, FALSE, 0);
6155 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6156 gtk_widget_grab_default (button);
6159 if (!GTK_WIDGET_VISIBLE (window))
6160 gtk_widget_show_all (window);
6162 gtk_widget_destroy (window);
6170 toggle_resize (GtkWidget *widget, GtkWidget *child)
6172 GtkPaned *paned = GTK_PANED (child->parent);
6173 gboolean is_child1 = (child == paned->child1);
6174 gboolean resize, shrink;
6176 resize = is_child1 ? paned->child1_resize : paned->child2_resize;
6177 shrink = is_child1 ? paned->child1_shrink : paned->child2_shrink;
6179 gtk_widget_ref (child);
6180 gtk_container_remove (GTK_CONTAINER (child->parent), child);
6182 gtk_paned_pack1 (paned, child, !resize, shrink);
6184 gtk_paned_pack2 (paned, child, !resize, shrink);
6185 gtk_widget_unref (child);
6189 toggle_shrink (GtkWidget *widget, GtkWidget *child)
6191 GtkPaned *paned = GTK_PANED (child->parent);
6192 gboolean is_child1 = (child == paned->child1);
6193 gboolean resize, shrink;
6195 resize = is_child1 ? paned->child1_resize : paned->child2_resize;
6196 shrink = is_child1 ? paned->child1_shrink : paned->child2_shrink;
6198 gtk_widget_ref (child);
6199 gtk_container_remove (GTK_CONTAINER (child->parent), child);
6201 gtk_paned_pack1 (paned, child, resize, !shrink);
6203 gtk_paned_pack2 (paned, child, resize, !shrink);
6204 gtk_widget_unref (child);
6208 create_pane_options (GtkPaned *paned,
6209 const gchar *frame_label,
6210 const gchar *label1,
6211 const gchar *label2)
6216 GtkWidget *check_button;
6218 frame = gtk_frame_new (frame_label);
6219 gtk_container_set_border_width (GTK_CONTAINER (frame), 4);
6221 table = gtk_table_new (3, 2, 4);
6222 gtk_container_add (GTK_CONTAINER (frame), table);
6224 label = gtk_label_new (label1);
6225 gtk_table_attach_defaults (GTK_TABLE (table), label,
6228 check_button = gtk_check_button_new_with_label ("Resize");
6229 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
6231 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
6232 GTK_SIGNAL_FUNC (toggle_resize),
6235 check_button = gtk_check_button_new_with_label ("Shrink");
6236 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
6238 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
6240 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
6241 GTK_SIGNAL_FUNC (toggle_shrink),
6244 label = gtk_label_new (label2);
6245 gtk_table_attach_defaults (GTK_TABLE (table), label,
6248 check_button = gtk_check_button_new_with_label ("Resize");
6249 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
6251 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
6253 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
6254 GTK_SIGNAL_FUNC (toggle_resize),
6257 check_button = gtk_check_button_new_with_label ("Shrink");
6258 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
6260 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
6262 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
6263 GTK_SIGNAL_FUNC (toggle_shrink),
6272 static GtkWidget *window = NULL;
6281 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6283 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6284 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6287 gtk_window_set_title (GTK_WINDOW (window), "Panes");
6288 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6290 vbox = gtk_vbox_new (FALSE, 0);
6291 gtk_container_add (GTK_CONTAINER (window), vbox);
6293 vpaned = gtk_vpaned_new ();
6294 gtk_box_pack_start (GTK_BOX (vbox), vpaned, TRUE, TRUE, 0);
6295 gtk_container_set_border_width (GTK_CONTAINER(vpaned), 5);
6297 hpaned = gtk_hpaned_new ();
6298 gtk_paned_add1 (GTK_PANED (vpaned), hpaned);
6300 frame = gtk_frame_new (NULL);
6301 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
6302 gtk_widget_set_usize (frame, 60, 60);
6303 gtk_paned_add1 (GTK_PANED (hpaned), frame);
6305 button = gtk_button_new_with_label ("Hi there");
6306 gtk_container_add (GTK_CONTAINER(frame), button);
6308 frame = gtk_frame_new (NULL);
6309 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
6310 gtk_widget_set_usize (frame, 80, 60);
6311 gtk_paned_add2 (GTK_PANED (hpaned), frame);
6313 frame = gtk_frame_new (NULL);
6314 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
6315 gtk_widget_set_usize (frame, 60, 80);
6316 gtk_paned_add2 (GTK_PANED (vpaned), frame);
6318 /* Now create toggle buttons to control sizing */
6320 gtk_box_pack_start (GTK_BOX (vbox),
6321 create_pane_options (GTK_PANED (hpaned),
6327 gtk_box_pack_start (GTK_BOX (vbox),
6328 create_pane_options (GTK_PANED (vpaned),
6334 gtk_widget_show_all (vbox);
6337 if (!GTK_WIDGET_VISIBLE (window))
6338 gtk_widget_show (window);
6340 gtk_widget_destroy (window);
6349 dnd_drop_destroy_popup (GtkWidget *widget, GtkWindow **window)
6351 if(GTK_IS_BUTTON(widget)) /* I.e. they clicked the close button */
6352 gtk_widget_destroy(GTK_WIDGET(*window));
6354 gtk_grab_remove(GTK_WIDGET(*window));
6362 dnd_drop (GtkWidget *button, GdkEvent *event)
6364 static GtkWidget *window = NULL;
6365 GtkWidget *vbox, *lbl, *btn;
6368 /* DND doesn't obey gtk_grab's, so check if we're already displaying
6369 * drop modal dialog first
6374 window = gtk_window_new(GTK_WINDOW_DIALOG);
6375 gtk_container_set_border_width (GTK_CONTAINER(window), 10);
6377 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6378 GTK_SIGNAL_FUNC(dnd_drop_destroy_popup),
6380 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
6381 GTK_SIGNAL_FUNC(gtk_false),
6384 vbox = gtk_vbox_new(FALSE, 5);
6386 /* Display message that we got from drop source */
6387 msg = g_malloc(strlen(event->dropdataavailable.data)
6388 + strlen(event->dropdataavailable.data_type) + 100);
6389 sprintf(msg, "Drop data of type %s was:\n\n%s",
6390 event->dropdataavailable.data_type,
6391 (char *)event->dropdataavailable.data);
6392 lbl = gtk_label_new(msg);
6393 gtk_label_set_justify(GTK_LABEL(lbl), GTK_JUSTIFY_FILL);
6395 gtk_widget_show(lbl);
6396 gtk_box_pack_start_defaults(GTK_BOX(vbox), lbl);
6398 /* Provide an obvious way out of this heinousness */
6399 btn = gtk_button_new_with_label("Continue with life in\nspite of this oppression");
6400 gtk_signal_connect_object (GTK_OBJECT (btn), "clicked",
6401 GTK_SIGNAL_FUNC(gtk_widget_destroy),
6402 GTK_OBJECT (window));
6403 gtk_widget_show(btn);
6404 gtk_box_pack_start_defaults(GTK_BOX(vbox), btn);
6406 gtk_container_add(GTK_CONTAINER(window), vbox);
6408 gtk_widget_show(vbox);
6409 gtk_grab_add(window);
6410 gtk_widget_show(window);
6414 dnd_drag_request (GtkWidget *button, GdkEvent *event)
6416 #define DND_STRING "Bill Gates demands royalties for\nyour use of his innovation."
6417 gtk_widget_dnd_data_set (button, event, DND_STRING, strlen(DND_STRING) + 1);
6423 static GtkWidget *window = NULL;
6429 GtkWidget *separator;
6431 /* For clarity... */
6432 char *possible_drag_types[] = {"text/plain"};
6433 char *accepted_drop_types[] = {"text/plain"};
6435 static GtkWidget *drag_icon = NULL;
6436 static GtkWidget *drop_icon = NULL;
6440 GdkPoint hotspot = {5,5};
6444 drag_icon = shape_create_icon ("Modeller.xpm",
6445 440, 140, 0,0, GTK_WINDOW_POPUP);
6447 gtk_signal_connect (GTK_OBJECT (drag_icon), "destroy",
6448 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6451 gtk_widget_hide (drag_icon);
6456 drop_icon = shape_create_icon ("3DRings.xpm",
6457 440, 140, 0,0, GTK_WINDOW_POPUP);
6459 gtk_signal_connect (GTK_OBJECT (drop_icon), "destroy",
6460 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6463 gtk_widget_hide (drop_icon);
6466 gdk_dnd_set_drag_shape(drag_icon->window,
6471 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6473 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6474 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6477 gtk_window_set_title (GTK_WINDOW (window), "Drag -N- Drop");
6478 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6480 box1 = gtk_vbox_new (FALSE, 0);
6481 gtk_container_add (GTK_CONTAINER (window), box1);
6482 gtk_widget_show (box1);
6484 box2 = gtk_hbox_new (FALSE, 5);
6485 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6486 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
6487 gtk_widget_show (box2);
6489 frame = gtk_frame_new ("Drag");
6490 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
6491 gtk_widget_show (frame);
6493 box3 = gtk_vbox_new (FALSE, 5);
6494 gtk_container_set_border_width (GTK_CONTAINER (box3), 5);
6495 gtk_container_add (GTK_CONTAINER (frame), box3);
6496 gtk_widget_show (box3);
6501 button = gtk_button_new_with_label ("Drag me!");
6502 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
6503 gtk_widget_show (button);
6506 * currently, the widget has to be realized to
6507 * set dnd on it, this needs to change
6509 gtk_widget_realize (button);
6510 gtk_signal_connect (GTK_OBJECT (button),
6511 "drag_request_event",
6512 GTK_SIGNAL_FUNC(dnd_drag_request),
6515 gtk_widget_dnd_drag_set (button, TRUE, possible_drag_types, 1);
6518 frame = gtk_frame_new ("Drop");
6519 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
6520 gtk_widget_show (frame);
6522 box3 = gtk_vbox_new (FALSE, 5);
6523 gtk_container_set_border_width (GTK_CONTAINER (box3), 5);
6524 gtk_container_add (GTK_CONTAINER (frame), box3);
6525 gtk_widget_show (box3);
6531 button = gtk_button_new_with_label ("To");
6532 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
6533 gtk_widget_show (button);
6535 gtk_widget_realize (button);
6536 gtk_signal_connect (GTK_OBJECT (button),
6537 "drop_data_available_event",
6538 GTK_SIGNAL_FUNC(dnd_drop),
6541 gtk_widget_dnd_drop_set (button, TRUE, accepted_drop_types, 1, FALSE);
6544 separator = gtk_hseparator_new ();
6545 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
6546 gtk_widget_show (separator);
6549 box2 = gtk_vbox_new (FALSE, 10);
6550 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6551 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6552 gtk_widget_show (box2);
6555 button = gtk_button_new_with_label ("close");
6557 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6558 GTK_SIGNAL_FUNC(gtk_widget_destroy),
6559 GTK_OBJECT (window));
6561 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6562 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6563 gtk_widget_grab_default (button);
6564 gtk_widget_show (button);
6567 if (!GTK_WIDGET_VISIBLE (window))
6568 gtk_widget_show (window);
6570 gtk_widget_destroy (window);
6578 typedef struct _cursoroffset {gint x,y;} CursorOffset;
6581 shape_pressed (GtkWidget *widget, GdkEventButton *event)
6585 /* ignore double and triple click */
6586 if (event->type != GDK_BUTTON_PRESS)
6589 p = gtk_object_get_user_data (GTK_OBJECT(widget));
6590 p->x = (int) event->x;
6591 p->y = (int) event->y;
6593 gtk_grab_add (widget);
6594 gdk_pointer_grab (widget->window, TRUE,
6595 GDK_BUTTON_RELEASE_MASK |
6596 GDK_BUTTON_MOTION_MASK |
6597 GDK_POINTER_MOTION_HINT_MASK,
6602 shape_released (GtkWidget *widget)
6604 gtk_grab_remove (widget);
6605 gdk_pointer_ungrab (0);
6609 shape_motion (GtkWidget *widget,
6610 GdkEventMotion *event)
6614 GdkModifierType mask;
6616 p = gtk_object_get_user_data (GTK_OBJECT (widget));
6619 * Can't use event->x / event->y here
6620 * because I need absolute coordinates.
6622 gdk_window_get_pointer (NULL, &xp, &yp, &mask);
6623 gtk_widget_set_uposition (widget, xp - p->x, yp - p->y);
6627 shape_create_icon (char *xpm_file,
6637 CursorOffset* icon_pos;
6639 GdkBitmap *gdk_pixmap_mask;
6640 GdkPixmap *gdk_pixmap;
6643 style = gtk_widget_get_default_style ();
6644 gc = style->black_gc;
6647 * GDK_WINDOW_TOPLEVEL works also, giving you a title border
6649 window = gtk_window_new (window_type);
6651 fixed = gtk_fixed_new ();
6652 gtk_widget_set_usize (fixed, 100,100);
6653 gtk_container_add (GTK_CONTAINER (window), fixed);
6654 gtk_widget_show (fixed);
6656 gtk_widget_set_events (window,
6657 gtk_widget_get_events (window) |
6658 GDK_BUTTON_MOTION_MASK |
6659 GDK_POINTER_MOTION_HINT_MASK |
6660 GDK_BUTTON_PRESS_MASK);
6662 gtk_widget_realize (window);
6663 gdk_pixmap = gdk_pixmap_create_from_xpm (window->window, &gdk_pixmap_mask,
6664 &style->bg[GTK_STATE_NORMAL],
6667 pixmap = gtk_pixmap_new (gdk_pixmap, gdk_pixmap_mask);
6668 gtk_fixed_put (GTK_FIXED (fixed), pixmap, px,py);
6669 gtk_widget_show (pixmap);
6671 gtk_widget_shape_combine_mask (window, gdk_pixmap_mask, px,py);
6674 gtk_signal_connect (GTK_OBJECT (window), "button_press_event",
6675 GTK_SIGNAL_FUNC (shape_pressed),NULL);
6676 gtk_signal_connect (GTK_OBJECT (window), "button_release_event",
6677 GTK_SIGNAL_FUNC (shape_released),NULL);
6678 gtk_signal_connect (GTK_OBJECT (window), "motion_notify_event",
6679 GTK_SIGNAL_FUNC (shape_motion),NULL);
6681 icon_pos = g_new (CursorOffset, 1);
6682 gtk_object_set_user_data(GTK_OBJECT(window), icon_pos);
6684 gtk_widget_set_uposition (window, x, y);
6685 gtk_widget_show (window);
6691 create_shapes (void)
6693 /* Variables used by the Drag/Drop and Shape Window demos */
6694 static GtkWidget *modeller = NULL;
6695 static GtkWidget *sheets = NULL;
6696 static GtkWidget *rings = NULL;
6700 modeller = shape_create_icon ("Modeller.xpm",
6701 440, 140, 0,0, GTK_WINDOW_POPUP);
6703 gtk_signal_connect (GTK_OBJECT (modeller), "destroy",
6704 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6708 gtk_widget_destroy (modeller);
6712 sheets = shape_create_icon ("FilesQueue.xpm",
6713 580, 170, 0,0, GTK_WINDOW_POPUP);
6715 gtk_signal_connect (GTK_OBJECT (sheets), "destroy",
6716 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6721 gtk_widget_destroy (sheets);
6725 rings = shape_create_icon ("3DRings.xpm",
6726 460, 270, 25,25, GTK_WINDOW_TOPLEVEL);
6728 gtk_signal_connect (GTK_OBJECT (rings), "destroy",
6729 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6733 gtk_widget_destroy (rings);
6741 create_wmhints (void)
6743 static GtkWidget *window = NULL;
6745 GtkWidget *separator;
6754 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6756 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6757 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6760 gtk_window_set_title (GTK_WINDOW (window), "WM Hints");
6761 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6763 gtk_widget_realize (window);
6765 circles = gdk_bitmap_create_from_data (window->window,
6769 gdk_window_set_icon (window->window, NULL,
6772 gdk_window_set_icon_name (window->window, "WMHints Test Icon");
6774 gdk_window_set_decorations (window->window, GDK_DECOR_ALL | GDK_DECOR_MENU);
6775 gdk_window_set_functions (window->window, GDK_FUNC_ALL | GDK_FUNC_RESIZE);
6777 box1 = gtk_vbox_new (FALSE, 0);
6778 gtk_container_add (GTK_CONTAINER (window), box1);
6779 gtk_widget_show (box1);
6781 label = gtk_label_new ("Try iconizing me!");
6782 gtk_widget_set_usize (label, 150, 50);
6783 gtk_box_pack_start (GTK_BOX (box1), label, TRUE, TRUE, 0);
6784 gtk_widget_show (label);
6787 separator = gtk_hseparator_new ();
6788 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
6789 gtk_widget_show (separator);
6792 box2 = gtk_vbox_new (FALSE, 10);
6793 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6794 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6795 gtk_widget_show (box2);
6798 button = gtk_button_new_with_label ("close");
6800 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6801 GTK_SIGNAL_FUNC(gtk_widget_destroy),
6802 GTK_OBJECT (window));
6804 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6805 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6806 gtk_widget_grab_default (button);
6807 gtk_widget_show (button);
6810 if (!GTK_WIDGET_VISIBLE (window))
6811 gtk_widget_show (window);
6813 gtk_widget_destroy (window);
6820 typedef struct _ProgressData {
6823 GtkWidget *block_spin;
6824 GtkWidget *x_align_spin;
6825 GtkWidget *y_align_spin;
6826 GtkWidget *step_spin;
6827 GtkWidget *act_blocks_spin;
6836 progress_timeout (gpointer data)
6841 adj = GTK_PROGRESS (data)->adjustment;
6843 new_val = adj->value + 1;
6844 if (new_val > adj->upper)
6845 new_val = adj->lower;
6847 gtk_progress_set_value (GTK_PROGRESS (data), new_val);
6853 destroy_progress (GtkWidget *widget,
6854 ProgressData **pdata)
6856 gtk_timeout_remove ((*pdata)->timer);
6857 (*pdata)->timer = 0;
6858 (*pdata)->window = NULL;
6864 progressbar_toggle_orientation (GtkWidget *widget, ProgressData *pdata)
6868 if (!GTK_WIDGET_MAPPED (widget))
6871 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
6872 (((GtkOptionMenu *)(pdata->omenu1))->menu_item), i);
6874 gtk_progress_bar_set_orientation (GTK_PROGRESS_BAR (pdata->pbar),
6875 (GtkProgressBarOrientation) (3-i));
6879 toggle_show_text (GtkWidget *widget, ProgressData *pdata)
6881 gtk_progress_set_show_text (GTK_PROGRESS (pdata->pbar),
6882 GTK_TOGGLE_BUTTON (widget)->active);
6883 gtk_widget_set_sensitive (pdata->entry, GTK_TOGGLE_BUTTON (widget)->active);
6884 gtk_widget_set_sensitive (pdata->x_align_spin,
6885 GTK_TOGGLE_BUTTON (widget)->active);
6886 gtk_widget_set_sensitive (pdata->y_align_spin,
6887 GTK_TOGGLE_BUTTON (widget)->active);
6891 progressbar_toggle_bar_style (GtkWidget *widget, ProgressData *pdata)
6895 if (!GTK_WIDGET_MAPPED (widget))
6898 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
6899 (((GtkOptionMenu *)(pdata->omenu2))->menu_item), i);
6904 gtk_widget_set_sensitive (pdata->block_spin, TRUE);
6906 gtk_widget_set_sensitive (pdata->block_spin, FALSE);
6908 gtk_progress_bar_set_bar_style (GTK_PROGRESS_BAR (pdata->pbar),
6909 (GtkProgressBarStyle) i);
6913 progress_value_changed (GtkAdjustment *adj, ProgressData *pdata)
6917 if (GTK_PROGRESS (pdata->pbar)->activity_mode)
6918 sprintf (buf, "???");
6920 sprintf (buf, "%.0f%%", 100 *
6921 gtk_progress_get_current_percentage (GTK_PROGRESS (pdata->pbar)));
6922 gtk_label_set_text (GTK_LABEL (pdata->label), buf);
6926 adjust_blocks (GtkAdjustment *adj, ProgressData *pdata)
6928 gtk_progress_set_percentage (GTK_PROGRESS (pdata->pbar), 0);
6929 gtk_progress_bar_set_discrete_blocks (GTK_PROGRESS_BAR (pdata->pbar),
6930 gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (pdata->block_spin)));
6934 adjust_step (GtkAdjustment *adj, ProgressData *pdata)
6936 gtk_progress_bar_set_activity_step (GTK_PROGRESS_BAR (pdata->pbar),
6937 gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (pdata->step_spin)));
6941 adjust_act_blocks (GtkAdjustment *adj, ProgressData *pdata)
6943 gtk_progress_bar_set_activity_blocks (GTK_PROGRESS_BAR (pdata->pbar),
6944 gtk_spin_button_get_value_as_int
6945 (GTK_SPIN_BUTTON (pdata->act_blocks_spin)));
6949 adjust_align (GtkAdjustment *adj, ProgressData *pdata)
6951 gtk_progress_set_text_alignment (GTK_PROGRESS (pdata->pbar),
6952 gtk_spin_button_get_value_as_float
6953 (GTK_SPIN_BUTTON (pdata->x_align_spin)),
6954 gtk_spin_button_get_value_as_float
6955 (GTK_SPIN_BUTTON (pdata->y_align_spin)));
6959 toggle_activity_mode (GtkWidget *widget, ProgressData *pdata)
6961 gtk_progress_set_activity_mode (GTK_PROGRESS (pdata->pbar),
6962 GTK_TOGGLE_BUTTON (widget)->active);
6963 gtk_widget_set_sensitive (pdata->step_spin,
6964 GTK_TOGGLE_BUTTON (widget)->active);
6965 gtk_widget_set_sensitive (pdata->act_blocks_spin,
6966 GTK_TOGGLE_BUTTON (widget)->active);
6970 entry_changed (GtkWidget *widget, ProgressData *pdata)
6972 gtk_progress_set_format_string (GTK_PROGRESS (pdata->pbar),
6973 gtk_entry_get_text (GTK_ENTRY (pdata->entry)));
6977 create_progress_bar (void)
6989 static ProgressData *pdata = NULL;
6991 static OptionMenuItem items1[] =
6993 { "Left-Right", progressbar_toggle_orientation },
6994 { "Right-Left", progressbar_toggle_orientation },
6995 { "Bottom-Top", progressbar_toggle_orientation },
6996 { "Top-Bottom", progressbar_toggle_orientation }
6999 static OptionMenuItem items2[] =
7001 { "Continuous", progressbar_toggle_bar_style },
7002 { "Discrete", progressbar_toggle_bar_style }
7006 pdata = g_new0 (ProgressData, 1);
7010 pdata->window = gtk_dialog_new ();
7012 gtk_window_set_policy (GTK_WINDOW (pdata->window), FALSE, FALSE, TRUE);
7014 gtk_signal_connect (GTK_OBJECT (pdata->window), "destroy",
7015 GTK_SIGNAL_FUNC (destroy_progress),
7020 gtk_window_set_title (GTK_WINDOW (pdata->window), "GtkProgressBar");
7021 gtk_container_set_border_width (GTK_CONTAINER (pdata->window), 0);
7023 vbox = gtk_vbox_new (FALSE, 5);
7024 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
7025 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (pdata->window)->vbox),
7026 vbox, FALSE, TRUE, 0);
7028 frame = gtk_frame_new ("Progress");
7029 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
7031 vbox2 = gtk_vbox_new (FALSE, 5);
7032 gtk_container_add (GTK_CONTAINER (frame), vbox2);
7034 align = gtk_alignment_new (0.5, 0.5, 0, 0);
7035 gtk_box_pack_start (GTK_BOX (vbox2), align, FALSE, FALSE, 5);
7037 adj = (GtkAdjustment *) gtk_adjustment_new (0, 1, 300, 0, 0, 0);
7038 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
7039 GTK_SIGNAL_FUNC (progress_value_changed), pdata);
7041 pdata->pbar = gtk_progress_bar_new_with_adjustment (adj);
7042 gtk_progress_set_format_string (GTK_PROGRESS (pdata->pbar),
7043 "%v from [%l,%u] (=%p%%)");
7044 gtk_container_add (GTK_CONTAINER (align), pdata->pbar);
7045 pdata->timer = gtk_timeout_add (100, progress_timeout, pdata->pbar);
7047 align = gtk_alignment_new (0.5, 0.5, 0, 0);
7048 gtk_box_pack_start (GTK_BOX (vbox2), align, FALSE, FALSE, 5);
7050 hbox = gtk_hbox_new (FALSE, 5);
7051 gtk_container_add (GTK_CONTAINER (align), hbox);
7052 label = gtk_label_new ("Label updated by user :");
7053 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
7054 pdata->label = gtk_label_new ("");
7055 gtk_box_pack_start (GTK_BOX (hbox), pdata->label, FALSE, TRUE, 0);
7057 frame = gtk_frame_new ("Options");
7058 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
7060 vbox2 = gtk_vbox_new (FALSE, 5);
7061 gtk_container_add (GTK_CONTAINER (frame), vbox2);
7063 tab = gtk_table_new (7, 2, FALSE);
7064 gtk_box_pack_start (GTK_BOX (vbox2), tab, FALSE, TRUE, 0);
7066 label = gtk_label_new ("Orientation :");
7067 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 0, 1,
7068 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7070 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
7072 pdata->omenu1 = build_option_menu (items1, 4, 0, pdata);
7073 hbox = gtk_hbox_new (FALSE, 0);
7074 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 0, 1,
7075 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7077 gtk_box_pack_start (GTK_BOX (hbox), pdata->omenu1, TRUE, TRUE, 0);
7079 check = gtk_check_button_new_with_label ("Show text");
7080 gtk_signal_connect (GTK_OBJECT (check), "clicked",
7081 GTK_SIGNAL_FUNC (toggle_show_text),
7083 gtk_table_attach (GTK_TABLE (tab), check, 0, 1, 1, 2,
7084 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7087 hbox = gtk_hbox_new (FALSE, 0);
7088 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 1, 2,
7089 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7092 label = gtk_label_new ("Format : ");
7093 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
7095 pdata->entry = gtk_entry_new ();
7096 gtk_signal_connect (GTK_OBJECT (pdata->entry), "changed",
7097 GTK_SIGNAL_FUNC (entry_changed),
7099 gtk_box_pack_start (GTK_BOX (hbox), pdata->entry, TRUE, TRUE, 0);
7100 gtk_entry_set_text (GTK_ENTRY (pdata->entry), "%v from [%l,%u] (=%p%%)");
7101 gtk_widget_set_usize (pdata->entry, 100, -1);
7102 gtk_widget_set_sensitive (pdata->entry, FALSE);
7104 label = gtk_label_new ("Text align :");
7105 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 2, 3,
7106 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7108 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
7110 hbox = gtk_hbox_new (FALSE, 0);
7111 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 2, 3,
7112 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7115 label = gtk_label_new ("x :");
7116 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 5);
7118 adj = (GtkAdjustment *) gtk_adjustment_new (0.5, 0, 1, 0.1, 0.1, 0);
7119 pdata->x_align_spin = gtk_spin_button_new (adj, 0, 1);
7120 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
7121 GTK_SIGNAL_FUNC (adjust_align), pdata);
7122 gtk_box_pack_start (GTK_BOX (hbox), pdata->x_align_spin, FALSE, TRUE, 0);
7123 gtk_widget_set_sensitive (pdata->x_align_spin, FALSE);
7125 label = gtk_label_new ("y :");
7126 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 5);
7128 adj = (GtkAdjustment *) gtk_adjustment_new (0.5, 0, 1, 0.1, 0.1, 0);
7129 pdata->y_align_spin = gtk_spin_button_new (adj, 0, 1);
7130 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
7131 GTK_SIGNAL_FUNC (adjust_align), pdata);
7132 gtk_box_pack_start (GTK_BOX (hbox), pdata->y_align_spin, FALSE, TRUE, 0);
7133 gtk_widget_set_sensitive (pdata->y_align_spin, FALSE);
7135 label = gtk_label_new ("Bar Style :");
7136 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 3, 4,
7137 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7139 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
7141 pdata->omenu2 = build_option_menu (items2, 2, 0, pdata);
7142 hbox = gtk_hbox_new (FALSE, 0);
7143 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 3, 4,
7144 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7146 gtk_box_pack_start (GTK_BOX (hbox), pdata->omenu2, TRUE, TRUE, 0);
7148 label = gtk_label_new ("Block count :");
7149 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 4, 5,
7150 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7152 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
7154 hbox = gtk_hbox_new (FALSE, 0);
7155 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 4, 5,
7156 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7158 adj = (GtkAdjustment *) gtk_adjustment_new (10, 2, 20, 1, 5, 0);
7159 pdata->block_spin = gtk_spin_button_new (adj, 0, 0);
7160 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
7161 GTK_SIGNAL_FUNC (adjust_blocks), pdata);
7162 gtk_box_pack_start (GTK_BOX (hbox), pdata->block_spin, FALSE, TRUE, 0);
7163 gtk_widget_set_sensitive (pdata->block_spin, FALSE);
7165 check = gtk_check_button_new_with_label ("Activity mode");
7166 gtk_signal_connect (GTK_OBJECT (check), "clicked",
7167 GTK_SIGNAL_FUNC (toggle_activity_mode),
7169 gtk_table_attach (GTK_TABLE (tab), check, 0, 1, 5, 6,
7170 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7173 hbox = gtk_hbox_new (FALSE, 0);
7174 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 5, 6,
7175 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7177 label = gtk_label_new ("Step size : ");
7178 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
7179 adj = (GtkAdjustment *) gtk_adjustment_new (3, 1, 20, 1, 5, 0);
7180 pdata->step_spin = gtk_spin_button_new (adj, 0, 0);
7181 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
7182 GTK_SIGNAL_FUNC (adjust_step), pdata);
7183 gtk_box_pack_start (GTK_BOX (hbox), pdata->step_spin, FALSE, TRUE, 0);
7184 gtk_widget_set_sensitive (pdata->step_spin, FALSE);
7186 hbox = gtk_hbox_new (FALSE, 0);
7187 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 6, 7,
7188 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7190 label = gtk_label_new ("Blocks : ");
7191 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
7192 adj = (GtkAdjustment *) gtk_adjustment_new (5, 2, 10, 1, 5, 0);
7193 pdata->act_blocks_spin = gtk_spin_button_new (adj, 0, 0);
7194 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
7195 GTK_SIGNAL_FUNC (adjust_act_blocks), pdata);
7196 gtk_box_pack_start (GTK_BOX (hbox), pdata->act_blocks_spin, FALSE, TRUE,
7198 gtk_widget_set_sensitive (pdata->act_blocks_spin, FALSE);
7200 button = gtk_button_new_with_label ("close");
7201 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7202 GTK_SIGNAL_FUNC (gtk_widget_destroy),
7203 GTK_OBJECT (pdata->window));
7204 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7205 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (pdata->window)->action_area),
7206 button, TRUE, TRUE, 0);
7207 gtk_widget_grab_default (button);
7210 if (!GTK_WIDGET_VISIBLE (pdata->window))
7211 gtk_widget_show_all (pdata->window);
7213 gtk_widget_destroy (pdata->window);
7220 static int color_idle = 0;
7223 color_idle_func (GtkWidget *preview)
7225 static int count = 1;
7229 for (i = 0; i < 256; i++)
7231 for (j = 0, k = 0; j < 256; j++)
7233 buf[k+0] = i + count;
7235 buf[k+2] = j + count;
7239 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
7244 gtk_widget_draw (preview, NULL);
7250 color_preview_destroy (GtkWidget *widget,
7253 gtk_idle_remove (color_idle);
7260 create_color_preview (void)
7262 static GtkWidget *window = NULL;
7269 gtk_widget_push_visual (gdk_rgb_get_visual ());
7270 gtk_widget_push_colormap (gdk_rgb_get_cmap ());
7271 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7272 gtk_widget_pop_colormap ();
7273 gtk_widget_pop_visual ();
7275 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7276 GTK_SIGNAL_FUNC(color_preview_destroy),
7279 gtk_window_set_title (GTK_WINDOW (window), "test");
7280 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
7282 preview = gtk_preview_new (GTK_PREVIEW_COLOR);
7283 gtk_preview_size (GTK_PREVIEW (preview), 256, 256);
7284 gtk_container_add (GTK_CONTAINER (window), preview);
7286 for (i = 0; i < 256; i++)
7288 for (j = 0, k = 0; j < 256; j++)
7296 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
7299 color_idle = gtk_idle_add ((GtkFunction) color_idle_func, preview);
7302 if (!GTK_WIDGET_VISIBLE (window))
7303 gtk_widget_show_all (window);
7305 gtk_widget_destroy (window);
7312 static int gray_idle = 0;
7315 gray_idle_func (GtkWidget *preview)
7317 static int count = 1;
7321 for (i = 0; i < 256; i++)
7323 for (j = 0; j < 256; j++)
7324 buf[j] = i + j + count;
7326 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
7331 gtk_widget_draw (preview, NULL);
7337 gray_preview_destroy (GtkWidget *widget,
7340 gtk_idle_remove (gray_idle);
7347 create_gray_preview (void)
7349 static GtkWidget *window = NULL;
7356 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7358 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7359 GTK_SIGNAL_FUNC(gray_preview_destroy),
7362 gtk_window_set_title (GTK_WINDOW (window), "test");
7363 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
7365 preview = gtk_preview_new (GTK_PREVIEW_GRAYSCALE);
7366 gtk_preview_size (GTK_PREVIEW (preview), 256, 256);
7367 gtk_container_add (GTK_CONTAINER (window), preview);
7369 for (i = 0; i < 256; i++)
7371 for (j = 0; j < 256; j++)
7374 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
7377 gray_idle = gtk_idle_add ((GtkFunction) gray_idle_func, preview);
7380 if (!GTK_WIDGET_VISIBLE (window))
7381 gtk_widget_show_all (window);
7383 gtk_widget_destroy (window);
7392 selection_test_received (GtkWidget *list, GtkSelectionData *data)
7395 GtkWidget *list_item;
7399 if (data->length < 0)
7401 g_print ("Selection retrieval failed\n");
7404 if (data->type != GDK_SELECTION_TYPE_ATOM)
7406 g_print ("Selection \"TARGETS\" was not returned as atoms!\n");
7410 /* Clear out any current list items */
7412 gtk_list_clear_items (GTK_LIST(list), 0, -1);
7414 /* Add new items to list */
7416 atoms = (GdkAtom *)data->data;
7419 l = data->length / sizeof (GdkAtom);
7420 for (i = 0; i < l; i++)
7423 name = gdk_atom_name (atoms[i]);
7426 list_item = gtk_list_item_new_with_label (name);
7430 list_item = gtk_list_item_new_with_label ("(bad atom)");
7432 gtk_widget_show (list_item);
7433 item_list = g_list_append (item_list, list_item);
7436 gtk_list_append_items (GTK_LIST (list), item_list);
7442 selection_test_get_targets (GtkWidget *widget, GtkWidget *list)
7444 static GdkAtom targets_atom = GDK_NONE;
7446 if (targets_atom == GDK_NONE)
7447 targets_atom = gdk_atom_intern ("TARGETS", FALSE);
7449 gtk_selection_convert (list, GDK_SELECTION_PRIMARY, targets_atom,
7454 create_selection_test (void)
7456 static GtkWidget *window = NULL;
7459 GtkWidget *scrolled_win;
7465 window = gtk_dialog_new ();
7467 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7468 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7471 gtk_window_set_title (GTK_WINDOW (window), "Selection Test");
7472 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
7474 /* Create the list */
7476 vbox = gtk_vbox_new (FALSE, 5);
7477 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
7478 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), vbox,
7481 label = gtk_label_new ("Gets available targets for current selection");
7482 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
7484 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
7485 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
7486 GTK_POLICY_AUTOMATIC,
7487 GTK_POLICY_AUTOMATIC);
7488 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
7489 gtk_widget_set_usize (scrolled_win, 100, 200);
7491 list = gtk_list_new ();
7492 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_win), list);
7494 gtk_signal_connect (GTK_OBJECT(list), "selection_received",
7495 GTK_SIGNAL_FUNC (selection_test_received), NULL);
7497 /* .. And create some buttons */
7498 button = gtk_button_new_with_label ("Get Targets");
7499 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7500 button, TRUE, TRUE, 0);
7502 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7503 GTK_SIGNAL_FUNC (selection_test_get_targets), list);
7505 button = gtk_button_new_with_label ("Quit");
7506 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7507 button, TRUE, TRUE, 0);
7509 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7510 GTK_SIGNAL_FUNC (gtk_widget_destroy),
7511 GTK_OBJECT (window));
7514 if (!GTK_WIDGET_VISIBLE (window))
7515 gtk_widget_show_all (window);
7517 gtk_widget_destroy (window);
7525 create_gamma_curve (void)
7527 static GtkWidget *window = NULL, *curve;
7528 static int count = 0;
7535 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7536 gtk_window_set_title (GTK_WINDOW (window), "test");
7537 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
7539 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7540 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7543 curve = gtk_gamma_curve_new ();
7544 gtk_container_add (GTK_CONTAINER (window), curve);
7545 gtk_widget_show (curve);
7548 max = 127 + (count % 2)*128;
7549 gtk_curve_set_range (GTK_CURVE (GTK_GAMMA_CURVE (curve)->curve),
7551 for (i = 0; i < max; ++i)
7552 vec[i] = (127 / sqrt (max)) * sqrt (i);
7553 gtk_curve_set_vector (GTK_CURVE (GTK_GAMMA_CURVE (curve)->curve),
7556 if (!GTK_WIDGET_VISIBLE (window))
7557 gtk_widget_show (window);
7558 else if (count % 4 == 3)
7560 gtk_widget_destroy (window);
7571 static int scroll_test_pos = 0.0;
7572 static GdkGC *scroll_test_gc = NULL;
7575 scroll_test_expose (GtkWidget *widget, GdkEventExpose *event,
7579 gint imin, imax, jmin, jmax;
7581 imin = (event->area.x) / 10;
7582 imax = (event->area.x + event->area.width + 9) / 10;
7584 jmin = ((int)adj->value + event->area.y) / 10;
7585 jmax = ((int)adj->value + event->area.y + event->area.height + 9) / 10;
7587 gdk_window_clear_area (widget->window,
7588 event->area.x, event->area.y,
7589 event->area.width, event->area.height);
7591 for (i=imin; i<imax; i++)
7592 for (j=jmin; j<jmax; j++)
7594 gdk_draw_rectangle (widget->window,
7595 widget->style->black_gc,
7597 10*i, 10*j - (int)adj->value, 1+i%10, 1+j%10);
7603 scroll_test_configure (GtkWidget *widget, GdkEventConfigure *event,
7606 adj->page_increment = 0.9 * widget->allocation.height;
7607 adj->page_size = widget->allocation.height;
7609 gtk_signal_emit_by_name (GTK_OBJECT (adj), "changed");
7613 scroll_test_adjustment_changed (GtkAdjustment *adj, GtkWidget *widget)
7615 gint source_min = (int)adj->value - scroll_test_pos;
7616 gint source_max = source_min + widget->allocation.height;
7618 gint dest_max = widget->allocation.height;
7622 scroll_test_pos = adj->value;
7624 if (!GTK_WIDGET_DRAWABLE (widget))
7631 rect.width = widget->allocation.width;
7632 rect.height = -source_min;
7633 if (rect.height > widget->allocation.height)
7634 rect.height = widget->allocation.height;
7637 dest_min = rect.height;
7642 rect.y = 2*widget->allocation.height - source_max;
7645 rect.width = widget->allocation.width;
7646 rect.height = widget->allocation.height - rect.y;
7648 source_max = widget->allocation.height;
7652 if (source_min != source_max)
7654 if (scroll_test_gc == NULL)
7656 scroll_test_gc = gdk_gc_new (widget->window);
7657 gdk_gc_set_exposures (scroll_test_gc, TRUE);
7660 gdk_draw_pixmap (widget->window,
7665 widget->allocation.width,
7666 source_max - source_min);
7668 /* Make sure graphics expose events are processed before scrolling
7671 while ((event = gdk_event_get_graphics_expose (widget->window)) != NULL)
7673 gtk_widget_event (widget, event);
7674 if (event->expose.count == 0)
7676 gdk_event_free (event);
7679 gdk_event_free (event);
7683 if (rect.height != 0)
7684 gtk_widget_draw (widget, &rect);
7689 create_scroll_test (void)
7691 static GtkWidget *window = NULL;
7693 GtkWidget *drawing_area;
7694 GtkWidget *scrollbar;
7697 GdkGeometry geometry;
7698 GdkWindowHints geometry_mask;
7702 window = gtk_dialog_new ();
7704 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7705 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7708 gtk_window_set_title (GTK_WINDOW (window), "Scroll Test");
7709 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
7711 hbox = gtk_hbox_new (FALSE, 0);
7712 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), hbox,
7714 gtk_widget_show (hbox);
7716 drawing_area = gtk_drawing_area_new ();
7717 gtk_drawing_area_size (GTK_DRAWING_AREA (drawing_area), 200, 200);
7718 gtk_box_pack_start (GTK_BOX (hbox), drawing_area, TRUE, TRUE, 0);
7719 gtk_widget_show (drawing_area);
7721 gtk_widget_set_events (drawing_area, GDK_EXPOSURE_MASK);
7723 adj = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.0, 1000.0, 1.0, 180.0, 200.0));
7724 scroll_test_pos = 0.0;
7726 scrollbar = gtk_vscrollbar_new (adj);
7727 gtk_box_pack_start (GTK_BOX (hbox), scrollbar, FALSE, FALSE, 0);
7728 gtk_widget_show (scrollbar);
7730 gtk_signal_connect (GTK_OBJECT (drawing_area), "expose_event",
7731 GTK_SIGNAL_FUNC (scroll_test_expose), adj);
7732 gtk_signal_connect (GTK_OBJECT (drawing_area), "configure_event",
7733 GTK_SIGNAL_FUNC (scroll_test_configure), adj);
7736 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
7737 GTK_SIGNAL_FUNC (scroll_test_adjustment_changed),
7740 /* .. And create some buttons */
7742 button = gtk_button_new_with_label ("Quit");
7743 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7744 button, TRUE, TRUE, 0);
7746 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7747 GTK_SIGNAL_FUNC (gtk_widget_destroy),
7748 GTK_OBJECT (window));
7749 gtk_widget_show (button);
7751 /* Set up gridded geometry */
7753 geometry_mask = GDK_HINT_MIN_SIZE |
7754 GDK_HINT_BASE_SIZE |
7755 GDK_HINT_RESIZE_INC;
7757 geometry.min_width = 20;
7758 geometry.min_height = 20;
7759 geometry.base_width = 0;
7760 geometry.base_height = 0;
7761 geometry.width_inc = 10;
7762 geometry.height_inc = 10;
7764 gtk_window_set_geometry_hints (GTK_WINDOW (window),
7765 drawing_area, &geometry, geometry_mask);
7768 if (!GTK_WIDGET_VISIBLE (window))
7769 gtk_widget_show (window);
7771 gtk_widget_destroy (window);
7778 static int timer = 0;
7781 timeout_test (GtkWidget *label)
7783 static int count = 0;
7784 static char buffer[32];
7786 sprintf (buffer, "count: %d", ++count);
7787 gtk_label_set_text (GTK_LABEL (label), buffer);
7793 start_timeout_test (GtkWidget *widget,
7798 timer = gtk_timeout_add (100, (GtkFunction) timeout_test, label);
7803 stop_timeout_test (GtkWidget *widget,
7808 gtk_timeout_remove (timer);
7814 destroy_timeout_test (GtkWidget *widget,
7817 stop_timeout_test (NULL, NULL);
7823 create_timeout_test (void)
7825 static GtkWidget *window = NULL;
7831 window = gtk_dialog_new ();
7833 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7834 GTK_SIGNAL_FUNC(destroy_timeout_test),
7837 gtk_window_set_title (GTK_WINDOW (window), "Timeout Test");
7838 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
7840 label = gtk_label_new ("count: 0");
7841 gtk_misc_set_padding (GTK_MISC (label), 10, 10);
7842 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
7843 label, TRUE, TRUE, 0);
7844 gtk_widget_show (label);
7846 button = gtk_button_new_with_label ("close");
7847 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7848 GTK_SIGNAL_FUNC(gtk_widget_destroy),
7849 GTK_OBJECT (window));
7850 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7851 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7852 button, TRUE, TRUE, 0);
7853 gtk_widget_grab_default (button);
7854 gtk_widget_show (button);
7856 button = gtk_button_new_with_label ("start");
7857 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7858 GTK_SIGNAL_FUNC(start_timeout_test),
7860 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7861 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7862 button, TRUE, TRUE, 0);
7863 gtk_widget_show (button);
7865 button = gtk_button_new_with_label ("stop");
7866 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7867 GTK_SIGNAL_FUNC(stop_timeout_test),
7869 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7870 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7871 button, TRUE, TRUE, 0);
7872 gtk_widget_show (button);
7875 if (!GTK_WIDGET_VISIBLE (window))
7876 gtk_widget_show (window);
7878 gtk_widget_destroy (window);
7885 static int idle = 0;
7888 idle_test (GtkWidget *label)
7890 static int count = 0;
7891 static char buffer[32];
7893 sprintf (buffer, "count: %d", ++count);
7894 gtk_label_set_text (GTK_LABEL (label), buffer);
7900 start_idle_test (GtkWidget *widget,
7905 idle = gtk_idle_add ((GtkFunction) idle_test, label);
7910 stop_idle_test (GtkWidget *widget,
7915 gtk_idle_remove (idle);
7921 destroy_idle_test (GtkWidget *widget,
7924 stop_idle_test (NULL, NULL);
7930 toggle_idle_container (GtkObject *button,
7931 GtkContainer *container)
7933 gtk_container_set_resize_mode (container, GPOINTER_TO_INT (gtk_object_get_user_data (button)));
7937 create_idle_test (void)
7939 static GtkWidget *window = NULL;
7942 GtkWidget *container;
7949 window = gtk_dialog_new ();
7951 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7952 GTK_SIGNAL_FUNC(destroy_idle_test),
7955 gtk_window_set_title (GTK_WINDOW (window), "Idle Test");
7956 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
7958 label = gtk_label_new ("count: 0");
7959 gtk_misc_set_padding (GTK_MISC (label), 10, 10);
7960 gtk_widget_show (label);
7963 gtk_widget_new (GTK_TYPE_HBOX,
7964 "GtkWidget::visible", TRUE,
7965 /* "GtkContainer::child", gtk_widget_new (GTK_TYPE_HBOX,
7966 * "GtkWidget::visible", TRUE,
7968 "GtkContainer::child", label,
7971 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
7972 container, TRUE, TRUE, 0);
7975 gtk_widget_new (GTK_TYPE_FRAME,
7976 "GtkContainer::border_width", 5,
7977 "GtkFrame::label", "Label Container",
7978 "GtkWidget::visible", TRUE,
7979 "GtkWidget::parent", GTK_DIALOG (window)->vbox,
7982 gtk_widget_new (GTK_TYPE_VBOX,
7983 "GtkWidget::visible", TRUE,
7984 "GtkWidget::parent", frame,
7987 gtk_widget_new (GTK_TYPE_RADIO_BUTTON,
7988 "GtkButton::label", "Resize-Parent",
7989 "GtkObject::user_data", (void*)GTK_RESIZE_PARENT,
7990 "GtkObject::signal::clicked", toggle_idle_container, container,
7991 "GtkWidget::visible", TRUE,
7992 "GtkWidget::parent", box,
7995 gtk_widget_new (GTK_TYPE_RADIO_BUTTON,
7996 "GtkButton::label", "Resize-Queue",
7997 "GtkObject::user_data", (void*)GTK_RESIZE_QUEUE,
7998 "GtkObject::signal::clicked", toggle_idle_container, container,
7999 "GtkRadioButton::group", button,
8000 "GtkWidget::visible", TRUE,
8001 "GtkWidget::parent", box,
8004 gtk_widget_new (GTK_TYPE_RADIO_BUTTON,
8005 "GtkButton::label", "Resize-Immediate",
8006 "GtkObject::user_data", (void*)GTK_RESIZE_IMMEDIATE,
8007 "GtkObject::signal::clicked", toggle_idle_container, container,
8008 "GtkRadioButton::group", button,
8009 "GtkWidget::visible", TRUE,
8010 "GtkWidget::parent", box,
8014 button = gtk_button_new_with_label ("close");
8015 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
8016 GTK_SIGNAL_FUNC(gtk_widget_destroy),
8017 GTK_OBJECT (window));
8018 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8019 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8020 button, TRUE, TRUE, 0);
8021 gtk_widget_grab_default (button);
8022 gtk_widget_show (button);
8024 button = gtk_button_new_with_label ("start");
8025 gtk_signal_connect (GTK_OBJECT (button), "clicked",
8026 GTK_SIGNAL_FUNC(start_idle_test),
8028 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8029 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8030 button, TRUE, TRUE, 0);
8031 gtk_widget_show (button);
8033 button = gtk_button_new_with_label ("stop");
8034 gtk_signal_connect (GTK_OBJECT (button), "clicked",
8035 GTK_SIGNAL_FUNC(stop_idle_test),
8037 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8038 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8039 button, TRUE, TRUE, 0);
8040 gtk_widget_show (button);
8043 if (!GTK_WIDGET_VISIBLE (window))
8044 gtk_widget_show (window);
8046 gtk_widget_destroy (window);
8054 reload_rc_file (void)
8058 if (gtk_rc_reparse_all ())
8060 toplevels = gdk_window_get_toplevels();
8064 gdk_window_get_user_data (toplevels->data, (gpointer *)&widget);
8067 gtk_widget_reset_rc_styles (widget);
8069 toplevels = toplevels->next;
8071 g_list_free (toplevels);
8076 reload_all_rc_files (void)
8078 static GdkAtom atom_rcfiles = GDK_NONE;
8084 atom_rcfiles = gdk_atom_intern("_GTK_READ_RCFILES", FALSE);
8086 for(i = 0; i < 5; i++)
8088 sev.data_format = 32;
8089 sev.message_type = atom_rcfiles;
8090 gdk_event_send_clientmessage_toall ((GdkEvent *) &sev);
8094 create_rc_file (void)
8096 static GtkWidget *window = NULL;
8101 window = gtk_dialog_new ();
8103 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8104 GTK_SIGNAL_FUNC(destroy_idle_test),
8107 gtk_window_set_title (GTK_WINDOW (window), "Reload Rc file");
8108 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
8110 button = gtk_button_new_with_label ("Reload");
8111 gtk_signal_connect (GTK_OBJECT (button), "clicked",
8112 GTK_SIGNAL_FUNC(reload_rc_file), NULL);
8113 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8114 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8115 button, TRUE, TRUE, 0);
8116 gtk_widget_grab_default (button);
8117 gtk_widget_show (button);
8119 button = gtk_button_new_with_label ("Reload All");
8120 gtk_signal_connect (GTK_OBJECT (button), "clicked",
8121 GTK_SIGNAL_FUNC(reload_all_rc_files), NULL);
8122 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8123 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8124 button, TRUE, TRUE, 0);
8125 gtk_widget_show (button);
8127 button = gtk_button_new_with_label ("Close");
8128 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
8129 GTK_SIGNAL_FUNC(gtk_widget_destroy),
8130 GTK_OBJECT (window));
8131 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8132 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8133 button, TRUE, TRUE, 0);
8134 gtk_widget_show (button);
8138 if (!GTK_WIDGET_VISIBLE (window))
8139 gtk_widget_show (window);
8141 gtk_widget_destroy (window);
8145 * Test of recursive mainloop
8149 mainloop_destroyed (GtkWidget *w, GtkWidget **window)
8156 create_mainloop (void)
8158 static GtkWidget *window = NULL;
8164 window = gtk_dialog_new ();
8166 gtk_window_set_title (GTK_WINDOW (window), "Test Main Loop");
8168 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8169 GTK_SIGNAL_FUNC(mainloop_destroyed),
8172 label = gtk_label_new ("In recursive main loop...");
8173 gtk_misc_set_padding (GTK_MISC(label), 20, 20);
8175 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), label,
8177 gtk_widget_show (label);
8179 button = gtk_button_new_with_label ("Leave");
8180 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area), button,
8183 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
8184 GTK_SIGNAL_FUNC (gtk_widget_destroy),
8185 GTK_OBJECT (window));
8187 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8188 gtk_widget_grab_default (button);
8190 gtk_widget_show (button);
8193 if (!GTK_WIDGET_VISIBLE (window))
8195 gtk_widget_show (window);
8197 g_print ("create_mainloop: start\n");
8199 g_print ("create_mainloop: done\n");
8202 gtk_widget_destroy (window);
8206 layout_expose_handler (GtkWidget *widget, GdkEventExpose *event)
8211 gint imin, imax, jmin, jmax;
8213 layout = GTK_LAYOUT (widget);
8215 imin = (layout->xoffset + event->area.x) / 10;
8216 imax = (layout->xoffset + event->area.x + event->area.width + 9) / 10;
8218 jmin = (layout->yoffset + event->area.y) / 10;
8219 jmax = (layout->yoffset + event->area.y + event->area.height + 9) / 10;
8221 gdk_window_clear_area (widget->window,
8222 event->area.x, event->area.y,
8223 event->area.width, event->area.height);
8225 for (i=imin; i<imax; i++)
8226 for (j=jmin; j<jmax; j++)
8228 gdk_draw_rectangle (layout->bin_window,
8229 widget->style->black_gc,
8231 10*i - layout->xoffset, 10*j - layout->yoffset,
8237 void create_layout (void)
8239 static GtkWidget *window = NULL;
8241 GtkWidget *scrolledwindow;
8250 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
8251 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8252 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
8255 gtk_window_set_title (GTK_WINDOW (window), "Layout");
8256 gtk_widget_set_usize (window, 200, 200);
8258 scrolledwindow = gtk_scrolled_window_new (NULL, NULL);
8260 gtk_container_add (GTK_CONTAINER (window), scrolledwindow);
8262 layout = gtk_layout_new (NULL, NULL);
8263 gtk_container_add (GTK_CONTAINER (scrolledwindow), layout);
8265 /* We set step sizes here since GtkLayout does not set
8268 GTK_LAYOUT (layout)->hadjustment->step_increment = 10.0;
8269 GTK_LAYOUT (layout)->vadjustment->step_increment = 10.0;
8271 gtk_widget_set_events (layout, GDK_EXPOSURE_MASK);
8272 gtk_signal_connect (GTK_OBJECT (layout), "expose_event",
8273 GTK_SIGNAL_FUNC (layout_expose_handler), NULL);
8275 gtk_layout_set_size (GTK_LAYOUT (layout), 1600, 128000);
8277 for (i=0 ; i < 16 ; i++)
8278 for (j=0 ; j < 16 ; j++)
8280 sprintf(buf, "Button %d, %d", i, j);
8282 button = gtk_button_new_with_label (buf);
8284 button = gtk_label_new (buf);
8286 gtk_layout_put (GTK_LAYOUT (layout), button,
8290 for (i=16; i < 1280; i++)
8292 sprintf(buf, "Button %d, %d", i, 0);
8294 button = gtk_button_new_with_label (buf);
8296 button = gtk_label_new (buf);
8298 gtk_layout_put (GTK_LAYOUT (layout), button,
8303 if (!GTK_WIDGET_VISIBLE (window))
8304 gtk_widget_show_all (window);
8306 gtk_widget_destroy (window);
8310 * Main Window and Exit
8314 do_exit (GtkWidget *widget, GtkWidget *window)
8316 gtk_widget_destroy (window);
8321 create_main_window (void)
8328 { "button box", create_button_box },
8329 { "buttons", create_buttons },
8330 { "check buttons", create_check_buttons },
8331 { "clist", create_clist},
8332 { "color selection", create_color_selection },
8333 { "ctree", create_ctree },
8334 { "cursors", create_cursors },
8335 { "dialog", create_dialog },
8336 /* { "dnd", create_dnd }, */
8337 { "entry", create_entry },
8338 { "event watcher", create_event_watcher },
8339 { "file selection", create_file_selection },
8340 { "font selection", create_font_selection },
8341 { "gamma curve", create_gamma_curve },
8342 { "handle box", create_handle_box },
8343 { "item factory", create_item_factory },
8344 { "labels", create_labels },
8345 { "layout", create_layout },
8346 { "list", create_list },
8347 { "menus", create_menus },
8348 { "modal window", create_modal_window },
8349 { "notebook", create_notebook },
8350 { "panes", create_panes },
8351 { "pixmap", create_pixmap },
8352 { "preview color", create_color_preview },
8353 { "preview gray", create_gray_preview },
8354 { "progress bar", create_progress_bar },
8355 { "radio buttons", create_radio_buttons },
8356 { "range controls", create_range_controls },
8357 { "rc file", create_rc_file },
8358 { "reparent", create_reparent },
8359 { "rulers", create_rulers },
8360 { "saved position", create_saved_position },
8361 { "scrolled windows", create_scrolled_windows },
8362 { "shapes", create_shapes },
8363 { "spinbutton", create_spins },
8364 { "statusbar", create_statusbar },
8365 { "test idle", create_idle_test },
8366 { "test mainloop", create_mainloop },
8367 { "test scrolling", create_scroll_test },
8368 { "test selection", create_selection_test },
8369 { "test timeout", create_timeout_test },
8370 { "text", create_text },
8371 { "toggle buttons", create_toggle_buttons },
8372 { "toolbar", create_toolbar },
8373 { "tooltips", create_tooltips },
8374 { "tree", create_tree_mode_window},
8375 { "WM hints", create_wmhints },
8377 int nbuttons = sizeof (buttons) / sizeof (buttons[0]);
8381 GtkWidget *scrolled_window;
8385 GtkWidget *separator;
8388 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
8389 gtk_window_set_policy (GTK_WINDOW (window), FALSE, FALSE, FALSE);
8390 gtk_widget_set_name (window, "main window");
8391 gtk_widget_set_usize (window, 200, 400);
8392 gtk_widget_set_uposition (window, 20, 20);
8394 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8395 GTK_SIGNAL_FUNC(gtk_main_quit),
8397 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
8398 GTK_SIGNAL_FUNC (gtk_false),
8401 box1 = gtk_vbox_new (FALSE, 0);
8402 gtk_container_add (GTK_CONTAINER (window), box1);
8404 if (gtk_micro_version > 0)
8416 label = gtk_label_new (buffer);
8417 gtk_box_pack_start (GTK_BOX (box1), label, FALSE, FALSE, 0);
8419 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
8420 gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10);
8421 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
8422 GTK_POLICY_AUTOMATIC,
8423 GTK_POLICY_AUTOMATIC);
8424 gtk_box_pack_start (GTK_BOX (box1), scrolled_window, TRUE, TRUE, 0);
8426 box2 = gtk_vbox_new (FALSE, 0);
8427 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
8428 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), box2);
8429 gtk_container_set_focus_vadjustment (GTK_CONTAINER (box2),
8430 gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
8431 gtk_widget_show (box2);
8433 for (i = 0; i < nbuttons; i++)
8435 button = gtk_button_new_with_label (buttons[i].label);
8436 if (buttons[i].func)
8437 gtk_signal_connect (GTK_OBJECT (button),
8439 GTK_SIGNAL_FUNC(buttons[i].func),
8442 gtk_widget_set_sensitive (button, FALSE);
8443 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
8446 separator = gtk_hseparator_new ();
8447 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
8449 box2 = gtk_vbox_new (FALSE, 10);
8450 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
8451 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
8453 button = gtk_button_new_with_label ("close");
8454 gtk_signal_connect (GTK_OBJECT (button), "clicked",
8455 GTK_SIGNAL_FUNC (do_exit),
8457 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
8458 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8459 gtk_widget_grab_default (button);
8461 gtk_widget_show_all (window);
8465 main (int argc, char *argv[])
8467 GtkBindingSet *binding_set;
8469 srand (time (NULL));
8473 gtk_rc_add_default_file ("testgtkrc");
8475 gtk_init (&argc, &argv);
8481 binding_set = gtk_binding_set_by_class (gtk_type_class (GTK_TYPE_WIDGET));
8482 gtk_binding_entry_add_signal (binding_set,
8483 '9', GDK_CONTROL_MASK | GDK_RELEASE_MASK,
8486 GTK_TYPE_STRING, "GtkWidgetClass <ctrl><release>9 test");
8488 create_main_window ();