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/.
35 #include "../gdk/gdk.h"
36 #include "../gdk/gdkx.h"
37 #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_small_space (GtkWidget *widget,
630 gtk_toolbar_set_space_size (GTK_TOOLBAR (data), 5);
634 set_toolbar_big_space (GtkWidget *widget,
637 gtk_toolbar_set_space_size (GTK_TOOLBAR (data), 10);
641 set_toolbar_enable (GtkWidget *widget,
644 gtk_toolbar_set_tooltips (GTK_TOOLBAR (data), TRUE);
648 set_toolbar_disable (GtkWidget *widget,
651 gtk_toolbar_set_tooltips (GTK_TOOLBAR (data), FALSE);
655 set_toolbar_borders (GtkWidget *widget,
658 gtk_toolbar_set_button_relief (GTK_TOOLBAR (data), GTK_RELIEF_NORMAL);
662 set_toolbar_borderless (GtkWidget *widget,
665 gtk_toolbar_set_button_relief (GTK_TOOLBAR (data), GTK_RELIEF_NONE);
669 set_toolbar_space_style_empty (GtkWidget *widget,
672 gtk_toolbar_set_space_style (GTK_TOOLBAR (data), GTK_TOOLBAR_SPACE_EMPTY);
676 set_toolbar_space_style_line (GtkWidget *widget,
679 gtk_toolbar_set_space_style (GTK_TOOLBAR (data), GTK_TOOLBAR_SPACE_LINE);
683 create_toolbar (void)
685 static GtkWidget *window = NULL;
691 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
692 gtk_window_set_title (GTK_WINDOW (window), "Toolbar test");
693 gtk_window_set_policy (GTK_WINDOW (window), FALSE, TRUE, TRUE);
695 gtk_signal_connect (GTK_OBJECT (window), "destroy",
696 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
699 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
700 gtk_widget_realize (window);
702 toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_BOTH);
703 gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NONE);
705 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
706 "Horizontal", "Horizontal toolbar layout", "Toolbar/Horizontal",
707 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
708 (GtkSignalFunc) set_toolbar_horizontal, toolbar);
709 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
710 "Vertical", "Vertical toolbar layout", "Toolbar/Vertical",
711 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
712 (GtkSignalFunc) set_toolbar_vertical, toolbar);
714 gtk_toolbar_append_space (GTK_TOOLBAR(toolbar));
716 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
717 "Icons", "Only show toolbar icons", "Toolbar/IconsOnly",
718 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
719 (GtkSignalFunc) set_toolbar_icons, toolbar);
720 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
721 "Text", "Only show toolbar text", "Toolbar/TextOnly",
722 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
723 (GtkSignalFunc) set_toolbar_text, toolbar);
724 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
725 "Both", "Show toolbar icons and text", "Toolbar/Both",
726 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
727 (GtkSignalFunc) set_toolbar_both, toolbar);
729 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
731 entry = gtk_entry_new ();
733 gtk_toolbar_append_widget (GTK_TOOLBAR (toolbar), entry, "This is an unusable GtkEntry ;)", "Hey don't click me!!!");
735 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
737 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
738 "Small", "Use small spaces", "Toolbar/Small",
739 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
740 (GtkSignalFunc) set_toolbar_small_space, toolbar);
741 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
742 "Big", "Use big spaces", "Toolbar/Big",
743 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
744 (GtkSignalFunc) set_toolbar_big_space, toolbar);
746 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
748 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
749 "Enable", "Enable tooltips", NULL,
750 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
751 (GtkSignalFunc) set_toolbar_enable, toolbar);
752 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
753 "Disable", "Disable tooltips", NULL,
754 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
755 (GtkSignalFunc) set_toolbar_disable, toolbar);
757 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
759 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
760 "Borders", "Show Borders", NULL,
761 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
762 (GtkSignalFunc) set_toolbar_borders, toolbar);
763 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
764 "Borderless", "Hide Borders", NULL,
765 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
766 (GtkSignalFunc) set_toolbar_borderless, toolbar);
768 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
770 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
771 "Empty", "Empty spaces", NULL,
772 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
773 (GtkSignalFunc) set_toolbar_space_style_empty, toolbar);
774 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
775 "Lines", "Lines in spaces", NULL,
776 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
777 (GtkSignalFunc) set_toolbar_space_style_line, toolbar);
779 gtk_container_add (GTK_CONTAINER (window), toolbar);
782 if (!GTK_WIDGET_VISIBLE (window))
783 gtk_widget_show_all (window);
785 gtk_widget_destroy (window);
789 make_toolbar (GtkWidget *window)
793 if (!GTK_WIDGET_REALIZED (window))
794 gtk_widget_realize (window);
796 toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_BOTH);
797 gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NONE);
799 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
800 "Horizontal", "Horizontal toolbar layout", NULL,
801 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
802 (GtkSignalFunc) set_toolbar_horizontal, toolbar);
803 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
804 "Vertical", "Vertical toolbar layout", NULL,
805 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
806 (GtkSignalFunc) set_toolbar_vertical, toolbar);
808 gtk_toolbar_append_space (GTK_TOOLBAR(toolbar));
810 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
811 "Icons", "Only show toolbar icons", NULL,
812 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
813 (GtkSignalFunc) set_toolbar_icons, toolbar);
814 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
815 "Text", "Only show toolbar text", NULL,
816 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
817 (GtkSignalFunc) set_toolbar_text, toolbar);
818 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
819 "Both", "Show toolbar icons and text", NULL,
820 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
821 (GtkSignalFunc) set_toolbar_both, toolbar);
823 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
825 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
826 "Small", "Use small spaces", NULL,
827 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
828 (GtkSignalFunc) set_toolbar_small_space, toolbar);
829 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
830 "Big", "Use big spaces", "Toolbar/Big",
831 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
832 (GtkSignalFunc) set_toolbar_big_space, toolbar);
834 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
836 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
837 "Enable", "Enable tooltips", NULL,
838 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
839 (GtkSignalFunc) set_toolbar_enable, toolbar);
840 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
841 "Disable", "Disable tooltips", NULL,
842 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
843 (GtkSignalFunc) set_toolbar_disable, toolbar);
845 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
847 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
848 "Borders", "Show Borders", NULL,
849 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
850 (GtkSignalFunc) set_toolbar_borders, toolbar);
851 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
852 "Borderless", "Hide Borders", NULL,
853 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
854 (GtkSignalFunc) set_toolbar_borderless, toolbar);
863 static guint statusbar_counter = 1;
866 statusbar_push (GtkWidget *button,
867 GtkStatusbar *statusbar)
871 sprintf (text, "something %d", statusbar_counter++);
873 gtk_statusbar_push (statusbar, 1, text);
877 statusbar_pop (GtkWidget *button,
878 GtkStatusbar *statusbar)
880 gtk_statusbar_pop (statusbar, 1);
884 statusbar_steal (GtkWidget *button,
885 GtkStatusbar *statusbar)
887 gtk_statusbar_remove (statusbar, 1, 4);
891 statusbar_popped (GtkStatusbar *statusbar,
895 if (!statusbar->messages)
896 statusbar_counter = 1;
900 statusbar_contexts (GtkStatusbar *statusbar)
904 string = "any context";
905 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
907 gtk_statusbar_get_context_id (statusbar, string));
909 string = "idle messages";
910 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
912 gtk_statusbar_get_context_id (statusbar, string));
914 string = "some text";
915 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
917 gtk_statusbar_get_context_id (statusbar, string));
919 string = "hit the mouse";
920 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
922 gtk_statusbar_get_context_id (statusbar, string));
924 string = "hit the mouse2";
925 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
927 gtk_statusbar_get_context_id (statusbar, string));
931 statusbar_dump_stack (GtkStatusbar *statusbar)
935 for (list = statusbar->messages; list; list = list->next)
937 GtkStatusbarMsg *msg;
940 g_print ("context_id: %d, message_id: %d, status_text: \"%s\"\n",
948 create_statusbar (void)
950 static GtkWidget *window = NULL;
954 GtkWidget *separator;
955 GtkWidget *statusbar;
959 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
961 gtk_signal_connect (GTK_OBJECT (window), "destroy",
962 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
965 gtk_window_set_title (GTK_WINDOW (window), "statusbar");
966 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
968 box1 = gtk_vbox_new (FALSE, 0);
969 gtk_container_add (GTK_CONTAINER (window), box1);
971 box2 = gtk_vbox_new (FALSE, 10);
972 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
973 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
975 statusbar = gtk_statusbar_new ();
976 gtk_box_pack_end (GTK_BOX (box1), statusbar, TRUE, TRUE, 0);
977 gtk_signal_connect (GTK_OBJECT (statusbar),
979 GTK_SIGNAL_FUNC (statusbar_popped),
982 button = gtk_widget_new (gtk_button_get_type (),
983 "label", "push something",
986 "signal::clicked", statusbar_push, statusbar,
989 button = gtk_widget_new (gtk_button_get_type (),
993 "signal_after::clicked", statusbar_pop, statusbar,
996 button = gtk_widget_new (gtk_button_get_type (),
1000 "signal_after::clicked", statusbar_steal, statusbar,
1003 button = gtk_widget_new (gtk_button_get_type (),
1004 "label", "dump stack",
1007 "object_signal::clicked", statusbar_dump_stack, statusbar,
1010 button = gtk_widget_new (gtk_button_get_type (),
1011 "label", "test contexts",
1014 "object_signal_after::clicked", statusbar_contexts, statusbar,
1017 separator = gtk_hseparator_new ();
1018 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
1020 box2 = gtk_vbox_new (FALSE, 10);
1021 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
1022 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
1024 button = gtk_button_new_with_label ("close");
1025 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
1026 GTK_SIGNAL_FUNC(gtk_widget_destroy),
1027 GTK_OBJECT (window));
1028 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
1029 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
1030 gtk_widget_grab_default (button);
1033 if (!GTK_WIDGET_VISIBLE (window))
1034 gtk_widget_show_all (window);
1036 gtk_widget_destroy (window);
1044 cb_tree_destroy_event(GtkWidget* w)
1046 sTreeButtons* tree_buttons;
1048 /* free buttons structure associate at this tree */
1049 tree_buttons = gtk_object_get_user_data (GTK_OBJECT (w));
1050 g_free (tree_buttons);
1054 cb_add_new_item(GtkWidget* w, GtkTree* tree)
1056 sTreeButtons* tree_buttons;
1057 GList* selected_list;
1058 GtkWidget* selected_item;
1060 GtkWidget* item_new;
1063 tree_buttons = gtk_object_get_user_data(GTK_OBJECT(tree));
1065 selected_list = GTK_TREE_SELECTION(tree);
1067 if(selected_list == NULL)
1069 /* there is no item in tree */
1070 subtree = GTK_WIDGET(tree);
1074 /* list can have only one element */
1075 selected_item = GTK_WIDGET(selected_list->data);
1077 subtree = GTK_TREE_ITEM_SUBTREE(selected_item);
1081 /* current selected item have not subtree ... create it */
1082 subtree = gtk_tree_new();
1083 gtk_tree_item_set_subtree(GTK_TREE_ITEM(selected_item),
1088 /* at this point, we know which subtree will be used to add new item */
1089 /* create a new item */
1090 sprintf(buffer, "item add %d", tree_buttons->nb_item_add);
1091 item_new = gtk_tree_item_new_with_label(buffer);
1092 gtk_tree_append(GTK_TREE(subtree), item_new);
1093 gtk_widget_show(item_new);
1095 tree_buttons->nb_item_add++;
1099 cb_remove_item(GtkWidget*w, GtkTree* tree)
1101 GList* selected_list;
1104 selected_list = GTK_TREE_SELECTION(tree);
1108 while (selected_list)
1110 clear_list = g_list_prepend (clear_list, selected_list->data);
1111 selected_list = selected_list->next;
1114 clear_list = g_list_reverse (clear_list);
1115 gtk_tree_remove_items(tree, clear_list);
1117 g_list_free (clear_list);
1121 cb_remove_subtree(GtkWidget*w, GtkTree* tree)
1123 GList* selected_list;
1126 selected_list = GTK_TREE_SELECTION(tree);
1130 item = GTK_TREE_ITEM (selected_list->data);
1132 gtk_tree_item_remove_subtree (item);
1137 cb_tree_changed(GtkTree* tree)
1139 sTreeButtons* tree_buttons;
1140 GList* selected_list;
1143 tree_buttons = gtk_object_get_user_data(GTK_OBJECT(tree));
1145 selected_list = GTK_TREE_SELECTION(tree);
1146 nb_selected = g_list_length(selected_list);
1148 if(nb_selected == 0)
1150 if(tree->children == NULL)
1151 gtk_widget_set_sensitive(tree_buttons->add_button, TRUE);
1153 gtk_widget_set_sensitive(tree_buttons->add_button, FALSE);
1154 gtk_widget_set_sensitive(tree_buttons->remove_button, FALSE);
1155 gtk_widget_set_sensitive(tree_buttons->subtree_button, FALSE);
1159 gtk_widget_set_sensitive(tree_buttons->remove_button, TRUE);
1160 gtk_widget_set_sensitive(tree_buttons->add_button, (nb_selected == 1));
1161 gtk_widget_set_sensitive(tree_buttons->subtree_button, (nb_selected == 1));
1166 create_subtree(GtkWidget* item, guint level, guint nb_item_max, guint recursion_level_max)
1168 GtkWidget* item_subtree;
1169 GtkWidget* item_new;
1174 if(level == recursion_level_max) return;
1178 /* query with no root item */
1180 item_subtree = item;
1185 /* query with no root item */
1186 /* create subtree and associate it with current item */
1187 item_subtree = gtk_tree_new();
1191 for(nb_item = 0; nb_item < nb_item_max; nb_item++)
1193 sprintf(buffer, "item %d-%d", level, nb_item);
1194 item_new = gtk_tree_item_new_with_label(buffer);
1195 gtk_tree_append(GTK_TREE(item_subtree), item_new);
1196 create_subtree(item_new, level+1, nb_item_max, recursion_level_max);
1197 gtk_widget_show(item_new);
1201 gtk_tree_item_set_subtree(GTK_TREE_ITEM(item), item_subtree);
1205 create_tree_sample(guint selection_mode,
1206 guint draw_line, guint view_line, guint no_root_item,
1207 guint nb_item_max, guint recursion_level_max)
1212 GtkWidget* separator;
1214 GtkWidget* scrolled_win;
1215 GtkWidget* root_tree;
1216 GtkWidget* root_item;
1217 sTreeButtons* tree_buttons;
1219 /* create tree buttons struct */
1220 if ((tree_buttons = g_malloc (sizeof (sTreeButtons))) == NULL)
1222 g_error("can't allocate memory for tree structure !\n");
1225 tree_buttons->nb_item_add = 0;
1227 /* create top level window */
1228 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
1229 gtk_window_set_title(GTK_WINDOW(window), "Tree Sample");
1230 gtk_signal_connect(GTK_OBJECT(window), "destroy",
1231 (GtkSignalFunc) cb_tree_destroy_event, NULL);
1232 gtk_object_set_user_data(GTK_OBJECT(window), tree_buttons);
1234 box1 = gtk_vbox_new(FALSE, 0);
1235 gtk_container_add(GTK_CONTAINER(window), box1);
1236 gtk_widget_show(box1);
1238 /* create tree box */
1239 box2 = gtk_vbox_new(FALSE, 0);
1240 gtk_box_pack_start(GTK_BOX(box1), box2, TRUE, TRUE, 0);
1241 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1242 gtk_widget_show(box2);
1244 /* create scrolled window */
1245 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
1246 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
1247 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1248 gtk_box_pack_start (GTK_BOX (box2), scrolled_win, TRUE, TRUE, 0);
1249 gtk_widget_set_usize (scrolled_win, 200, 200);
1250 gtk_widget_show (scrolled_win);
1252 /* create root tree widget */
1253 root_tree = gtk_tree_new();
1254 gtk_signal_connect(GTK_OBJECT(root_tree), "selection_changed",
1255 (GtkSignalFunc)cb_tree_changed,
1257 gtk_object_set_user_data(GTK_OBJECT(root_tree), tree_buttons);
1258 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_win), root_tree);
1259 gtk_tree_set_selection_mode(GTK_TREE(root_tree), selection_mode);
1260 gtk_tree_set_view_lines(GTK_TREE(root_tree), draw_line);
1261 gtk_tree_set_view_mode(GTK_TREE(root_tree), !view_line);
1262 gtk_widget_show(root_tree);
1266 /* set root tree to subtree function with root item variable */
1267 root_item = GTK_WIDGET(root_tree);
1271 /* create root tree item widget */
1272 root_item = gtk_tree_item_new_with_label("root item");
1273 gtk_tree_append(GTK_TREE(root_tree), root_item);
1274 gtk_widget_show(root_item);
1276 create_subtree(root_item, -no_root_item, nb_item_max, recursion_level_max);
1278 box2 = gtk_vbox_new(FALSE, 0);
1279 gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, FALSE, 0);
1280 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1281 gtk_widget_show(box2);
1283 button = gtk_button_new_with_label("Add Item");
1284 gtk_widget_set_sensitive(button, FALSE);
1285 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1286 (GtkSignalFunc) cb_add_new_item,
1287 (gpointer)root_tree);
1288 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1289 gtk_widget_show(button);
1290 tree_buttons->add_button = button;
1292 button = gtk_button_new_with_label("Remove Item(s)");
1293 gtk_widget_set_sensitive(button, FALSE);
1294 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1295 (GtkSignalFunc) cb_remove_item,
1296 (gpointer)root_tree);
1297 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1298 gtk_widget_show(button);
1299 tree_buttons->remove_button = button;
1301 button = gtk_button_new_with_label("Remove Subtree");
1302 gtk_widget_set_sensitive(button, FALSE);
1303 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1304 (GtkSignalFunc) cb_remove_subtree,
1305 (gpointer)root_tree);
1306 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1307 gtk_widget_show(button);
1308 tree_buttons->subtree_button = button;
1310 /* create separator */
1311 separator = gtk_hseparator_new();
1312 gtk_box_pack_start(GTK_BOX(box1), separator, FALSE, FALSE, 0);
1313 gtk_widget_show(separator);
1315 /* create button box */
1316 box2 = gtk_vbox_new(FALSE, 0);
1317 gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, FALSE, 0);
1318 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1319 gtk_widget_show(box2);
1321 button = gtk_button_new_with_label("Close");
1322 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1323 gtk_signal_connect_object(GTK_OBJECT (button), "clicked",
1324 (GtkSignalFunc) gtk_widget_destroy,
1325 GTK_OBJECT(window));
1326 gtk_widget_show(button);
1328 gtk_widget_show(window);
1332 cb_create_tree(GtkWidget* w)
1334 guint selection_mode = GTK_SELECTION_SINGLE;
1339 guint recursion_level;
1341 /* get selection mode choice */
1342 if(GTK_TOGGLE_BUTTON(sTreeSampleSelection.single_button)->active)
1343 selection_mode = GTK_SELECTION_SINGLE;
1345 if(GTK_TOGGLE_BUTTON(sTreeSampleSelection.browse_button)->active)
1346 selection_mode = GTK_SELECTION_BROWSE;
1348 selection_mode = GTK_SELECTION_MULTIPLE;
1350 /* get options choice */
1351 draw_line = GTK_TOGGLE_BUTTON(sTreeSampleSelection.draw_line_button)->active;
1352 view_line = GTK_TOGGLE_BUTTON(sTreeSampleSelection.view_line_button)->active;
1353 no_root_item = GTK_TOGGLE_BUTTON(sTreeSampleSelection.no_root_item_button)->active;
1356 nb_item = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(sTreeSampleSelection.nb_item_spinner));
1357 recursion_level = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(sTreeSampleSelection.recursion_spinner));
1359 if (pow (nb_item, recursion_level) > 10000)
1361 g_print ("%g total items? That will take a very long time. Try less\n",
1362 pow (nb_item, recursion_level));
1366 create_tree_sample(selection_mode, draw_line, view_line, no_root_item, nb_item, recursion_level);
1370 create_tree_mode_window(void)
1372 static GtkWidget* window;
1380 GtkWidget* separator;
1387 /* create toplevel window */
1388 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
1389 gtk_window_set_title(GTK_WINDOW(window), "Set Tree Parameters");
1390 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1391 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
1393 box1 = gtk_vbox_new(FALSE, 0);
1394 gtk_container_add(GTK_CONTAINER(window), box1);
1396 /* create upper box - selection box */
1397 box2 = gtk_vbox_new(FALSE, 5);
1398 gtk_box_pack_start(GTK_BOX(box1), box2, TRUE, TRUE, 0);
1399 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1401 box3 = gtk_hbox_new(FALSE, 5);
1402 gtk_box_pack_start(GTK_BOX(box2), box3, TRUE, TRUE, 0);
1404 /* create selection mode frame */
1405 frame = gtk_frame_new("Selection Mode");
1406 gtk_box_pack_start(GTK_BOX(box3), frame, TRUE, TRUE, 0);
1408 box4 = gtk_vbox_new(FALSE, 0);
1409 gtk_container_add(GTK_CONTAINER(frame), box4);
1410 gtk_container_set_border_width(GTK_CONTAINER(box4), 5);
1412 /* create radio button */
1413 button = gtk_radio_button_new_with_label(NULL, "SINGLE");
1414 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1415 sTreeSampleSelection.single_button = button;
1417 button = gtk_radio_button_new_with_label(gtk_radio_button_group (GTK_RADIO_BUTTON (button)),
1419 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1420 sTreeSampleSelection.browse_button = button;
1422 button = gtk_radio_button_new_with_label(gtk_radio_button_group (GTK_RADIO_BUTTON (button)),
1424 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1425 sTreeSampleSelection.multiple_button = button;
1427 sTreeSampleSelection.selection_mode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (button));
1429 /* create option mode frame */
1430 frame = gtk_frame_new("Options");
1431 gtk_box_pack_start(GTK_BOX(box3), frame, TRUE, TRUE, 0);
1433 box4 = gtk_vbox_new(FALSE, 0);
1434 gtk_container_add(GTK_CONTAINER(frame), box4);
1435 gtk_container_set_border_width(GTK_CONTAINER(box4), 5);
1437 /* create check button */
1438 button = gtk_check_button_new_with_label("Draw line");
1439 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1440 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
1441 sTreeSampleSelection.draw_line_button = button;
1443 button = gtk_check_button_new_with_label("View Line mode");
1444 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1445 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
1446 sTreeSampleSelection.view_line_button = button;
1448 button = gtk_check_button_new_with_label("Without Root item");
1449 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1450 sTreeSampleSelection.no_root_item_button = button;
1452 /* create recursion parameter */
1453 frame = gtk_frame_new("Size Parameters");
1454 gtk_box_pack_start(GTK_BOX(box2), frame, TRUE, TRUE, 0);
1456 box4 = gtk_hbox_new(FALSE, 5);
1457 gtk_container_add(GTK_CONTAINER(frame), box4);
1458 gtk_container_set_border_width(GTK_CONTAINER(box4), 5);
1460 /* create number of item spin button */
1461 box5 = gtk_hbox_new(FALSE, 5);
1462 gtk_box_pack_start(GTK_BOX(box4), box5, FALSE, FALSE, 0);
1464 label = gtk_label_new("Number of items : ");
1465 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
1466 gtk_box_pack_start (GTK_BOX (box5), label, FALSE, TRUE, 0);
1468 adj = (GtkAdjustment *) gtk_adjustment_new ((gfloat)DEFAULT_NUMBER_OF_ITEM, 1.0, 255.0, 1.0,
1470 spinner = gtk_spin_button_new (adj, 0, 0);
1471 gtk_box_pack_start (GTK_BOX (box5), spinner, FALSE, TRUE, 0);
1472 sTreeSampleSelection.nb_item_spinner = spinner;
1474 /* create recursion level spin button */
1475 box5 = gtk_hbox_new(FALSE, 5);
1476 gtk_box_pack_start(GTK_BOX(box4), box5, FALSE, FALSE, 0);
1478 label = gtk_label_new("Depth : ");
1479 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
1480 gtk_box_pack_start (GTK_BOX (box5), label, FALSE, TRUE, 0);
1482 adj = (GtkAdjustment *) gtk_adjustment_new ((gfloat)DEFAULT_RECURSION_LEVEL, 0.0, 255.0, 1.0,
1484 spinner = gtk_spin_button_new (adj, 0, 0);
1485 gtk_box_pack_start (GTK_BOX (box5), spinner, FALSE, TRUE, 0);
1486 sTreeSampleSelection.recursion_spinner = spinner;
1488 /* create horizontal separator */
1489 separator = gtk_hseparator_new();
1490 gtk_box_pack_start(GTK_BOX(box1), separator, FALSE, FALSE, 0);
1492 /* create bottom button box */
1493 box2 = gtk_hbox_new(TRUE, 10);
1494 gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, FALSE, 0);
1495 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1497 button = gtk_button_new_with_label("Create Tree");
1498 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1499 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1500 (GtkSignalFunc) cb_create_tree, NULL);
1502 button = gtk_button_new_with_label("Close");
1503 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1504 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
1505 GTK_SIGNAL_FUNC(gtk_widget_destroy),
1506 GTK_OBJECT (window));
1508 if (!GTK_WIDGET_VISIBLE (window))
1509 gtk_widget_show_all (window);
1511 gtk_widget_destroy (window);
1519 handle_box_child_signal (GtkHandleBox *hb,
1521 const gchar *action)
1523 printf ("%s: child <%s> %sed\n",
1524 gtk_type_name (GTK_OBJECT_TYPE (hb)),
1525 gtk_type_name (GTK_OBJECT_TYPE (child)),
1530 create_handle_box (void)
1532 static GtkWidget* window = NULL;
1533 GtkWidget *handle_box;
1534 GtkWidget *handle_box2;
1539 GtkWidget *separator;
1543 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1544 gtk_window_set_title (GTK_WINDOW (window),
1546 gtk_window_set_policy (GTK_WINDOW (window),
1551 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1552 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
1555 gtk_container_set_border_width (GTK_CONTAINER (window), 20);
1557 vbox = gtk_vbox_new (FALSE, 0);
1558 gtk_container_add (GTK_CONTAINER (window), vbox);
1559 gtk_widget_show (vbox);
1561 label = gtk_label_new ("Above");
1562 gtk_container_add (GTK_CONTAINER (vbox), label);
1563 gtk_widget_show (label);
1565 separator = gtk_hseparator_new ();
1566 gtk_container_add (GTK_CONTAINER (vbox), separator);
1567 gtk_widget_show (separator);
1569 hbox = gtk_hbox_new (FALSE, 10);
1570 gtk_container_add (GTK_CONTAINER (vbox), hbox);
1571 gtk_widget_show (hbox);
1573 separator = gtk_hseparator_new ();
1574 gtk_container_add (GTK_CONTAINER (vbox), separator);
1575 gtk_widget_show (separator);
1577 label = gtk_label_new ("Below");
1578 gtk_container_add (GTK_CONTAINER (vbox), label);
1579 gtk_widget_show (label);
1581 handle_box = gtk_handle_box_new ();
1582 gtk_box_pack_start (GTK_BOX (hbox), handle_box, FALSE, FALSE, 0);
1583 gtk_signal_connect (GTK_OBJECT (handle_box),
1585 GTK_SIGNAL_FUNC (handle_box_child_signal),
1587 gtk_signal_connect (GTK_OBJECT (handle_box),
1589 GTK_SIGNAL_FUNC (handle_box_child_signal),
1591 gtk_widget_show (handle_box);
1593 toolbar = make_toolbar (window);
1594 gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NORMAL);
1595 gtk_container_add (GTK_CONTAINER (handle_box), toolbar);
1596 gtk_widget_show (toolbar);
1598 handle_box = gtk_handle_box_new ();
1599 gtk_box_pack_start (GTK_BOX (hbox), handle_box, FALSE, FALSE, 0);
1600 gtk_signal_connect (GTK_OBJECT (handle_box),
1602 GTK_SIGNAL_FUNC (handle_box_child_signal),
1604 gtk_signal_connect (GTK_OBJECT (handle_box),
1606 GTK_SIGNAL_FUNC (handle_box_child_signal),
1608 gtk_widget_show (handle_box);
1610 handle_box2 = gtk_handle_box_new ();
1611 gtk_container_add (GTK_CONTAINER (handle_box), handle_box2);
1612 gtk_signal_connect (GTK_OBJECT (handle_box2),
1614 GTK_SIGNAL_FUNC (handle_box_child_signal),
1616 gtk_signal_connect (GTK_OBJECT (handle_box2),
1618 GTK_SIGNAL_FUNC (handle_box_child_signal),
1620 gtk_widget_show (handle_box2);
1622 label = gtk_label_new ("Fooo!");
1623 gtk_container_add (GTK_CONTAINER (handle_box2), label);
1624 gtk_widget_show (label);
1627 if (!GTK_WIDGET_VISIBLE (window))
1628 gtk_widget_show (window);
1630 gtk_widget_destroy (window);
1636 void create_labels (void)
1638 static GtkWidget *window = NULL;
1646 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1647 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1648 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
1651 gtk_window_set_title (GTK_WINDOW (window), "Label");
1652 vbox = gtk_vbox_new (FALSE, 5);
1653 hbox = gtk_hbox_new (FALSE, 5);
1654 gtk_container_add (GTK_CONTAINER (window), hbox);
1655 gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);
1656 gtk_container_set_border_width (GTK_CONTAINER (window), 5);
1658 frame = gtk_frame_new ("Normal Label");
1659 label = gtk_label_new ("This is a Normal label");
1660 gtk_container_add (GTK_CONTAINER (frame), label);
1661 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
1663 frame = gtk_frame_new ("Multi-line Label");
1664 label = gtk_label_new ("This is a Multi-line label.\nSecond line\nThird line");
1665 gtk_container_add (GTK_CONTAINER (frame), label);
1666 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
1668 frame = gtk_frame_new ("Left Justified Label");
1669 label = gtk_label_new ("This is a Left-Justified\nMulti-line label.\nThird line");
1670 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
1671 gtk_container_add (GTK_CONTAINER (frame), label);
1672 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
1674 frame = gtk_frame_new ("Right Justified Label");
1675 label = gtk_label_new ("This is a Right-Justified\nMulti-line label.\nFourth line, (j/k)");
1676 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_RIGHT);
1677 gtk_container_add (GTK_CONTAINER (frame), label);
1678 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
1680 vbox = gtk_vbox_new (FALSE, 5);
1681 gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);
1682 frame = gtk_frame_new ("Line wrapped label");
1683 label = gtk_label_new ("This is an example of a line-wrapped label. It should not be taking "\
1684 "up the entire "/* big space to test spacing */\
1685 "width allocated to it, but automatically wraps the words to fit. "\
1686 "The time has come, for all good men, to come to the aid of their party. "\
1687 "The sixth sheik's six sheep's sick.\n"\
1688 " It supports multiple paragraphs correctly, and correctly adds "\
1689 "many extra spaces. ");
1691 gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
1692 gtk_container_add (GTK_CONTAINER (frame), label);
1693 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
1695 frame = gtk_frame_new ("Filled, wrapped label");
1696 label = gtk_label_new ("This is an example of a line-wrapped, filled label. It should be taking "\
1697 "up the entire width allocated to it. Here is a seneance to prove "\
1698 "my point. Here is another sentence. "\
1699 "Here comes the sun, do de do de do.\n"\
1700 " This is a new paragraph.\n"\
1701 " This is another newer, longer, better paragraph. It is coming to an end, "\
1703 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_FILL);
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 ("Underlined label");
1709 label = gtk_label_new ("This label is underlined!\n"
1710 "This one is underlined in ÆüËܸì¤ÎÆþÍÑquite a funky fashion");
1711 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
1712 gtk_label_set_pattern (GTK_LABEL (label), "_________________________ _ _________ _ _____ _ __ __ ___ ____ _____");
1713 gtk_container_add (GTK_CONTAINER (frame), label);
1714 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
1717 if (!GTK_WIDGET_VISIBLE (window))
1718 gtk_widget_show_all (window);
1720 gtk_widget_destroy (window);
1728 reparent_label (GtkWidget *widget,
1729 GtkWidget *new_parent)
1733 label = gtk_object_get_user_data (GTK_OBJECT (widget));
1735 gtk_widget_reparent (label, new_parent);
1739 set_parent_signal (GtkWidget *child,
1740 GtkWidget *old_parent,
1743 g_print ("set_parent for \"%s\": new parent: \"%s\", old parent: \"%s\", data: %d\n",
1744 gtk_type_name (GTK_OBJECT_TYPE (child)),
1745 child->parent ? gtk_type_name (GTK_OBJECT_TYPE (child->parent)) : "NULL",
1746 old_parent ? gtk_type_name (GTK_OBJECT_TYPE (old_parent)) : "NULL",
1747 GPOINTER_TO_INT (func_data));
1751 create_reparent (void)
1753 static GtkWidget *window = NULL;
1760 GtkWidget *separator;
1764 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1766 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1767 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
1770 gtk_window_set_title (GTK_WINDOW (window), "reparent");
1771 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
1773 box1 = gtk_vbox_new (FALSE, 0);
1774 gtk_container_add (GTK_CONTAINER (window), box1);
1776 box2 = gtk_hbox_new (FALSE, 5);
1777 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
1778 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
1780 label = gtk_label_new ("Hello World");
1782 frame = gtk_frame_new ("Frame 1");
1783 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
1785 box3 = gtk_vbox_new (FALSE, 5);
1786 gtk_container_set_border_width (GTK_CONTAINER (box3), 5);
1787 gtk_container_add (GTK_CONTAINER (frame), box3);
1789 button = gtk_button_new_with_label ("switch");
1790 gtk_signal_connect (GTK_OBJECT (button), "clicked",
1791 GTK_SIGNAL_FUNC(reparent_label),
1793 gtk_object_set_user_data (GTK_OBJECT (button), label);
1794 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
1796 gtk_box_pack_start (GTK_BOX (box3), label, FALSE, TRUE, 0);
1797 gtk_signal_connect (GTK_OBJECT (label),
1799 GTK_SIGNAL_FUNC (set_parent_signal),
1800 GINT_TO_POINTER (42));
1802 frame = gtk_frame_new ("Frame 2");
1803 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
1805 box3 = gtk_vbox_new (FALSE, 5);
1806 gtk_container_set_border_width (GTK_CONTAINER (box3), 5);
1807 gtk_container_add (GTK_CONTAINER (frame), box3);
1809 button = gtk_button_new_with_label ("switch");
1810 gtk_signal_connect (GTK_OBJECT (button), "clicked",
1811 GTK_SIGNAL_FUNC(reparent_label),
1813 gtk_object_set_user_data (GTK_OBJECT (button), label);
1814 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
1816 separator = gtk_hseparator_new ();
1817 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
1819 box2 = gtk_vbox_new (FALSE, 10);
1820 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
1821 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
1823 button = gtk_button_new_with_label ("close");
1824 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
1825 GTK_SIGNAL_FUNC(gtk_widget_destroy),
1826 GTK_OBJECT (window));
1827 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
1828 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
1829 gtk_widget_grab_default (button);
1832 if (!GTK_WIDGET_VISIBLE (window))
1833 gtk_widget_show_all (window);
1835 gtk_widget_destroy (window);
1841 gint upositionx = 0;
1842 gint upositiony = 0;
1845 uposition_configure (GtkWidget *window)
1851 lx = gtk_object_get_data (GTK_OBJECT (window), "x");
1852 ly = gtk_object_get_data (GTK_OBJECT (window), "y");
1854 gdk_window_get_root_origin (window->window, &upositionx, &upositiony);
1855 sprintf (buffer, "%d", upositionx);
1856 gtk_label_set_text (lx, buffer);
1857 sprintf (buffer, "%d", upositiony);
1858 gtk_label_set_text (ly, buffer);
1864 create_saved_position (void)
1866 static GtkWidget *window = NULL;
1871 GtkWidget *main_vbox;
1879 window = gtk_widget_new (GTK_TYPE_WINDOW,
1880 "type", GTK_WINDOW_TOPLEVEL,
1881 "signal::configure_event", uposition_configure, NULL,
1884 "title", "Saved Position",
1887 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1888 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
1891 main_vbox = gtk_vbox_new (FALSE, 5);
1892 gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 0);
1893 gtk_container_add (GTK_CONTAINER (window), main_vbox);
1896 gtk_widget_new (gtk_vbox_get_type (),
1897 "GtkBox::homogeneous", FALSE,
1898 "GtkBox::spacing", 5,
1899 "GtkContainer::border_width", 10,
1900 "GtkWidget::parent", main_vbox,
1901 "GtkWidget::visible", TRUE,
1904 hbox = gtk_hbox_new (FALSE, 0);
1905 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
1906 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
1908 label = gtk_label_new ("X Origin : ");
1909 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
1910 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
1912 x_label = gtk_label_new ("");
1913 gtk_box_pack_start (GTK_BOX (hbox), x_label, TRUE, TRUE, 0);
1914 gtk_object_set_data (GTK_OBJECT (window), "x", x_label);
1916 hbox = gtk_hbox_new (FALSE, 0);
1917 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
1918 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
1920 label = gtk_label_new ("Y Origin : ");
1921 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
1922 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
1924 y_label = gtk_label_new ("");
1925 gtk_box_pack_start (GTK_BOX (hbox), y_label, TRUE, TRUE, 0);
1926 gtk_object_set_data (GTK_OBJECT (window), "y", y_label);
1929 gtk_widget_new (gtk_hseparator_get_type (),
1930 "GtkWidget::visible", TRUE,
1932 gtk_box_pack_start (GTK_BOX (main_vbox), any, FALSE, TRUE, 0);
1934 hbox = gtk_hbox_new (FALSE, 0);
1935 gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
1936 gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
1938 button = gtk_button_new_with_label ("Close");
1939 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
1940 GTK_SIGNAL_FUNC (gtk_widget_destroy),
1941 GTK_OBJECT (window));
1942 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
1943 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
1944 gtk_widget_grab_default (button);
1946 gtk_widget_show_all (window);
1949 gtk_widget_destroy (window);
1957 create_pixmap (void)
1959 static GtkWidget *window = NULL;
1965 GtkWidget *separator;
1966 GtkWidget *pixmapwid;
1972 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1974 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1975 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
1978 gtk_window_set_title (GTK_WINDOW (window), "GtkPixmap");
1979 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
1980 gtk_widget_realize(window);
1982 box1 = gtk_vbox_new (FALSE, 0);
1983 gtk_container_add (GTK_CONTAINER (window), box1);
1985 box2 = gtk_vbox_new (FALSE, 10);
1986 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
1987 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
1989 button = gtk_button_new ();
1990 gtk_box_pack_start (GTK_BOX (box2), button, FALSE, FALSE, 0);
1992 pixmap = gdk_pixmap_create_from_xpm (window->window, &mask, NULL,
1994 pixmapwid = gtk_pixmap_new (pixmap, mask);
1995 gdk_pixmap_unref (pixmap);
1996 gdk_pixmap_unref (mask);
1998 label = gtk_label_new ("Pixmap\ntest");
1999 box3 = gtk_hbox_new (FALSE, 0);
2000 gtk_container_set_border_width (GTK_CONTAINER (box3), 2);
2001 gtk_container_add (GTK_CONTAINER (box3), pixmapwid);
2002 gtk_container_add (GTK_CONTAINER (box3), label);
2003 gtk_container_add (GTK_CONTAINER (button), box3);
2005 separator = gtk_hseparator_new ();
2006 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2008 box2 = gtk_vbox_new (FALSE, 10);
2009 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2010 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2012 button = gtk_button_new_with_label ("close");
2013 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2014 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2015 GTK_OBJECT (window));
2016 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2017 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2018 gtk_widget_grab_default (button);
2021 if (!GTK_WIDGET_VISIBLE (window))
2022 gtk_widget_show_all (window);
2024 gtk_widget_destroy (window);
2028 tips_query_widget_entered (GtkTipsQuery *tips_query,
2030 const gchar *tip_text,
2031 const gchar *tip_private,
2034 if (GTK_TOGGLE_BUTTON (toggle)->active)
2036 gtk_label_set_text (GTK_LABEL (tips_query), tip_text ? "There is a Tip!" : "There is no Tip!");
2037 /* don't let GtkTipsQuery reset it's label */
2038 gtk_signal_emit_stop_by_name (GTK_OBJECT (tips_query), "widget_entered");
2043 tips_query_widget_selected (GtkWidget *tips_query,
2045 const gchar *tip_text,
2046 const gchar *tip_private,
2047 GdkEventButton *event,
2051 g_print ("Help \"%s\" requested for <%s>\n",
2052 tip_private ? tip_private : "None",
2053 gtk_type_name (GTK_OBJECT_TYPE (widget)));
2058 create_tooltips (void)
2060 static GtkWidget *window = NULL;
2067 GtkWidget *tips_query;
2068 GtkWidget *separator;
2069 GtkTooltips *tooltips;
2074 gtk_widget_new (gtk_window_get_type (),
2075 "GtkWindow::type", GTK_WINDOW_TOPLEVEL,
2076 "GtkContainer::border_width", 0,
2077 "GtkWindow::title", "Tooltips",
2078 "GtkWindow::allow_shrink", TRUE,
2079 "GtkWindow::allow_grow", FALSE,
2080 "GtkWindow::auto_shrink", TRUE,
2081 "GtkWidget::width", 200,
2084 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2085 GTK_SIGNAL_FUNC (destroy_tooltips),
2088 tooltips=gtk_tooltips_new();
2089 gtk_object_set_data (GTK_OBJECT (window), "tooltips", tooltips);
2091 box1 = gtk_vbox_new (FALSE, 0);
2092 gtk_container_add (GTK_CONTAINER (window), box1);
2094 box2 = gtk_vbox_new (FALSE, 10);
2095 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2096 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2098 button = gtk_toggle_button_new_with_label ("button1");
2099 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2101 gtk_tooltips_set_tip (tooltips,button,"This is button 1", "ContextHelp/buttons/1");
2103 button = gtk_toggle_button_new_with_label ("button2");
2104 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2106 gtk_tooltips_set_tip (tooltips,
2108 "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.",
2109 "ContextHelp/buttons/2_long");
2111 toggle = gtk_toggle_button_new_with_label ("Override TipsQuery Label");
2112 gtk_box_pack_start (GTK_BOX (box2), toggle, TRUE, TRUE, 0);
2114 gtk_tooltips_set_tip (tooltips, toggle, "Toggle TipsQuery view.", "Hi msw! ;)");
2117 gtk_widget_new (gtk_vbox_get_type (),
2118 "GtkBox::homogeneous", FALSE,
2119 "GtkBox::spacing", 5,
2120 "GtkContainer::border_width", 5,
2121 "GtkWidget::visible", TRUE,
2124 tips_query = gtk_tips_query_new ();
2127 gtk_widget_new (gtk_button_get_type (),
2128 "GtkButton::label", "[?]",
2129 "GtkWidget::visible", TRUE,
2130 "GtkWidget::parent", box3,
2131 "GtkObject::object_signal::clicked", gtk_tips_query_start_query, tips_query,
2133 gtk_box_set_child_packing (GTK_BOX (box3), button, FALSE, FALSE, 0, GTK_PACK_START);
2134 gtk_tooltips_set_tip (tooltips,
2136 "Start the Tooltips Inspector",
2137 "ContextHelp/buttons/?");
2140 gtk_widget_set (tips_query,
2141 "GtkWidget::visible", TRUE,
2142 "GtkWidget::parent", box3,
2143 "GtkTipsQuery::caller", button,
2144 "GtkObject::signal::widget_entered", tips_query_widget_entered, toggle,
2145 "GtkObject::signal::widget_selected", tips_query_widget_selected, NULL,
2149 gtk_widget_new (gtk_frame_get_type (),
2150 "GtkFrame::label", "ToolTips Inspector",
2151 "GtkFrame::label_xalign", (double) 0.5,
2152 "GtkContainer::border_width", 0,
2153 "GtkWidget::visible", TRUE,
2154 "GtkWidget::parent", box2,
2155 "GtkContainer::child", box3,
2157 gtk_box_set_child_packing (GTK_BOX (box2), frame, TRUE, TRUE, 10, GTK_PACK_START);
2159 separator = gtk_hseparator_new ();
2160 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2162 box2 = gtk_vbox_new (FALSE, 10);
2163 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2164 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2166 button = gtk_button_new_with_label ("close");
2167 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2168 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2169 GTK_OBJECT (window));
2170 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2171 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2172 gtk_widget_grab_default (button);
2174 gtk_tooltips_set_tip (tooltips, button, "Push this button to close window", "ContextHelp/buttons/Close");
2177 if (!GTK_WIDGET_VISIBLE (window))
2178 gtk_widget_show_all (window);
2180 gtk_widget_destroy (window);
2188 create_menu (gint depth, gboolean tearoff)
2191 GtkWidget *menuitem;
2199 menu = gtk_menu_new ();
2204 menuitem = gtk_tearoff_menu_item_new ();
2205 gtk_menu_append (GTK_MENU (menu), menuitem);
2206 gtk_widget_show (menuitem);
2209 for (i = 0, j = 1; i < 5; i++, j++)
2211 sprintf (buf, "item %2d - %d", depth, j);
2212 menuitem = gtk_radio_menu_item_new_with_label (group, buf);
2213 group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menuitem));
2215 gtk_check_menu_item_set_show_toggle (GTK_CHECK_MENU_ITEM (menuitem), TRUE);
2216 gtk_menu_append (GTK_MENU (menu), menuitem);
2217 gtk_widget_show (menuitem);
2219 gtk_widget_set_sensitive (menuitem, FALSE);
2221 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (depth - 1, TRUE));
2230 static GtkWidget *window = NULL;
2234 GtkWidget *optionmenu;
2235 GtkWidget *separator;
2241 GtkWidget *menuitem;
2242 GtkAccelGroup *accel_group;
2244 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2246 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2247 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2249 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
2250 GTK_SIGNAL_FUNC (gtk_true),
2253 accel_group = gtk_accel_group_new ();
2254 gtk_accel_group_attach (accel_group, GTK_OBJECT (window));
2256 gtk_window_set_title (GTK_WINDOW (window), "menus");
2257 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
2260 box1 = gtk_vbox_new (FALSE, 0);
2261 gtk_container_add (GTK_CONTAINER (window), box1);
2262 gtk_widget_show (box1);
2264 menubar = gtk_menu_bar_new ();
2265 gtk_box_pack_start (GTK_BOX (box1), menubar, FALSE, TRUE, 0);
2266 gtk_widget_show (menubar);
2268 menu = create_menu (2, TRUE);
2270 menuitem = gtk_menu_item_new_with_label ("test\nline2");
2271 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), menu);
2272 gtk_menu_bar_append (GTK_MENU_BAR (menubar), menuitem);
2273 gtk_widget_show (menuitem);
2275 menuitem = gtk_menu_item_new_with_label ("foo");
2276 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (3, TRUE));
2277 gtk_menu_bar_append (GTK_MENU_BAR (menubar), menuitem);
2278 gtk_widget_show (menuitem);
2280 menuitem = gtk_menu_item_new_with_label ("bar");
2281 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (4, TRUE));
2282 gtk_menu_item_right_justify (GTK_MENU_ITEM (menuitem));
2283 gtk_menu_bar_append (GTK_MENU_BAR (menubar), menuitem);
2284 gtk_widget_show (menuitem);
2286 box2 = gtk_vbox_new (FALSE, 10);
2287 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2288 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2289 gtk_widget_show (box2);
2291 menu = create_menu (1, FALSE);
2292 gtk_menu_set_accel_group (GTK_MENU (menu), accel_group);
2294 menuitem = gtk_check_menu_item_new_with_label ("Accelerate Me");
2295 gtk_menu_append (GTK_MENU (menu), menuitem);
2296 gtk_widget_show (menuitem);
2297 gtk_widget_add_accelerator (menuitem,
2302 GTK_ACCEL_VISIBLE | GTK_ACCEL_SIGNAL_VISIBLE);
2303 menuitem = gtk_check_menu_item_new_with_label ("Accelerator Locked");
2304 gtk_menu_append (GTK_MENU (menu), menuitem);
2305 gtk_widget_show (menuitem);
2306 gtk_widget_add_accelerator (menuitem,
2311 GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
2312 menuitem = gtk_check_menu_item_new_with_label ("Accelerators Frozen");
2313 gtk_menu_append (GTK_MENU (menu), menuitem);
2314 gtk_widget_show (menuitem);
2315 gtk_widget_add_accelerator (menuitem,
2321 gtk_widget_add_accelerator (menuitem,
2327 gtk_widget_lock_accelerators (menuitem);
2329 optionmenu = gtk_option_menu_new ();
2330 gtk_option_menu_set_menu (GTK_OPTION_MENU (optionmenu), menu);
2331 gtk_option_menu_set_history (GTK_OPTION_MENU (optionmenu), 3);
2332 gtk_box_pack_start (GTK_BOX (box2), optionmenu, TRUE, TRUE, 0);
2333 gtk_widget_show (optionmenu);
2335 separator = gtk_hseparator_new ();
2336 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2337 gtk_widget_show (separator);
2339 box2 = gtk_vbox_new (FALSE, 10);
2340 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2341 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2342 gtk_widget_show (box2);
2344 button = gtk_button_new_with_label ("close");
2345 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2346 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2347 GTK_OBJECT (window));
2348 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2349 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2350 gtk_widget_grab_default (button);
2351 gtk_widget_show (button);
2354 if (!GTK_WIDGET_VISIBLE (window))
2355 gtk_widget_show (window);
2357 gtk_widget_destroy (window);
2361 gtk_ifactory_cb (gpointer callback_data,
2362 guint callback_action,
2365 g_message ("ItemFactory: activated \"%s\"", gtk_item_factory_path_from_widget (widget));
2368 static GtkItemFactoryEntry menu_items[] =
2370 { "/_File", NULL, 0, 0, "<Branch>" },
2371 { "/File/tearoff1", NULL, gtk_ifactory_cb, 0, "<Tearoff>" },
2372 { "/File/_New", "<control>N", gtk_ifactory_cb, 0 },
2373 { "/File/_Open", "<control>O", gtk_ifactory_cb, 0 },
2374 { "/File/_Save", "<control>S", gtk_ifactory_cb, 0 },
2375 { "/File/Save _As...", NULL, gtk_ifactory_cb, 0 },
2376 { "/File/sep1", NULL, gtk_ifactory_cb, 0, "<Separator>" },
2377 { "/File/_Quit", "<control>Q", gtk_ifactory_cb, 0 },
2379 { "/_Preferences", NULL, 0, 0, "<Branch>" },
2380 { "/_Preferences/_Color", NULL, 0, 0, "<Branch>" },
2381 { "/_Preferences/Color/_Red", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
2382 { "/_Preferences/Color/_Green", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
2383 { "/_Preferences/Color/_Blue", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
2384 { "/_Preferences/_Shape", NULL, 0, 0, "<Branch>" },
2385 { "/_Preferences/Shape/_Square", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
2386 { "/_Preferences/Shape/_Rectangle", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
2387 { "/_Preferences/Shape/_Oval", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
2389 { "/_Help", NULL, 0, 0, "<LastBranch>" },
2390 { "/Help/_About", NULL, gtk_ifactory_cb, 0 },
2393 static int nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]);
2396 create_item_factory (void)
2398 static GtkWidget *window = NULL;
2404 GtkWidget *separator;
2407 GtkAccelGroup *accel_group;
2408 GtkItemFactory *item_factory;
2410 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2412 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2413 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2415 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
2416 GTK_SIGNAL_FUNC (gtk_true),
2419 accel_group = gtk_accel_group_new ();
2420 item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>", accel_group);
2421 gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL);
2422 gtk_accel_group_attach (accel_group, GTK_OBJECT (window));
2423 gtk_window_set_title (GTK_WINDOW (window), "Item Factory");
2424 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
2426 box1 = gtk_vbox_new (FALSE, 0);
2427 gtk_container_add (GTK_CONTAINER (window), box1);
2429 gtk_box_pack_start (GTK_BOX (box1),
2430 gtk_item_factory_get_widget (item_factory, "<main>"),
2433 label = gtk_label_new ("Type\n<alt>\nto start");
2434 gtk_widget_set_usize (label, 200, 200);
2435 gtk_misc_set_alignment (GTK_MISC (label), 0.5, 0.5);
2436 gtk_box_pack_start (GTK_BOX (box1), label, TRUE, TRUE, 0);
2439 separator = gtk_hseparator_new ();
2440 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2443 box2 = gtk_vbox_new (FALSE, 10);
2444 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2445 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2447 button = gtk_button_new_with_label ("close");
2448 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2449 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2450 GTK_OBJECT (window));
2451 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2452 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2453 gtk_widget_grab_default (button);
2455 gtk_widget_show_all (window);
2458 gtk_widget_destroy (window);
2466 scrolled_windows_remove (GtkWidget *widget, GtkWidget *scrollwin)
2468 static GtkWidget *parent = NULL;
2469 static GtkWidget *float_parent;
2473 gtk_widget_reparent (scrollwin, parent);
2474 gtk_widget_destroy (float_parent);
2475 float_parent = NULL;
2480 parent = widget->parent;
2481 float_parent = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2482 gtk_widget_reparent (scrollwin, float_parent);
2483 gtk_widget_show (float_parent);
2492 cmw_destroy_cb(GtkWidget *widget)
2494 /* This is needed to get out of gtk_main */
2501 cmw_color (GtkWidget *widget, GtkWidget *parent)
2505 csd=gtk_color_selection_dialog_new ("This is a modal color selection dialog");
2508 gtk_window_set_modal (GTK_WINDOW(csd),TRUE);
2510 /* And mark it as a transient dialog */
2511 gtk_window_set_transient_for (GTK_WINDOW (csd), GTK_WINDOW (parent));
2513 gtk_signal_connect (GTK_OBJECT(csd), "destroy",
2514 GTK_SIGNAL_FUNC(cmw_destroy_cb),NULL);
2516 gtk_signal_connect_object (GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(csd)->ok_button),
2517 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
2519 gtk_signal_connect_object (GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(csd)->cancel_button),
2520 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
2523 /* wait until destroy calls gtk_main_quit */
2524 gtk_widget_show (csd);
2529 cmw_file (GtkWidget *widget, GtkWidget *parent)
2533 fs = gtk_file_selection_new("This is a modal file selection dialog");
2536 gtk_window_set_modal (GTK_WINDOW(fs),TRUE);
2538 /* And mark it as a transient dialog */
2539 gtk_window_set_transient_for (GTK_WINDOW (fs), GTK_WINDOW (parent));
2541 gtk_signal_connect (GTK_OBJECT(fs), "destroy",
2542 GTK_SIGNAL_FUNC(cmw_destroy_cb),NULL);
2544 gtk_signal_connect_object (GTK_OBJECT(GTK_FILE_SELECTION(fs)->ok_button),
2545 "clicked",GTK_SIGNAL_FUNC(gtk_widget_destroy),
2547 gtk_signal_connect_object (GTK_OBJECT(GTK_FILE_SELECTION(fs)->cancel_button),
2548 "clicked",GTK_SIGNAL_FUNC(gtk_widget_destroy),
2551 /* wait until destroy calls gtk_main_quit */
2552 gtk_widget_show (fs);
2559 create_modal_window (void)
2561 GtkWidget *window = NULL;
2562 GtkWidget *box1,*box2;
2564 GtkWidget *btnColor,*btnFile,*btnClose;
2566 /* Create modal window (Here you can use any window descendent )*/
2567 window=gtk_window_new (GTK_WINDOW_TOPLEVEL);
2568 gtk_window_set_title (GTK_WINDOW(window),"This window is modal");
2570 /* Set window as modal */
2571 gtk_window_set_modal (GTK_WINDOW(window),TRUE);
2573 /* Create widgets */
2574 box1 = gtk_vbox_new (FALSE,5);
2575 frame1 = gtk_frame_new ("Standard dialogs in modal form");
2576 box2 = gtk_vbox_new (TRUE,5);
2577 btnColor = gtk_button_new_with_label ("Color");
2578 btnFile = gtk_button_new_with_label ("File Selection");
2579 btnClose = gtk_button_new_with_label ("Close");
2582 gtk_container_set_border_width (GTK_CONTAINER(box1),3);
2583 gtk_container_set_border_width (GTK_CONTAINER(box2),3);
2586 gtk_container_add (GTK_CONTAINER (window), box1);
2587 gtk_box_pack_start (GTK_BOX (box1), frame1, TRUE, TRUE, 4);
2588 gtk_container_add (GTK_CONTAINER (frame1), box2);
2589 gtk_box_pack_start (GTK_BOX (box2), btnColor, FALSE, FALSE, 4);
2590 gtk_box_pack_start (GTK_BOX (box2), btnFile, FALSE, FALSE, 4);
2591 gtk_box_pack_start (GTK_BOX (box1), gtk_hseparator_new (), FALSE, FALSE, 4);
2592 gtk_box_pack_start (GTK_BOX (box1), btnClose, FALSE, FALSE, 4);
2594 /* connect signals */
2595 gtk_signal_connect_object (GTK_OBJECT (btnClose), "clicked",
2596 GTK_SIGNAL_FUNC (gtk_widget_destroy),
2597 GTK_OBJECT (window));
2599 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2600 GTK_SIGNAL_FUNC (cmw_destroy_cb),NULL);
2602 gtk_signal_connect (GTK_OBJECT (btnColor), "clicked",
2603 GTK_SIGNAL_FUNC (cmw_color),window);
2604 gtk_signal_connect (GTK_OBJECT (btnFile), "clicked",
2605 GTK_SIGNAL_FUNC (cmw_file),window);
2608 gtk_widget_show_all (window);
2610 /* wait until dialog get destroyed */
2619 create_scrolled_windows (void)
2621 static GtkWidget *window;
2622 GtkWidget *scrolled_window;
2630 window = gtk_dialog_new ();
2632 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2633 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2636 gtk_window_set_title (GTK_WINDOW (window), "dialog");
2637 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
2640 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
2641 gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10);
2642 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
2643 GTK_POLICY_AUTOMATIC,
2644 GTK_POLICY_AUTOMATIC);
2645 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
2646 scrolled_window, TRUE, TRUE, 0);
2647 gtk_widget_show (scrolled_window);
2649 table = gtk_table_new (20, 20, FALSE);
2650 gtk_table_set_row_spacings (GTK_TABLE (table), 10);
2651 gtk_table_set_col_spacings (GTK_TABLE (table), 10);
2652 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), table);
2653 gtk_container_set_focus_hadjustment (GTK_CONTAINER (table),
2654 gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
2655 gtk_container_set_focus_vadjustment (GTK_CONTAINER (table),
2656 gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
2657 gtk_widget_show (table);
2659 for (i = 0; i < 20; i++)
2660 for (j = 0; j < 20; j++)
2662 sprintf (buffer, "button (%d,%d)\n", i, j);
2663 button = gtk_toggle_button_new_with_label (buffer);
2664 gtk_table_attach_defaults (GTK_TABLE (table), button,
2666 gtk_widget_show (button);
2670 button = gtk_button_new_with_label ("close");
2671 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2672 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2673 GTK_OBJECT (window));
2674 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2675 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
2676 button, TRUE, TRUE, 0);
2677 gtk_widget_grab_default (button);
2678 gtk_widget_show (button);
2680 button = gtk_button_new_with_label ("remove");
2681 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2682 GTK_SIGNAL_FUNC(scrolled_windows_remove),
2683 GTK_OBJECT (scrolled_window));
2684 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2685 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
2686 button, TRUE, TRUE, 0);
2687 gtk_widget_grab_default (button);
2688 gtk_widget_show (button);
2690 gtk_window_set_default_size (GTK_WINDOW (window), 300, 300);
2693 if (!GTK_WIDGET_VISIBLE (window))
2694 gtk_widget_show (window);
2696 gtk_widget_destroy (window);
2704 entry_toggle_editable (GtkWidget *checkbutton,
2707 gtk_entry_set_editable(GTK_ENTRY(entry),
2708 GTK_TOGGLE_BUTTON(checkbutton)->active);
2712 entry_toggle_sensitive (GtkWidget *checkbutton,
2715 gtk_widget_set_sensitive (entry, GTK_TOGGLE_BUTTON(checkbutton)->active);
2719 entry_toggle_visibility (GtkWidget *checkbutton,
2722 gtk_entry_set_visibility(GTK_ENTRY(entry),
2723 GTK_TOGGLE_BUTTON(checkbutton)->active);
2729 static GtkWidget *window = NULL;
2732 GtkWidget *editable_check;
2733 GtkWidget *sensitive_check;
2734 GtkWidget *entry, *cb;
2736 GtkWidget *separator;
2737 GList *cbitems = NULL;
2741 cbitems = g_list_append(cbitems, "item0");
2742 cbitems = g_list_append(cbitems, "item1 item1");
2743 cbitems = g_list_append(cbitems, "item2 item2 item2");
2744 cbitems = g_list_append(cbitems, "item3 item3 item3 item3");
2745 cbitems = g_list_append(cbitems, "item4 item4 item4 item4 item4");
2746 cbitems = g_list_append(cbitems, "item5 item5 item5 item5 item5 item5");
2747 cbitems = g_list_append(cbitems, "item6 item6 item6 item6 item6");
2748 cbitems = g_list_append(cbitems, "item7 item7 item7 item7");
2749 cbitems = g_list_append(cbitems, "item8 item8 item8");
2750 cbitems = g_list_append(cbitems, "item9 item9");
2752 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2754 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2755 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2758 gtk_window_set_title (GTK_WINDOW (window), "entry");
2759 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
2762 box1 = gtk_vbox_new (FALSE, 0);
2763 gtk_container_add (GTK_CONTAINER (window), box1);
2764 gtk_widget_show (box1);
2767 box2 = gtk_vbox_new (FALSE, 10);
2768 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2769 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2770 gtk_widget_show (box2);
2772 entry = gtk_entry_new ();
2773 gtk_entry_set_text (GTK_ENTRY (entry), "hello world");
2774 gtk_editable_select_region (GTK_EDITABLE (entry), 0, 5);
2775 gtk_box_pack_start (GTK_BOX (box2), entry, TRUE, TRUE, 0);
2776 gtk_widget_show (entry);
2778 cb = gtk_combo_new ();
2779 gtk_combo_set_popdown_strings (GTK_COMBO (cb), cbitems);
2780 gtk_entry_set_text (GTK_ENTRY (GTK_COMBO(cb)->entry), "hello world");
2781 gtk_editable_select_region (GTK_EDITABLE (GTK_COMBO(cb)->entry),
2783 gtk_box_pack_start (GTK_BOX (box2), cb, TRUE, TRUE, 0);
2784 gtk_widget_show (cb);
2786 editable_check = gtk_check_button_new_with_label("Editable");
2787 gtk_box_pack_start (GTK_BOX (box2), editable_check, FALSE, TRUE, 0);
2788 gtk_signal_connect (GTK_OBJECT(editable_check), "toggled",
2789 GTK_SIGNAL_FUNC(entry_toggle_editable), entry);
2790 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(editable_check), TRUE);
2791 gtk_widget_show (editable_check);
2793 editable_check = gtk_check_button_new_with_label("Visible");
2794 gtk_box_pack_start (GTK_BOX (box2), editable_check, FALSE, TRUE, 0);
2795 gtk_signal_connect (GTK_OBJECT(editable_check), "toggled",
2796 GTK_SIGNAL_FUNC(entry_toggle_visibility), entry);
2797 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(editable_check), TRUE);
2798 gtk_widget_show (editable_check);
2800 sensitive_check = gtk_check_button_new_with_label("Sensitive");
2801 gtk_box_pack_start (GTK_BOX (box2), sensitive_check, FALSE, TRUE, 0);
2802 gtk_signal_connect (GTK_OBJECT(sensitive_check), "toggled",
2803 GTK_SIGNAL_FUNC(entry_toggle_sensitive), entry);
2804 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(sensitive_check), TRUE);
2805 gtk_widget_show (sensitive_check);
2807 separator = gtk_hseparator_new ();
2808 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2809 gtk_widget_show (separator);
2812 box2 = gtk_vbox_new (FALSE, 10);
2813 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2814 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2815 gtk_widget_show (box2);
2818 button = gtk_button_new_with_label ("close");
2819 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2820 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2821 GTK_OBJECT (window));
2822 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2823 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2824 gtk_widget_grab_default (button);
2825 gtk_widget_show (button);
2828 if (!GTK_WIDGET_VISIBLE (window))
2829 gtk_widget_show (window);
2831 gtk_widget_destroy (window);
2838 static GtkWidget *spinner1;
2841 toggle_snap (GtkWidget *widget, GtkSpinButton *spin)
2843 gtk_spin_button_set_snap_to_ticks (spin, GTK_TOGGLE_BUTTON (widget)->active);
2847 toggle_numeric (GtkWidget *widget, GtkSpinButton *spin)
2849 gtk_spin_button_set_numeric (spin, GTK_TOGGLE_BUTTON (widget)->active);
2853 change_digits (GtkWidget *widget, GtkSpinButton *spin)
2855 gtk_spin_button_set_digits (GTK_SPIN_BUTTON (spinner1),
2856 gtk_spin_button_get_value_as_int (spin));
2860 get_value (GtkWidget *widget, gpointer data)
2864 GtkSpinButton *spin;
2866 spin = GTK_SPIN_BUTTON (spinner1);
2867 label = GTK_LABEL (gtk_object_get_user_data (GTK_OBJECT (widget)));
2868 if (GPOINTER_TO_INT (data) == 1)
2869 sprintf (buf, "%d", gtk_spin_button_get_value_as_int (spin));
2871 sprintf (buf, "%0.*f", spin->digits,
2872 gtk_spin_button_get_value_as_float (spin));
2873 gtk_label_set_text (label, buf);
2879 static GtkWidget *window = NULL;
2882 GtkWidget *main_vbox;
2885 GtkWidget *spinner2;
2889 GtkWidget *val_label;
2894 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2896 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2897 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
2900 gtk_window_set_title (GTK_WINDOW (window), "GtkSpinButton");
2902 main_vbox = gtk_vbox_new (FALSE, 5);
2903 gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 10);
2904 gtk_container_add (GTK_CONTAINER (window), main_vbox);
2906 frame = gtk_frame_new ("Not accelerated");
2907 gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0);
2909 vbox = gtk_vbox_new (FALSE, 0);
2910 gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
2911 gtk_container_add (GTK_CONTAINER (frame), vbox);
2913 /* Day, month, year spinners */
2915 hbox = gtk_hbox_new (FALSE, 0);
2916 gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 5);
2918 vbox2 = gtk_vbox_new (FALSE, 0);
2919 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
2921 label = gtk_label_new ("Day :");
2922 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
2923 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
2925 adj = (GtkAdjustment *) gtk_adjustment_new (1.0, 1.0, 31.0, 1.0,
2927 spinner = gtk_spin_button_new (adj, 0, 0);
2928 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
2929 gtk_spin_button_set_shadow_type (GTK_SPIN_BUTTON (spinner),
2931 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
2933 vbox2 = gtk_vbox_new (FALSE, 0);
2934 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
2936 label = gtk_label_new ("Month :");
2937 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
2938 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
2940 adj = (GtkAdjustment *) gtk_adjustment_new (1.0, 1.0, 12.0, 1.0,
2942 spinner = gtk_spin_button_new (adj, 0, 0);
2943 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
2944 gtk_spin_button_set_shadow_type (GTK_SPIN_BUTTON (spinner),
2945 GTK_SHADOW_ETCHED_IN);
2946 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
2948 vbox2 = gtk_vbox_new (FALSE, 0);
2949 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
2951 label = gtk_label_new ("Year :");
2952 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
2953 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
2955 adj = (GtkAdjustment *) gtk_adjustment_new (1998.0, 0.0, 2100.0,
2957 spinner = gtk_spin_button_new (adj, 0, 0);
2958 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
2959 gtk_spin_button_set_shadow_type (GTK_SPIN_BUTTON (spinner),
2961 gtk_widget_set_usize (spinner, 55, 0);
2962 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
2964 frame = gtk_frame_new ("Accelerated");
2965 gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0);
2967 vbox = gtk_vbox_new (FALSE, 0);
2968 gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
2969 gtk_container_add (GTK_CONTAINER (frame), vbox);
2971 hbox = gtk_hbox_new (FALSE, 0);
2972 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
2974 vbox2 = gtk_vbox_new (FALSE, 0);
2975 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
2977 label = gtk_label_new ("Value :");
2978 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
2979 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
2981 adj = (GtkAdjustment *) gtk_adjustment_new (0.0, -10000.0, 10000.0,
2983 spinner1 = gtk_spin_button_new (adj, 1.0, 2);
2984 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner1), TRUE);
2985 gtk_widget_set_usize (spinner1, 100, 0);
2986 gtk_box_pack_start (GTK_BOX (vbox2), spinner1, FALSE, TRUE, 0);
2988 vbox2 = gtk_vbox_new (FALSE, 0);
2989 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
2991 label = gtk_label_new ("Digits :");
2992 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
2993 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
2995 adj = (GtkAdjustment *) gtk_adjustment_new (2, 1, 5, 1, 1, 0);
2996 spinner2 = gtk_spin_button_new (adj, 0.0, 0);
2997 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner2), TRUE);
2998 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
2999 GTK_SIGNAL_FUNC (change_digits),
3000 (gpointer) spinner2);
3001 gtk_box_pack_start (GTK_BOX (vbox2), spinner2, FALSE, TRUE, 0);
3003 hbox = gtk_hbox_new (FALSE, 0);
3004 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
3006 button = gtk_check_button_new_with_label ("Snap to 0.5-ticks");
3007 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3008 GTK_SIGNAL_FUNC (toggle_snap),
3010 gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
3011 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
3013 button = gtk_check_button_new_with_label ("Numeric only input mode");
3014 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3015 GTK_SIGNAL_FUNC (toggle_numeric),
3017 gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
3018 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
3020 val_label = gtk_label_new ("");
3022 hbox = gtk_hbox_new (FALSE, 0);
3023 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
3025 button = gtk_button_new_with_label ("Value as Int");
3026 gtk_object_set_user_data (GTK_OBJECT (button), val_label);
3027 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3028 GTK_SIGNAL_FUNC (get_value),
3029 GINT_TO_POINTER (1));
3030 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
3032 button = gtk_button_new_with_label ("Value as Float");
3033 gtk_object_set_user_data (GTK_OBJECT (button), val_label);
3034 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3035 GTK_SIGNAL_FUNC (get_value),
3036 GINT_TO_POINTER (2));
3037 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
3039 gtk_box_pack_start (GTK_BOX (vbox), val_label, TRUE, TRUE, 0);
3040 gtk_label_set_text (GTK_LABEL (val_label), "0");
3042 hbox = gtk_hbox_new (FALSE, 0);
3043 gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
3045 button = gtk_button_new_with_label ("Close");
3046 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
3047 GTK_SIGNAL_FUNC (gtk_widget_destroy),
3048 GTK_OBJECT (window));
3049 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
3052 if (!GTK_WIDGET_VISIBLE (window))
3053 gtk_widget_show_all (window);
3055 gtk_widget_destroy (window);
3063 cursor_expose_event (GtkWidget *widget,
3067 GtkDrawingArea *darea;
3068 GdkDrawable *drawable;
3075 g_return_val_if_fail (widget != NULL, TRUE);
3076 g_return_val_if_fail (GTK_IS_DRAWING_AREA (widget), TRUE);
3078 darea = GTK_DRAWING_AREA (widget);
3079 drawable = widget->window;
3080 white_gc = widget->style->white_gc;
3081 gray_gc = widget->style->bg_gc[GTK_STATE_NORMAL];
3082 black_gc = widget->style->black_gc;
3083 max_width = widget->allocation.width;
3084 max_height = widget->allocation.height;
3086 gdk_draw_rectangle (drawable, white_gc,
3093 gdk_draw_rectangle (drawable, black_gc,
3100 gdk_draw_rectangle (drawable, gray_gc,
3111 set_cursor (GtkWidget *spinner,
3119 c = CLAMP (gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spinner)), 0, 152);
3122 label = gtk_object_get_user_data (GTK_OBJECT (spinner));
3123 vals = gtk_type_enum_get_values (GTK_TYPE_GDK_CURSOR_TYPE);
3124 while (vals && vals->value != c)
3127 gtk_label_set_text (GTK_LABEL (label), vals->value_nick);
3129 gtk_label_set_text (GTK_LABEL (label), "<unknown>");
3131 cursor = gdk_cursor_new (c);
3132 gdk_window_set_cursor (widget->window, cursor);
3133 gdk_cursor_destroy (cursor);
3137 cursor_event (GtkWidget *widget,
3139 GtkSpinButton *spinner)
3141 if ((event->type == GDK_BUTTON_PRESS) &&
3142 ((event->button.button == 1) ||
3143 (event->button.button == 3)))
3145 gtk_spin_button_spin (spinner, event->button.button == 1 ?
3146 GTK_SPIN_STEP_FORWARD : GTK_SPIN_STEP_BACKWARD, 0);
3154 create_cursors (void)
3156 static GtkWidget *window = NULL;
3159 GtkWidget *main_vbox;
3170 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3172 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3173 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
3176 gtk_window_set_title (GTK_WINDOW (window), "Cursors");
3178 main_vbox = gtk_vbox_new (FALSE, 5);
3179 gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 0);
3180 gtk_container_add (GTK_CONTAINER (window), main_vbox);
3183 gtk_widget_new (gtk_vbox_get_type (),
3184 "GtkBox::homogeneous", FALSE,
3185 "GtkBox::spacing", 5,
3186 "GtkContainer::border_width", 10,
3187 "GtkWidget::parent", main_vbox,
3188 "GtkWidget::visible", TRUE,
3191 hbox = gtk_hbox_new (FALSE, 0);
3192 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
3193 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
3195 label = gtk_label_new ("Cursor Value : ");
3196 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
3197 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
3199 adj = (GtkAdjustment *) gtk_adjustment_new (0,
3203 spinner = gtk_spin_button_new (adj, 0, 0);
3204 gtk_box_pack_start (GTK_BOX (hbox), spinner, TRUE, TRUE, 0);
3207 gtk_widget_new (gtk_frame_get_type (),
3208 "GtkFrame::shadow", GTK_SHADOW_ETCHED_IN,
3209 "GtkFrame::label_xalign", 0.5,
3210 "GtkFrame::label", "Cursor Area",
3211 "GtkContainer::border_width", 10,
3212 "GtkWidget::parent", vbox,
3213 "GtkWidget::visible", TRUE,
3216 darea = gtk_drawing_area_new ();
3217 gtk_widget_set_usize (darea, 80, 80);
3218 gtk_container_add (GTK_CONTAINER (frame), darea);
3219 gtk_signal_connect (GTK_OBJECT (darea),
3221 GTK_SIGNAL_FUNC (cursor_expose_event),
3223 gtk_widget_set_events (darea, GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK);
3224 gtk_signal_connect (GTK_OBJECT (darea),
3225 "button_press_event",
3226 GTK_SIGNAL_FUNC (cursor_event),
3228 gtk_widget_show (darea);
3230 gtk_signal_connect (GTK_OBJECT (spinner), "changed",
3231 GTK_SIGNAL_FUNC (set_cursor),
3234 label = gtk_widget_new (GTK_TYPE_LABEL,
3239 gtk_container_child_set (GTK_CONTAINER (vbox), label,
3242 gtk_object_set_user_data (GTK_OBJECT (spinner), label);
3245 gtk_widget_new (gtk_hseparator_get_type (),
3246 "GtkWidget::visible", TRUE,
3248 gtk_box_pack_start (GTK_BOX (main_vbox), any, FALSE, TRUE, 0);
3250 hbox = gtk_hbox_new (FALSE, 0);
3251 gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
3252 gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
3254 button = gtk_button_new_with_label ("Close");
3255 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
3256 GTK_SIGNAL_FUNC (gtk_widget_destroy),
3257 GTK_OBJECT (window));
3258 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
3260 gtk_widget_show_all (window);
3262 set_cursor (spinner, darea);
3265 gtk_widget_destroy (window);
3273 list_add (GtkWidget *widget,
3278 GtkWidget *list_item;
3279 GtkContainer *container;
3281 container = GTK_CONTAINER (list);
3283 sprintf (buffer, "added item %d", i++);
3284 list_item = gtk_list_item_new_with_label (buffer);
3285 gtk_widget_show (list_item);
3287 gtk_container_add (container, list_item);
3291 list_remove (GtkWidget *widget,
3294 GList *clear_list = NULL;
3295 GList *sel_row = NULL;
3298 if (list->selection_mode == GTK_SELECTION_EXTENDED)
3302 item = GTK_CONTAINER (list)->focus_child;
3303 if (!item && list->selection)
3304 item = list->selection->data;
3308 work = g_list_find (list->children, item);
3309 for (sel_row = work; sel_row; sel_row = sel_row->next)
3310 if (GTK_WIDGET (sel_row->data)->state != GTK_STATE_SELECTED)
3315 for (sel_row = work; sel_row; sel_row = sel_row->prev)
3316 if (GTK_WIDGET (sel_row->data)->state != GTK_STATE_SELECTED)
3322 for (work = list->selection; work; work = work->next)
3323 clear_list = g_list_prepend (clear_list, work->data);
3325 clear_list = g_list_reverse (clear_list);
3326 gtk_list_remove_items (GTK_LIST (list), clear_list);
3327 g_list_free (clear_list);
3329 if (list->selection_mode == GTK_SELECTION_EXTENDED && sel_row)
3330 gtk_list_select_child (list, GTK_WIDGET(sel_row->data));
3334 list_clear (GtkWidget *widget,
3337 gtk_list_clear_items (GTK_LIST (list), 0, -1);
3340 #define RADIOMENUTOGGLED(_rmi_, __i) { \
3343 __g = gtk_radio_menu_item_group(_rmi_); \
3344 while( __g && !((GtkCheckMenuItem *)(__g->data))->active) { \
3350 static GtkWidget *list_omenu;
3353 list_toggle_sel_mode (GtkWidget *widget, GtkList *list)
3357 if (!GTK_WIDGET_MAPPED (widget))
3360 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
3361 (((GtkOptionMenu *)list_omenu)->menu_item), i);
3363 gtk_list_set_selection_mode (list, (GtkSelectionMode) (3-i));
3369 static GtkWidget *window = NULL;
3371 static OptionMenuItem items[] =
3373 { "Single", list_toggle_sel_mode },
3374 { "Browse", list_toggle_sel_mode },
3375 { "Multiple", list_toggle_sel_mode },
3376 { "Extended", list_toggle_sel_mode }
3385 GtkWidget *scrolled_win;
3388 GtkWidget *separator;
3391 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3393 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3394 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
3397 gtk_window_set_title (GTK_WINDOW (window), "list");
3398 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
3400 vbox = gtk_vbox_new (FALSE, 0);
3401 gtk_container_add (GTK_CONTAINER (window), vbox);
3403 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
3404 gtk_container_set_border_width (GTK_CONTAINER (scrolled_win), 5);
3405 gtk_widget_set_usize (scrolled_win, -1, 300);
3406 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
3407 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
3408 GTK_POLICY_AUTOMATIC,
3409 GTK_POLICY_AUTOMATIC);
3411 list = gtk_list_new ();
3412 gtk_list_set_selection_mode (GTK_LIST (list), GTK_SELECTION_EXTENDED);
3413 gtk_scrolled_window_add_with_viewport
3414 (GTK_SCROLLED_WINDOW (scrolled_win), list);
3415 gtk_container_set_focus_vadjustment
3416 (GTK_CONTAINER (list),
3417 gtk_scrolled_window_get_vadjustment
3418 (GTK_SCROLLED_WINDOW (scrolled_win)));
3419 gtk_container_set_focus_hadjustment
3420 (GTK_CONTAINER (list),
3421 gtk_scrolled_window_get_hadjustment
3422 (GTK_SCROLLED_WINDOW (scrolled_win)));
3424 if ((infile = fopen("gtkenums.h", "r")))
3430 while (fgets (buffer, 256, infile))
3432 if ((pos = strchr (buffer, '\n')))
3434 item = gtk_list_item_new_with_label (buffer);
3435 gtk_container_add (GTK_CONTAINER (list), item);
3442 hbox = gtk_hbox_new (TRUE, 5);
3443 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
3444 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
3446 button = gtk_button_new_with_label ("Insert Row");
3447 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
3448 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3449 GTK_SIGNAL_FUNC (list_add),
3452 button = gtk_button_new_with_label ("Clear List");
3453 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
3454 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3455 GTK_SIGNAL_FUNC (list_clear),
3458 button = gtk_button_new_with_label ("Remove Selection");
3459 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
3460 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3461 GTK_SIGNAL_FUNC (list_remove),
3464 cbox = gtk_hbox_new (FALSE, 0);
3465 gtk_box_pack_start (GTK_BOX (vbox), cbox, FALSE, TRUE, 0);
3467 hbox = gtk_hbox_new (FALSE, 5);
3468 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
3469 gtk_box_pack_start (GTK_BOX (cbox), hbox, TRUE, FALSE, 0);
3471 label = gtk_label_new ("Selection Mode :");
3472 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
3474 list_omenu = build_option_menu (items, 4, 3, list);
3475 gtk_box_pack_start (GTK_BOX (hbox), list_omenu, FALSE, TRUE, 0);
3477 separator = gtk_hseparator_new ();
3478 gtk_box_pack_start (GTK_BOX (vbox), separator, FALSE, TRUE, 0);
3480 cbox = gtk_hbox_new (FALSE, 0);
3481 gtk_box_pack_start (GTK_BOX (vbox), cbox, FALSE, TRUE, 0);
3483 button = gtk_button_new_with_label ("close");
3484 gtk_container_set_border_width (GTK_CONTAINER (button), 10);
3485 gtk_box_pack_start (GTK_BOX (cbox), button, TRUE, TRUE, 0);
3486 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
3487 GTK_SIGNAL_FUNC(gtk_widget_destroy),
3488 GTK_OBJECT (window));
3490 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
3491 gtk_widget_grab_default (button);
3494 if (!GTK_WIDGET_VISIBLE (window))
3495 gtk_widget_show_all (window);
3497 gtk_widget_destroy (window);
3504 static char * book_open_xpm[] = {
3527 static char * book_closed_xpm[] = {
3552 static char * mini_page_xpm[] = {
3575 static char * gtk_mini_xpm[] = {
3615 #define TESTGTK_CLIST_COLUMNS 12
3616 static gint clist_rows = 0;
3617 static GtkWidget *clist_omenu;
3620 add1000_clist (GtkWidget *widget, gpointer data)
3623 char text[TESTGTK_CLIST_COLUMNS][50];
3624 char *texts[TESTGTK_CLIST_COLUMNS];
3629 clist = GTK_CLIST (data);
3631 pixmap = gdk_pixmap_create_from_xpm_d (clist->clist_window,
3633 >K_WIDGET (data)->style->white,
3636 for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++)
3639 sprintf (text[i], "Column %d", i);
3643 sprintf (text[1], "Right");
3644 sprintf (text[2], "Center");
3646 gtk_clist_freeze (GTK_CLIST (data));
3647 for (i = 0; i < 1000; i++)
3649 sprintf (text[0], "CListRow %d", rand() % 10000);
3650 row = gtk_clist_append (clist, texts);
3651 gtk_clist_set_pixtext (clist, row, 3, "gtk+", 5, pixmap, mask);
3654 gtk_clist_thaw (GTK_CLIST (data));
3656 gdk_pixmap_unref (pixmap);
3657 gdk_bitmap_unref (mask);
3661 add10000_clist (GtkWidget *widget, gpointer data)
3664 char text[TESTGTK_CLIST_COLUMNS][50];
3665 char *texts[TESTGTK_CLIST_COLUMNS];
3667 for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++)
3670 sprintf (text[i], "Column %d", i);
3673 sprintf (text[1], "Right");
3674 sprintf (text[2], "Center");
3676 gtk_clist_freeze (GTK_CLIST (data));
3677 for (i = 0; i < 10000; i++)
3679 sprintf (text[0], "CListRow %d", rand() % 10000);
3680 gtk_clist_append (GTK_CLIST (data), texts);
3682 gtk_clist_thaw (GTK_CLIST (data));
3686 clear_clist (GtkWidget *widget, gpointer data)
3688 gtk_clist_clear (GTK_CLIST (data));
3692 void clist_remove_selection (GtkWidget *widget, GtkCList *clist)
3694 gtk_clist_freeze (clist);
3696 while (clist->selection)
3701 row = GPOINTER_TO_INT (clist->selection->data);
3703 gtk_clist_remove (clist, row);
3705 if (clist->selection_mode == GTK_SELECTION_BROWSE)
3709 if (clist->selection_mode == GTK_SELECTION_EXTENDED && !clist->selection &&
3710 clist->focus_row >= 0)
3711 gtk_clist_select_row (clist, clist->focus_row, -1);
3713 gtk_clist_thaw (clist);
3716 void toggle_title_buttons (GtkWidget *widget, GtkCList *clist)
3718 if (GTK_TOGGLE_BUTTON (widget)->active)
3719 gtk_clist_column_titles_show (clist);
3721 gtk_clist_column_titles_hide (clist);
3724 void toggle_reorderable (GtkWidget *widget, GtkCList *clist)
3726 gtk_clist_set_reorderable (clist, GTK_TOGGLE_BUTTON (widget)->active);
3730 insert_row_clist (GtkWidget *widget, gpointer data)
3732 static char *text[] =
3734 "This", "is an", "inserted", "row.",
3735 "This", "is an", "inserted", "row.",
3736 "This", "is an", "inserted", "row."
3739 static GtkStyle *style1 = NULL;
3740 static GtkStyle *style2 = NULL;
3741 static GtkStyle *style3 = NULL;
3744 if (GTK_CLIST (data)->focus_row >= 0)
3745 row = gtk_clist_insert (GTK_CLIST (data), GTK_CLIST (data)->focus_row,
3748 row = gtk_clist_prepend (GTK_CLIST (data), text);
3762 style1 = gtk_style_copy (GTK_WIDGET (data)->style);
3763 style1->base[GTK_STATE_NORMAL] = col1;
3764 style1->base[GTK_STATE_SELECTED] = col2;
3766 style2 = gtk_style_copy (GTK_WIDGET (data)->style);
3767 style2->fg[GTK_STATE_NORMAL] = col1;
3768 style2->fg[GTK_STATE_SELECTED] = col2;
3770 style3 = gtk_style_copy (GTK_WIDGET (data)->style);
3771 style3->fg[GTK_STATE_NORMAL] = col1;
3772 style3->base[GTK_STATE_NORMAL] = col2;
3773 gdk_font_unref (style3->font);
3775 gdk_font_load ("-*-courier-medium-*-*-*-*-120-*-*-*-*-*-*");
3778 gtk_clist_set_cell_style (GTK_CLIST (data), row, 3, style1);
3779 gtk_clist_set_cell_style (GTK_CLIST (data), row, 4, style2);
3780 gtk_clist_set_cell_style (GTK_CLIST (data), row, 0, style3);
3786 clist_warning_test (GtkWidget *button,
3790 static gboolean add_remove = FALSE;
3792 add_remove = !add_remove;
3794 child = gtk_label_new ("Test");
3795 gtk_widget_ref (child);
3796 gtk_object_sink (GTK_OBJECT (child));
3799 gtk_container_add (GTK_CONTAINER (clist), child);
3802 child->parent = clist;
3803 gtk_container_remove (GTK_CONTAINER (clist), child);
3804 child->parent = NULL;
3807 gtk_widget_destroy (child);
3808 gtk_widget_unref (child);
3812 undo_selection (GtkWidget *button, GtkCList *clist)
3814 gtk_clist_undo_selection (clist);
3818 clist_toggle_sel_mode (GtkWidget *widget, GtkCList *clist)
3822 if (!GTK_WIDGET_MAPPED (widget))
3825 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
3826 (((GtkOptionMenu *)clist_omenu)->menu_item), i);
3828 gtk_clist_set_selection_mode (clist, (GtkSelectionMode) (3-i));
3832 clist_click_column (GtkCList *clist, gint column, gpointer data)
3835 gtk_clist_set_column_visibility (clist, column, FALSE);
3836 else if (column == clist->sort_column)
3838 if (clist->sort_type == GTK_SORT_ASCENDING)
3839 clist->sort_type = GTK_SORT_DESCENDING;
3841 clist->sort_type = GTK_SORT_ASCENDING;
3844 gtk_clist_set_sort_column (clist, column);
3846 gtk_clist_sort (clist);
3853 static GtkWidget *window = NULL;
3855 static char *titles[] =
3857 "auto resize", "not resizeable", "max width 100", "min width 50",
3858 "hide column", "Title 5", "Title 6", "Title 7",
3859 "Title 8", "Title 9", "Title 10", "Title 11"
3862 static OptionMenuItem items[] =
3864 { "Single", clist_toggle_sel_mode },
3865 { "Browse", clist_toggle_sel_mode },
3866 { "Multiple", clist_toggle_sel_mode },
3867 { "Extended", clist_toggle_sel_mode }
3870 char text[TESTGTK_CLIST_COLUMNS][50];
3871 char *texts[TESTGTK_CLIST_COLUMNS];
3877 GtkWidget *separator;
3878 GtkWidget *scrolled_win;
3881 GtkWidget *undo_button;
3891 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3893 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3894 GTK_SIGNAL_FUNC (gtk_widget_destroyed), &window);
3896 gtk_window_set_title (GTK_WINDOW (window), "clist");
3897 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
3899 vbox = gtk_vbox_new (FALSE, 0);
3900 gtk_container_add (GTK_CONTAINER (window), vbox);
3902 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
3903 gtk_container_set_border_width (GTK_CONTAINER (scrolled_win), 5);
3904 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
3905 GTK_POLICY_AUTOMATIC,
3906 GTK_POLICY_AUTOMATIC);
3908 /* create GtkCList here so we have a pointer to throw at the
3909 * button callbacks -- more is done with it later */
3910 clist = gtk_clist_new_with_titles (TESTGTK_CLIST_COLUMNS, titles);
3911 gtk_container_add (GTK_CONTAINER (scrolled_win), clist);
3912 gtk_signal_connect (GTK_OBJECT (clist), "click_column",
3913 (GtkSignalFunc) clist_click_column, NULL);
3915 /* control buttons */
3916 hbox = gtk_hbox_new (FALSE, 5);
3917 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
3918 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
3920 button = gtk_button_new_with_label ("Insert Row");
3921 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
3922 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3923 (GtkSignalFunc) insert_row_clist, (gpointer) clist);
3925 button = gtk_button_new_with_label ("Add 1,000 Rows With Pixmaps");
3926 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
3927 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3928 (GtkSignalFunc) add1000_clist, (gpointer) clist);
3930 button = gtk_button_new_with_label ("Add 10,000 Rows");
3931 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
3932 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3933 (GtkSignalFunc) add10000_clist, (gpointer) clist);
3935 /* second layer of buttons */
3936 hbox = gtk_hbox_new (FALSE, 5);
3937 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
3938 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
3940 button = gtk_button_new_with_label ("Clear List");
3941 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
3942 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3943 (GtkSignalFunc) clear_clist, (gpointer) clist);
3945 button = gtk_button_new_with_label ("Remove Selection");
3946 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
3947 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3948 (GtkSignalFunc) clist_remove_selection,
3951 undo_button = gtk_button_new_with_label ("Undo Selection");
3952 gtk_box_pack_start (GTK_BOX (hbox), undo_button, TRUE, TRUE, 0);
3953 gtk_signal_connect (GTK_OBJECT (undo_button), "clicked",
3954 (GtkSignalFunc) undo_selection, (gpointer) clist);
3956 button = gtk_button_new_with_label ("Warning Test");
3957 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
3958 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3959 (GtkSignalFunc) clist_warning_test,(gpointer) clist);
3961 /* third layer of buttons */
3962 hbox = gtk_hbox_new (FALSE, 5);
3963 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
3964 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
3966 check = gtk_check_button_new_with_label ("Show Title Buttons");
3967 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
3968 gtk_signal_connect (GTK_OBJECT (check), "clicked",
3969 GTK_SIGNAL_FUNC (toggle_title_buttons), clist);
3970 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE);
3972 check = gtk_check_button_new_with_label ("Reorderable");
3973 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
3974 gtk_signal_connect (GTK_OBJECT (check), "clicked",
3975 GTK_SIGNAL_FUNC (toggle_reorderable), clist);
3976 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE);
3978 label = gtk_label_new ("Selection Mode :");
3979 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
3981 clist_omenu = build_option_menu (items, 4, 3, clist);
3982 gtk_box_pack_start (GTK_BOX (hbox), clist_omenu, FALSE, TRUE, 0);
3985 * the rest of the clist configuration
3988 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
3989 gtk_clist_set_row_height (GTK_CLIST (clist), 18);
3990 gtk_widget_set_usize (clist, -1, 300);
3992 for (i = 1; i < TESTGTK_CLIST_COLUMNS; i++)
3993 gtk_clist_set_column_width (GTK_CLIST (clist), i, 80);
3995 gtk_clist_set_column_auto_resize (GTK_CLIST (clist), 0, TRUE);
3996 gtk_clist_set_column_resizeable (GTK_CLIST (clist), 1, FALSE);
3997 gtk_clist_set_column_max_width (GTK_CLIST (clist), 2, 100);
3998 gtk_clist_set_column_min_width (GTK_CLIST (clist), 3, 50);
3999 gtk_clist_set_selection_mode (GTK_CLIST (clist), GTK_SELECTION_EXTENDED);
4000 gtk_clist_set_column_justification (GTK_CLIST (clist), 1,
4002 gtk_clist_set_column_justification (GTK_CLIST (clist), 2,
4003 GTK_JUSTIFY_CENTER);
4005 for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++)
4008 sprintf (text[i], "Column %d", i);
4011 sprintf (text[1], "Right");
4012 sprintf (text[2], "Center");
4021 style = gtk_style_new ();
4022 style->fg[GTK_STATE_NORMAL] = col1;
4023 style->base[GTK_STATE_NORMAL] = col2;
4025 gdk_font_unref (style->font);
4027 gdk_font_load ("-adobe-helvetica-bold-r-*-*-*-140-*-*-*-*-*-*");
4029 for (i = 0; i < 10; i++)
4031 sprintf (text[0], "CListRow %d", clist_rows++);
4032 gtk_clist_append (GTK_CLIST (clist), texts);
4037 gtk_clist_set_row_style (GTK_CLIST (clist), i, style);
4040 gtk_clist_set_cell_style (GTK_CLIST (clist), i, i % 4, style);
4045 separator = gtk_hseparator_new ();
4046 gtk_box_pack_start (GTK_BOX (vbox), separator, FALSE, TRUE, 0);
4048 hbox = gtk_hbox_new (FALSE, 0);
4049 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
4051 button = gtk_button_new_with_label ("close");
4052 gtk_container_set_border_width (GTK_CONTAINER (button), 10);
4053 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4054 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
4055 GTK_SIGNAL_FUNC(gtk_widget_destroy),
4056 GTK_OBJECT (window));
4058 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
4059 gtk_widget_grab_default (button);
4062 if (!GTK_WIDGET_VISIBLE (window))
4063 gtk_widget_show_all (window);
4067 gtk_widget_destroy (window);
4082 static gint books = 0;
4083 static gint pages = 0;
4085 static GtkWidget *book_label;
4086 static GtkWidget *page_label;
4087 static GtkWidget *sel_label;
4088 static GtkWidget *vis_label;
4089 static GtkWidget *omenu1;
4090 static GtkWidget *omenu2;
4091 static GtkWidget *omenu3;
4092 static GtkWidget *omenu4;
4093 static GtkWidget *spin1;
4094 static GtkWidget *spin2;
4095 static GtkWidget *spin3;
4096 static gint line_style;
4098 void after_press (GtkCTree *ctree, gpointer data)
4102 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->selection));
4103 gtk_label_set_text (GTK_LABEL (sel_label), buf);
4105 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->row_list));
4106 gtk_label_set_text (GTK_LABEL (vis_label), buf);
4108 sprintf (buf, "%d", books);
4109 gtk_label_set_text (GTK_LABEL (book_label), buf);
4111 sprintf (buf, "%d", pages);
4112 gtk_label_set_text (GTK_LABEL (page_label), buf);
4115 void after_move (GtkCTree *ctree, GtkCTreeNode *child, GtkCTreeNode *parent,
4116 GtkCTreeNode *sibling, gpointer data)
4122 gtk_ctree_get_node_info (ctree, child, &source,
4123 NULL, NULL, NULL, NULL, NULL, NULL, NULL);
4125 gtk_ctree_get_node_info (ctree, parent, &target1,
4126 NULL, NULL, NULL, NULL, NULL, NULL, NULL);
4128 gtk_ctree_get_node_info (ctree, sibling, &target2,
4129 NULL, NULL, NULL, NULL, NULL, NULL, NULL);
4131 g_print ("Moving \"%s\" to \"%s\" with sibling \"%s\".\n", source,
4132 (parent) ? target1 : "nil", (sibling) ? target2 : "nil");
4135 void count_items (GtkCTree *ctree, GtkCTreeNode *list)
4137 if (GTK_CTREE_ROW (list)->is_leaf)
4143 void expand_all (GtkWidget *widget, GtkCTree *ctree)
4145 gtk_ctree_expand_recursive (ctree, NULL);
4146 after_press (ctree, NULL);
4149 void collapse_all (GtkWidget *widget, GtkCTree *ctree)
4151 gtk_ctree_collapse_recursive (ctree, NULL);
4152 after_press (ctree, NULL);
4155 void select_all (GtkWidget *widget, GtkCTree *ctree)
4157 gtk_ctree_select_recursive (ctree, NULL);
4158 after_press (ctree, NULL);
4161 void change_style (GtkWidget *widget, GtkCTree *ctree)
4163 static GtkStyle *style1 = NULL;
4164 static GtkStyle *style2 = NULL;
4170 if (GTK_CLIST (ctree)->focus_row >= 0)
4171 node = GTK_CTREE_NODE
4172 (g_list_nth (GTK_CLIST (ctree)->row_list,GTK_CLIST (ctree)->focus_row));
4174 node = GTK_CTREE_NODE (GTK_CLIST (ctree)->row_list);
4188 style1 = gtk_style_new ();
4189 style1->base[GTK_STATE_NORMAL] = col1;
4190 style1->fg[GTK_STATE_SELECTED] = col2;
4192 style2 = gtk_style_new ();
4193 style2->base[GTK_STATE_SELECTED] = col2;
4194 style2->fg[GTK_STATE_NORMAL] = col1;
4195 style2->base[GTK_STATE_NORMAL] = col2;
4196 gdk_font_unref (style2->font);
4198 gdk_font_load ("-*-courier-medium-*-*-*-*-300-*-*-*-*-*-*");
4201 gtk_ctree_node_set_cell_style (ctree, node, 1, style1);
4202 gtk_ctree_node_set_cell_style (ctree, node, 0, style2);
4204 if (GTK_CTREE_ROW (node)->children)
4205 gtk_ctree_node_set_row_style (ctree, GTK_CTREE_ROW (node)->children,
4209 void unselect_all (GtkWidget *widget, GtkCTree *ctree)
4211 gtk_ctree_unselect_recursive (ctree, NULL);
4212 after_press (ctree, NULL);
4215 void remove_selection (GtkWidget *widget, GtkCTree *ctree)
4220 clist = GTK_CLIST (ctree);
4222 gtk_clist_freeze (clist);
4224 while (clist->selection)
4226 node = clist->selection->data;
4228 if (GTK_CTREE_ROW (node)->is_leaf)
4231 gtk_ctree_post_recursive (ctree, node,
4232 (GtkCTreeFunc) count_items, NULL);
4234 gtk_ctree_remove_node (ctree, node);
4236 if (clist->selection_mode == GTK_SELECTION_BROWSE)
4240 if (clist->selection_mode == GTK_SELECTION_EXTENDED && !clist->selection &&
4241 clist->focus_row >= 0)
4243 node = gtk_ctree_node_nth (ctree, clist->focus_row);
4246 gtk_ctree_select (ctree, node);
4249 gtk_clist_thaw (clist);
4250 after_press (ctree, NULL);
4253 struct _ExportStruct {
4259 typedef struct _ExportStruct ExportStruct;
4262 gnode2ctree (GtkCTree *ctree,
4265 GtkCTreeNode *cnode,
4269 GdkPixmap *pixmap_closed;
4270 GdkBitmap *mask_closed;
4271 GdkPixmap *pixmap_opened;
4272 GdkBitmap *mask_opened;
4274 if (!cnode || !gnode || (!(es = gnode->data)))
4279 pixmap_closed = pixmap3;
4280 mask_closed = mask3;
4281 pixmap_opened = NULL;
4286 pixmap_closed = pixmap1;
4287 mask_closed = mask1;
4288 pixmap_opened = pixmap2;
4289 mask_opened = mask2;
4292 gtk_ctree_set_node_info (ctree, cnode, es->tree, 2, pixmap_closed,
4293 mask_closed, pixmap_opened, mask_opened,
4294 es->is_leaf, (depth < 3));
4295 gtk_ctree_node_set_text (ctree, cnode, 1, es->info);
4303 ctree2gnode (GtkCTree *ctree,
4306 GtkCTreeNode *cnode,
4311 if (!cnode || !gnode)
4314 es = g_new (ExportStruct, 1);
4316 es->is_leaf = GTK_CTREE_ROW (cnode)->is_leaf;
4317 es->tree = GTK_CELL_PIXTEXT (GTK_CTREE_ROW (cnode)->row.cell[0])->text;
4318 es->info = GTK_CELL_PIXTEXT (GTK_CTREE_ROW (cnode)->row.cell[1])->text;
4322 void export_ctree (GtkWidget *widget, GtkCTree *ctree)
4324 char *title[] = { "Tree" , "Info" };
4325 static GtkWidget *export_window = NULL;
4326 static GtkCTree *export_ctree;
4328 GtkWidget *scrolled_win;
4336 export_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
4338 gtk_signal_connect (GTK_OBJECT (export_window), "destroy",
4339 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
4342 gtk_window_set_title (GTK_WINDOW (export_window), "exported ctree");
4343 gtk_container_set_border_width (GTK_CONTAINER (export_window), 5);
4345 vbox = gtk_vbox_new (FALSE, 0);
4346 gtk_container_add (GTK_CONTAINER (export_window), vbox);
4348 button = gtk_button_new_with_label ("Close");
4349 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, TRUE, 0);
4351 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
4352 (GtkSignalFunc) gtk_widget_destroy,
4353 GTK_OBJECT(export_window));
4355 sep = gtk_hseparator_new ();
4356 gtk_box_pack_end (GTK_BOX (vbox), sep, FALSE, TRUE, 10);
4358 export_ctree = GTK_CTREE (gtk_ctree_new_with_titles (2, 0, title));
4359 gtk_ctree_set_line_style (export_ctree, GTK_CTREE_LINES_DOTTED);
4361 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
4362 gtk_container_add (GTK_CONTAINER (scrolled_win),
4363 GTK_WIDGET (export_ctree));
4364 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
4365 GTK_POLICY_AUTOMATIC,
4366 GTK_POLICY_AUTOMATIC);
4367 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
4368 gtk_clist_set_selection_mode (GTK_CLIST (export_ctree),
4369 GTK_SELECTION_EXTENDED);
4370 gtk_clist_set_column_width (GTK_CLIST (export_ctree), 0, 200);
4371 gtk_clist_set_column_width (GTK_CLIST (export_ctree), 1, 200);
4372 gtk_widget_set_usize (GTK_WIDGET (export_ctree), 300, 200);
4375 if (!GTK_WIDGET_VISIBLE (export_window))
4376 gtk_widget_show_all (export_window);
4378 gtk_clist_clear (GTK_CLIST (export_ctree));
4380 node = GTK_CTREE_NODE (g_list_nth (GTK_CLIST (ctree)->row_list,
4381 GTK_CLIST (ctree)->focus_row));
4385 gnode = gtk_ctree_export_to_gnode (ctree, NULL, NULL, node,
4389 gtk_ctree_insert_gnode (export_ctree, NULL, NULL, gnode,
4391 g_node_destroy (gnode);
4395 void change_indent (GtkWidget *widget, GtkCTree *ctree)
4397 gtk_ctree_set_indent (ctree, GTK_ADJUSTMENT (widget)->value);
4400 void change_spacing (GtkWidget *widget, GtkCTree *ctree)
4402 gtk_ctree_set_spacing (ctree, GTK_ADJUSTMENT (widget)->value);
4405 void change_row_height (GtkWidget *widget, GtkCList *clist)
4407 gtk_clist_set_row_height (clist, GTK_ADJUSTMENT (widget)->value);
4410 void set_background (GtkCTree *ctree, GtkCTreeNode *node, gpointer data)
4412 GtkStyle *style = NULL;
4417 if (ctree->line_style != GTK_CTREE_LINES_TABBED)
4419 if (!GTK_CTREE_ROW (node)->is_leaf)
4420 style = GTK_CTREE_ROW (node)->row.data;
4421 else if (GTK_CTREE_ROW (node)->parent)
4422 style = GTK_CTREE_ROW (GTK_CTREE_ROW (node)->parent)->row.data;
4425 gtk_ctree_node_set_row_style (ctree, node, style);
4428 void ctree_toggle_line_style (GtkWidget *widget, GtkCTree *ctree)
4432 if (!GTK_WIDGET_MAPPED (widget))
4435 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
4436 (((GtkOptionMenu *)omenu1)->menu_item), i);
4438 if ((ctree->line_style == GTK_CTREE_LINES_TABBED &&
4439 ((GtkCTreeLineStyle) (3 - i)) != GTK_CTREE_LINES_TABBED) ||
4440 (ctree->line_style != GTK_CTREE_LINES_TABBED &&
4441 ((GtkCTreeLineStyle) (3 - i)) == GTK_CTREE_LINES_TABBED))
4442 gtk_ctree_pre_recursive (ctree, NULL, set_background, NULL);
4443 gtk_ctree_set_line_style (ctree, 3 - i);
4447 void ctree_toggle_expander_style (GtkWidget *widget, GtkCTree *ctree)
4451 if (!GTK_WIDGET_MAPPED (widget))
4454 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
4455 (((GtkOptionMenu *)omenu2)->menu_item), i);
4457 gtk_ctree_set_expander_style (ctree, (GtkCTreeExpanderStyle) (3 - i));
4460 void ctree_toggle_justify (GtkWidget *widget, GtkCTree *ctree)
4464 if (!GTK_WIDGET_MAPPED (widget))
4467 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
4468 (((GtkOptionMenu *)omenu3)->menu_item), i);
4470 gtk_clist_set_column_justification (GTK_CLIST (ctree), ctree->tree_column,
4471 (GtkJustification) (1 - i));
4474 void ctree_toggle_sel_mode (GtkWidget *widget, GtkCTree *ctree)
4478 if (!GTK_WIDGET_MAPPED (widget))
4481 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
4482 (((GtkOptionMenu *)omenu4)->menu_item), i);
4484 gtk_clist_set_selection_mode (GTK_CLIST (ctree), (GtkSelectionMode) (3 - i));
4485 after_press (ctree, NULL);
4488 void build_recursive (GtkCTree *ctree, gint cur_depth, gint depth,
4489 gint num_books, gint num_pages, GtkCTreeNode *parent)
4494 GtkCTreeNode *sibling;
4501 for (i = num_pages + num_books; i > num_books; i--)
4504 sprintf (buf1, "Page %02d", (gint) rand() % 100);
4505 sprintf (buf2, "Item %d-%d", cur_depth, i);
4506 sibling = gtk_ctree_insert_node (ctree, parent, sibling, text, 5,
4507 pixmap3, mask3, NULL, NULL,
4510 if (parent && ctree->line_style == GTK_CTREE_LINES_TABBED)
4511 gtk_ctree_node_set_row_style (ctree, sibling,
4512 GTK_CTREE_ROW (parent)->row.style);
4515 if (cur_depth == depth)
4518 for (i = num_books; i > 0; i--)
4523 sprintf (buf1, "Book %02d", (gint) rand() % 100);
4524 sprintf (buf2, "Item %d-%d", cur_depth, i);
4525 sibling = gtk_ctree_insert_node (ctree, parent, sibling, text, 5,
4526 pixmap1, mask1, pixmap2, mask2,
4529 style = gtk_style_new ();
4530 switch (cur_depth % 3)
4533 style->base[GTK_STATE_NORMAL].red = 10000 * (cur_depth % 6);
4534 style->base[GTK_STATE_NORMAL].green = 0;
4535 style->base[GTK_STATE_NORMAL].blue = 65535 - ((i * 10000) % 65535);
4538 style->base[GTK_STATE_NORMAL].red = 10000 * (cur_depth % 6);
4539 style->base[GTK_STATE_NORMAL].green = 65535 - ((i * 10000) % 65535);
4540 style->base[GTK_STATE_NORMAL].blue = 0;
4543 style->base[GTK_STATE_NORMAL].red = 65535 - ((i * 10000) % 65535);
4544 style->base[GTK_STATE_NORMAL].green = 0;
4545 style->base[GTK_STATE_NORMAL].blue = 10000 * (cur_depth % 6);
4548 gtk_ctree_node_set_row_data_full (ctree, sibling, style,
4549 (GtkDestroyNotify) gtk_style_unref);
4551 if (ctree->line_style == GTK_CTREE_LINES_TABBED)
4552 gtk_ctree_node_set_row_style (ctree, sibling, style);
4554 build_recursive (ctree, cur_depth + 1, depth, num_books, num_pages,
4559 void rebuild_tree (GtkWidget *widget, GtkCTree *ctree)
4562 gchar label1[] = "Root";
4563 gchar label2[] = "";
4564 GtkCTreeNode *parent;
4571 d = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin1));
4572 b = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin2));
4573 p = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin3));
4575 n = ((pow (b, d) - 1) / (b - 1)) * (p + 1);
4579 g_print ("%d total items? Try less\n",n);
4583 gtk_clist_freeze (GTK_CLIST (ctree));
4584 gtk_clist_clear (GTK_CLIST (ctree));
4589 parent = gtk_ctree_insert_node (ctree, NULL, NULL, text, 5, pixmap1,
4590 mask1, pixmap2, mask2, FALSE, TRUE);
4592 style = gtk_style_new ();
4593 style->base[GTK_STATE_NORMAL].red = 0;
4594 style->base[GTK_STATE_NORMAL].green = 45000;
4595 style->base[GTK_STATE_NORMAL].blue = 55000;
4596 gtk_ctree_node_set_row_data_full (ctree, parent, style,
4597 (GtkDestroyNotify) gtk_style_unref);
4599 if (ctree->line_style == GTK_CTREE_LINES_TABBED)
4600 gtk_ctree_node_set_row_style (ctree, parent, style);
4602 build_recursive (ctree, 1, d, b, p, parent);
4603 gtk_clist_thaw (GTK_CLIST (ctree));
4604 after_press (ctree, NULL);
4608 ctree_click_column (GtkCTree *ctree, gint column, gpointer data)
4612 clist = GTK_CLIST (ctree);
4614 if (column == clist->sort_column)
4616 if (clist->sort_type == GTK_SORT_ASCENDING)
4617 clist->sort_type = GTK_SORT_DESCENDING;
4619 clist->sort_type = GTK_SORT_ASCENDING;
4622 gtk_clist_set_sort_column (clist, column);
4624 gtk_ctree_sort_recursive (ctree, NULL);
4627 void create_ctree (void)
4629 static GtkWidget *window = NULL;
4630 GtkTooltips *tooltips;
4632 GtkWidget *scrolled_win;
4644 GdkColor transparent;
4646 char *title[] = { "Tree" , "Info" };
4649 static OptionMenuItem items1[] =
4651 { "No lines", ctree_toggle_line_style },
4652 { "Solid", ctree_toggle_line_style },
4653 { "Dotted", ctree_toggle_line_style },
4654 { "Tabbed", ctree_toggle_line_style }
4657 static OptionMenuItem items2[] =
4659 { "None", ctree_toggle_expander_style },
4660 { "Square", ctree_toggle_expander_style },
4661 { "Triangle", ctree_toggle_expander_style },
4662 { "Circular", ctree_toggle_expander_style }
4665 static OptionMenuItem items3[] =
4667 { "Left", ctree_toggle_justify },
4668 { "Right", ctree_toggle_justify }
4671 static OptionMenuItem items4[] =
4673 { "Single", ctree_toggle_sel_mode },
4674 { "Browse", ctree_toggle_sel_mode },
4675 { "Multiple", ctree_toggle_sel_mode },
4676 { "Extended", ctree_toggle_sel_mode }
4681 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
4683 gtk_signal_connect (GTK_OBJECT (window), "destroy",
4684 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
4687 gtk_window_set_title (GTK_WINDOW (window), "GtkCTree");
4688 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
4690 tooltips = gtk_tooltips_new ();
4691 gtk_object_ref (GTK_OBJECT (tooltips));
4692 gtk_object_sink (GTK_OBJECT (tooltips));
4694 gtk_object_set_data_full (GTK_OBJECT (window), "tooltips", tooltips,
4695 (GtkDestroyNotify) gtk_object_unref);
4697 vbox = gtk_vbox_new (FALSE, 0);
4698 gtk_container_add (GTK_CONTAINER (window), vbox);
4700 hbox = gtk_hbox_new (FALSE, 5);
4701 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4702 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
4704 label = gtk_label_new ("Depth :");
4705 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
4707 adj = (GtkAdjustment *) gtk_adjustment_new (4, 1, 10, 1, 5, 0);
4708 spin1 = gtk_spin_button_new (adj, 0, 0);
4709 gtk_box_pack_start (GTK_BOX (hbox), spin1, FALSE, TRUE, 5);
4711 label = gtk_label_new ("Books :");
4712 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
4714 adj = (GtkAdjustment *) gtk_adjustment_new (3, 1, 20, 1, 5, 0);
4715 spin2 = gtk_spin_button_new (adj, 0, 0);
4716 gtk_box_pack_start (GTK_BOX (hbox), spin2, FALSE, TRUE, 5);
4718 label = gtk_label_new ("Pages :");
4719 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
4721 adj = (GtkAdjustment *) gtk_adjustment_new (5, 1, 20, 1, 5, 0);
4722 spin3 = gtk_spin_button_new (adj, 0, 0);
4723 gtk_box_pack_start (GTK_BOX (hbox), spin3, FALSE, TRUE, 5);
4725 button = gtk_button_new_with_label ("Close");
4726 gtk_box_pack_end (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4728 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
4729 (GtkSignalFunc) gtk_widget_destroy,
4730 GTK_OBJECT(window));
4732 button = gtk_button_new_with_label ("Rebuild Tree");
4733 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4735 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
4736 gtk_container_set_border_width (GTK_CONTAINER (scrolled_win), 5);
4737 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
4738 GTK_POLICY_AUTOMATIC,
4740 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
4742 ctree = GTK_CTREE (gtk_ctree_new_with_titles (2, 0, title));
4743 gtk_container_add (GTK_CONTAINER (scrolled_win), GTK_WIDGET (ctree));
4745 gtk_clist_set_column_auto_resize (GTK_CLIST (ctree), 0, TRUE);
4746 gtk_clist_set_column_width (GTK_CLIST (ctree), 1, 200);
4747 gtk_clist_set_selection_mode (GTK_CLIST (ctree), GTK_SELECTION_EXTENDED);
4748 gtk_ctree_set_line_style (ctree, GTK_CTREE_LINES_DOTTED);
4749 line_style = GTK_CTREE_LINES_DOTTED;
4751 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4752 GTK_SIGNAL_FUNC (rebuild_tree), ctree);
4753 gtk_signal_connect (GTK_OBJECT (ctree), "click_column",
4754 (GtkSignalFunc) ctree_click_column, NULL);
4756 gtk_signal_connect_after (GTK_OBJECT (ctree), "button_press_event",
4757 GTK_SIGNAL_FUNC (after_press), NULL);
4758 gtk_signal_connect_after (GTK_OBJECT (ctree), "button_release_event",
4759 GTK_SIGNAL_FUNC (after_press), NULL);
4760 gtk_signal_connect_after (GTK_OBJECT (ctree), "tree_move",
4761 GTK_SIGNAL_FUNC (after_move), NULL);
4762 gtk_signal_connect_after (GTK_OBJECT (ctree), "end_selection",
4763 GTK_SIGNAL_FUNC (after_press), NULL);
4764 gtk_signal_connect_after (GTK_OBJECT (ctree), "toggle_focus_row",
4765 GTK_SIGNAL_FUNC (after_press), NULL);
4766 gtk_signal_connect_after (GTK_OBJECT (ctree), "select_all",
4767 GTK_SIGNAL_FUNC (after_press), NULL);
4768 gtk_signal_connect_after (GTK_OBJECT (ctree), "unselect_all",
4769 GTK_SIGNAL_FUNC (after_press), NULL);
4770 gtk_signal_connect_after (GTK_OBJECT (ctree), "scroll_vertical",
4771 GTK_SIGNAL_FUNC (after_press), NULL);
4773 bbox = gtk_hbox_new (FALSE, 5);
4774 gtk_container_set_border_width (GTK_CONTAINER (bbox), 5);
4775 gtk_box_pack_start (GTK_BOX (vbox), bbox, FALSE, TRUE, 0);
4777 mbox = gtk_vbox_new (TRUE, 5);
4778 gtk_box_pack_start (GTK_BOX (bbox), mbox, FALSE, TRUE, 0);
4780 label = gtk_label_new ("Row Height :");
4781 gtk_box_pack_start (GTK_BOX (mbox), label, FALSE, FALSE, 0);
4783 label = gtk_label_new ("Indent :");
4784 gtk_box_pack_start (GTK_BOX (mbox), label, FALSE, FALSE, 0);
4786 label = gtk_label_new ("Spacing :");
4787 gtk_box_pack_start (GTK_BOX (mbox), label, FALSE, FALSE, 0);
4789 mbox = gtk_vbox_new (TRUE, 5);
4790 gtk_box_pack_start (GTK_BOX (bbox), mbox, FALSE, TRUE, 0);
4792 adj = (GtkAdjustment *) gtk_adjustment_new (20, 12, 100, 1, 10, 0);
4793 spinner = gtk_spin_button_new (adj, 0, 0);
4794 gtk_box_pack_start (GTK_BOX (mbox), spinner, FALSE, FALSE, 5);
4795 gtk_tooltips_set_tip (tooltips, spinner,
4796 "Row height of list items", NULL);
4797 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
4798 GTK_SIGNAL_FUNC (change_row_height), ctree);
4799 gtk_clist_set_row_height ( GTK_CLIST (ctree), adj->value);
4801 adj = (GtkAdjustment *) gtk_adjustment_new (20, 0, 60, 1, 10, 0);
4802 spinner = gtk_spin_button_new (adj, 0, 0);
4803 gtk_box_pack_start (GTK_BOX (mbox), spinner, FALSE, FALSE, 5);
4804 gtk_tooltips_set_tip (tooltips, spinner, "Tree Indentation.", NULL);
4805 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
4806 GTK_SIGNAL_FUNC (change_indent), ctree);
4808 adj = (GtkAdjustment *) gtk_adjustment_new (5, 0, 60, 1, 10, 0);
4809 spinner = gtk_spin_button_new (adj, 0, 0);
4810 gtk_box_pack_start (GTK_BOX (mbox), spinner, FALSE, FALSE, 5);
4811 gtk_tooltips_set_tip (tooltips, spinner, "Tree Spacing.", NULL);
4812 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
4813 GTK_SIGNAL_FUNC (change_spacing), ctree);
4815 mbox = gtk_vbox_new (TRUE, 5);
4816 gtk_box_pack_start (GTK_BOX (bbox), mbox, FALSE, TRUE, 0);
4818 hbox = gtk_hbox_new (FALSE, 5);
4819 gtk_box_pack_start (GTK_BOX (mbox), hbox, FALSE, FALSE, 0);
4821 button = gtk_button_new_with_label ("Expand All");
4822 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4823 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4824 GTK_SIGNAL_FUNC (expand_all), ctree);
4826 button = gtk_button_new_with_label ("Collapse All");
4827 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4828 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4829 GTK_SIGNAL_FUNC (collapse_all), ctree);
4831 button = gtk_button_new_with_label ("Change Style");
4832 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4833 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4834 GTK_SIGNAL_FUNC (change_style), ctree);
4836 button = gtk_button_new_with_label ("Export Tree");
4837 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4838 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4839 GTK_SIGNAL_FUNC (export_ctree), ctree);
4841 hbox = gtk_hbox_new (FALSE, 5);
4842 gtk_box_pack_start (GTK_BOX (mbox), hbox, FALSE, FALSE, 0);
4844 button = gtk_button_new_with_label ("Select All");
4845 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4846 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4847 GTK_SIGNAL_FUNC (select_all), ctree);
4849 button = gtk_button_new_with_label ("Unselect All");
4850 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4851 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4852 GTK_SIGNAL_FUNC (unselect_all), ctree);
4854 button = gtk_button_new_with_label ("Remove Selection");
4855 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4856 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4857 GTK_SIGNAL_FUNC (remove_selection), ctree);
4859 check = gtk_check_button_new_with_label ("Reorderable");
4860 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
4861 gtk_tooltips_set_tip (tooltips, check,
4862 "Tree items can be reordered by dragging.", NULL);
4863 gtk_signal_connect (GTK_OBJECT (check), "clicked",
4864 GTK_SIGNAL_FUNC (toggle_reorderable), ctree);
4865 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE);
4867 hbox = gtk_hbox_new (TRUE, 5);
4868 gtk_box_pack_start (GTK_BOX (mbox), hbox, FALSE, FALSE, 0);
4870 omenu1 = build_option_menu (items1, 4, 2, ctree);
4871 gtk_box_pack_start (GTK_BOX (hbox), omenu1, FALSE, TRUE, 0);
4872 gtk_tooltips_set_tip (tooltips, omenu1, "The tree's line style.", NULL);
4874 omenu2 = build_option_menu (items2, 4, 1, ctree);
4875 gtk_box_pack_start (GTK_BOX (hbox), omenu2, FALSE, TRUE, 0);
4876 gtk_tooltips_set_tip (tooltips, omenu2, "The tree's expander style.",
4879 omenu3 = build_option_menu (items3, 2, 0, ctree);
4880 gtk_box_pack_start (GTK_BOX (hbox), omenu3, FALSE, TRUE, 0);
4881 gtk_tooltips_set_tip (tooltips, omenu3, "The tree's justification.",
4884 omenu4 = build_option_menu (items4, 4, 3, ctree);
4885 gtk_box_pack_start (GTK_BOX (hbox), omenu4, FALSE, TRUE, 0);
4886 gtk_tooltips_set_tip (tooltips, omenu4, "The list's selection mode.",
4889 gtk_widget_realize (window);
4891 pixmap1 = gdk_pixmap_create_from_xpm_d (window->window, &mask1,
4892 &transparent, book_closed_xpm);
4893 pixmap2 = gdk_pixmap_create_from_xpm_d (window->window, &mask2,
4894 &transparent, book_open_xpm);
4895 pixmap3 = gdk_pixmap_create_from_xpm_d (window->window, &mask3,
4896 &transparent, mini_page_xpm);
4898 gtk_widget_set_usize (GTK_WIDGET (ctree), 0, 300);
4900 frame = gtk_frame_new (NULL);
4901 gtk_container_set_border_width (GTK_CONTAINER (frame), 0);
4902 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_OUT);
4903 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
4905 hbox = gtk_hbox_new (TRUE, 2);
4906 gtk_container_set_border_width (GTK_CONTAINER (hbox), 2);
4907 gtk_container_add (GTK_CONTAINER (frame), hbox);
4909 frame = gtk_frame_new (NULL);
4910 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
4911 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
4913 hbox2 = gtk_hbox_new (FALSE, 0);
4914 gtk_container_set_border_width (GTK_CONTAINER (hbox2), 2);
4915 gtk_container_add (GTK_CONTAINER (frame), hbox2);
4917 label = gtk_label_new ("Books :");
4918 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
4920 sprintf (buf, "%d", books);
4921 book_label = gtk_label_new (buf);
4922 gtk_box_pack_end (GTK_BOX (hbox2), book_label, FALSE, TRUE, 5);
4924 frame = gtk_frame_new (NULL);
4925 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
4926 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
4928 hbox2 = gtk_hbox_new (FALSE, 0);
4929 gtk_container_set_border_width (GTK_CONTAINER (hbox2), 2);
4930 gtk_container_add (GTK_CONTAINER (frame), hbox2);
4932 label = gtk_label_new ("Pages :");
4933 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
4935 sprintf (buf, "%d", pages);
4936 page_label = gtk_label_new (buf);
4937 gtk_box_pack_end (GTK_BOX (hbox2), page_label, FALSE, TRUE, 5);
4939 frame = gtk_frame_new (NULL);
4940 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
4941 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
4943 hbox2 = gtk_hbox_new (FALSE, 0);
4944 gtk_container_set_border_width (GTK_CONTAINER (hbox2), 2);
4945 gtk_container_add (GTK_CONTAINER (frame), hbox2);
4947 label = gtk_label_new ("Selected :");
4948 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
4950 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->selection));
4951 sel_label = gtk_label_new (buf);
4952 gtk_box_pack_end (GTK_BOX (hbox2), sel_label, FALSE, TRUE, 5);
4954 frame = gtk_frame_new (NULL);
4955 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
4956 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
4958 hbox2 = gtk_hbox_new (FALSE, 0);
4959 gtk_container_set_border_width (GTK_CONTAINER (hbox2), 2);
4960 gtk_container_add (GTK_CONTAINER (frame), hbox2);
4962 label = gtk_label_new ("Visible :");
4963 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
4965 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->row_list));
4966 vis_label = gtk_label_new (buf);
4967 gtk_box_pack_end (GTK_BOX (hbox2), vis_label, FALSE, TRUE, 5);
4969 rebuild_tree (NULL, ctree);
4972 if (!GTK_WIDGET_VISIBLE (window))
4973 gtk_widget_show_all (window);
4975 gtk_widget_destroy (window);
4983 color_selection_ok (GtkWidget *w,
4984 GtkColorSelectionDialog *cs)
4986 GtkColorSelection *colorsel;
4989 colorsel=GTK_COLOR_SELECTION(cs->colorsel);
4991 gtk_color_selection_get_color(colorsel,color);
4992 gtk_color_selection_set_color(colorsel,color);
4996 color_selection_changed (GtkWidget *w,
4997 GtkColorSelectionDialog *cs)
4999 GtkColorSelection *colorsel;
5002 colorsel=GTK_COLOR_SELECTION(cs->colorsel);
5003 gtk_color_selection_get_color(colorsel,color);
5007 create_color_selection (void)
5009 static GtkWidget *window = NULL;
5013 window = gtk_color_selection_dialog_new ("color selection dialog");
5015 gtk_color_selection_set_opacity (
5016 GTK_COLOR_SELECTION (GTK_COLOR_SELECTION_DIALOG (window)->colorsel),
5019 gtk_color_selection_set_update_policy(
5020 GTK_COLOR_SELECTION (GTK_COLOR_SELECTION_DIALOG (window)->colorsel),
5021 GTK_UPDATE_CONTINUOUS);
5023 gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
5025 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5026 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5029 gtk_signal_connect (
5030 GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (window)->colorsel),
5032 GTK_SIGNAL_FUNC(color_selection_changed),
5035 gtk_signal_connect (
5036 GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (window)->ok_button),
5038 GTK_SIGNAL_FUNC(color_selection_ok),
5041 gtk_signal_connect_object (
5042 GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (window)->cancel_button),
5044 GTK_SIGNAL_FUNC(gtk_widget_destroy),
5045 GTK_OBJECT (window));
5048 if (!GTK_WIDGET_VISIBLE (window))
5049 gtk_widget_show (window);
5051 gtk_widget_destroy (window);
5059 file_selection_hide_fileops (GtkWidget *widget,
5060 GtkFileSelection *fs)
5062 gtk_file_selection_hide_fileop_buttons (fs);
5066 file_selection_ok (GtkWidget *w,
5067 GtkFileSelection *fs)
5069 g_print ("%s\n", gtk_file_selection_get_filename (fs));
5070 gtk_widget_destroy (GTK_WIDGET (fs));
5074 create_file_selection (void)
5076 static GtkWidget *window = NULL;
5081 window = gtk_file_selection_new ("file selection dialog");
5083 gtk_file_selection_hide_fileop_buttons (GTK_FILE_SELECTION (window));
5085 gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
5087 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5088 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5091 gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (window)->ok_button),
5092 "clicked", GTK_SIGNAL_FUNC(file_selection_ok),
5094 gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION (window)->cancel_button),
5095 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
5096 GTK_OBJECT (window));
5098 button = gtk_button_new_with_label ("Hide Fileops");
5099 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5100 (GtkSignalFunc) file_selection_hide_fileops,
5102 gtk_box_pack_start (GTK_BOX (GTK_FILE_SELECTION (window)->action_area),
5103 button, FALSE, FALSE, 0);
5104 gtk_widget_show (button);
5106 button = gtk_button_new_with_label ("Show Fileops");
5107 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5108 (GtkSignalFunc) gtk_file_selection_show_fileop_buttons,
5110 gtk_box_pack_start (GTK_BOX (GTK_FILE_SELECTION (window)->action_area),
5111 button, FALSE, FALSE, 0);
5112 gtk_widget_show (button);
5115 if (!GTK_WIDGET_VISIBLE (window))
5116 gtk_widget_show (window);
5118 gtk_widget_destroy (window);
5126 font_selection_ok (GtkWidget *w,
5127 GtkFontSelectionDialog *fs)
5129 g_print ("%s\n", gtk_font_selection_dialog_get_font_name (fs));
5130 gtk_widget_destroy (GTK_WIDGET (fs));
5134 create_font_selection (void)
5136 static GtkWidget *window = NULL;
5140 window = gtk_font_selection_dialog_new ("Font Selection Dialog");
5142 gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
5144 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5145 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5148 gtk_signal_connect (GTK_OBJECT (GTK_FONT_SELECTION_DIALOG (window)->ok_button),
5149 "clicked", GTK_SIGNAL_FUNC(font_selection_ok),
5150 GTK_FONT_SELECTION_DIALOG (window));
5151 gtk_signal_connect_object (GTK_OBJECT (GTK_FONT_SELECTION_DIALOG (window)->cancel_button),
5152 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
5153 GTK_OBJECT (window));
5156 if (!GTK_WIDGET_VISIBLE (window))
5157 gtk_widget_show (window);
5159 gtk_widget_destroy (window);
5166 static GtkWidget *dialog_window = NULL;
5169 label_toggle (GtkWidget *widget,
5174 *label = gtk_label_new ("Dialog Test");
5175 gtk_signal_connect (GTK_OBJECT (*label),
5177 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
5179 gtk_misc_set_padding (GTK_MISC (*label), 10, 10);
5180 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->vbox),
5181 *label, TRUE, TRUE, 0);
5182 gtk_widget_show (*label);
5185 gtk_widget_destroy (*label);
5189 create_dialog (void)
5191 static GtkWidget *label;
5196 dialog_window = gtk_dialog_new ();
5198 gtk_signal_connect (GTK_OBJECT (dialog_window), "destroy",
5199 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5202 gtk_window_set_title (GTK_WINDOW (dialog_window), "GtkDialog");
5203 gtk_container_set_border_width (GTK_CONTAINER (dialog_window), 0);
5204 gtk_widget_set_usize (dialog_window, 200, 110);
5206 button = gtk_button_new_with_label ("OK");
5207 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5208 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->action_area),
5209 button, TRUE, TRUE, 0);
5210 gtk_widget_grab_default (button);
5211 gtk_widget_show (button);
5213 button = gtk_button_new_with_label ("Toggle");
5214 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5215 GTK_SIGNAL_FUNC (label_toggle),
5217 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5218 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->action_area),
5219 button, TRUE, TRUE, 0);
5220 gtk_widget_show (button);
5225 if (!GTK_WIDGET_VISIBLE (dialog_window))
5226 gtk_widget_show (dialog_window);
5228 gtk_widget_destroy (dialog_window);
5233 static gboolean event_watcher_enter_id = 0;
5234 static gboolean event_watcher_leave_id = 0;
5237 event_watcher (GtkObject *object,
5243 g_print ("Watch: \"%s\" emitted for %s\n",
5244 gtk_signal_name (signal_id),
5245 gtk_type_name (GTK_OBJECT_TYPE (object)));
5251 event_watcher_down (void)
5253 if (event_watcher_enter_id)
5257 signal_id = gtk_signal_lookup ("enter_notify_event", GTK_TYPE_WIDGET);
5258 gtk_signal_remove_emission_hook (signal_id, event_watcher_enter_id);
5259 event_watcher_enter_id = 0;
5260 signal_id = gtk_signal_lookup ("leave_notify_event", GTK_TYPE_WIDGET);
5261 gtk_signal_remove_emission_hook (signal_id, event_watcher_leave_id);
5262 event_watcher_leave_id = 0;
5267 event_watcher_toggle (void)
5269 if (event_watcher_enter_id)
5270 event_watcher_down ();
5275 signal_id = gtk_signal_lookup ("enter_notify_event", GTK_TYPE_WIDGET);
5276 event_watcher_enter_id = gtk_signal_add_emission_hook (signal_id, event_watcher, NULL);
5277 signal_id = gtk_signal_lookup ("leave_notify_event", GTK_TYPE_WIDGET);
5278 event_watcher_leave_id = gtk_signal_add_emission_hook (signal_id, event_watcher, NULL);
5283 create_event_watcher (void)
5289 dialog_window = gtk_dialog_new ();
5291 gtk_signal_connect (GTK_OBJECT (dialog_window), "destroy",
5292 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
5294 gtk_signal_connect (GTK_OBJECT (dialog_window),
5296 GTK_SIGNAL_FUNC (event_watcher_down),
5299 gtk_window_set_title (GTK_WINDOW (dialog_window), "Event Watcher");
5300 gtk_container_set_border_width (GTK_CONTAINER (dialog_window), 0);
5301 gtk_widget_set_usize (dialog_window, 200, 110);
5303 button = gtk_toggle_button_new_with_label ("Activate Watch");
5304 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5305 GTK_SIGNAL_FUNC (event_watcher_toggle),
5307 gtk_container_set_border_width (GTK_CONTAINER (button), 10);
5308 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->vbox),
5309 button, TRUE, TRUE, 0);
5310 gtk_widget_show (button);
5312 button = gtk_button_new_with_label ("Close");
5313 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5314 GTK_SIGNAL_FUNC (gtk_widget_destroy),
5315 (GtkObject*) dialog_window);
5316 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5317 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->action_area),
5318 button, TRUE, TRUE, 0);
5319 gtk_widget_grab_default (button);
5320 gtk_widget_show (button);
5323 if (!GTK_WIDGET_VISIBLE (dialog_window))
5324 gtk_widget_show (dialog_window);
5326 gtk_widget_destroy (dialog_window);
5334 create_range_controls (void)
5336 static GtkWidget *window = NULL;
5340 GtkWidget *scrollbar;
5342 GtkWidget *separator;
5343 GtkObject *adjustment;
5347 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5349 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5350 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5353 gtk_window_set_title (GTK_WINDOW (window), "range controls");
5354 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
5357 box1 = gtk_vbox_new (FALSE, 0);
5358 gtk_container_add (GTK_CONTAINER (window), box1);
5359 gtk_widget_show (box1);
5362 box2 = gtk_vbox_new (FALSE, 10);
5363 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
5364 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
5365 gtk_widget_show (box2);
5368 adjustment = gtk_adjustment_new (0.0, 0.0, 101.0, 0.1, 1.0, 1.0);
5370 scale = gtk_hscale_new (GTK_ADJUSTMENT (adjustment));
5371 gtk_widget_set_usize (GTK_WIDGET (scale), 150, 30);
5372 gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED);
5373 gtk_scale_set_digits (GTK_SCALE (scale), 1);
5374 gtk_scale_set_draw_value (GTK_SCALE (scale), TRUE);
5375 gtk_box_pack_start (GTK_BOX (box2), scale, TRUE, TRUE, 0);
5376 gtk_widget_show (scale);
5378 scrollbar = gtk_hscrollbar_new (GTK_ADJUSTMENT (adjustment));
5379 gtk_range_set_update_policy (GTK_RANGE (scrollbar),
5380 GTK_UPDATE_CONTINUOUS);
5381 gtk_box_pack_start (GTK_BOX (box2), scrollbar, TRUE, TRUE, 0);
5382 gtk_widget_show (scrollbar);
5385 separator = gtk_hseparator_new ();
5386 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
5387 gtk_widget_show (separator);
5390 box2 = gtk_vbox_new (FALSE, 10);
5391 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
5392 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
5393 gtk_widget_show (box2);
5396 button = gtk_button_new_with_label ("close");
5397 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5398 GTK_SIGNAL_FUNC(gtk_widget_destroy),
5399 GTK_OBJECT (window));
5400 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
5401 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5402 gtk_widget_grab_default (button);
5403 gtk_widget_show (button);
5406 if (!GTK_WIDGET_VISIBLE (window))
5407 gtk_widget_show (window);
5409 gtk_widget_destroy (window);
5417 create_rulers (void)
5419 static GtkWidget *window = NULL;
5425 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5426 gtk_window_set_policy (GTK_WINDOW (window), TRUE, TRUE, FALSE);
5428 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5429 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5432 gtk_window_set_title (GTK_WINDOW (window), "rulers");
5433 gtk_widget_set_usize (window, 300, 300);
5434 gtk_widget_set_events (window,
5435 GDK_POINTER_MOTION_MASK
5436 | GDK_POINTER_MOTION_HINT_MASK);
5437 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
5439 table = gtk_table_new (2, 2, FALSE);
5440 gtk_container_add (GTK_CONTAINER (window), table);
5441 gtk_widget_show (table);
5443 ruler = gtk_hruler_new ();
5444 gtk_ruler_set_metric (GTK_RULER (ruler), GTK_CENTIMETERS);
5445 gtk_ruler_set_range (GTK_RULER (ruler), 100, 0, 0, 20);
5447 gtk_signal_connect_object (
5448 GTK_OBJECT (window),
5449 "motion_notify_event",
5451 GTK_WIDGET_CLASS (GTK_OBJECT (ruler)->klass)->motion_notify_event),
5452 GTK_OBJECT (ruler));
5454 gtk_table_attach (GTK_TABLE (table), ruler, 1, 2, 0, 1,
5455 GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
5456 gtk_widget_show (ruler);
5459 ruler = gtk_vruler_new ();
5460 gtk_ruler_set_range (GTK_RULER (ruler), 5, 15, 0, 20);
5462 gtk_signal_connect_object (
5463 GTK_OBJECT (window),
5464 "motion_notify_event",
5465 GTK_SIGNAL_FUNC (GTK_WIDGET_CLASS (GTK_OBJECT (ruler)->klass)->motion_notify_event),
5466 GTK_OBJECT (ruler));
5468 gtk_table_attach (GTK_TABLE (table), ruler, 0, 1, 1, 2,
5469 GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
5470 gtk_widget_show (ruler);
5473 if (!GTK_WIDGET_VISIBLE (window))
5474 gtk_widget_show (window);
5476 gtk_widget_destroy (window);
5480 text_toggle_editable (GtkWidget *checkbutton,
5483 gtk_text_set_editable(GTK_TEXT(text),
5484 GTK_TOGGLE_BUTTON(checkbutton)->active);
5488 text_toggle_word_wrap (GtkWidget *checkbutton,
5491 gtk_text_set_word_wrap(GTK_TEXT(text),
5492 GTK_TOGGLE_BUTTON(checkbutton)->active);
5499 { { 0, 0x0000, 0x0000, 0x0000 }, "black" },
5500 { { 0, 0xFFFF, 0xFFFF, 0xFFFF }, "white" },
5501 { { 0, 0xFFFF, 0x0000, 0x0000 }, "red" },
5502 { { 0, 0x0000, 0xFFFF, 0x0000 }, "green" },
5503 { { 0, 0x0000, 0x0000, 0xFFFF }, "blue" },
5504 { { 0, 0x0000, 0xFFFF, 0xFFFF }, "cyan" },
5505 { { 0, 0xFFFF, 0x0000, 0xFFFF }, "magenta" },
5506 { { 0, 0xFFFF, 0xFFFF, 0x0000 }, "yellow" }
5509 int ntext_colors = sizeof(text_colors) / sizeof(text_colors[0]);
5515 text_insert_random (GtkWidget *w, GtkText *text)
5519 for (i=0; i<10; i++)
5521 c = 'A' + rand() % ('Z' - 'A');
5522 gtk_text_set_point (text, rand() % gtk_text_get_length (text));
5523 gtk_text_insert (text, NULL, NULL, NULL, &c, 1);
5532 static GtkWidget *window = NULL;
5538 GtkWidget *separator;
5539 GtkWidget *scrolled_window;
5547 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5548 gtk_widget_set_name (window, "text window");
5549 gtk_widget_set_usize (window, 500, 500);
5550 gtk_window_set_policy (GTK_WINDOW(window), TRUE, TRUE, FALSE);
5552 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5553 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5556 gtk_window_set_title (GTK_WINDOW (window), "test");
5557 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
5560 box1 = gtk_vbox_new (FALSE, 0);
5561 gtk_container_add (GTK_CONTAINER (window), box1);
5562 gtk_widget_show (box1);
5565 box2 = gtk_vbox_new (FALSE, 10);
5566 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
5567 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
5568 gtk_widget_show (box2);
5571 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
5572 gtk_box_pack_start (GTK_BOX (box2), scrolled_window, TRUE, TRUE, 0);
5573 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
5576 gtk_widget_show (scrolled_window);
5578 text = gtk_text_new (NULL, NULL);
5579 gtk_text_set_editable (GTK_TEXT (text), TRUE);
5580 gtk_container_add (GTK_CONTAINER (scrolled_window), text);
5581 gtk_widget_grab_focus (text);
5582 gtk_widget_show (text);
5585 gtk_text_freeze (GTK_TEXT (text));
5587 font = gdk_font_load ("-adobe-courier-medium-r-normal--*-120-*-*-*-*-*-*");
5589 for (i=0; i<ntext_colors; i++)
5591 gtk_text_insert (GTK_TEXT (text), font, NULL, NULL,
5592 text_colors[i].name, -1);
5593 gtk_text_insert (GTK_TEXT (text), font, NULL, NULL, "\t", -1);
5595 for (j=0; j<ntext_colors; j++)
5597 gtk_text_insert (GTK_TEXT (text), font,
5598 &text_colors[j].color, &text_colors[i].color,
5601 gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL, "\n", -1);
5604 /* The Text widget will reference count the font, so we
5605 * unreference it here
5607 gdk_font_unref (font);
5609 infile = fopen("testgtk.c", "r");
5614 int nbytes_read, nbytes_alloc;
5617 nbytes_alloc = 1024;
5618 buffer = g_new (char, nbytes_alloc);
5622 if (nbytes_alloc < nbytes_read + 1024)
5625 buffer = g_realloc (buffer, nbytes_alloc);
5627 len = fread (buffer + nbytes_read, 1, 1024, infile);
5633 gtk_text_insert (GTK_TEXT (text), NULL, NULL,
5634 NULL, buffer, nbytes_read);
5639 gtk_text_thaw (GTK_TEXT (text));
5641 hbox = gtk_hbutton_box_new ();
5642 gtk_box_pack_start (GTK_BOX (box2), hbox, FALSE, FALSE, 0);
5643 gtk_widget_show (hbox);
5645 check = gtk_check_button_new_with_label("Editable");
5646 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, FALSE, 0);
5647 gtk_signal_connect (GTK_OBJECT(check), "toggled",
5648 GTK_SIGNAL_FUNC(text_toggle_editable), text);
5649 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), TRUE);
5650 gtk_widget_show (check);
5652 check = gtk_check_button_new_with_label("Wrap Words");
5653 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
5654 gtk_signal_connect (GTK_OBJECT(check), "toggled",
5655 GTK_SIGNAL_FUNC(text_toggle_word_wrap), text);
5656 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), FALSE);
5657 gtk_widget_show (check);
5659 separator = gtk_hseparator_new ();
5660 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
5661 gtk_widget_show (separator);
5664 box2 = gtk_vbox_new (FALSE, 10);
5665 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
5666 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
5667 gtk_widget_show (box2);
5670 button = gtk_button_new_with_label ("insert random");
5671 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5672 GTK_SIGNAL_FUNC(text_insert_random),
5674 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
5675 gtk_widget_show (button);
5677 button = gtk_button_new_with_label ("close");
5678 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5679 GTK_SIGNAL_FUNC(gtk_widget_destroy),
5680 GTK_OBJECT (window));
5681 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
5682 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5683 gtk_widget_grab_default (button);
5684 gtk_widget_show (button);
5687 if (!GTK_WIDGET_VISIBLE (window))
5688 gtk_widget_show (window);
5690 gtk_widget_destroy (window);
5697 GdkPixmap *book_open;
5698 GdkPixmap *book_closed;
5699 GdkBitmap *book_open_mask;
5700 GdkBitmap *book_closed_mask;
5701 GtkWidget *sample_notebook;
5704 page_switch (GtkWidget *widget, GtkNotebookPage *page, gint page_num)
5706 GtkNotebookPage *oldpage;
5709 oldpage = GTK_NOTEBOOK (widget)->cur_page;
5711 if (page == oldpage)
5713 pixwid = ((GtkBoxChild*)
5714 (GTK_BOX (page->tab_label)->children->data))->widget;
5715 gtk_pixmap_set (GTK_PIXMAP (pixwid), book_open, book_open_mask);
5716 pixwid = ((GtkBoxChild*)
5717 (GTK_BOX (page->menu_label)->children->data))->widget;
5718 gtk_pixmap_set (GTK_PIXMAP (pixwid), book_open, book_open_mask);
5722 pixwid = ((GtkBoxChild*)
5723 (GTK_BOX (oldpage->tab_label)->children->data))->widget;
5724 gtk_pixmap_set (GTK_PIXMAP (pixwid), book_closed, book_closed_mask);
5725 pixwid = ((GtkBoxChild*)
5726 (GTK_BOX (oldpage->menu_label)->children->data))->widget;
5727 gtk_pixmap_set (GTK_PIXMAP (pixwid), book_closed, book_closed_mask);
5732 tab_fill (GtkToggleButton *button, GtkWidget *child)
5735 GtkPackType pack_type;
5737 gtk_notebook_query_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
5738 &expand, NULL, &pack_type);
5739 gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
5740 expand, button->active, pack_type);
5744 tab_expand (GtkToggleButton *button, GtkWidget *child)
5747 GtkPackType pack_type;
5749 gtk_notebook_query_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
5750 NULL, &fill, &pack_type);
5751 gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
5752 button->active, fill, pack_type);
5756 tab_pack (GtkToggleButton *button, GtkWidget *child)
5762 gtk_notebook_query_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
5763 &expand, &fill, NULL);
5764 gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
5765 expand, fill, button->active);
5769 create_pages (GtkNotebook *notebook, gint start, gint end)
5771 GtkWidget *child = NULL;
5776 GtkWidget *label_box;
5777 GtkWidget *menu_box;
5782 for (i = start; i <= end; i++)
5784 sprintf (buffer, "Page %d", i);
5786 child = gtk_frame_new (buffer);
5787 gtk_container_set_border_width (GTK_CONTAINER (child), 10);
5789 vbox = gtk_vbox_new (TRUE,0);
5790 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
5791 gtk_container_add (GTK_CONTAINER (child), vbox);
5793 hbox = gtk_hbox_new (TRUE,0);
5794 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
5796 button = gtk_check_button_new_with_label ("Fill Tab");
5797 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
5798 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
5799 gtk_signal_connect (GTK_OBJECT (button), "toggled",
5800 GTK_SIGNAL_FUNC (tab_fill), child);
5802 button = gtk_check_button_new_with_label ("Expand Tab");
5803 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
5804 gtk_signal_connect (GTK_OBJECT (button), "toggled",
5805 GTK_SIGNAL_FUNC (tab_expand), child);
5807 button = gtk_check_button_new_with_label ("Pack end");
5808 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
5809 gtk_signal_connect (GTK_OBJECT (button), "toggled",
5810 GTK_SIGNAL_FUNC (tab_pack), child);
5812 button = gtk_button_new_with_label ("Hide Page");
5813 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 5);
5814 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5815 GTK_SIGNAL_FUNC (gtk_widget_hide),
5816 GTK_OBJECT (child));
5818 gtk_widget_show_all (child);
5820 label_box = gtk_hbox_new (FALSE, 0);
5821 pixwid = gtk_pixmap_new (book_closed, book_closed_mask);
5822 gtk_box_pack_start (GTK_BOX (label_box), pixwid, FALSE, TRUE, 0);
5823 gtk_misc_set_padding (GTK_MISC (pixwid), 3, 1);
5824 label = gtk_label_new (buffer);
5825 gtk_box_pack_start (GTK_BOX (label_box), label, FALSE, TRUE, 0);
5826 gtk_widget_show_all (label_box);
5828 menu_box = gtk_hbox_new (FALSE, 0);
5829 pixwid = gtk_pixmap_new (book_closed, book_closed_mask);
5830 gtk_box_pack_start (GTK_BOX (menu_box), pixwid, FALSE, TRUE, 0);
5831 gtk_misc_set_padding (GTK_MISC (pixwid), 3, 1);
5832 label = gtk_label_new (buffer);
5833 gtk_box_pack_start (GTK_BOX (menu_box), label, FALSE, TRUE, 0);
5834 gtk_widget_show_all (menu_box);
5835 gtk_notebook_append_page_menu (notebook, child, label_box, menu_box);
5840 rotate_notebook (GtkButton *button,
5841 GtkNotebook *notebook)
5843 gtk_notebook_set_tab_pos (notebook, (notebook->tab_pos + 1) % 4);
5847 show_all_pages (GtkButton *button,
5848 GtkNotebook *notebook)
5850 gtk_container_foreach (GTK_CONTAINER (notebook),
5851 (GtkCallback) gtk_widget_show, NULL);
5855 standard_notebook (GtkButton *button,
5856 GtkNotebook *notebook)
5860 gtk_notebook_set_show_tabs (notebook, TRUE);
5861 gtk_notebook_set_scrollable (notebook, FALSE);
5862 if (g_list_length (notebook->children) == 15)
5863 for (i = 0; i < 10; i++)
5864 gtk_notebook_remove_page (notebook, 5);
5868 notabs_notebook (GtkButton *button,
5869 GtkNotebook *notebook)
5873 gtk_notebook_set_show_tabs (notebook, FALSE);
5874 if (g_list_length (notebook->children) == 15)
5875 for (i = 0; i < 10; i++)
5876 gtk_notebook_remove_page (notebook, 5);
5880 scrollable_notebook (GtkButton *button,
5881 GtkNotebook *notebook)
5883 gtk_notebook_set_show_tabs (notebook, TRUE);
5884 gtk_notebook_set_scrollable (notebook, TRUE);
5885 if (g_list_length (notebook->children) == 5)
5886 create_pages (notebook, 6, 15);
5890 notebook_popup (GtkToggleButton *button,
5891 GtkNotebook *notebook)
5894 gtk_notebook_popup_enable (notebook);
5896 gtk_notebook_popup_disable (notebook);
5900 notebook_homogeneous (GtkToggleButton *button,
5901 GtkNotebook *notebook)
5903 gtk_notebook_set_homogeneous_tabs (notebook, button->active);
5907 create_notebook (void)
5909 static GtkWidget *window = NULL;
5913 GtkWidget *separator;
5915 GdkColor *transparent = NULL;
5918 static OptionMenuItem items[] =
5920 { "Standard", standard_notebook },
5921 { "No tabs", notabs_notebook },
5922 { "Scrollable", scrollable_notebook }
5927 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5929 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5930 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5933 gtk_window_set_title (GTK_WINDOW (window), "notebook");
5934 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
5936 box1 = gtk_vbox_new (FALSE, 0);
5937 gtk_container_add (GTK_CONTAINER (window), box1);
5939 sample_notebook = gtk_notebook_new ();
5940 gtk_signal_connect (GTK_OBJECT (sample_notebook), "switch_page",
5941 GTK_SIGNAL_FUNC (page_switch), NULL);
5942 gtk_notebook_set_tab_pos (GTK_NOTEBOOK (sample_notebook), GTK_POS_TOP);
5943 gtk_box_pack_start (GTK_BOX (box1), sample_notebook, TRUE, TRUE, 0);
5944 gtk_container_set_border_width (GTK_CONTAINER (sample_notebook), 10);
5946 gtk_widget_realize (sample_notebook);
5947 book_open = gdk_pixmap_create_from_xpm_d (sample_notebook->window,
5951 book_closed = gdk_pixmap_create_from_xpm_d (sample_notebook->window,
5956 create_pages (GTK_NOTEBOOK (sample_notebook), 1, 5);
5958 separator = gtk_hseparator_new ();
5959 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 10);
5961 box2 = gtk_hbox_new (FALSE, 5);
5962 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
5963 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
5965 button = gtk_check_button_new_with_label ("popup menu");
5966 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, FALSE, 0);
5967 gtk_signal_connect (GTK_OBJECT(button), "clicked",
5968 GTK_SIGNAL_FUNC (notebook_popup),
5969 GTK_OBJECT (sample_notebook));
5971 button = gtk_check_button_new_with_label ("homogeneous tabs");
5972 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, FALSE, 0);
5973 gtk_signal_connect (GTK_OBJECT(button), "clicked",
5974 GTK_SIGNAL_FUNC (notebook_homogeneous),
5975 GTK_OBJECT (sample_notebook));
5977 box2 = gtk_hbox_new (FALSE, 5);
5978 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
5979 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
5981 label = gtk_label_new ("Notebook Style :");
5982 gtk_box_pack_start (GTK_BOX (box2), label, FALSE, TRUE, 0);
5984 omenu = build_option_menu (items, 3, 0, sample_notebook);
5985 gtk_box_pack_start (GTK_BOX (box2), omenu, FALSE, TRUE, 0);
5987 button = gtk_button_new_with_label ("Show all Pages");
5988 gtk_box_pack_start (GTK_BOX (box2), button, FALSE, TRUE, 0);
5989 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5990 GTK_SIGNAL_FUNC (show_all_pages), sample_notebook);
5992 box2 = gtk_hbox_new (TRUE, 10);
5993 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
5994 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
5996 button = gtk_button_new_with_label ("prev");
5997 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5998 GTK_SIGNAL_FUNC (gtk_notebook_prev_page),
5999 GTK_OBJECT (sample_notebook));
6000 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6002 button = gtk_button_new_with_label ("next");
6003 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6004 GTK_SIGNAL_FUNC (gtk_notebook_next_page),
6005 GTK_OBJECT (sample_notebook));
6006 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6008 button = gtk_button_new_with_label ("rotate");
6009 gtk_signal_connect (GTK_OBJECT (button), "clicked",
6010 GTK_SIGNAL_FUNC (rotate_notebook), sample_notebook);
6011 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6013 separator = gtk_hseparator_new ();
6014 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 5);
6016 button = gtk_button_new_with_label ("close");
6017 gtk_container_set_border_width (GTK_CONTAINER (button), 5);
6018 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6019 GTK_SIGNAL_FUNC (gtk_widget_destroy),
6020 GTK_OBJECT (window));
6021 gtk_box_pack_start (GTK_BOX (box1), button, FALSE, FALSE, 0);
6022 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6023 gtk_widget_grab_default (button);
6026 if (!GTK_WIDGET_VISIBLE (window))
6027 gtk_widget_show_all (window);
6029 gtk_widget_destroy (window);
6037 toggle_resize (GtkWidget *widget, GtkWidget *child)
6039 GtkPaned *paned = GTK_PANED (child->parent);
6040 gboolean is_child1 = (child == paned->child1);
6041 gboolean resize, shrink;
6043 resize = is_child1 ? paned->child1_resize : paned->child2_resize;
6044 shrink = is_child1 ? paned->child1_shrink : paned->child2_shrink;
6046 gtk_widget_ref (child);
6047 gtk_container_remove (GTK_CONTAINER (child->parent), child);
6049 gtk_paned_pack1 (paned, child, !resize, shrink);
6051 gtk_paned_pack2 (paned, child, !resize, shrink);
6052 gtk_widget_unref (child);
6056 toggle_shrink (GtkWidget *widget, GtkWidget *child)
6058 GtkPaned *paned = GTK_PANED (child->parent);
6059 gboolean is_child1 = (child == paned->child1);
6060 gboolean resize, shrink;
6062 resize = is_child1 ? paned->child1_resize : paned->child2_resize;
6063 shrink = is_child1 ? paned->child1_shrink : paned->child2_shrink;
6065 gtk_widget_ref (child);
6066 gtk_container_remove (GTK_CONTAINER (child->parent), child);
6068 gtk_paned_pack1 (paned, child, resize, !shrink);
6070 gtk_paned_pack2 (paned, child, resize, !shrink);
6071 gtk_widget_unref (child);
6075 create_pane_options (GtkPaned *paned,
6076 const gchar *frame_label,
6077 const gchar *label1,
6078 const gchar *label2)
6083 GtkWidget *check_button;
6085 frame = gtk_frame_new (frame_label);
6086 gtk_container_set_border_width (GTK_CONTAINER (frame), 4);
6088 table = gtk_table_new (3, 2, 4);
6089 gtk_container_add (GTK_CONTAINER (frame), table);
6091 label = gtk_label_new (label1);
6092 gtk_table_attach_defaults (GTK_TABLE (table), label,
6095 check_button = gtk_check_button_new_with_label ("Resize");
6096 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
6098 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
6099 GTK_SIGNAL_FUNC (toggle_resize),
6102 check_button = gtk_check_button_new_with_label ("Shrink");
6103 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
6105 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
6107 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
6108 GTK_SIGNAL_FUNC (toggle_shrink),
6111 label = gtk_label_new (label2);
6112 gtk_table_attach_defaults (GTK_TABLE (table), label,
6115 check_button = gtk_check_button_new_with_label ("Resize");
6116 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
6118 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
6120 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
6121 GTK_SIGNAL_FUNC (toggle_resize),
6124 check_button = gtk_check_button_new_with_label ("Shrink");
6125 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
6127 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
6129 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
6130 GTK_SIGNAL_FUNC (toggle_shrink),
6139 static GtkWidget *window = NULL;
6148 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6150 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6151 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6154 gtk_window_set_title (GTK_WINDOW (window), "Panes");
6155 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6157 vbox = gtk_vbox_new (FALSE, 0);
6158 gtk_container_add (GTK_CONTAINER (window), vbox);
6160 vpaned = gtk_vpaned_new ();
6161 gtk_box_pack_start (GTK_BOX (vbox), vpaned, TRUE, TRUE, 0);
6162 gtk_container_set_border_width (GTK_CONTAINER(vpaned), 5);
6164 hpaned = gtk_hpaned_new ();
6165 gtk_paned_add1 (GTK_PANED (vpaned), hpaned);
6167 frame = gtk_frame_new (NULL);
6168 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
6169 gtk_widget_set_usize (frame, 60, 60);
6170 gtk_paned_add1 (GTK_PANED (hpaned), frame);
6172 button = gtk_button_new_with_label ("Hi there");
6173 gtk_container_add (GTK_CONTAINER(frame), button);
6175 frame = gtk_frame_new (NULL);
6176 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
6177 gtk_widget_set_usize (frame, 80, 60);
6178 gtk_paned_add2 (GTK_PANED (hpaned), frame);
6180 frame = gtk_frame_new (NULL);
6181 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
6182 gtk_widget_set_usize (frame, 60, 80);
6183 gtk_paned_add2 (GTK_PANED (vpaned), frame);
6185 /* Now create toggle buttons to control sizing */
6187 gtk_box_pack_start (GTK_BOX (vbox),
6188 create_pane_options (GTK_PANED (hpaned),
6194 gtk_box_pack_start (GTK_BOX (vbox),
6195 create_pane_options (GTK_PANED (vpaned),
6201 gtk_widget_show_all (vbox);
6204 if (!GTK_WIDGET_VISIBLE (window))
6205 gtk_widget_show (window);
6207 gtk_widget_destroy (window);
6216 dnd_drop_destroy_popup (GtkWidget *widget, GtkWindow **window)
6218 if(GTK_IS_BUTTON(widget)) /* I.e. they clicked the close button */
6219 gtk_widget_destroy(GTK_WIDGET(*window));
6221 gtk_grab_remove(GTK_WIDGET(*window));
6229 dnd_drop (GtkWidget *button, GdkEvent *event)
6231 static GtkWidget *window = NULL;
6232 GtkWidget *vbox, *lbl, *btn;
6235 /* DND doesn't obey gtk_grab's, so check if we're already displaying
6236 * drop modal dialog first
6241 window = gtk_window_new(GTK_WINDOW_DIALOG);
6242 gtk_container_set_border_width (GTK_CONTAINER(window), 10);
6244 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6245 GTK_SIGNAL_FUNC(dnd_drop_destroy_popup),
6247 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
6248 GTK_SIGNAL_FUNC(gtk_false),
6251 vbox = gtk_vbox_new(FALSE, 5);
6253 /* Display message that we got from drop source */
6254 msg = g_malloc(strlen(event->dropdataavailable.data)
6255 + strlen(event->dropdataavailable.data_type) + 100);
6256 sprintf(msg, "Drop data of type %s was:\n\n%s",
6257 event->dropdataavailable.data_type,
6258 (char *)event->dropdataavailable.data);
6259 lbl = gtk_label_new(msg);
6260 gtk_label_set_justify(GTK_LABEL(lbl), GTK_JUSTIFY_FILL);
6262 gtk_widget_show(lbl);
6263 gtk_box_pack_start_defaults(GTK_BOX(vbox), lbl);
6265 /* Provide an obvious way out of this heinousness */
6266 btn = gtk_button_new_with_label("Continue with life in\nspite of this oppression");
6267 gtk_signal_connect_object (GTK_OBJECT (btn), "clicked",
6268 GTK_SIGNAL_FUNC(gtk_widget_destroy),
6269 GTK_OBJECT (window));
6270 gtk_widget_show(btn);
6271 gtk_box_pack_start_defaults(GTK_BOX(vbox), btn);
6273 gtk_container_add(GTK_CONTAINER(window), vbox);
6275 gtk_widget_show(vbox);
6276 gtk_grab_add(window);
6277 gtk_widget_show(window);
6281 dnd_drag_request (GtkWidget *button, GdkEvent *event)
6283 #define DND_STRING "Bill Gates demands royalties for\nyour use of his innovation."
6284 gtk_widget_dnd_data_set (button, event, DND_STRING, strlen(DND_STRING) + 1);
6290 static GtkWidget *window = NULL;
6296 GtkWidget *separator;
6298 /* For clarity... */
6299 char *possible_drag_types[] = {"text/plain"};
6300 char *accepted_drop_types[] = {"text/plain"};
6302 static GtkWidget *drag_icon = NULL;
6303 static GtkWidget *drop_icon = NULL;
6307 GdkPoint hotspot = {5,5};
6311 drag_icon = shape_create_icon ("Modeller.xpm",
6312 440, 140, 0,0, GTK_WINDOW_POPUP);
6314 gtk_signal_connect (GTK_OBJECT (drag_icon), "destroy",
6315 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6318 gtk_widget_hide (drag_icon);
6323 drop_icon = shape_create_icon ("3DRings.xpm",
6324 440, 140, 0,0, GTK_WINDOW_POPUP);
6326 gtk_signal_connect (GTK_OBJECT (drop_icon), "destroy",
6327 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6330 gtk_widget_hide (drop_icon);
6333 gdk_dnd_set_drag_shape(drag_icon->window,
6338 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6340 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6341 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6344 gtk_window_set_title (GTK_WINDOW (window), "Drag -N- Drop");
6345 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6347 box1 = gtk_vbox_new (FALSE, 0);
6348 gtk_container_add (GTK_CONTAINER (window), box1);
6349 gtk_widget_show (box1);
6351 box2 = gtk_hbox_new (FALSE, 5);
6352 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6353 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
6354 gtk_widget_show (box2);
6356 frame = gtk_frame_new ("Drag");
6357 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
6358 gtk_widget_show (frame);
6360 box3 = gtk_vbox_new (FALSE, 5);
6361 gtk_container_set_border_width (GTK_CONTAINER (box3), 5);
6362 gtk_container_add (GTK_CONTAINER (frame), box3);
6363 gtk_widget_show (box3);
6368 button = gtk_button_new_with_label ("Drag me!");
6369 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
6370 gtk_widget_show (button);
6373 * currently, the widget has to be realized to
6374 * set dnd on it, this needs to change
6376 gtk_widget_realize (button);
6377 gtk_signal_connect (GTK_OBJECT (button),
6378 "drag_request_event",
6379 GTK_SIGNAL_FUNC(dnd_drag_request),
6382 gtk_widget_dnd_drag_set (button, TRUE, possible_drag_types, 1);
6385 frame = gtk_frame_new ("Drop");
6386 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
6387 gtk_widget_show (frame);
6389 box3 = gtk_vbox_new (FALSE, 5);
6390 gtk_container_set_border_width (GTK_CONTAINER (box3), 5);
6391 gtk_container_add (GTK_CONTAINER (frame), box3);
6392 gtk_widget_show (box3);
6398 button = gtk_button_new_with_label ("To");
6399 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
6400 gtk_widget_show (button);
6402 gtk_widget_realize (button);
6403 gtk_signal_connect (GTK_OBJECT (button),
6404 "drop_data_available_event",
6405 GTK_SIGNAL_FUNC(dnd_drop),
6408 gtk_widget_dnd_drop_set (button, TRUE, accepted_drop_types, 1, FALSE);
6411 separator = gtk_hseparator_new ();
6412 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
6413 gtk_widget_show (separator);
6416 box2 = gtk_vbox_new (FALSE, 10);
6417 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6418 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6419 gtk_widget_show (box2);
6422 button = gtk_button_new_with_label ("close");
6424 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6425 GTK_SIGNAL_FUNC(gtk_widget_destroy),
6426 GTK_OBJECT (window));
6428 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6429 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6430 gtk_widget_grab_default (button);
6431 gtk_widget_show (button);
6434 if (!GTK_WIDGET_VISIBLE (window))
6435 gtk_widget_show (window);
6437 gtk_widget_destroy (window);
6445 static GdkWindow *root_win = NULL;
6447 typedef struct _cursoroffset {gint x,y;} CursorOffset;
6450 shape_pressed (GtkWidget *widget, GdkEventButton *event)
6454 /* ignore double and triple click */
6455 if (event->type != GDK_BUTTON_PRESS)
6458 p = gtk_object_get_user_data (GTK_OBJECT(widget));
6459 p->x = (int) event->x;
6460 p->y = (int) event->y;
6462 gtk_grab_add (widget);
6463 gdk_pointer_grab (widget->window, TRUE,
6464 GDK_BUTTON_RELEASE_MASK |
6465 GDK_BUTTON_MOTION_MASK |
6466 GDK_POINTER_MOTION_HINT_MASK,
6471 shape_released (GtkWidget *widget)
6473 gtk_grab_remove (widget);
6474 gdk_pointer_ungrab (0);
6478 shape_motion (GtkWidget *widget,
6479 GdkEventMotion *event)
6483 GdkModifierType mask;
6485 p = gtk_object_get_user_data (GTK_OBJECT (widget));
6488 * Can't use event->x / event->y here
6489 * because I need absolute coordinates.
6491 gdk_window_get_pointer (root_win, &xp, &yp, &mask);
6492 gtk_widget_set_uposition (widget, xp - p->x, yp - p->y);
6496 shape_create_icon (char *xpm_file,
6506 CursorOffset* icon_pos;
6508 GdkBitmap *gdk_pixmap_mask;
6509 GdkPixmap *gdk_pixmap;
6512 style = gtk_widget_get_default_style ();
6513 gc = style->black_gc;
6516 * GDK_WINDOW_TOPLEVEL works also, giving you a title border
6518 window = gtk_window_new (window_type);
6520 fixed = gtk_fixed_new ();
6521 gtk_widget_set_usize (fixed, 100,100);
6522 gtk_container_add (GTK_CONTAINER (window), fixed);
6523 gtk_widget_show (fixed);
6525 gtk_widget_set_events (window,
6526 gtk_widget_get_events (window) |
6527 GDK_BUTTON_MOTION_MASK |
6528 GDK_POINTER_MOTION_HINT_MASK |
6529 GDK_BUTTON_PRESS_MASK);
6531 gtk_widget_realize (window);
6532 gdk_pixmap = gdk_pixmap_create_from_xpm (window->window, &gdk_pixmap_mask,
6533 &style->bg[GTK_STATE_NORMAL],
6536 pixmap = gtk_pixmap_new (gdk_pixmap, gdk_pixmap_mask);
6537 gtk_fixed_put (GTK_FIXED (fixed), pixmap, px,py);
6538 gtk_widget_show (pixmap);
6540 gtk_widget_shape_combine_mask (window, gdk_pixmap_mask, px,py);
6543 gtk_signal_connect (GTK_OBJECT (window), "button_press_event",
6544 GTK_SIGNAL_FUNC (shape_pressed),NULL);
6545 gtk_signal_connect (GTK_OBJECT (window), "button_release_event",
6546 GTK_SIGNAL_FUNC (shape_released),NULL);
6547 gtk_signal_connect (GTK_OBJECT (window), "motion_notify_event",
6548 GTK_SIGNAL_FUNC (shape_motion),NULL);
6550 icon_pos = g_new (CursorOffset, 1);
6551 gtk_object_set_user_data(GTK_OBJECT(window), icon_pos);
6553 gtk_widget_set_uposition (window, x, y);
6554 gtk_widget_show (window);
6560 create_shapes (void)
6562 /* Variables used by the Drag/Drop and Shape Window demos */
6563 static GtkWidget *modeller = NULL;
6564 static GtkWidget *sheets = NULL;
6565 static GtkWidget *rings = NULL;
6567 root_win = gdk_window_foreign_new (GDK_ROOT_WINDOW ());
6571 modeller = shape_create_icon ("Modeller.xpm",
6572 440, 140, 0,0, GTK_WINDOW_POPUP);
6574 gtk_signal_connect (GTK_OBJECT (modeller), "destroy",
6575 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6579 gtk_widget_destroy (modeller);
6583 sheets = shape_create_icon ("FilesQueue.xpm",
6584 580, 170, 0,0, GTK_WINDOW_POPUP);
6586 gtk_signal_connect (GTK_OBJECT (sheets), "destroy",
6587 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6592 gtk_widget_destroy (sheets);
6596 rings = shape_create_icon ("3DRings.xpm",
6597 460, 270, 25,25, GTK_WINDOW_TOPLEVEL);
6599 gtk_signal_connect (GTK_OBJECT (rings), "destroy",
6600 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6604 gtk_widget_destroy (rings);
6612 create_wmhints (void)
6614 static GtkWidget *window = NULL;
6616 GtkWidget *separator;
6625 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6627 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6628 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6631 gtk_window_set_title (GTK_WINDOW (window), "WM Hints");
6632 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6634 gtk_widget_realize (window);
6636 circles = gdk_bitmap_create_from_data (window->window,
6640 gdk_window_set_icon (window->window, NULL,
6643 gdk_window_set_icon_name (window->window, "WMHints Test Icon");
6645 gdk_window_set_decorations (window->window, GDK_DECOR_ALL | GDK_DECOR_MENU);
6646 gdk_window_set_functions (window->window, GDK_FUNC_ALL | GDK_FUNC_RESIZE);
6648 box1 = gtk_vbox_new (FALSE, 0);
6649 gtk_container_add (GTK_CONTAINER (window), box1);
6650 gtk_widget_show (box1);
6652 label = gtk_label_new ("Try iconizing me!");
6653 gtk_widget_set_usize (label, 150, 50);
6654 gtk_box_pack_start (GTK_BOX (box1), label, TRUE, TRUE, 0);
6655 gtk_widget_show (label);
6658 separator = gtk_hseparator_new ();
6659 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
6660 gtk_widget_show (separator);
6663 box2 = gtk_vbox_new (FALSE, 10);
6664 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6665 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6666 gtk_widget_show (box2);
6669 button = gtk_button_new_with_label ("close");
6671 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6672 GTK_SIGNAL_FUNC(gtk_widget_destroy),
6673 GTK_OBJECT (window));
6675 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6676 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6677 gtk_widget_grab_default (button);
6678 gtk_widget_show (button);
6681 if (!GTK_WIDGET_VISIBLE (window))
6682 gtk_widget_show (window);
6684 gtk_widget_destroy (window);
6691 typedef struct _ProgressData {
6694 GtkWidget *block_spin;
6695 GtkWidget *x_align_spin;
6696 GtkWidget *y_align_spin;
6697 GtkWidget *step_spin;
6698 GtkWidget *act_blocks_spin;
6707 progress_timeout (gpointer data)
6712 adj = GTK_PROGRESS (data)->adjustment;
6714 new_val = adj->value + 1;
6715 if (new_val > adj->upper)
6716 new_val = adj->lower;
6718 gtk_progress_set_value (GTK_PROGRESS (data), new_val);
6724 destroy_progress (GtkWidget *widget,
6725 ProgressData **pdata)
6727 gtk_timeout_remove ((*pdata)->timer);
6728 (*pdata)->timer = 0;
6729 (*pdata)->window = NULL;
6735 progressbar_toggle_orientation (GtkWidget *widget, ProgressData *pdata)
6739 if (!GTK_WIDGET_MAPPED (widget))
6742 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
6743 (((GtkOptionMenu *)(pdata->omenu1))->menu_item), i);
6745 gtk_progress_bar_set_orientation (GTK_PROGRESS_BAR (pdata->pbar),
6746 (GtkProgressBarOrientation) (3-i));
6750 toggle_show_text (GtkWidget *widget, ProgressData *pdata)
6752 gtk_progress_set_show_text (GTK_PROGRESS (pdata->pbar),
6753 GTK_TOGGLE_BUTTON (widget)->active);
6754 gtk_widget_set_sensitive (pdata->entry, GTK_TOGGLE_BUTTON (widget)->active);
6755 gtk_widget_set_sensitive (pdata->x_align_spin,
6756 GTK_TOGGLE_BUTTON (widget)->active);
6757 gtk_widget_set_sensitive (pdata->y_align_spin,
6758 GTK_TOGGLE_BUTTON (widget)->active);
6762 progressbar_toggle_bar_style (GtkWidget *widget, ProgressData *pdata)
6766 if (!GTK_WIDGET_MAPPED (widget))
6769 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
6770 (((GtkOptionMenu *)(pdata->omenu2))->menu_item), i);
6775 gtk_widget_set_sensitive (pdata->block_spin, TRUE);
6777 gtk_widget_set_sensitive (pdata->block_spin, FALSE);
6779 gtk_progress_bar_set_bar_style (GTK_PROGRESS_BAR (pdata->pbar),
6780 (GtkProgressBarStyle) i);
6784 progress_value_changed (GtkAdjustment *adj, ProgressData *pdata)
6788 if (GTK_PROGRESS (pdata->pbar)->activity_mode)
6789 sprintf (buf, "???");
6791 sprintf (buf, "%.0f%%", 100 *
6792 gtk_progress_get_current_percentage (GTK_PROGRESS (pdata->pbar)));
6793 gtk_label_set_text (GTK_LABEL (pdata->label), buf);
6797 adjust_blocks (GtkAdjustment *adj, ProgressData *pdata)
6799 gtk_progress_set_percentage (GTK_PROGRESS (pdata->pbar), 0);
6800 gtk_progress_bar_set_discrete_blocks (GTK_PROGRESS_BAR (pdata->pbar),
6801 gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (pdata->block_spin)));
6805 adjust_step (GtkAdjustment *adj, ProgressData *pdata)
6807 gtk_progress_bar_set_activity_step (GTK_PROGRESS_BAR (pdata->pbar),
6808 gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (pdata->step_spin)));
6812 adjust_act_blocks (GtkAdjustment *adj, ProgressData *pdata)
6814 gtk_progress_bar_set_activity_blocks (GTK_PROGRESS_BAR (pdata->pbar),
6815 gtk_spin_button_get_value_as_int
6816 (GTK_SPIN_BUTTON (pdata->act_blocks_spin)));
6820 adjust_align (GtkAdjustment *adj, ProgressData *pdata)
6822 gtk_progress_set_text_alignment (GTK_PROGRESS (pdata->pbar),
6823 gtk_spin_button_get_value_as_float
6824 (GTK_SPIN_BUTTON (pdata->x_align_spin)),
6825 gtk_spin_button_get_value_as_float
6826 (GTK_SPIN_BUTTON (pdata->y_align_spin)));
6830 toggle_activity_mode (GtkWidget *widget, ProgressData *pdata)
6832 gtk_progress_set_activity_mode (GTK_PROGRESS (pdata->pbar),
6833 GTK_TOGGLE_BUTTON (widget)->active);
6834 gtk_widget_set_sensitive (pdata->step_spin,
6835 GTK_TOGGLE_BUTTON (widget)->active);
6836 gtk_widget_set_sensitive (pdata->act_blocks_spin,
6837 GTK_TOGGLE_BUTTON (widget)->active);
6841 entry_changed (GtkWidget *widget, ProgressData *pdata)
6843 gtk_progress_set_format_string (GTK_PROGRESS (pdata->pbar),
6844 gtk_entry_get_text (GTK_ENTRY (pdata->entry)));
6848 create_progress_bar (void)
6860 static ProgressData *pdata = NULL;
6862 static OptionMenuItem items1[] =
6864 { "Left-Right", progressbar_toggle_orientation },
6865 { "Right-Left", progressbar_toggle_orientation },
6866 { "Bottom-Top", progressbar_toggle_orientation },
6867 { "Top-Bottom", progressbar_toggle_orientation }
6870 static OptionMenuItem items2[] =
6872 { "Continuous", progressbar_toggle_bar_style },
6873 { "Discrete", progressbar_toggle_bar_style }
6877 pdata = g_new0 (ProgressData, 1);
6881 pdata->window = gtk_dialog_new ();
6883 gtk_window_set_policy (GTK_WINDOW (pdata->window), FALSE, FALSE, TRUE);
6885 gtk_signal_connect (GTK_OBJECT (pdata->window), "destroy",
6886 GTK_SIGNAL_FUNC (destroy_progress),
6891 gtk_window_set_title (GTK_WINDOW (pdata->window), "GtkProgressBar");
6892 gtk_container_set_border_width (GTK_CONTAINER (pdata->window), 0);
6894 vbox = gtk_vbox_new (FALSE, 5);
6895 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
6896 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (pdata->window)->vbox),
6897 vbox, FALSE, TRUE, 0);
6899 frame = gtk_frame_new ("Progress");
6900 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
6902 vbox2 = gtk_vbox_new (FALSE, 5);
6903 gtk_container_add (GTK_CONTAINER (frame), vbox2);
6905 align = gtk_alignment_new (0.5, 0.5, 0, 0);
6906 gtk_box_pack_start (GTK_BOX (vbox2), align, FALSE, FALSE, 5);
6908 adj = (GtkAdjustment *) gtk_adjustment_new (0, 1, 300, 0, 0, 0);
6909 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
6910 GTK_SIGNAL_FUNC (progress_value_changed), pdata);
6912 pdata->pbar = gtk_progress_bar_new_with_adjustment (adj);
6913 gtk_progress_set_format_string (GTK_PROGRESS (pdata->pbar),
6914 "%v from [%l,%u] (=%p%%)");
6915 gtk_container_add (GTK_CONTAINER (align), pdata->pbar);
6916 pdata->timer = gtk_timeout_add (100, progress_timeout, pdata->pbar);
6918 align = gtk_alignment_new (0.5, 0.5, 0, 0);
6919 gtk_box_pack_start (GTK_BOX (vbox2), align, FALSE, FALSE, 5);
6921 hbox = gtk_hbox_new (FALSE, 5);
6922 gtk_container_add (GTK_CONTAINER (align), hbox);
6923 label = gtk_label_new ("Label updated by user :");
6924 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
6925 pdata->label = gtk_label_new ("");
6926 gtk_box_pack_start (GTK_BOX (hbox), pdata->label, FALSE, TRUE, 0);
6928 frame = gtk_frame_new ("Options");
6929 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
6931 vbox2 = gtk_vbox_new (FALSE, 5);
6932 gtk_container_add (GTK_CONTAINER (frame), vbox2);
6934 tab = gtk_table_new (7, 2, FALSE);
6935 gtk_box_pack_start (GTK_BOX (vbox2), tab, FALSE, TRUE, 0);
6937 label = gtk_label_new ("Orientation :");
6938 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 0, 1,
6939 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
6941 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
6943 pdata->omenu1 = build_option_menu (items1, 4, 0, pdata);
6944 hbox = gtk_hbox_new (FALSE, 0);
6945 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 0, 1,
6946 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
6948 gtk_box_pack_start (GTK_BOX (hbox), pdata->omenu1, TRUE, TRUE, 0);
6950 check = gtk_check_button_new_with_label ("Show text");
6951 gtk_signal_connect (GTK_OBJECT (check), "clicked",
6952 GTK_SIGNAL_FUNC (toggle_show_text),
6954 gtk_table_attach (GTK_TABLE (tab), check, 0, 1, 1, 2,
6955 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
6958 hbox = gtk_hbox_new (FALSE, 0);
6959 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 1, 2,
6960 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
6963 label = gtk_label_new ("Format : ");
6964 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
6966 pdata->entry = gtk_entry_new ();
6967 gtk_signal_connect (GTK_OBJECT (pdata->entry), "changed",
6968 GTK_SIGNAL_FUNC (entry_changed),
6970 gtk_box_pack_start (GTK_BOX (hbox), pdata->entry, TRUE, TRUE, 0);
6971 gtk_entry_set_text (GTK_ENTRY (pdata->entry), "%v from [%l,%u] (=%p%%)");
6972 gtk_widget_set_usize (pdata->entry, 100, -1);
6973 gtk_widget_set_sensitive (pdata->entry, FALSE);
6975 label = gtk_label_new ("Text align :");
6976 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 2, 3,
6977 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
6979 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
6981 hbox = gtk_hbox_new (FALSE, 0);
6982 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 2, 3,
6983 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
6986 label = gtk_label_new ("x :");
6987 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 5);
6989 adj = (GtkAdjustment *) gtk_adjustment_new (0.5, 0, 1, 0.1, 0.1, 0);
6990 pdata->x_align_spin = gtk_spin_button_new (adj, 0, 1);
6991 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
6992 GTK_SIGNAL_FUNC (adjust_align), pdata);
6993 gtk_box_pack_start (GTK_BOX (hbox), pdata->x_align_spin, FALSE, TRUE, 0);
6994 gtk_widget_set_sensitive (pdata->x_align_spin, FALSE);
6996 label = gtk_label_new ("y :");
6997 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 5);
6999 adj = (GtkAdjustment *) gtk_adjustment_new (0.5, 0, 1, 0.1, 0.1, 0);
7000 pdata->y_align_spin = gtk_spin_button_new (adj, 0, 1);
7001 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
7002 GTK_SIGNAL_FUNC (adjust_align), pdata);
7003 gtk_box_pack_start (GTK_BOX (hbox), pdata->y_align_spin, FALSE, TRUE, 0);
7004 gtk_widget_set_sensitive (pdata->y_align_spin, FALSE);
7006 label = gtk_label_new ("Bar Style :");
7007 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 3, 4,
7008 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7010 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
7012 pdata->omenu2 = build_option_menu (items2, 2, 0, pdata);
7013 hbox = gtk_hbox_new (FALSE, 0);
7014 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 3, 4,
7015 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7017 gtk_box_pack_start (GTK_BOX (hbox), pdata->omenu2, TRUE, TRUE, 0);
7019 label = gtk_label_new ("Block count :");
7020 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 4, 5,
7021 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7023 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
7025 hbox = gtk_hbox_new (FALSE, 0);
7026 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 4, 5,
7027 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7029 adj = (GtkAdjustment *) gtk_adjustment_new (10, 2, 20, 1, 5, 0);
7030 pdata->block_spin = gtk_spin_button_new (adj, 0, 0);
7031 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
7032 GTK_SIGNAL_FUNC (adjust_blocks), pdata);
7033 gtk_box_pack_start (GTK_BOX (hbox), pdata->block_spin, FALSE, TRUE, 0);
7034 gtk_widget_set_sensitive (pdata->block_spin, FALSE);
7036 check = gtk_check_button_new_with_label ("Activity mode");
7037 gtk_signal_connect (GTK_OBJECT (check), "clicked",
7038 GTK_SIGNAL_FUNC (toggle_activity_mode),
7040 gtk_table_attach (GTK_TABLE (tab), check, 0, 1, 5, 6,
7041 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7044 hbox = gtk_hbox_new (FALSE, 0);
7045 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 5, 6,
7046 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7048 label = gtk_label_new ("Step size : ");
7049 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
7050 adj = (GtkAdjustment *) gtk_adjustment_new (3, 1, 20, 1, 5, 0);
7051 pdata->step_spin = gtk_spin_button_new (adj, 0, 0);
7052 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
7053 GTK_SIGNAL_FUNC (adjust_step), pdata);
7054 gtk_box_pack_start (GTK_BOX (hbox), pdata->step_spin, FALSE, TRUE, 0);
7055 gtk_widget_set_sensitive (pdata->step_spin, FALSE);
7057 hbox = gtk_hbox_new (FALSE, 0);
7058 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 6, 7,
7059 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7061 label = gtk_label_new ("Blocks : ");
7062 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
7063 adj = (GtkAdjustment *) gtk_adjustment_new (5, 2, 10, 1, 5, 0);
7064 pdata->act_blocks_spin = gtk_spin_button_new (adj, 0, 0);
7065 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
7066 GTK_SIGNAL_FUNC (adjust_act_blocks), pdata);
7067 gtk_box_pack_start (GTK_BOX (hbox), pdata->act_blocks_spin, FALSE, TRUE,
7069 gtk_widget_set_sensitive (pdata->act_blocks_spin, FALSE);
7071 button = gtk_button_new_with_label ("close");
7072 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7073 GTK_SIGNAL_FUNC (gtk_widget_destroy),
7074 GTK_OBJECT (pdata->window));
7075 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7076 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (pdata->window)->action_area),
7077 button, TRUE, TRUE, 0);
7078 gtk_widget_grab_default (button);
7081 if (!GTK_WIDGET_VISIBLE (pdata->window))
7082 gtk_widget_show_all (pdata->window);
7084 gtk_widget_destroy (pdata->window);
7091 static int color_idle = 0;
7094 color_idle_func (GtkWidget *preview)
7096 static int count = 1;
7100 for (i = 0; i < 256; i++)
7102 for (j = 0, k = 0; j < 256; j++)
7104 buf[k+0] = i + count;
7106 buf[k+2] = j + count;
7110 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
7115 gtk_widget_draw (preview, NULL);
7121 color_preview_destroy (GtkWidget *widget,
7124 gtk_idle_remove (color_idle);
7131 create_color_preview (void)
7133 static GtkWidget *window = NULL;
7140 gtk_widget_push_visual (gdk_rgb_get_visual ());
7141 gtk_widget_push_colormap (gdk_rgb_get_cmap ());
7142 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7143 gtk_widget_pop_colormap ();
7144 gtk_widget_pop_visual ();
7146 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7147 GTK_SIGNAL_FUNC(color_preview_destroy),
7150 gtk_window_set_title (GTK_WINDOW (window), "test");
7151 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
7153 preview = gtk_preview_new (GTK_PREVIEW_COLOR);
7154 gtk_preview_size (GTK_PREVIEW (preview), 256, 256);
7155 gtk_container_add (GTK_CONTAINER (window), preview);
7157 for (i = 0; i < 256; i++)
7159 for (j = 0, k = 0; j < 256; j++)
7167 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
7170 color_idle = gtk_idle_add ((GtkFunction) color_idle_func, preview);
7173 if (!GTK_WIDGET_VISIBLE (window))
7174 gtk_widget_show_all (window);
7176 gtk_widget_destroy (window);
7183 static int gray_idle = 0;
7186 gray_idle_func (GtkWidget *preview)
7188 static int count = 1;
7192 for (i = 0; i < 256; i++)
7194 for (j = 0; j < 256; j++)
7195 buf[j] = i + j + count;
7197 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
7202 gtk_widget_draw (preview, NULL);
7208 gray_preview_destroy (GtkWidget *widget,
7211 gtk_idle_remove (gray_idle);
7218 create_gray_preview (void)
7220 static GtkWidget *window = NULL;
7227 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7229 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7230 GTK_SIGNAL_FUNC(gray_preview_destroy),
7233 gtk_window_set_title (GTK_WINDOW (window), "test");
7234 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
7236 preview = gtk_preview_new (GTK_PREVIEW_GRAYSCALE);
7237 gtk_preview_size (GTK_PREVIEW (preview), 256, 256);
7238 gtk_container_add (GTK_CONTAINER (window), preview);
7240 for (i = 0; i < 256; i++)
7242 for (j = 0; j < 256; j++)
7245 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
7248 gray_idle = gtk_idle_add ((GtkFunction) gray_idle_func, preview);
7251 if (!GTK_WIDGET_VISIBLE (window))
7252 gtk_widget_show_all (window);
7254 gtk_widget_destroy (window);
7263 selection_test_received (GtkWidget *list, GtkSelectionData *data)
7266 GtkWidget *list_item;
7270 if (data->length < 0)
7272 g_print ("Selection retrieval failed\n");
7275 if (data->type != GDK_SELECTION_TYPE_ATOM)
7277 g_print ("Selection \"TARGETS\" was not returned as atoms!\n");
7281 /* Clear out any current list items */
7283 gtk_list_clear_items (GTK_LIST(list), 0, -1);
7285 /* Add new items to list */
7287 atoms = (GdkAtom *)data->data;
7290 l = data->length / sizeof (GdkAtom);
7291 for (i = 0; i < l; i++)
7294 name = gdk_atom_name (atoms[i]);
7297 list_item = gtk_list_item_new_with_label (name);
7301 list_item = gtk_list_item_new_with_label ("(bad atom)");
7303 gtk_widget_show (list_item);
7304 item_list = g_list_append (item_list, list_item);
7307 gtk_list_append_items (GTK_LIST (list), item_list);
7313 selection_test_get_targets (GtkWidget *widget, GtkWidget *list)
7315 static GdkAtom targets_atom = GDK_NONE;
7317 if (targets_atom == GDK_NONE)
7318 targets_atom = gdk_atom_intern ("TARGETS", FALSE);
7320 gtk_selection_convert (list, GDK_SELECTION_PRIMARY, targets_atom,
7325 create_selection_test (void)
7327 static GtkWidget *window = NULL;
7330 GtkWidget *scrolled_win;
7336 window = gtk_dialog_new ();
7338 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7339 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7342 gtk_window_set_title (GTK_WINDOW (window), "Selection Test");
7343 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
7345 /* Create the list */
7347 vbox = gtk_vbox_new (FALSE, 5);
7348 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
7349 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), vbox,
7352 label = gtk_label_new ("Gets available targets for current selection");
7353 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
7355 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
7356 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
7357 GTK_POLICY_AUTOMATIC,
7358 GTK_POLICY_AUTOMATIC);
7359 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
7360 gtk_widget_set_usize (scrolled_win, 100, 200);
7362 list = gtk_list_new ();
7363 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_win), list);
7365 gtk_signal_connect (GTK_OBJECT(list), "selection_received",
7366 GTK_SIGNAL_FUNC (selection_test_received), NULL);
7368 /* .. And create some buttons */
7369 button = gtk_button_new_with_label ("Get Targets");
7370 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7371 button, TRUE, TRUE, 0);
7373 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7374 GTK_SIGNAL_FUNC (selection_test_get_targets), list);
7376 button = gtk_button_new_with_label ("Quit");
7377 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7378 button, TRUE, TRUE, 0);
7380 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7381 GTK_SIGNAL_FUNC (gtk_widget_destroy),
7382 GTK_OBJECT (window));
7385 if (!GTK_WIDGET_VISIBLE (window))
7386 gtk_widget_show_all (window);
7388 gtk_widget_destroy (window);
7396 create_gamma_curve (void)
7398 static GtkWidget *window = NULL, *curve;
7399 static int count = 0;
7406 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7407 gtk_window_set_title (GTK_WINDOW (window), "test");
7408 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
7410 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7411 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7414 curve = gtk_gamma_curve_new ();
7415 gtk_container_add (GTK_CONTAINER (window), curve);
7416 gtk_widget_show (curve);
7419 max = 127 + (count % 2)*128;
7420 gtk_curve_set_range (GTK_CURVE (GTK_GAMMA_CURVE (curve)->curve),
7422 for (i = 0; i < max; ++i)
7423 vec[i] = (127 / sqrt (max)) * sqrt (i);
7424 gtk_curve_set_vector (GTK_CURVE (GTK_GAMMA_CURVE (curve)->curve),
7427 if (!GTK_WIDGET_VISIBLE (window))
7428 gtk_widget_show (window);
7429 else if (count % 4 == 3)
7431 gtk_widget_destroy (window);
7442 static int scroll_test_pos = 0.0;
7443 static GdkGC *scroll_test_gc = NULL;
7446 scroll_test_expose (GtkWidget *widget, GdkEventExpose *event,
7450 gint imin, imax, jmin, jmax;
7452 imin = (event->area.x) / 10;
7453 imax = (event->area.x + event->area.width + 9) / 10;
7455 jmin = ((int)adj->value + event->area.y) / 10;
7456 jmax = ((int)adj->value + event->area.y + event->area.height + 9) / 10;
7458 gdk_window_clear_area (widget->window,
7459 event->area.x, event->area.y,
7460 event->area.width, event->area.height);
7462 for (i=imin; i<imax; i++)
7463 for (j=jmin; j<jmax; j++)
7465 gdk_draw_rectangle (widget->window,
7466 widget->style->black_gc,
7468 10*i, 10*j - (int)adj->value, 1+i%10, 1+j%10);
7474 scroll_test_configure (GtkWidget *widget, GdkEventConfigure *event,
7477 adj->page_increment = 0.9 * widget->allocation.height;
7478 adj->page_size = widget->allocation.height;
7480 gtk_signal_emit_by_name (GTK_OBJECT (adj), "changed");
7484 scroll_test_adjustment_changed (GtkAdjustment *adj, GtkWidget *widget)
7486 gint source_min = (int)adj->value - scroll_test_pos;
7487 gint source_max = source_min + widget->allocation.height;
7489 gint dest_max = widget->allocation.height;
7493 scroll_test_pos = adj->value;
7495 if (!GTK_WIDGET_DRAWABLE (widget))
7502 rect.width = widget->allocation.width;
7503 rect.height = -source_min;
7504 if (rect.height > widget->allocation.height)
7505 rect.height = widget->allocation.height;
7508 dest_min = rect.height;
7513 rect.y = 2*widget->allocation.height - source_max;
7516 rect.width = widget->allocation.width;
7517 rect.height = widget->allocation.height - rect.y;
7519 source_max = widget->allocation.height;
7523 if (source_min != source_max)
7525 if (scroll_test_gc == NULL)
7527 scroll_test_gc = gdk_gc_new (widget->window);
7528 gdk_gc_set_exposures (scroll_test_gc, TRUE);
7531 gdk_draw_pixmap (widget->window,
7536 widget->allocation.width,
7537 source_max - source_min);
7539 /* Make sure graphics expose events are processed before scrolling
7542 while ((event = gdk_event_get_graphics_expose (widget->window)) != NULL)
7544 gtk_widget_event (widget, event);
7545 if (event->expose.count == 0)
7547 gdk_event_free (event);
7550 gdk_event_free (event);
7554 if (rect.height != 0)
7555 gtk_widget_draw (widget, &rect);
7560 create_scroll_test (void)
7562 static GtkWidget *window = NULL;
7564 GtkWidget *drawing_area;
7565 GtkWidget *scrollbar;
7568 GdkGeometry geometry;
7569 GdkWindowHints geometry_mask;
7573 window = gtk_dialog_new ();
7575 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7576 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7579 gtk_window_set_title (GTK_WINDOW (window), "Scroll Test");
7580 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
7582 hbox = gtk_hbox_new (FALSE, 0);
7583 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), hbox,
7585 gtk_widget_show (hbox);
7587 drawing_area = gtk_drawing_area_new ();
7588 gtk_drawing_area_size (GTK_DRAWING_AREA (drawing_area), 200, 200);
7589 gtk_box_pack_start (GTK_BOX (hbox), drawing_area, TRUE, TRUE, 0);
7590 gtk_widget_show (drawing_area);
7592 gtk_widget_set_events (drawing_area, GDK_EXPOSURE_MASK);
7594 adj = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.0, 1000.0, 1.0, 180.0, 200.0));
7595 scroll_test_pos = 0.0;
7597 scrollbar = gtk_vscrollbar_new (adj);
7598 gtk_box_pack_start (GTK_BOX (hbox), scrollbar, FALSE, FALSE, 0);
7599 gtk_widget_show (scrollbar);
7601 gtk_signal_connect (GTK_OBJECT (drawing_area), "expose_event",
7602 GTK_SIGNAL_FUNC (scroll_test_expose), adj);
7603 gtk_signal_connect (GTK_OBJECT (drawing_area), "configure_event",
7604 GTK_SIGNAL_FUNC (scroll_test_configure), adj);
7607 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
7608 GTK_SIGNAL_FUNC (scroll_test_adjustment_changed),
7611 /* .. And create some buttons */
7613 button = gtk_button_new_with_label ("Quit");
7614 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7615 button, TRUE, TRUE, 0);
7617 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7618 GTK_SIGNAL_FUNC (gtk_widget_destroy),
7619 GTK_OBJECT (window));
7620 gtk_widget_show (button);
7622 /* Set up gridded geometry */
7624 geometry_mask = GDK_HINT_MIN_SIZE |
7625 GDK_HINT_BASE_SIZE |
7626 GDK_HINT_RESIZE_INC;
7628 geometry.min_width = 20;
7629 geometry.min_height = 20;
7630 geometry.base_width = 0;
7631 geometry.base_height = 0;
7632 geometry.width_inc = 10;
7633 geometry.height_inc = 10;
7635 gtk_window_set_geometry_hints (GTK_WINDOW (window),
7636 drawing_area, &geometry, geometry_mask);
7639 if (!GTK_WIDGET_VISIBLE (window))
7640 gtk_widget_show (window);
7642 gtk_widget_destroy (window);
7649 static int timer = 0;
7652 timeout_test (GtkWidget *label)
7654 static int count = 0;
7655 static char buffer[32];
7657 sprintf (buffer, "count: %d", ++count);
7658 gtk_label_set_text (GTK_LABEL (label), buffer);
7664 start_timeout_test (GtkWidget *widget,
7669 timer = gtk_timeout_add (100, (GtkFunction) timeout_test, label);
7674 stop_timeout_test (GtkWidget *widget,
7679 gtk_timeout_remove (timer);
7685 destroy_timeout_test (GtkWidget *widget,
7688 stop_timeout_test (NULL, NULL);
7694 create_timeout_test (void)
7696 static GtkWidget *window = NULL;
7702 window = gtk_dialog_new ();
7704 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7705 GTK_SIGNAL_FUNC(destroy_timeout_test),
7708 gtk_window_set_title (GTK_WINDOW (window), "Timeout Test");
7709 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
7711 label = gtk_label_new ("count: 0");
7712 gtk_misc_set_padding (GTK_MISC (label), 10, 10);
7713 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
7714 label, TRUE, TRUE, 0);
7715 gtk_widget_show (label);
7717 button = gtk_button_new_with_label ("close");
7718 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7719 GTK_SIGNAL_FUNC(gtk_widget_destroy),
7720 GTK_OBJECT (window));
7721 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7722 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7723 button, TRUE, TRUE, 0);
7724 gtk_widget_grab_default (button);
7725 gtk_widget_show (button);
7727 button = gtk_button_new_with_label ("start");
7728 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7729 GTK_SIGNAL_FUNC(start_timeout_test),
7731 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7732 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7733 button, TRUE, TRUE, 0);
7734 gtk_widget_show (button);
7736 button = gtk_button_new_with_label ("stop");
7737 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7738 GTK_SIGNAL_FUNC(stop_timeout_test),
7740 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7741 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7742 button, TRUE, TRUE, 0);
7743 gtk_widget_show (button);
7746 if (!GTK_WIDGET_VISIBLE (window))
7747 gtk_widget_show (window);
7749 gtk_widget_destroy (window);
7756 static int idle = 0;
7759 idle_test (GtkWidget *label)
7761 static int count = 0;
7762 static char buffer[32];
7764 sprintf (buffer, "count: %d", ++count);
7765 gtk_label_set_text (GTK_LABEL (label), buffer);
7771 start_idle_test (GtkWidget *widget,
7776 idle = gtk_idle_add ((GtkFunction) idle_test, label);
7781 stop_idle_test (GtkWidget *widget,
7786 gtk_idle_remove (idle);
7792 destroy_idle_test (GtkWidget *widget,
7795 stop_idle_test (NULL, NULL);
7801 toggle_idle_container (GtkObject *button,
7802 GtkContainer *container)
7804 gtk_container_set_resize_mode (container, GPOINTER_TO_INT (gtk_object_get_user_data (button)));
7808 create_idle_test (void)
7810 static GtkWidget *window = NULL;
7813 GtkWidget *container;
7820 window = gtk_dialog_new ();
7822 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7823 GTK_SIGNAL_FUNC(destroy_idle_test),
7826 gtk_window_set_title (GTK_WINDOW (window), "Idle Test");
7827 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
7829 label = gtk_label_new ("count: 0");
7830 gtk_misc_set_padding (GTK_MISC (label), 10, 10);
7831 gtk_widget_show (label);
7834 gtk_widget_new (GTK_TYPE_HBOX,
7835 "GtkWidget::visible", TRUE,
7836 /* "GtkContainer::child", gtk_widget_new (GTK_TYPE_HBOX,
7837 * "GtkWidget::visible", TRUE,
7839 "GtkContainer::child", label,
7842 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
7843 container, TRUE, TRUE, 0);
7846 gtk_widget_new (GTK_TYPE_FRAME,
7847 "GtkContainer::border_width", 5,
7848 "GtkFrame::label", "Label Container",
7849 "GtkWidget::visible", TRUE,
7850 "GtkWidget::parent", GTK_DIALOG (window)->vbox,
7853 gtk_widget_new (GTK_TYPE_VBOX,
7854 "GtkWidget::visible", TRUE,
7855 "GtkWidget::parent", frame,
7858 gtk_widget_new (GTK_TYPE_RADIO_BUTTON,
7859 "GtkButton::label", "Resize-Parent",
7860 "GtkObject::user_data", (void*)GTK_RESIZE_PARENT,
7861 "GtkObject::signal::clicked", toggle_idle_container, container,
7862 "GtkWidget::visible", TRUE,
7863 "GtkWidget::parent", box,
7866 gtk_widget_new (GTK_TYPE_RADIO_BUTTON,
7867 "GtkButton::label", "Resize-Queue",
7868 "GtkObject::user_data", (void*)GTK_RESIZE_QUEUE,
7869 "GtkObject::signal::clicked", toggle_idle_container, container,
7870 "GtkRadioButton::group", button,
7871 "GtkWidget::visible", TRUE,
7872 "GtkWidget::parent", box,
7875 gtk_widget_new (GTK_TYPE_RADIO_BUTTON,
7876 "GtkButton::label", "Resize-Immediate",
7877 "GtkObject::user_data", (void*)GTK_RESIZE_IMMEDIATE,
7878 "GtkObject::signal::clicked", toggle_idle_container, container,
7879 "GtkRadioButton::group", button,
7880 "GtkWidget::visible", TRUE,
7881 "GtkWidget::parent", box,
7885 button = gtk_button_new_with_label ("close");
7886 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7887 GTK_SIGNAL_FUNC(gtk_widget_destroy),
7888 GTK_OBJECT (window));
7889 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7890 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7891 button, TRUE, TRUE, 0);
7892 gtk_widget_grab_default (button);
7893 gtk_widget_show (button);
7895 button = gtk_button_new_with_label ("start");
7896 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7897 GTK_SIGNAL_FUNC(start_idle_test),
7899 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7900 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7901 button, TRUE, TRUE, 0);
7902 gtk_widget_show (button);
7904 button = gtk_button_new_with_label ("stop");
7905 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7906 GTK_SIGNAL_FUNC(stop_idle_test),
7908 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7909 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7910 button, TRUE, TRUE, 0);
7911 gtk_widget_show (button);
7914 if (!GTK_WIDGET_VISIBLE (window))
7915 gtk_widget_show (window);
7917 gtk_widget_destroy (window);
7925 reload_rc_file (void)
7929 if (gtk_rc_reparse_all ())
7931 toplevels = gdk_window_get_toplevels();
7935 gdk_window_get_user_data (toplevels->data, (gpointer *)&widget);
7938 gtk_widget_reset_rc_styles (widget);
7940 toplevels = toplevels->next;
7942 g_list_free (toplevels);
7947 reload_all_rc_files (void)
7949 static GdkAtom atom_rcfiles = GDK_NONE;
7955 atom_rcfiles = gdk_atom_intern("_GTK_READ_RCFILES", FALSE);
7957 for(i = 0; i < 5; i++)
7959 sev.data_format = 32;
7960 sev.message_type = atom_rcfiles;
7961 gdk_event_send_clientmessage_toall ((GdkEvent *) &sev);
7965 create_rc_file (void)
7967 static GtkWidget *window = NULL;
7972 window = gtk_dialog_new ();
7974 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7975 GTK_SIGNAL_FUNC(destroy_idle_test),
7978 gtk_window_set_title (GTK_WINDOW (window), "Reload Rc file");
7979 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
7981 button = gtk_button_new_with_label ("Reload");
7982 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7983 GTK_SIGNAL_FUNC(reload_rc_file), NULL);
7984 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7985 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7986 button, TRUE, TRUE, 0);
7987 gtk_widget_grab_default (button);
7988 gtk_widget_show (button);
7990 button = gtk_button_new_with_label ("Reload All");
7991 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7992 GTK_SIGNAL_FUNC(reload_all_rc_files), NULL);
7993 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7994 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
7995 button, TRUE, TRUE, 0);
7996 gtk_widget_show (button);
7998 button = gtk_button_new_with_label ("Close");
7999 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
8000 GTK_SIGNAL_FUNC(gtk_widget_destroy),
8001 GTK_OBJECT (window));
8002 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8003 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8004 button, TRUE, TRUE, 0);
8005 gtk_widget_show (button);
8009 if (!GTK_WIDGET_VISIBLE (window))
8010 gtk_widget_show (window);
8012 gtk_widget_destroy (window);
8016 * Test of recursive mainloop
8020 mainloop_destroyed (GtkWidget *w, GtkWidget **window)
8027 create_mainloop (void)
8029 static GtkWidget *window = NULL;
8035 window = gtk_dialog_new ();
8037 gtk_window_set_title (GTK_WINDOW (window), "Test Main Loop");
8039 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8040 GTK_SIGNAL_FUNC(mainloop_destroyed),
8043 label = gtk_label_new ("In recursive main loop...");
8044 gtk_misc_set_padding (GTK_MISC(label), 20, 20);
8046 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), label,
8048 gtk_widget_show (label);
8050 button = gtk_button_new_with_label ("Leave");
8051 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area), button,
8054 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
8055 GTK_SIGNAL_FUNC (gtk_widget_destroy),
8056 GTK_OBJECT (window));
8058 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8059 gtk_widget_grab_default (button);
8061 gtk_widget_show (button);
8064 if (!GTK_WIDGET_VISIBLE (window))
8066 gtk_widget_show (window);
8068 g_print ("create_mainloop: start\n");
8070 g_print ("create_mainloop: done\n");
8073 gtk_widget_destroy (window);
8077 layout_expose_handler (GtkWidget *widget, GdkEventExpose *event)
8082 gint imin, imax, jmin, jmax;
8084 layout = GTK_LAYOUT (widget);
8086 imin = (layout->xoffset + event->area.x) / 10;
8087 imax = (layout->xoffset + event->area.x + event->area.width + 9) / 10;
8089 jmin = (layout->yoffset + event->area.y) / 10;
8090 jmax = (layout->yoffset + event->area.y + event->area.height + 9) / 10;
8092 gdk_window_clear_area (widget->window,
8093 event->area.x, event->area.y,
8094 event->area.width, event->area.height);
8096 for (i=imin; i<imax; i++)
8097 for (j=jmin; j<jmax; j++)
8099 gdk_draw_rectangle (layout->bin_window,
8100 widget->style->black_gc,
8102 10*i - layout->xoffset, 10*j - layout->yoffset,
8108 void create_layout (void)
8110 static GtkWidget *window = NULL;
8112 GtkWidget *scrolledwindow;
8121 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
8122 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8123 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
8126 gtk_window_set_title (GTK_WINDOW (window), "Layout");
8127 gtk_widget_set_usize (window, 200, 200);
8129 scrolledwindow = gtk_scrolled_window_new (NULL, NULL);
8131 gtk_container_add (GTK_CONTAINER (window), scrolledwindow);
8133 layout = gtk_layout_new (NULL, NULL);
8134 gtk_container_add (GTK_CONTAINER (scrolledwindow), layout);
8136 /* We set step sizes here since GtkLayout does not set
8139 GTK_LAYOUT (layout)->hadjustment->step_increment = 10.0;
8140 GTK_LAYOUT (layout)->vadjustment->step_increment = 10.0;
8142 gtk_widget_set_events (layout, GDK_EXPOSURE_MASK);
8143 gtk_signal_connect (GTK_OBJECT (layout), "expose_event",
8144 GTK_SIGNAL_FUNC (layout_expose_handler), NULL);
8146 gtk_layout_set_size (GTK_LAYOUT (layout), 1600, 128000);
8148 for (i=0 ; i < 16 ; i++)
8149 for (j=0 ; j < 16 ; j++)
8151 sprintf(buf, "Button %d, %d", i, j);
8153 button = gtk_button_new_with_label (buf);
8155 button = gtk_label_new (buf);
8157 gtk_layout_put (GTK_LAYOUT (layout), button,
8161 for (i=16; i < 1280; i++)
8163 sprintf(buf, "Button %d, %d", i, 0);
8165 button = gtk_button_new_with_label (buf);
8167 button = gtk_label_new (buf);
8169 gtk_layout_put (GTK_LAYOUT (layout), button,
8174 if (!GTK_WIDGET_VISIBLE (window))
8175 gtk_widget_show_all (window);
8177 gtk_widget_destroy (window);
8181 * Main Window and Exit
8185 do_exit (GtkWidget *widget, GtkWidget *window)
8187 gtk_widget_destroy (window);
8192 create_main_window (void)
8199 { "button box", create_button_box },
8200 { "buttons", create_buttons },
8201 { "check buttons", create_check_buttons },
8202 { "clist", create_clist},
8203 { "color selection", create_color_selection },
8204 { "ctree", create_ctree },
8205 { "cursors", create_cursors },
8206 { "dialog", create_dialog },
8207 /* { "dnd", create_dnd }, */
8208 { "entry", create_entry },
8209 { "event watcher", create_event_watcher },
8210 { "file selection", create_file_selection },
8211 { "font selection", create_font_selection },
8212 { "gamma curve", create_gamma_curve },
8213 { "handle box", create_handle_box },
8214 { "item factory", create_item_factory },
8215 { "labels", create_labels },
8216 { "layout", create_layout },
8217 { "list", create_list },
8218 { "menus", create_menus },
8219 { "modal window", create_modal_window },
8220 { "notebook", create_notebook },
8221 { "panes", create_panes },
8222 { "pixmap", create_pixmap },
8223 { "preview color", create_color_preview },
8224 { "preview gray", create_gray_preview },
8225 { "progress bar", create_progress_bar },
8226 { "radio buttons", create_radio_buttons },
8227 { "range controls", create_range_controls },
8228 { "rc file", create_rc_file },
8229 { "reparent", create_reparent },
8230 { "rulers", create_rulers },
8231 { "saved position", create_saved_position },
8232 { "scrolled windows", create_scrolled_windows },
8233 { "shapes", create_shapes },
8234 { "spinbutton", create_spins },
8235 { "statusbar", create_statusbar },
8236 { "test idle", create_idle_test },
8237 { "test mainloop", create_mainloop },
8238 { "test scrolling", create_scroll_test },
8239 { "test selection", create_selection_test },
8240 { "test timeout", create_timeout_test },
8241 { "text", create_text },
8242 { "toggle buttons", create_toggle_buttons },
8243 { "toolbar", create_toolbar },
8244 { "tooltips", create_tooltips },
8245 { "tree", create_tree_mode_window},
8246 { "WM hints", create_wmhints },
8248 int nbuttons = sizeof (buttons) / sizeof (buttons[0]);
8252 GtkWidget *scrolled_window;
8256 GtkWidget *separator;
8259 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
8260 gtk_window_set_policy (GTK_WINDOW (window), FALSE, FALSE, FALSE);
8261 gtk_widget_set_name (window, "main window");
8262 gtk_widget_set_usize (window, 200, 400);
8263 gtk_widget_set_uposition (window, 20, 20);
8265 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8266 GTK_SIGNAL_FUNC(gtk_main_quit),
8268 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
8269 GTK_SIGNAL_FUNC (gtk_false),
8272 box1 = gtk_vbox_new (FALSE, 0);
8273 gtk_container_add (GTK_CONTAINER (window), box1);
8275 if (gtk_micro_version > 0)
8287 label = gtk_label_new (buffer);
8288 gtk_box_pack_start (GTK_BOX (box1), label, FALSE, FALSE, 0);
8290 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
8291 gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10);
8292 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
8293 GTK_POLICY_AUTOMATIC,
8294 GTK_POLICY_AUTOMATIC);
8295 gtk_box_pack_start (GTK_BOX (box1), scrolled_window, TRUE, TRUE, 0);
8297 box2 = gtk_vbox_new (FALSE, 0);
8298 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
8299 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), box2);
8300 gtk_container_set_focus_vadjustment (GTK_CONTAINER (box2),
8301 gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
8302 gtk_widget_show (box2);
8304 for (i = 0; i < nbuttons; i++)
8306 button = gtk_button_new_with_label (buttons[i].label);
8307 if (buttons[i].func)
8308 gtk_signal_connect (GTK_OBJECT (button),
8310 GTK_SIGNAL_FUNC(buttons[i].func),
8313 gtk_widget_set_sensitive (button, FALSE);
8314 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
8317 separator = gtk_hseparator_new ();
8318 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
8320 box2 = gtk_vbox_new (FALSE, 10);
8321 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
8322 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
8324 button = gtk_button_new_with_label ("close");
8325 gtk_signal_connect (GTK_OBJECT (button), "clicked",
8326 GTK_SIGNAL_FUNC (do_exit),
8328 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
8329 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8330 gtk_widget_grab_default (button);
8332 gtk_widget_show_all (window);
8336 main (int argc, char *argv[])
8338 GtkBindingSet *binding_set;
8340 srand (time (NULL));
8344 gtk_rc_add_default_file ("testgtkrc");
8346 gtk_init (&argc, &argv);
8352 binding_set = gtk_binding_set_by_class (gtk_type_class (GTK_TYPE_WIDGET));
8353 gtk_binding_entry_add_signal (binding_set,
8354 '9', GDK_CONTROL_MASK | GDK_RELEASE_MASK,
8357 GTK_TYPE_STRING, "GtkWidgetClass <ctrl><release>9 test");
8359 create_main_window ();