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 Lesser 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 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser 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-2000. 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/.
41 #define GTK_ENABLE_BROKEN
44 #include "gdk/gdkkeysyms.h"
47 #define sleep(n) _sleep(n)
50 #include "circles.xbm"
53 typedef struct _OptionMenuItem
60 file_exists (const char *filename)
64 return stat (filename, &statbuf) == 0;
68 shape_create_icon (char *xpm_file,
76 build_option_menu (OptionMenuItem items[],
81 /* macro, structure and variables used by tree window demos */
82 #define DEFAULT_NUMBER_OF_ITEM 3
83 #define DEFAULT_RECURSION_LEVEL 3
86 GSList* selection_mode_group;
87 GtkWidget* single_button;
88 GtkWidget* browse_button;
89 GtkWidget* multiple_button;
90 GtkWidget* draw_line_button;
91 GtkWidget* view_line_button;
92 GtkWidget* no_root_item_button;
93 GtkWidget* nb_item_spinner;
94 GtkWidget* recursion_spinner;
95 } sTreeSampleSelection;
97 typedef struct sTreeButtons {
99 GtkWidget* add_button;
100 GtkWidget* remove_button;
101 GtkWidget* subtree_button;
103 /* end of tree section */
106 build_option_menu (OptionMenuItem items[],
113 GtkWidget *menu_item;
116 omenu = gtk_option_menu_new ();
118 menu = gtk_menu_new ();
120 for (i = 0; i < num_items; i++)
122 menu_item = gtk_menu_item_new_with_label (items[i].name);
123 gtk_signal_connect (GTK_OBJECT (menu_item), "activate",
124 (GtkSignalFunc) items[i].func, data);
125 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
126 gtk_widget_show (menu_item);
129 gtk_option_menu_set_menu (GTK_OPTION_MENU (omenu), menu);
130 gtk_option_menu_set_history (GTK_OPTION_MENU (omenu), history);
136 destroy_tooltips (GtkWidget *widget, GtkWindow **window)
138 GtkTooltips *tt = gtk_object_get_data (GTK_OBJECT (*window), "tooltips");
139 gtk_object_unref (GTK_OBJECT (tt));
148 button_window (GtkWidget *widget,
151 if (!GTK_WIDGET_VISIBLE (button))
152 gtk_widget_show (button);
154 gtk_widget_hide (button);
158 create_buttons (void)
160 static GtkWidget *window = NULL;
164 GtkWidget *button[10];
165 GtkWidget *separator;
169 GtkAccelGroup *accel_group;
171 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
173 accel_group = gtk_window_get_default_accel_group (GTK_WINDOW (window));
175 gtk_signal_connect (GTK_OBJECT (window), "destroy",
176 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
179 gtk_window_set_title (GTK_WINDOW (window), "GtkButton");
180 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
182 box1 = gtk_vbox_new (FALSE, 0);
183 gtk_container_add (GTK_CONTAINER (window), box1);
185 table = gtk_table_new (3, 3, FALSE);
186 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
187 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
188 gtk_container_set_border_width (GTK_CONTAINER (table), 10);
189 gtk_box_pack_start (GTK_BOX (box1), table, TRUE, TRUE, 0);
191 button[0] = gtk_button_new_with_label ("button1");
192 button[1] = gtk_button_new_accel ("_button2", accel_group);
193 button[2] = gtk_button_new_with_label ("button3");
194 button[3] = gtk_button_new_stock (GTK_STOCK_BUTTON_OK, NULL);
195 button[4] = gtk_button_new_with_label ("button5");
196 button[5] = gtk_button_new_with_label ("button6");
197 button[6] = gtk_button_new_with_label ("button7");
198 button[7] = gtk_button_new_stock (GTK_STOCK_BUTTON_CLOSE, accel_group);
199 button[8] = gtk_button_new_with_label ("button9");
201 gtk_signal_connect (GTK_OBJECT (button[0]), "clicked",
202 GTK_SIGNAL_FUNC(button_window),
205 gtk_table_attach (GTK_TABLE (table), button[0], 0, 1, 0, 1,
206 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
208 gtk_signal_connect (GTK_OBJECT (button[1]), "clicked",
209 GTK_SIGNAL_FUNC(button_window),
212 gtk_table_attach (GTK_TABLE (table), button[1], 1, 2, 1, 2,
213 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
215 gtk_signal_connect (GTK_OBJECT (button[2]), "clicked",
216 GTK_SIGNAL_FUNC(button_window),
218 gtk_table_attach (GTK_TABLE (table), button[2], 2, 3, 2, 3,
219 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
221 gtk_signal_connect (GTK_OBJECT (button[3]), "clicked",
222 GTK_SIGNAL_FUNC(button_window),
224 gtk_table_attach (GTK_TABLE (table), button[3], 0, 1, 2, 3,
225 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
227 gtk_signal_connect (GTK_OBJECT (button[4]), "clicked",
228 GTK_SIGNAL_FUNC(button_window),
230 gtk_table_attach (GTK_TABLE (table), button[4], 2, 3, 0, 1,
231 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
233 gtk_signal_connect (GTK_OBJECT (button[5]), "clicked",
234 GTK_SIGNAL_FUNC(button_window),
236 gtk_table_attach (GTK_TABLE (table), button[5], 1, 2, 2, 3,
237 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
239 gtk_signal_connect (GTK_OBJECT (button[6]), "clicked",
240 GTK_SIGNAL_FUNC(button_window),
242 gtk_table_attach (GTK_TABLE (table), button[6], 1, 2, 0, 1,
243 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
245 gtk_signal_connect (GTK_OBJECT (button[7]), "clicked",
246 GTK_SIGNAL_FUNC(button_window),
248 gtk_table_attach (GTK_TABLE (table), button[7], 2, 3, 1, 2,
249 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
251 gtk_signal_connect (GTK_OBJECT (button[8]), "clicked",
252 GTK_SIGNAL_FUNC(button_window),
254 gtk_table_attach (GTK_TABLE (table), button[8], 0, 1, 1, 2,
255 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
257 separator = gtk_hseparator_new ();
258 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
260 box2 = gtk_vbox_new (FALSE, 10);
261 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
262 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
264 button[9] = gtk_button_new_with_label ("close");
265 gtk_signal_connect_object (GTK_OBJECT (button[9]), "clicked",
266 GTK_SIGNAL_FUNC(gtk_widget_destroy),
267 GTK_OBJECT (window));
268 gtk_box_pack_start (GTK_BOX (box2), button[9], TRUE, TRUE, 0);
269 GTK_WIDGET_SET_FLAGS (button[9], GTK_CAN_DEFAULT);
270 gtk_widget_grab_default (button[9]);
273 if (!GTK_WIDGET_VISIBLE (window))
274 gtk_widget_show_all (window);
276 gtk_widget_hide (window);
284 create_toggle_buttons (void)
286 static GtkWidget *window = NULL;
290 GtkWidget *separator;
294 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
296 gtk_signal_connect (GTK_OBJECT (window), "destroy",
297 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
300 gtk_window_set_title (GTK_WINDOW (window), "GtkToggleButton");
301 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
303 box1 = gtk_vbox_new (FALSE, 0);
304 gtk_container_add (GTK_CONTAINER (window), box1);
306 box2 = gtk_vbox_new (FALSE, 10);
307 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
308 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
310 button = gtk_toggle_button_new_with_label ("button1");
311 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
313 button = gtk_toggle_button_new_with_label ("button2");
314 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
316 button = gtk_toggle_button_new_with_label ("button3");
317 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
319 separator = gtk_hseparator_new ();
320 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
322 box2 = gtk_vbox_new (FALSE, 10);
323 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
324 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
326 button = gtk_button_new_with_label ("close");
327 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
328 GTK_SIGNAL_FUNC(gtk_widget_destroy),
329 GTK_OBJECT (window));
330 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
331 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
332 gtk_widget_grab_default (button);
335 if (!GTK_WIDGET_VISIBLE (window))
336 gtk_widget_show_all (window);
338 gtk_widget_destroy (window);
346 create_check_buttons (void)
348 static GtkWidget *window = NULL;
352 GtkWidget *separator;
356 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
358 gtk_signal_connect (GTK_OBJECT (window), "destroy",
359 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
362 gtk_window_set_title (GTK_WINDOW (window), "GtkCheckButton");
363 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
365 box1 = gtk_vbox_new (FALSE, 0);
366 gtk_container_add (GTK_CONTAINER (window), box1);
368 box2 = gtk_vbox_new (FALSE, 10);
369 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
370 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
372 button = gtk_check_button_new_with_label ("button1");
373 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
375 button = gtk_check_button_new_with_label ("button2");
376 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
378 button = gtk_check_button_new_with_label ("button3");
379 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
381 separator = gtk_hseparator_new ();
382 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
384 box2 = gtk_vbox_new (FALSE, 10);
385 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
386 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
388 button = gtk_button_new_with_label ("close");
389 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
390 GTK_SIGNAL_FUNC(gtk_widget_destroy),
391 GTK_OBJECT (window));
392 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
393 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
394 gtk_widget_grab_default (button);
397 if (!GTK_WIDGET_VISIBLE (window))
398 gtk_widget_show_all (window);
400 gtk_widget_destroy (window);
408 create_radio_buttons (void)
410 static GtkWidget *window = NULL;
414 GtkWidget *separator;
418 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
420 gtk_signal_connect (GTK_OBJECT (window), "destroy",
421 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
424 gtk_window_set_title (GTK_WINDOW (window), "radio buttons");
425 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
427 box1 = gtk_vbox_new (FALSE, 0);
428 gtk_container_add (GTK_CONTAINER (window), box1);
430 box2 = gtk_vbox_new (FALSE, 10);
431 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
432 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
434 button = gtk_radio_button_new_with_label (NULL, "button1");
435 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
437 button = gtk_radio_button_new_with_label (
438 gtk_radio_button_group (GTK_RADIO_BUTTON (button)),
440 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
441 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
443 button = gtk_radio_button_new_with_label (
444 gtk_radio_button_group (GTK_RADIO_BUTTON (button)),
446 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
448 separator = gtk_hseparator_new ();
449 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
451 box2 = gtk_vbox_new (FALSE, 10);
452 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
453 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
455 button = gtk_button_new_with_label ("close");
456 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
457 GTK_SIGNAL_FUNC(gtk_widget_destroy),
458 GTK_OBJECT (window));
459 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
460 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
461 gtk_widget_grab_default (button);
464 if (!GTK_WIDGET_VISIBLE (window))
465 gtk_widget_show_all (window);
467 gtk_widget_destroy (window);
475 create_bbox (gint horizontal,
486 frame = gtk_frame_new (title);
489 bbox = gtk_hbutton_box_new ();
491 bbox = gtk_vbutton_box_new ();
493 gtk_container_set_border_width (GTK_CONTAINER (bbox), 5);
494 gtk_container_add (GTK_CONTAINER (frame), bbox);
496 gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), layout);
497 gtk_button_box_set_spacing (GTK_BUTTON_BOX (bbox), spacing);
498 gtk_button_box_set_child_size (GTK_BUTTON_BOX (bbox), child_w, child_h);
500 button = gtk_button_new_with_label ("OK");
501 gtk_container_add (GTK_CONTAINER (bbox), button);
503 button = gtk_button_new_with_label ("Cancel");
504 gtk_container_add (GTK_CONTAINER (bbox), button);
506 button = gtk_button_new_with_label ("Help");
507 gtk_container_add (GTK_CONTAINER (bbox), button);
513 create_button_box (void)
515 static GtkWidget* window = NULL;
516 GtkWidget *main_vbox;
519 GtkWidget *frame_horz;
520 GtkWidget *frame_vert;
524 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
525 gtk_window_set_title (GTK_WINDOW (window), "Button Boxes");
527 gtk_signal_connect (GTK_OBJECT (window), "destroy",
528 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
531 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
533 main_vbox = gtk_vbox_new (FALSE, 0);
534 gtk_container_add (GTK_CONTAINER (window), main_vbox);
536 frame_horz = gtk_frame_new ("Horizontal Button Boxes");
537 gtk_box_pack_start (GTK_BOX (main_vbox), frame_horz, TRUE, TRUE, 10);
539 vbox = gtk_vbox_new (FALSE, 0);
540 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
541 gtk_container_add (GTK_CONTAINER (frame_horz), vbox);
543 gtk_box_pack_start (GTK_BOX (vbox),
544 create_bbox (TRUE, "Spread", 40, 85, 20, GTK_BUTTONBOX_SPREAD),
547 gtk_box_pack_start (GTK_BOX (vbox),
548 create_bbox (TRUE, "Edge", 40, 85, 20, GTK_BUTTONBOX_EDGE),
551 gtk_box_pack_start (GTK_BOX (vbox),
552 create_bbox (TRUE, "Start", 40, 85, 20, GTK_BUTTONBOX_START),
555 gtk_box_pack_start (GTK_BOX (vbox),
556 create_bbox (TRUE, "End", 40, 85, 20, GTK_BUTTONBOX_END),
559 frame_vert = gtk_frame_new ("Vertical Button Boxes");
560 gtk_box_pack_start (GTK_BOX (main_vbox), frame_vert, TRUE, TRUE, 10);
562 hbox = gtk_hbox_new (FALSE, 0);
563 gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
564 gtk_container_add (GTK_CONTAINER (frame_vert), hbox);
566 gtk_box_pack_start (GTK_BOX (hbox),
567 create_bbox (FALSE, "Spread", 30, 85, 20, GTK_BUTTONBOX_SPREAD),
570 gtk_box_pack_start (GTK_BOX (hbox),
571 create_bbox (FALSE, "Edge", 30, 85, 20, GTK_BUTTONBOX_EDGE),
574 gtk_box_pack_start (GTK_BOX (hbox),
575 create_bbox (FALSE, "Start", 30, 85, 20, GTK_BUTTONBOX_START),
578 gtk_box_pack_start (GTK_BOX (hbox),
579 create_bbox (FALSE, "End", 30, 85, 20, GTK_BUTTONBOX_END),
583 if (!GTK_WIDGET_VISIBLE (window))
584 gtk_widget_show_all (window);
586 gtk_widget_destroy (window);
594 new_pixmap (char *filename,
596 GdkColor *background)
602 if (strcmp (filename, "test.xpm") == 0 ||
603 !file_exists (filename))
605 pixmap = gdk_pixmap_create_from_xpm_d (window, &mask,
610 pixmap = gdk_pixmap_create_from_xpm (window, &mask,
614 wpixmap = gtk_pixmap_new (pixmap, mask);
620 set_toolbar_horizontal (GtkWidget *widget,
623 gtk_toolbar_set_orientation (GTK_TOOLBAR (data), GTK_ORIENTATION_HORIZONTAL);
627 set_toolbar_vertical (GtkWidget *widget,
630 gtk_toolbar_set_orientation (GTK_TOOLBAR (data), GTK_ORIENTATION_VERTICAL);
634 set_toolbar_icons (GtkWidget *widget,
637 gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_ICONS);
641 set_toolbar_text (GtkWidget *widget,
644 gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_TEXT);
648 set_toolbar_both (GtkWidget *widget,
651 gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_BOTH);
655 set_toolbar_both_horiz (GtkWidget *widget,
658 gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_BOTH_HORIZ);
662 set_toolbar_small_space (GtkWidget *widget,
665 gtk_toolbar_set_space_size (GTK_TOOLBAR (data), 5);
669 set_toolbar_big_space (GtkWidget *widget,
672 gtk_toolbar_set_space_size (GTK_TOOLBAR (data), 10);
676 set_toolbar_enable (GtkWidget *widget,
679 gtk_toolbar_set_tooltips (GTK_TOOLBAR (data), TRUE);
683 set_toolbar_disable (GtkWidget *widget,
686 gtk_toolbar_set_tooltips (GTK_TOOLBAR (data), FALSE);
690 set_toolbar_borders (GtkWidget *widget,
693 gtk_toolbar_set_button_relief (GTK_TOOLBAR (data), GTK_RELIEF_NORMAL);
697 set_toolbar_borderless (GtkWidget *widget,
700 gtk_toolbar_set_button_relief (GTK_TOOLBAR (data), GTK_RELIEF_NONE);
704 set_toolbar_space_style_empty (GtkWidget *widget,
707 gtk_toolbar_set_space_style (GTK_TOOLBAR (data), GTK_TOOLBAR_SPACE_EMPTY);
711 set_toolbar_space_style_line (GtkWidget *widget,
714 gtk_toolbar_set_space_style (GTK_TOOLBAR (data), GTK_TOOLBAR_SPACE_LINE);
718 create_toolbar (void)
720 static GtkWidget *window = NULL;
726 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
727 gtk_window_set_title (GTK_WINDOW (window), "Toolbar test");
728 gtk_window_set_policy (GTK_WINDOW (window), FALSE, TRUE, TRUE);
730 gtk_signal_connect (GTK_OBJECT (window), "destroy",
731 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
734 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
735 gtk_widget_realize (window);
737 toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_BOTH);
738 gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NONE);
740 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
741 "Horizontal", "Horizontal toolbar layout", "Toolbar/Horizontal",
742 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
743 (GtkSignalFunc) set_toolbar_horizontal, toolbar);
744 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
745 "Vertical", "Vertical toolbar layout", "Toolbar/Vertical",
746 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
747 (GtkSignalFunc) set_toolbar_vertical, toolbar);
749 gtk_toolbar_append_space (GTK_TOOLBAR(toolbar));
751 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
752 "Icons", "Only show toolbar icons", "Toolbar/IconsOnly",
753 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
754 (GtkSignalFunc) set_toolbar_icons, toolbar);
755 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
756 "Text", "Only show toolbar text", "Toolbar/TextOnly",
757 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
758 (GtkSignalFunc) set_toolbar_text, toolbar);
759 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
760 "Both", "Show toolbar icons and text", "Toolbar/Both",
761 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
762 (GtkSignalFunc) set_toolbar_both, toolbar);
763 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
765 "Show toolbar icons and text in a horizontal fashion",
767 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
768 (GtkSignalFunc) set_toolbar_both_horiz, toolbar);
770 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
772 entry = gtk_entry_new ();
774 gtk_toolbar_append_widget (GTK_TOOLBAR (toolbar), entry, "This is an unusable GtkEntry ;)", "Hey don't click me!!!");
776 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
778 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
779 "Small", "Use small spaces", "Toolbar/Small",
780 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
781 (GtkSignalFunc) set_toolbar_small_space, toolbar);
782 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
783 "Big", "Use big spaces", "Toolbar/Big",
784 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
785 (GtkSignalFunc) set_toolbar_big_space, toolbar);
787 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
789 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
790 "Enable", "Enable tooltips", NULL,
791 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
792 (GtkSignalFunc) set_toolbar_enable, toolbar);
793 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
794 "Disable", "Disable tooltips", NULL,
795 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
796 (GtkSignalFunc) set_toolbar_disable, toolbar);
798 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
800 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
801 "Borders", "Show Borders", NULL,
802 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
803 (GtkSignalFunc) set_toolbar_borders, toolbar);
804 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
805 "Borderless", "Hide Borders", NULL,
806 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
807 (GtkSignalFunc) set_toolbar_borderless, toolbar);
809 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
811 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
812 "Empty", "Empty spaces", NULL,
813 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
814 (GtkSignalFunc) set_toolbar_space_style_empty, toolbar);
815 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
816 "Lines", "Lines in spaces", NULL,
817 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
818 (GtkSignalFunc) set_toolbar_space_style_line, toolbar);
820 gtk_container_add (GTK_CONTAINER (window), toolbar);
823 if (!GTK_WIDGET_VISIBLE (window))
824 gtk_widget_show_all (window);
826 gtk_widget_destroy (window);
830 make_toolbar (GtkWidget *window)
834 if (!GTK_WIDGET_REALIZED (window))
835 gtk_widget_realize (window);
837 toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_BOTH);
838 gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NONE);
840 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
841 "Horizontal", "Horizontal toolbar layout", NULL,
842 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
843 (GtkSignalFunc) set_toolbar_horizontal, toolbar);
844 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
845 "Vertical", "Vertical toolbar layout", NULL,
846 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
847 (GtkSignalFunc) set_toolbar_vertical, toolbar);
849 gtk_toolbar_append_space (GTK_TOOLBAR(toolbar));
851 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
852 "Icons", "Only show toolbar icons", NULL,
853 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
854 (GtkSignalFunc) set_toolbar_icons, toolbar);
855 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
856 "Text", "Only show toolbar text", NULL,
857 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
858 (GtkSignalFunc) set_toolbar_text, toolbar);
859 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
860 "Both", "Show toolbar icons and text", NULL,
861 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
862 (GtkSignalFunc) set_toolbar_both, toolbar);
864 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
866 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
867 "Small", "Use small spaces", NULL,
868 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
869 (GtkSignalFunc) set_toolbar_small_space, toolbar);
870 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
871 "Big", "Use big spaces", "Toolbar/Big",
872 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
873 (GtkSignalFunc) set_toolbar_big_space, toolbar);
875 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
877 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
878 "Enable", "Enable tooltips", NULL,
879 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
880 (GtkSignalFunc) set_toolbar_enable, toolbar);
881 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
882 "Disable", "Disable tooltips", NULL,
883 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
884 (GtkSignalFunc) set_toolbar_disable, toolbar);
886 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
888 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
889 "Borders", "Show Borders", NULL,
890 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
891 (GtkSignalFunc) set_toolbar_borders, toolbar);
892 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
893 "Borderless", "Hide Borders", NULL,
894 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
895 (GtkSignalFunc) set_toolbar_borderless, toolbar);
904 static guint statusbar_counter = 1;
907 statusbar_push (GtkWidget *button,
908 GtkStatusbar *statusbar)
912 sprintf (text, "something %d", statusbar_counter++);
914 gtk_statusbar_push (statusbar, 1, text);
918 statusbar_pop (GtkWidget *button,
919 GtkStatusbar *statusbar)
921 gtk_statusbar_pop (statusbar, 1);
925 statusbar_steal (GtkWidget *button,
926 GtkStatusbar *statusbar)
928 gtk_statusbar_remove (statusbar, 1, 4);
932 statusbar_popped (GtkStatusbar *statusbar,
936 if (!statusbar->messages)
937 statusbar_counter = 1;
941 statusbar_contexts (GtkStatusbar *statusbar)
945 string = "any context";
946 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
948 gtk_statusbar_get_context_id (statusbar, string));
950 string = "idle messages";
951 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
953 gtk_statusbar_get_context_id (statusbar, string));
955 string = "some text";
956 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
958 gtk_statusbar_get_context_id (statusbar, string));
960 string = "hit the mouse";
961 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
963 gtk_statusbar_get_context_id (statusbar, string));
965 string = "hit the mouse2";
966 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
968 gtk_statusbar_get_context_id (statusbar, string));
972 statusbar_dump_stack (GtkStatusbar *statusbar)
976 for (list = statusbar->messages; list; list = list->next)
978 GtkStatusbarMsg *msg;
981 g_print ("context_id: %d, message_id: %d, status_text: \"%s\"\n",
989 create_statusbar (void)
991 static GtkWidget *window = NULL;
995 GtkWidget *separator;
996 GtkWidget *statusbar;
1000 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1002 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1003 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
1006 gtk_window_set_title (GTK_WINDOW (window), "statusbar");
1007 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
1009 box1 = gtk_vbox_new (FALSE, 0);
1010 gtk_container_add (GTK_CONTAINER (window), box1);
1012 box2 = gtk_vbox_new (FALSE, 10);
1013 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
1014 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
1016 statusbar = gtk_statusbar_new ();
1017 gtk_box_pack_end (GTK_BOX (box1), statusbar, TRUE, TRUE, 0);
1018 gtk_signal_connect (GTK_OBJECT (statusbar),
1020 GTK_SIGNAL_FUNC (statusbar_popped),
1023 button = gtk_widget_new (gtk_button_get_type (),
1024 "label", "push something",
1028 g_object_set (G_OBJECT (button),
1029 "signal::clicked", statusbar_push, statusbar,
1032 button = gtk_widget_new (gtk_button_get_type (),
1037 g_object_set (G_OBJECT (button),
1038 "signal_after::clicked", statusbar_pop, statusbar,
1041 button = gtk_widget_new (gtk_button_get_type (),
1042 "label", "steal #4",
1046 g_object_set (G_OBJECT (button),
1047 "signal_after::clicked", statusbar_steal, statusbar,
1050 button = gtk_widget_new (gtk_button_get_type (),
1051 "label", "dump stack",
1055 g_object_set (G_OBJECT (button),
1056 "swapped_signal::clicked", statusbar_dump_stack, statusbar,
1059 button = gtk_widget_new (gtk_button_get_type (),
1060 "label", "test contexts",
1064 g_object_set (G_OBJECT (button),
1065 "swapped_signal_after::clicked", statusbar_contexts, statusbar,
1068 separator = gtk_hseparator_new ();
1069 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
1071 box2 = gtk_vbox_new (FALSE, 10);
1072 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
1073 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
1075 button = gtk_button_new_with_label ("close");
1076 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
1077 GTK_SIGNAL_FUNC(gtk_widget_destroy),
1078 GTK_OBJECT (window));
1079 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
1080 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
1081 gtk_widget_grab_default (button);
1084 if (!GTK_WIDGET_VISIBLE (window))
1085 gtk_widget_show_all (window);
1087 gtk_widget_destroy (window);
1095 cb_tree_destroy_event(GtkWidget* w)
1097 sTreeButtons* tree_buttons;
1099 /* free buttons structure associate at this tree */
1100 tree_buttons = gtk_object_get_user_data (GTK_OBJECT (w));
1101 g_free (tree_buttons);
1105 cb_add_new_item(GtkWidget* w, GtkTree* tree)
1107 sTreeButtons* tree_buttons;
1108 GList* selected_list;
1109 GtkWidget* selected_item;
1111 GtkWidget* item_new;
1114 tree_buttons = gtk_object_get_user_data(GTK_OBJECT(tree));
1116 selected_list = GTK_TREE_SELECTION_OLD(tree);
1118 if(selected_list == NULL)
1120 /* there is no item in tree */
1121 subtree = GTK_WIDGET(tree);
1125 /* list can have only one element */
1126 selected_item = GTK_WIDGET(selected_list->data);
1128 subtree = GTK_TREE_ITEM_SUBTREE(selected_item);
1132 /* current selected item have not subtree ... create it */
1133 subtree = gtk_tree_new();
1134 gtk_tree_item_set_subtree(GTK_TREE_ITEM(selected_item),
1139 /* at this point, we know which subtree will be used to add new item */
1140 /* create a new item */
1141 sprintf(buffer, "item add %d", tree_buttons->nb_item_add);
1142 item_new = gtk_tree_item_new_with_label(buffer);
1143 gtk_tree_append(GTK_TREE(subtree), item_new);
1144 gtk_widget_show(item_new);
1146 tree_buttons->nb_item_add++;
1150 cb_remove_item(GtkWidget*w, GtkTree* tree)
1152 GList* selected_list;
1155 selected_list = GTK_TREE_SELECTION_OLD(tree);
1159 while (selected_list)
1161 clear_list = g_list_prepend (clear_list, selected_list->data);
1162 selected_list = selected_list->next;
1165 clear_list = g_list_reverse (clear_list);
1166 gtk_tree_remove_items(tree, clear_list);
1168 g_list_free (clear_list);
1172 cb_remove_subtree(GtkWidget*w, GtkTree* tree)
1174 GList* selected_list;
1177 selected_list = GTK_TREE_SELECTION_OLD(tree);
1181 item = GTK_TREE_ITEM (selected_list->data);
1183 gtk_tree_item_remove_subtree (item);
1188 cb_tree_changed(GtkTree* tree)
1190 sTreeButtons* tree_buttons;
1191 GList* selected_list;
1194 tree_buttons = gtk_object_get_user_data(GTK_OBJECT(tree));
1196 selected_list = GTK_TREE_SELECTION_OLD(tree);
1197 nb_selected = g_list_length(selected_list);
1199 if(nb_selected == 0)
1201 if(tree->children == NULL)
1202 gtk_widget_set_sensitive(tree_buttons->add_button, TRUE);
1204 gtk_widget_set_sensitive(tree_buttons->add_button, FALSE);
1205 gtk_widget_set_sensitive(tree_buttons->remove_button, FALSE);
1206 gtk_widget_set_sensitive(tree_buttons->subtree_button, FALSE);
1210 gtk_widget_set_sensitive(tree_buttons->remove_button, TRUE);
1211 gtk_widget_set_sensitive(tree_buttons->add_button, (nb_selected == 1));
1212 gtk_widget_set_sensitive(tree_buttons->subtree_button, (nb_selected == 1));
1217 create_subtree(GtkWidget* item, guint level, guint nb_item_max, guint recursion_level_max)
1219 GtkWidget* item_subtree;
1220 GtkWidget* item_new;
1225 if(level == recursion_level_max) return;
1229 /* query with no root item */
1231 item_subtree = item;
1236 /* query with no root item */
1237 /* create subtree and associate it with current item */
1238 item_subtree = gtk_tree_new();
1242 for(nb_item = 0; nb_item < nb_item_max; nb_item++)
1244 sprintf(buffer, "item %d-%d", level, nb_item);
1245 item_new = gtk_tree_item_new_with_label(buffer);
1246 gtk_tree_append(GTK_TREE(item_subtree), item_new);
1247 create_subtree(item_new, level+1, nb_item_max, recursion_level_max);
1248 gtk_widget_show(item_new);
1252 gtk_tree_item_set_subtree(GTK_TREE_ITEM(item), item_subtree);
1256 create_tree_sample(guint selection_mode,
1257 guint draw_line, guint view_line, guint no_root_item,
1258 guint nb_item_max, guint recursion_level_max)
1263 GtkWidget* separator;
1265 GtkWidget* scrolled_win;
1266 GtkWidget* root_tree;
1267 GtkWidget* root_item;
1268 sTreeButtons* tree_buttons;
1270 /* create tree buttons struct */
1271 if ((tree_buttons = g_malloc (sizeof (sTreeButtons))) == NULL)
1273 g_error("can't allocate memory for tree structure !\n");
1276 tree_buttons->nb_item_add = 0;
1278 /* create top level window */
1279 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
1280 gtk_window_set_title(GTK_WINDOW(window), "Tree Sample");
1281 gtk_signal_connect(GTK_OBJECT(window), "destroy",
1282 (GtkSignalFunc) cb_tree_destroy_event, NULL);
1283 gtk_object_set_user_data(GTK_OBJECT(window), tree_buttons);
1285 box1 = gtk_vbox_new(FALSE, 0);
1286 gtk_container_add(GTK_CONTAINER(window), box1);
1287 gtk_widget_show(box1);
1289 /* create tree box */
1290 box2 = gtk_vbox_new(FALSE, 0);
1291 gtk_box_pack_start(GTK_BOX(box1), box2, TRUE, TRUE, 0);
1292 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1293 gtk_widget_show(box2);
1295 /* create scrolled window */
1296 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
1297 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
1298 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1299 gtk_box_pack_start (GTK_BOX (box2), scrolled_win, TRUE, TRUE, 0);
1300 gtk_widget_set_usize (scrolled_win, 200, 200);
1301 gtk_widget_show (scrolled_win);
1303 /* create root tree widget */
1304 root_tree = gtk_tree_new();
1305 gtk_signal_connect(GTK_OBJECT(root_tree), "selection_changed",
1306 (GtkSignalFunc)cb_tree_changed,
1308 gtk_object_set_user_data(GTK_OBJECT(root_tree), tree_buttons);
1309 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_win), root_tree);
1310 gtk_tree_set_selection_mode(GTK_TREE(root_tree), selection_mode);
1311 gtk_tree_set_view_lines(GTK_TREE(root_tree), draw_line);
1312 gtk_tree_set_view_mode(GTK_TREE(root_tree), !view_line);
1313 gtk_widget_show(root_tree);
1317 /* set root tree to subtree function with root item variable */
1318 root_item = GTK_WIDGET(root_tree);
1322 /* create root tree item widget */
1323 root_item = gtk_tree_item_new_with_label("root item");
1324 gtk_tree_append(GTK_TREE(root_tree), root_item);
1325 gtk_widget_show(root_item);
1327 create_subtree(root_item, -no_root_item, nb_item_max, recursion_level_max);
1329 box2 = gtk_vbox_new(FALSE, 0);
1330 gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, FALSE, 0);
1331 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1332 gtk_widget_show(box2);
1334 button = gtk_button_new_with_label("Add Item");
1335 gtk_widget_set_sensitive(button, FALSE);
1336 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1337 (GtkSignalFunc) cb_add_new_item,
1338 (gpointer)root_tree);
1339 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1340 gtk_widget_show(button);
1341 tree_buttons->add_button = button;
1343 button = gtk_button_new_with_label("Remove Item(s)");
1344 gtk_widget_set_sensitive(button, FALSE);
1345 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1346 (GtkSignalFunc) cb_remove_item,
1347 (gpointer)root_tree);
1348 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1349 gtk_widget_show(button);
1350 tree_buttons->remove_button = button;
1352 button = gtk_button_new_with_label("Remove Subtree");
1353 gtk_widget_set_sensitive(button, FALSE);
1354 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1355 (GtkSignalFunc) cb_remove_subtree,
1356 (gpointer)root_tree);
1357 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1358 gtk_widget_show(button);
1359 tree_buttons->subtree_button = button;
1361 /* create separator */
1362 separator = gtk_hseparator_new();
1363 gtk_box_pack_start(GTK_BOX(box1), separator, FALSE, FALSE, 0);
1364 gtk_widget_show(separator);
1366 /* create button box */
1367 box2 = gtk_vbox_new(FALSE, 0);
1368 gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, FALSE, 0);
1369 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1370 gtk_widget_show(box2);
1372 button = gtk_button_new_with_label("Close");
1373 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1374 gtk_signal_connect_object(GTK_OBJECT (button), "clicked",
1375 (GtkSignalFunc) gtk_widget_destroy,
1376 GTK_OBJECT(window));
1377 gtk_widget_show(button);
1379 gtk_widget_show(window);
1383 cb_create_tree(GtkWidget* w)
1385 guint selection_mode = GTK_SELECTION_SINGLE;
1390 guint recursion_level;
1392 /* get selection mode choice */
1393 if(GTK_TOGGLE_BUTTON(sTreeSampleSelection.single_button)->active)
1394 selection_mode = GTK_SELECTION_SINGLE;
1396 if(GTK_TOGGLE_BUTTON(sTreeSampleSelection.browse_button)->active)
1397 selection_mode = GTK_SELECTION_BROWSE;
1399 selection_mode = GTK_SELECTION_MULTIPLE;
1401 /* get options choice */
1402 draw_line = GTK_TOGGLE_BUTTON(sTreeSampleSelection.draw_line_button)->active;
1403 view_line = GTK_TOGGLE_BUTTON(sTreeSampleSelection.view_line_button)->active;
1404 no_root_item = GTK_TOGGLE_BUTTON(sTreeSampleSelection.no_root_item_button)->active;
1407 nb_item = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(sTreeSampleSelection.nb_item_spinner));
1408 recursion_level = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(sTreeSampleSelection.recursion_spinner));
1410 if (pow (nb_item, recursion_level) > 10000)
1412 g_print ("%g total items? That will take a very long time. Try less\n",
1413 pow (nb_item, recursion_level));
1417 create_tree_sample(selection_mode, draw_line, view_line, no_root_item, nb_item, recursion_level);
1421 create_tree_mode_window(void)
1423 static GtkWidget* window;
1431 GtkWidget* separator;
1438 /* create toplevel window */
1439 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
1440 gtk_window_set_title(GTK_WINDOW(window), "Set Tree Parameters");
1441 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1442 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
1444 box1 = gtk_vbox_new(FALSE, 0);
1445 gtk_container_add(GTK_CONTAINER(window), box1);
1447 /* create upper box - selection box */
1448 box2 = gtk_vbox_new(FALSE, 5);
1449 gtk_box_pack_start(GTK_BOX(box1), box2, TRUE, TRUE, 0);
1450 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1452 box3 = gtk_hbox_new(FALSE, 5);
1453 gtk_box_pack_start(GTK_BOX(box2), box3, TRUE, TRUE, 0);
1455 /* create selection mode frame */
1456 frame = gtk_frame_new("Selection Mode");
1457 gtk_box_pack_start(GTK_BOX(box3), frame, TRUE, TRUE, 0);
1459 box4 = gtk_vbox_new(FALSE, 0);
1460 gtk_container_add(GTK_CONTAINER(frame), box4);
1461 gtk_container_set_border_width(GTK_CONTAINER(box4), 5);
1463 /* create radio button */
1464 button = gtk_radio_button_new_with_label(NULL, "SINGLE");
1465 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1466 sTreeSampleSelection.single_button = button;
1468 button = gtk_radio_button_new_with_label(gtk_radio_button_group (GTK_RADIO_BUTTON (button)),
1470 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1471 sTreeSampleSelection.browse_button = button;
1473 button = gtk_radio_button_new_with_label(gtk_radio_button_group (GTK_RADIO_BUTTON (button)),
1475 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1476 sTreeSampleSelection.multiple_button = button;
1478 sTreeSampleSelection.selection_mode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (button));
1480 /* create option mode frame */
1481 frame = gtk_frame_new("Options");
1482 gtk_box_pack_start(GTK_BOX(box3), frame, TRUE, TRUE, 0);
1484 box4 = gtk_vbox_new(FALSE, 0);
1485 gtk_container_add(GTK_CONTAINER(frame), box4);
1486 gtk_container_set_border_width(GTK_CONTAINER(box4), 5);
1488 /* create check button */
1489 button = gtk_check_button_new_with_label("Draw line");
1490 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1491 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
1492 sTreeSampleSelection.draw_line_button = button;
1494 button = gtk_check_button_new_with_label("View Line mode");
1495 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1496 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
1497 sTreeSampleSelection.view_line_button = button;
1499 button = gtk_check_button_new_with_label("Without Root item");
1500 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1501 sTreeSampleSelection.no_root_item_button = button;
1503 /* create recursion parameter */
1504 frame = gtk_frame_new("Size Parameters");
1505 gtk_box_pack_start(GTK_BOX(box2), frame, TRUE, TRUE, 0);
1507 box4 = gtk_hbox_new(FALSE, 5);
1508 gtk_container_add(GTK_CONTAINER(frame), box4);
1509 gtk_container_set_border_width(GTK_CONTAINER(box4), 5);
1511 /* create number of item spin button */
1512 box5 = gtk_hbox_new(FALSE, 5);
1513 gtk_box_pack_start(GTK_BOX(box4), box5, FALSE, FALSE, 0);
1515 label = gtk_label_new("Number of items : ");
1516 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
1517 gtk_box_pack_start (GTK_BOX (box5), label, FALSE, TRUE, 0);
1519 adj = (GtkAdjustment *) gtk_adjustment_new ((gfloat)DEFAULT_NUMBER_OF_ITEM, 1.0, 255.0, 1.0,
1521 spinner = gtk_spin_button_new (adj, 0, 0);
1522 gtk_box_pack_start (GTK_BOX (box5), spinner, FALSE, TRUE, 0);
1523 sTreeSampleSelection.nb_item_spinner = spinner;
1525 /* create recursion level spin button */
1526 box5 = gtk_hbox_new(FALSE, 5);
1527 gtk_box_pack_start(GTK_BOX(box4), box5, FALSE, FALSE, 0);
1529 label = gtk_label_new("Depth : ");
1530 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
1531 gtk_box_pack_start (GTK_BOX (box5), label, FALSE, TRUE, 0);
1533 adj = (GtkAdjustment *) gtk_adjustment_new ((gfloat)DEFAULT_RECURSION_LEVEL, 0.0, 255.0, 1.0,
1535 spinner = gtk_spin_button_new (adj, 0, 0);
1536 gtk_box_pack_start (GTK_BOX (box5), spinner, FALSE, TRUE, 0);
1537 sTreeSampleSelection.recursion_spinner = spinner;
1539 /* create horizontal separator */
1540 separator = gtk_hseparator_new();
1541 gtk_box_pack_start(GTK_BOX(box1), separator, FALSE, FALSE, 0);
1543 /* create bottom button box */
1544 box2 = gtk_hbox_new(TRUE, 10);
1545 gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, FALSE, 0);
1546 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1548 button = gtk_button_new_with_label("Create Tree");
1549 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1550 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1551 (GtkSignalFunc) cb_create_tree, NULL);
1553 button = gtk_button_new_with_label("Close");
1554 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1555 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
1556 GTK_SIGNAL_FUNC(gtk_widget_destroy),
1557 GTK_OBJECT (window));
1559 if (!GTK_WIDGET_VISIBLE (window))
1560 gtk_widget_show_all (window);
1562 gtk_widget_destroy (window);
1570 handle_box_child_signal (GtkHandleBox *hb,
1572 const gchar *action)
1574 printf ("%s: child <%s> %sed\n",
1575 gtk_type_name (GTK_OBJECT_TYPE (hb)),
1576 gtk_type_name (GTK_OBJECT_TYPE (child)),
1581 create_handle_box (void)
1583 static GtkWidget* window = NULL;
1584 GtkWidget *handle_box;
1585 GtkWidget *handle_box2;
1590 GtkWidget *separator;
1594 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1595 gtk_window_set_title (GTK_WINDOW (window),
1597 gtk_window_set_policy (GTK_WINDOW (window),
1602 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1603 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
1606 gtk_container_set_border_width (GTK_CONTAINER (window), 20);
1608 vbox = gtk_vbox_new (FALSE, 0);
1609 gtk_container_add (GTK_CONTAINER (window), vbox);
1610 gtk_widget_show (vbox);
1612 label = gtk_label_new ("Above");
1613 gtk_container_add (GTK_CONTAINER (vbox), label);
1614 gtk_widget_show (label);
1616 separator = gtk_hseparator_new ();
1617 gtk_container_add (GTK_CONTAINER (vbox), separator);
1618 gtk_widget_show (separator);
1620 hbox = gtk_hbox_new (FALSE, 10);
1621 gtk_container_add (GTK_CONTAINER (vbox), hbox);
1622 gtk_widget_show (hbox);
1624 separator = gtk_hseparator_new ();
1625 gtk_container_add (GTK_CONTAINER (vbox), separator);
1626 gtk_widget_show (separator);
1628 label = gtk_label_new ("Below");
1629 gtk_container_add (GTK_CONTAINER (vbox), label);
1630 gtk_widget_show (label);
1632 handle_box = gtk_handle_box_new ();
1633 gtk_box_pack_start (GTK_BOX (hbox), handle_box, FALSE, FALSE, 0);
1634 gtk_signal_connect (GTK_OBJECT (handle_box),
1636 GTK_SIGNAL_FUNC (handle_box_child_signal),
1638 gtk_signal_connect (GTK_OBJECT (handle_box),
1640 GTK_SIGNAL_FUNC (handle_box_child_signal),
1642 gtk_widget_show (handle_box);
1644 toolbar = make_toolbar (window);
1645 gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NORMAL);
1646 gtk_container_add (GTK_CONTAINER (handle_box), toolbar);
1647 gtk_widget_show (toolbar);
1649 handle_box = gtk_handle_box_new ();
1650 gtk_box_pack_start (GTK_BOX (hbox), handle_box, FALSE, FALSE, 0);
1651 gtk_signal_connect (GTK_OBJECT (handle_box),
1653 GTK_SIGNAL_FUNC (handle_box_child_signal),
1655 gtk_signal_connect (GTK_OBJECT (handle_box),
1657 GTK_SIGNAL_FUNC (handle_box_child_signal),
1659 gtk_widget_show (handle_box);
1661 handle_box2 = gtk_handle_box_new ();
1662 gtk_container_add (GTK_CONTAINER (handle_box), handle_box2);
1663 gtk_signal_connect (GTK_OBJECT (handle_box2),
1665 GTK_SIGNAL_FUNC (handle_box_child_signal),
1667 gtk_signal_connect (GTK_OBJECT (handle_box2),
1669 GTK_SIGNAL_FUNC (handle_box_child_signal),
1671 gtk_widget_show (handle_box2);
1673 label = gtk_label_new ("Fooo!");
1674 gtk_container_add (GTK_CONTAINER (handle_box2), label);
1675 gtk_widget_show (label);
1678 if (!GTK_WIDGET_VISIBLE (window))
1679 gtk_widget_show (window);
1681 gtk_widget_destroy (window);
1685 * Test for getting an image from a drawable
1696 take_snapshot (GtkWidget *button,
1699 struct GetImageData *gid = data;
1700 GdkRectangle visible;
1702 int height_fraction;
1705 GdkColor color = { 0, 30000, 0, 0 };
1706 GdkRectangle target;
1709 /* Do some begin_paint_rect on some random rects, draw some
1710 * distinctive stuff into those rects, then take the snapshot.
1711 * figure out whether any rects were overlapped and report to
1715 visible = gid->sw->allocation;
1717 visible.x = gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (gid->sw))->value;
1718 visible.y = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (gid->sw))->value;
1720 width_fraction = visible.width / 4;
1721 height_fraction = visible.height / 4;
1723 gc = gdk_gc_new (gid->src->window);
1724 black_gc = gid->src->style->black_gc;
1726 gdk_gc_set_rgb_fg_color (gc, &color);
1729 target.x = visible.x + width_fraction;
1730 target.y = visible.y + height_fraction * 3;
1731 target.width = width_fraction;
1732 target.height = height_fraction / 2;
1734 gdk_window_begin_paint_rect (gid->src->window,
1737 gdk_draw_rectangle (gid->src->window,
1741 target.width, target.height);
1743 gdk_draw_rectangle (gid->src->window,
1746 target.x + 10, target.y + 10,
1747 target.width - 20, target.height - 20);
1749 target.x = visible.x + width_fraction;
1750 target.y = visible.y + height_fraction;
1751 target.width = width_fraction;
1752 target.height = height_fraction;
1754 gdk_window_begin_paint_rect (gid->src->window,
1757 gdk_draw_rectangle (gid->src->window,
1761 target.width, target.height);
1763 gdk_draw_rectangle (gid->src->window,
1766 target.x + 10, target.y + 10,
1767 target.width - 20, target.height - 20);
1769 target.x = visible.x + width_fraction * 3;
1770 target.y = visible.y + height_fraction;
1771 target.width = width_fraction / 2;
1772 target.height = height_fraction;
1774 gdk_window_begin_paint_rect (gid->src->window,
1777 gdk_draw_rectangle (gid->src->window,
1781 target.width, target.height);
1783 gdk_draw_rectangle (gid->src->window,
1786 target.x + 10, target.y + 10,
1787 target.width - 20, target.height - 20);
1789 target.x = visible.x + width_fraction * 2;
1790 target.y = visible.y + height_fraction * 2;
1791 target.width = width_fraction / 4;
1792 target.height = height_fraction / 4;
1794 gdk_window_begin_paint_rect (gid->src->window,
1797 gdk_draw_rectangle (gid->src->window,
1801 target.width, target.height);
1803 gdk_draw_rectangle (gid->src->window,
1806 target.x + 10, target.y + 10,
1807 target.width - 20, target.height - 20);
1809 target.x += target.width / 2;
1810 target.y += target.width / 2;
1812 gdk_window_begin_paint_rect (gid->src->window,
1815 gdk_draw_rectangle (gid->src->window,
1819 target.width, target.height);
1821 gdk_draw_rectangle (gid->src->window,
1824 target.x + 10, target.y + 10,
1825 target.width - 20, target.height - 20);
1827 /* Screen shot area */
1829 target.x = visible.x + width_fraction * 1.5;
1830 target.y = visible.y + height_fraction * 1.5;
1831 target.width = width_fraction * 2;
1832 target.height = height_fraction * 2;
1834 shot = gdk_drawable_get_image (gid->src->window,
1836 target.width, target.height);
1838 gtk_image_set_from_image (GTK_IMAGE (gid->snap),
1841 g_object_unref (G_OBJECT (shot));
1843 gdk_window_end_paint (gid->src->window);
1844 gdk_window_end_paint (gid->src->window);
1845 gdk_window_end_paint (gid->src->window);
1846 gdk_window_end_paint (gid->src->window);
1847 gdk_window_end_paint (gid->src->window);
1849 gdk_draw_rectangle (gid->src->window,
1850 gid->src->style->black_gc,
1853 target.width, target.height);
1855 g_object_unref (G_OBJECT (gc));
1859 image_source_expose (GtkWidget *da,
1860 GdkEventExpose *event,
1863 int x = event->area.x;
1864 GdkColor red = { 0, 65535, 0, 0 };
1865 GdkColor green = { 0, 0, 65535, 0 };
1866 GdkColor blue = { 0, 0, 0, 65535 };
1869 gc = gdk_gc_new (event->window);
1871 while (x < (event->area.x + event->area.width))
1878 gdk_gc_set_rgb_fg_color (gc, &red);
1884 gdk_gc_set_rgb_fg_color (gc, &green);
1890 gdk_gc_set_rgb_fg_color (gc, &blue);
1894 g_assert_not_reached ();
1898 gdk_draw_line (event->window,
1901 x, event->area.y + event->area.height);
1906 g_object_unref (G_OBJECT (gc));
1912 create_get_image (void)
1914 static GtkWidget *window = NULL;
1917 gtk_widget_destroy (window);
1926 struct GetImageData *gid;
1928 gid = g_new (struct GetImageData, 1);
1930 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1932 gtk_signal_connect (GTK_OBJECT (window),
1934 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
1937 gtk_object_set_data_full (GTK_OBJECT (window),
1938 "testgtk-get-image-data",
1942 vbox = gtk_vbox_new (FALSE, 0);
1944 gtk_container_add (GTK_CONTAINER (window), vbox);
1946 sw = gtk_scrolled_window_new (NULL, NULL);
1947 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
1948 GTK_POLICY_AUTOMATIC,
1949 GTK_POLICY_AUTOMATIC);
1953 gtk_widget_set_usize (sw, 400, 400);
1955 src = gtk_drawing_area_new ();
1956 gtk_widget_set_usize (src, 10000, 10000);
1958 gtk_signal_connect (GTK_OBJECT (src),
1960 GTK_SIGNAL_FUNC (image_source_expose),
1965 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (sw),
1968 gtk_box_pack_start (GTK_BOX (vbox),
1972 hbox = gtk_hbox_new (FALSE, 3);
1974 snap = gtk_widget_new (GTK_TYPE_IMAGE, NULL);
1978 sw = gtk_scrolled_window_new (NULL, NULL);
1979 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
1980 GTK_POLICY_AUTOMATIC,
1981 GTK_POLICY_AUTOMATIC);
1982 gtk_widget_set_usize (sw, 300, 300);
1984 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (sw), snap);
1986 gtk_box_pack_end (GTK_BOX (hbox), sw, FALSE, FALSE, 5);
1988 button = gtk_button_new_with_label ("Get image from drawable");
1990 gtk_signal_connect (GTK_OBJECT (button),
1992 GTK_SIGNAL_FUNC (take_snapshot),
1995 gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
1997 gtk_box_pack_end (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
1999 gtk_widget_show_all (window);
2007 sensitivity_toggled (GtkWidget *toggle,
2010 gtk_widget_set_sensitive (widget, GTK_TOGGLE_BUTTON (toggle)->active);
2014 create_sensitivity_control (GtkWidget *widget)
2017 GtkWidget *toplevel;
2019 button = gtk_toggle_button_new_with_label ("Sensitive");
2021 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button),
2022 GTK_WIDGET_IS_SENSITIVE (widget));
2024 gtk_signal_connect (GTK_OBJECT (button),
2026 GTK_SIGNAL_FUNC (sensitivity_toggled),
2029 gtk_widget_show_all (button);
2034 void create_labels (void)
2036 static GtkWidget *window = NULL;
2047 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2048 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2049 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2052 gtk_window_set_title (GTK_WINDOW (window), "Label");
2054 vbox = gtk_vbox_new (FALSE, 5);
2056 hbox = gtk_hbox_new (FALSE, 5);
2057 gtk_container_add (GTK_CONTAINER (window), vbox);
2059 gtk_box_pack_end (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
2061 button = create_sensitivity_control (hbox);
2063 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
2065 vbox = gtk_vbox_new (FALSE, 5);
2067 gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);
2068 gtk_container_set_border_width (GTK_CONTAINER (window), 5);
2070 frame = gtk_frame_new ("Normal Label");
2071 label = gtk_label_new ("This is a Normal label");
2072 gtk_container_add (GTK_CONTAINER (frame), label);
2073 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2075 frame = gtk_frame_new ("Multi-line Label");
2076 label = gtk_label_new ("This is a Multi-line label.\nSecond line\nThird line");
2077 gtk_container_add (GTK_CONTAINER (frame), label);
2078 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2080 frame = gtk_frame_new ("Left Justified Label");
2081 label = gtk_label_new ("This is a Left-Justified\nMulti-line label.\nThird line");
2082 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2083 gtk_container_add (GTK_CONTAINER (frame), label);
2084 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2086 frame = gtk_frame_new ("Right Justified Label");
2087 label = gtk_label_new ("This is a Right-Justified\nMulti-line label.\nFourth line, (j/k)");
2088 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_RIGHT);
2089 gtk_container_add (GTK_CONTAINER (frame), label);
2090 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2092 frame = gtk_frame_new ("Internationalized Label");
2093 label = gtk_label_new ("French (Français) Bonjour, Salut\n"
2094 "Korean (한글) 안녕하세요, 안녕하십니까\n"
2095 "Russian (Русский) Здравствуйте!");
2096 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2097 gtk_container_add (GTK_CONTAINER (frame), label);
2098 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2100 frame = gtk_frame_new ("Bidirection Label");
2101 label = gtk_label_new ("Arabic السلام عليكم\n"
2103 gtk_widget_set_direction (label, GTK_TEXT_DIR_RTL);
2104 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_RIGHT);
2105 gtk_container_add (GTK_CONTAINER (frame), label);
2106 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2108 vbox = gtk_vbox_new (FALSE, 5);
2109 gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);
2110 frame = gtk_frame_new ("Line wrapped label");
2111 label = gtk_label_new ("This is an example of a line-wrapped label. It should not be taking "\
2112 "up the entire "/* big space to test spacing */\
2113 "width allocated to it, but automatically wraps the words to fit. "\
2114 "The time has come, for all good men, to come to the aid of their party. "\
2115 "The sixth sheik's six sheep's sick.\n"\
2116 " It supports multiple paragraphs correctly, and correctly adds "\
2117 "many extra spaces. ");
2119 gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
2120 gtk_container_add (GTK_CONTAINER (frame), label);
2121 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2123 frame = gtk_frame_new ("Filled, wrapped label");
2124 label = gtk_label_new ("This is an example of a line-wrapped, filled label. It should be taking "\
2125 "up the entire width allocated to it. Here is a seneance to prove "\
2126 "my point. Here is another sentence. "\
2127 "Here comes the sun, do de do de do.\n"\
2128 " This is a new paragraph.\n"\
2129 " This is another newer, longer, better paragraph. It is coming to an end, "\
2131 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_FILL);
2132 gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
2133 gtk_container_add (GTK_CONTAINER (frame), label);
2134 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2136 frame = gtk_frame_new ("Underlined label");
2137 label = gtk_label_new ("This label is underlined!\n"
2138 "This one is underlined (こんにちは) in quite a funky fashion");
2139 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2140 gtk_label_set_pattern (GTK_LABEL (label), "_________________________ _ _________ _ _____ _ __ __ ___ ____ _____");
2141 gtk_container_add (GTK_CONTAINER (frame), label);
2142 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2144 frame = gtk_frame_new ("Markup label");
2145 label = gtk_label_new (NULL);
2147 /* There's also a gtk_label_set_markup() without accel if you
2148 * don't have an accelerator key
2151 gtk_label_set_markup_with_accel (GTK_LABEL (label),
2152 "This <span foreground=\"blue\" background=\"orange\">label</span> has "
2153 "<b>markup</b> _such as "
2154 "<big><i>Big Italics</i></big>\n"
2155 "<tt>Monospace font</tt>\n"
2156 "<u>Underline!</u>\n"
2158 "<span foreground=\"green\" background=\"red\">Ugly colors</span>\n"
2159 "and nothing on this line,\n"
2162 "or even on this one\n"
2163 "la <big>la <big>la <big>la <big>la</big></big></big></big>\n"
2164 "but this _word is <span foreground=\"purple\"><big>purple</big></span>\n"
2165 "<span underline=\"double\">We like <sup>superscript</sup> and <sub>subscript</sub> too</span>");
2167 g_return_if_fail (keyval == GDK_s);
2169 gtk_container_add (GTK_CONTAINER (frame), label);
2170 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2173 if (!GTK_WIDGET_VISIBLE (window))
2174 gtk_widget_show_all (window);
2176 gtk_widget_destroy (window);
2184 reparent_label (GtkWidget *widget,
2185 GtkWidget *new_parent)
2189 label = gtk_object_get_user_data (GTK_OBJECT (widget));
2191 gtk_widget_reparent (label, new_parent);
2195 set_parent_signal (GtkWidget *child,
2196 GtkWidget *old_parent,
2199 g_print ("set_parent for \"%s\": new parent: \"%s\", old parent: \"%s\", data: %d\n",
2200 gtk_type_name (GTK_OBJECT_TYPE (child)),
2201 child->parent ? gtk_type_name (GTK_OBJECT_TYPE (child->parent)) : "NULL",
2202 old_parent ? gtk_type_name (GTK_OBJECT_TYPE (old_parent)) : "NULL",
2203 GPOINTER_TO_INT (func_data));
2207 create_reparent (void)
2209 static GtkWidget *window = NULL;
2216 GtkWidget *separator;
2220 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2222 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2223 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2226 gtk_window_set_title (GTK_WINDOW (window), "reparent");
2227 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
2229 box1 = gtk_vbox_new (FALSE, 0);
2230 gtk_container_add (GTK_CONTAINER (window), box1);
2232 box2 = gtk_hbox_new (FALSE, 5);
2233 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2234 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2236 label = gtk_label_new ("Hello World");
2238 frame = gtk_frame_new ("Frame 1");
2239 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
2241 box3 = gtk_vbox_new (FALSE, 5);
2242 gtk_container_set_border_width (GTK_CONTAINER (box3), 5);
2243 gtk_container_add (GTK_CONTAINER (frame), box3);
2245 button = gtk_button_new_with_label ("switch");
2246 gtk_signal_connect (GTK_OBJECT (button), "clicked",
2247 GTK_SIGNAL_FUNC(reparent_label),
2249 gtk_object_set_user_data (GTK_OBJECT (button), label);
2250 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
2252 gtk_box_pack_start (GTK_BOX (box3), label, FALSE, TRUE, 0);
2253 gtk_signal_connect (GTK_OBJECT (label),
2255 GTK_SIGNAL_FUNC (set_parent_signal),
2256 GINT_TO_POINTER (42));
2258 frame = gtk_frame_new ("Frame 2");
2259 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
2261 box3 = gtk_vbox_new (FALSE, 5);
2262 gtk_container_set_border_width (GTK_CONTAINER (box3), 5);
2263 gtk_container_add (GTK_CONTAINER (frame), box3);
2265 button = gtk_button_new_with_label ("switch");
2266 gtk_signal_connect (GTK_OBJECT (button), "clicked",
2267 GTK_SIGNAL_FUNC(reparent_label),
2269 gtk_object_set_user_data (GTK_OBJECT (button), label);
2270 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
2272 separator = gtk_hseparator_new ();
2273 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2275 box2 = gtk_vbox_new (FALSE, 10);
2276 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2277 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2279 button = gtk_button_new_with_label ("close");
2280 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2281 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2282 GTK_OBJECT (window));
2283 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2284 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2285 gtk_widget_grab_default (button);
2288 if (!GTK_WIDGET_VISIBLE (window))
2289 gtk_widget_show_all (window);
2291 gtk_widget_destroy (window);
2297 gint upositionx = 0;
2298 gint upositiony = 0;
2301 uposition_configure (GtkWidget *window)
2307 lx = gtk_object_get_data (GTK_OBJECT (window), "x");
2308 ly = gtk_object_get_data (GTK_OBJECT (window), "y");
2310 gdk_window_get_root_origin (window->window, &upositionx, &upositiony);
2311 sprintf (buffer, "%d", upositionx);
2312 gtk_label_set_text (lx, buffer);
2313 sprintf (buffer, "%d", upositiony);
2314 gtk_label_set_text (ly, buffer);
2320 uposition_stop_configure (GtkToggleButton *toggle,
2324 gtk_signal_handler_block_by_func (window, uposition_configure, NULL);
2326 gtk_signal_handler_unblock_by_func (window, uposition_configure, NULL);
2330 create_saved_position (void)
2332 static GtkWidget *window = NULL;
2337 GtkWidget *main_vbox;
2345 window = gtk_widget_new (GTK_TYPE_WINDOW,
2346 "type", GTK_WINDOW_TOPLEVEL,
2347 "signal::configure_event", uposition_configure, NULL,
2350 "title", "Saved Position",
2353 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2354 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
2357 main_vbox = gtk_vbox_new (FALSE, 5);
2358 gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 0);
2359 gtk_container_add (GTK_CONTAINER (window), main_vbox);
2362 gtk_widget_new (gtk_vbox_get_type (),
2363 "GtkBox::homogeneous", FALSE,
2364 "GtkBox::spacing", 5,
2365 "GtkContainer::border_width", 10,
2366 "GtkWidget::parent", main_vbox,
2367 "GtkWidget::visible", TRUE,
2368 "child", gtk_widget_new (GTK_TYPE_TOGGLE_BUTTON,
2369 "label", "Stop Events",
2371 "signal::clicked", uposition_stop_configure, window,
2376 hbox = gtk_hbox_new (FALSE, 0);
2377 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
2378 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
2380 label = gtk_label_new ("X Origin : ");
2381 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
2382 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
2384 x_label = gtk_label_new ("");
2385 gtk_box_pack_start (GTK_BOX (hbox), x_label, TRUE, TRUE, 0);
2386 gtk_object_set_data (GTK_OBJECT (window), "x", x_label);
2388 hbox = gtk_hbox_new (FALSE, 0);
2389 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
2390 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
2392 label = gtk_label_new ("Y Origin : ");
2393 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
2394 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
2396 y_label = gtk_label_new ("");
2397 gtk_box_pack_start (GTK_BOX (hbox), y_label, TRUE, TRUE, 0);
2398 gtk_object_set_data (GTK_OBJECT (window), "y", y_label);
2401 gtk_widget_new (gtk_hseparator_get_type (),
2402 "GtkWidget::visible", TRUE,
2404 gtk_box_pack_start (GTK_BOX (main_vbox), any, FALSE, TRUE, 0);
2406 hbox = gtk_hbox_new (FALSE, 0);
2407 gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
2408 gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
2410 button = gtk_button_new_with_label ("Close");
2411 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2412 GTK_SIGNAL_FUNC (gtk_widget_destroy),
2413 GTK_OBJECT (window));
2414 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
2415 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2416 gtk_widget_grab_default (button);
2418 gtk_widget_show_all (window);
2421 gtk_widget_destroy (window);
2429 create_pixmap (void)
2431 static GtkWidget *window = NULL;
2437 GtkWidget *separator;
2438 GtkWidget *pixmapwid;
2442 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2444 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2445 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2448 gtk_window_set_title (GTK_WINDOW (window), "GtkPixmap");
2449 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
2450 gtk_widget_realize(window);
2452 box1 = gtk_vbox_new (FALSE, 0);
2453 gtk_container_add (GTK_CONTAINER (window), box1);
2455 box2 = gtk_vbox_new (FALSE, 10);
2456 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2457 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2459 button = gtk_button_new ();
2460 gtk_box_pack_start (GTK_BOX (box2), button, FALSE, FALSE, 0);
2462 pixmapwid = new_pixmap ("test.xpm", window->window, NULL);
2464 label = gtk_label_new ("Pixmap\ntest");
2465 box3 = gtk_hbox_new (FALSE, 0);
2466 gtk_container_set_border_width (GTK_CONTAINER (box3), 2);
2467 gtk_container_add (GTK_CONTAINER (box3), pixmapwid);
2468 gtk_container_add (GTK_CONTAINER (box3), label);
2469 gtk_container_add (GTK_CONTAINER (button), box3);
2471 separator = gtk_hseparator_new ();
2472 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2474 box2 = gtk_vbox_new (FALSE, 10);
2475 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2476 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2478 button = gtk_button_new_with_label ("close");
2479 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2480 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2481 GTK_OBJECT (window));
2482 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2483 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2484 gtk_widget_grab_default (button);
2487 if (!GTK_WIDGET_VISIBLE (window))
2488 gtk_widget_show_all (window);
2490 gtk_widget_destroy (window);
2494 tips_query_widget_entered (GtkTipsQuery *tips_query,
2496 const gchar *tip_text,
2497 const gchar *tip_private,
2500 if (GTK_TOGGLE_BUTTON (toggle)->active)
2502 gtk_label_set_text (GTK_LABEL (tips_query), tip_text ? "There is a Tip!" : "There is no Tip!");
2503 /* don't let GtkTipsQuery reset its label */
2504 gtk_signal_emit_stop_by_name (GTK_OBJECT (tips_query), "widget_entered");
2509 tips_query_widget_selected (GtkWidget *tips_query,
2511 const gchar *tip_text,
2512 const gchar *tip_private,
2513 GdkEventButton *event,
2517 g_print ("Help \"%s\" requested for <%s>\n",
2518 tip_private ? tip_private : "None",
2519 gtk_type_name (GTK_OBJECT_TYPE (widget)));
2524 create_tooltips (void)
2526 static GtkWidget *window = NULL;
2533 GtkWidget *tips_query;
2534 GtkWidget *separator;
2535 GtkTooltips *tooltips;
2540 gtk_widget_new (gtk_window_get_type (),
2541 "GtkWindow::type", GTK_WINDOW_TOPLEVEL,
2542 "GtkContainer::border_width", 0,
2543 "GtkWindow::title", "Tooltips",
2544 "GtkWindow::allow_shrink", TRUE,
2545 "GtkWindow::allow_grow", FALSE,
2546 "GtkWindow::auto_shrink", TRUE,
2547 "GtkWidget::width", 200,
2550 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2551 GTK_SIGNAL_FUNC (destroy_tooltips),
2554 tooltips=gtk_tooltips_new();
2555 gtk_object_set_data (GTK_OBJECT (window), "tooltips", tooltips);
2557 box1 = gtk_vbox_new (FALSE, 0);
2558 gtk_container_add (GTK_CONTAINER (window), box1);
2560 box2 = gtk_vbox_new (FALSE, 10);
2561 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2562 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2564 button = gtk_toggle_button_new_with_label ("button1");
2565 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2567 gtk_tooltips_set_tip (tooltips,button,"This is button 1", "ContextHelp/buttons/1");
2569 button = gtk_toggle_button_new_with_label ("button2");
2570 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2572 gtk_tooltips_set_tip (tooltips,
2574 "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.",
2575 "ContextHelp/buttons/2_long");
2577 toggle = gtk_toggle_button_new_with_label ("Override TipsQuery Label");
2578 gtk_box_pack_start (GTK_BOX (box2), toggle, TRUE, TRUE, 0);
2580 gtk_tooltips_set_tip (tooltips, toggle, "Toggle TipsQuery view.", "Hi msw! ;)");
2583 gtk_widget_new (gtk_vbox_get_type (),
2584 "GtkBox::homogeneous", FALSE,
2585 "GtkBox::spacing", 5,
2586 "GtkContainer::border_width", 5,
2587 "GtkWidget::visible", TRUE,
2590 tips_query = gtk_tips_query_new ();
2593 gtk_widget_new (gtk_button_get_type (),
2594 "GtkButton::label", "[?]",
2595 "GtkWidget::visible", TRUE,
2596 "GtkWidget::parent", box3,
2598 g_object_set (G_OBJECT (button),
2599 "swapped_signal::clicked", gtk_tips_query_start_query, tips_query,
2601 gtk_box_set_child_packing (GTK_BOX (box3), button, FALSE, FALSE, 0, GTK_PACK_START);
2602 gtk_tooltips_set_tip (tooltips,
2604 "Start the Tooltips Inspector",
2605 "ContextHelp/buttons/?");
2608 gtk_widget_set (tips_query,
2609 "GtkWidget::visible", TRUE,
2610 "GtkWidget::parent", box3,
2611 "GtkTipsQuery::caller", button,
2612 "GtkObject::signal::widget_entered", tips_query_widget_entered, toggle,
2613 "GtkObject::signal::widget_selected", tips_query_widget_selected, NULL,
2617 gtk_widget_new (gtk_frame_get_type (),
2618 "GtkFrame::label", "ToolTips Inspector",
2619 "GtkFrame::label_xalign", (double) 0.5,
2620 "GtkContainer::border_width", 0,
2621 "GtkWidget::visible", TRUE,
2622 "GtkWidget::parent", box2,
2623 "GtkContainer::child", box3,
2625 gtk_box_set_child_packing (GTK_BOX (box2), frame, TRUE, TRUE, 10, GTK_PACK_START);
2627 separator = gtk_hseparator_new ();
2628 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2630 box2 = gtk_vbox_new (FALSE, 10);
2631 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2632 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2634 button = gtk_button_new_with_label ("close");
2635 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2636 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2637 GTK_OBJECT (window));
2638 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2639 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2640 gtk_widget_grab_default (button);
2642 gtk_tooltips_set_tip (tooltips, button, "Push this button to close window", "ContextHelp/buttons/Close");
2645 if (!GTK_WIDGET_VISIBLE (window))
2646 gtk_widget_show_all (window);
2648 gtk_widget_destroy (window);
2656 pack_image (GtkWidget *box,
2660 gtk_box_pack_start (GTK_BOX (box),
2661 gtk_label_new (text),
2664 gtk_box_pack_start (GTK_BOX (box),
2672 static GtkWidget *window = NULL;
2680 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2682 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2683 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2686 vbox = gtk_vbox_new (FALSE, 5);
2688 gtk_container_add (GTK_CONTAINER (window), vbox);
2690 pack_image (vbox, "Stock Warning Dialog",
2691 gtk_image_new_from_stock (GTK_STOCK_DIALOG_WARNING,
2692 GTK_ICON_SIZE_DIALOG));
2694 pixmap = gdk_pixmap_colormap_create_from_xpm_d (NULL,
2695 gtk_widget_get_colormap (window),
2700 pack_image (vbox, "Pixmap",
2701 gtk_image_new_from_pixmap (pixmap, mask));
2704 if (!GTK_WIDGET_VISIBLE (window))
2705 gtk_widget_show_all (window);
2707 gtk_widget_destroy (window);
2715 create_menu (gint depth, gint length, gboolean tearoff)
2718 GtkWidget *menuitem;
2726 menu = gtk_menu_new ();
2731 menuitem = gtk_tearoff_menu_item_new ();
2732 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
2733 gtk_widget_show (menuitem);
2736 for (i = 0, j = 1; i < length; i++, j++)
2738 sprintf (buf, "item %2d - %d", depth, j);
2739 menuitem = gtk_radio_menu_item_new_with_label (group, buf);
2740 group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menuitem));
2742 gtk_check_menu_item_set_show_toggle (GTK_CHECK_MENU_ITEM (menuitem), TRUE);
2743 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
2744 gtk_widget_show (menuitem);
2746 gtk_widget_set_sensitive (menuitem, FALSE);
2749 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (depth - 1, 5, TRUE));
2758 static GtkWidget *window = NULL;
2762 GtkWidget *optionmenu;
2763 GtkWidget *separator;
2769 GtkWidget *menuitem;
2770 GtkAccelGroup *accel_group;
2772 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2774 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2775 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2777 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
2778 GTK_SIGNAL_FUNC (gtk_true),
2781 accel_group = gtk_accel_group_new ();
2782 gtk_accel_group_attach (accel_group, GTK_OBJECT (window));
2784 gtk_window_set_title (GTK_WINDOW (window), "menus");
2785 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
2788 box1 = gtk_vbox_new (FALSE, 0);
2789 gtk_container_add (GTK_CONTAINER (window), box1);
2790 gtk_widget_show (box1);
2792 menubar = gtk_menu_bar_new ();
2793 gtk_box_pack_start (GTK_BOX (box1), menubar, FALSE, TRUE, 0);
2794 gtk_widget_show (menubar);
2796 menu = create_menu (2, 50, TRUE);
2798 menuitem = gtk_menu_item_new_with_label ("test\nline2");
2799 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), menu);
2800 gtk_menu_bar_append (GTK_MENU_BAR (menubar), menuitem);
2801 gtk_widget_show (menuitem);
2803 menuitem = gtk_menu_item_new_with_label ("foo");
2804 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (3, 5, TRUE));
2805 gtk_menu_bar_append (GTK_MENU_BAR (menubar), menuitem);
2806 gtk_widget_show (menuitem);
2808 menuitem = gtk_menu_item_new_with_label ("bar");
2809 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (4, 5, TRUE));
2810 gtk_menu_item_right_justify (GTK_MENU_ITEM (menuitem));
2811 gtk_menu_bar_append (GTK_MENU_BAR (menubar), menuitem);
2812 gtk_widget_show (menuitem);
2814 box2 = gtk_vbox_new (FALSE, 10);
2815 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2816 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2817 gtk_widget_show (box2);
2819 menu = create_menu (1, 5, FALSE);
2820 gtk_menu_set_accel_group (GTK_MENU (menu), accel_group);
2822 menuitem = gtk_check_menu_item_new_with_label ("Accelerate Me");
2823 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
2824 gtk_widget_show (menuitem);
2825 gtk_widget_add_accelerator (menuitem,
2830 GTK_ACCEL_VISIBLE | GTK_ACCEL_SIGNAL_VISIBLE);
2831 menuitem = gtk_check_menu_item_new_with_label ("Accelerator Locked");
2832 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
2833 gtk_widget_show (menuitem);
2834 gtk_widget_add_accelerator (menuitem,
2839 GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
2840 menuitem = gtk_check_menu_item_new_with_label ("Accelerators Frozen");
2841 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
2842 gtk_widget_show (menuitem);
2843 gtk_widget_add_accelerator (menuitem,
2849 gtk_widget_add_accelerator (menuitem,
2855 gtk_widget_lock_accelerators (menuitem);
2857 optionmenu = gtk_option_menu_new ();
2858 gtk_option_menu_set_menu (GTK_OPTION_MENU (optionmenu), menu);
2859 gtk_option_menu_set_history (GTK_OPTION_MENU (optionmenu), 3);
2860 gtk_box_pack_start (GTK_BOX (box2), optionmenu, TRUE, TRUE, 0);
2861 gtk_widget_show (optionmenu);
2863 separator = gtk_hseparator_new ();
2864 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2865 gtk_widget_show (separator);
2867 box2 = gtk_vbox_new (FALSE, 10);
2868 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2869 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2870 gtk_widget_show (box2);
2872 button = gtk_button_new_with_label ("close");
2873 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2874 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2875 GTK_OBJECT (window));
2876 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2877 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2878 gtk_widget_grab_default (button);
2879 gtk_widget_show (button);
2882 if (!GTK_WIDGET_VISIBLE (window))
2883 gtk_widget_show (window);
2885 gtk_widget_destroy (window);
2889 gtk_ifactory_cb (gpointer callback_data,
2890 guint callback_action,
2893 g_message ("ItemFactory: activated \"%s\"", gtk_item_factory_path_from_widget (widget));
2896 static GtkItemFactoryEntry menu_items[] =
2898 { "/_File", NULL, 0, 0, "<Branch>" },
2899 { "/File/tearoff1", NULL, gtk_ifactory_cb, 0, "<Tearoff>" },
2900 { "/File/_New", "<control>N", gtk_ifactory_cb, 0 },
2901 { "/File/_Open", "<control>O", gtk_ifactory_cb, 0 },
2902 { "/File/_Save", "<control>S", gtk_ifactory_cb, 0 },
2903 { "/File/Save _As...", NULL, gtk_ifactory_cb, 0 },
2904 { "/File/sep1", NULL, gtk_ifactory_cb, 0, "<Separator>" },
2905 { "/File/_Quit", "<control>Q", gtk_ifactory_cb, 0 },
2907 { "/_Preferences", NULL, 0, 0, "<Branch>" },
2908 { "/_Preferences/_Color", NULL, 0, 0, "<Branch>" },
2909 { "/_Preferences/Color/_Red", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
2910 { "/_Preferences/Color/_Green", NULL, gtk_ifactory_cb, 0, "/Preferences/Color/Red" },
2911 { "/_Preferences/Color/_Blue", NULL, gtk_ifactory_cb, 0, "/Preferences/Color/Red" },
2912 { "/_Preferences/_Shape", NULL, 0, 0, "<Branch>" },
2913 { "/_Preferences/Shape/_Square", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
2914 { "/_Preferences/Shape/_Rectangle", NULL, gtk_ifactory_cb, 0, "/Preferences/Shape/Square" },
2915 { "/_Preferences/Shape/_Oval", NULL, gtk_ifactory_cb, 0, "/Preferences/Shape/Rectangle" },
2917 { "/_Help", NULL, 0, 0, "<LastBranch>" },
2918 { "/Help/_About", NULL, gtk_ifactory_cb, 0 },
2921 static int nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]);
2924 create_item_factory (void)
2926 static GtkWidget *window = NULL;
2932 GtkWidget *separator;
2935 GtkAccelGroup *accel_group;
2936 GtkItemFactory *item_factory;
2938 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2940 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2941 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2943 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
2944 GTK_SIGNAL_FUNC (gtk_true),
2947 accel_group = gtk_accel_group_new ();
2948 item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>", accel_group);
2949 gtk_object_set_data_full (GTK_OBJECT (window),
2952 (GtkDestroyNotify) gtk_object_unref);
2953 gtk_accel_group_attach (accel_group, GTK_OBJECT (window));
2954 gtk_window_set_title (GTK_WINDOW (window), "Item Factory");
2955 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
2956 gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL);
2958 /* preselect /Preferences/Shape/Oval over the other radios
2960 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (gtk_item_factory_get_item (item_factory,
2961 "/Preferences/Shape/Oval")),
2964 box1 = gtk_vbox_new (FALSE, 0);
2965 gtk_container_add (GTK_CONTAINER (window), box1);
2967 gtk_box_pack_start (GTK_BOX (box1),
2968 gtk_item_factory_get_widget (item_factory, "<main>"),
2971 label = gtk_label_new ("Type\n<alt>\nto start");
2972 gtk_widget_set_usize (label, 200, 200);
2973 gtk_misc_set_alignment (GTK_MISC (label), 0.5, 0.5);
2974 gtk_box_pack_start (GTK_BOX (box1), label, TRUE, TRUE, 0);
2977 separator = gtk_hseparator_new ();
2978 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2981 box2 = gtk_vbox_new (FALSE, 10);
2982 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2983 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2985 button = gtk_button_new_with_label ("close");
2986 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2987 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2988 GTK_OBJECT (window));
2989 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2990 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2991 gtk_widget_grab_default (button);
2993 gtk_widget_show_all (window);
2996 gtk_widget_destroy (window);
3004 cmw_destroy_cb(GtkWidget *widget)
3006 /* This is needed to get out of gtk_main */
3013 cmw_color (GtkWidget *widget, GtkWidget *parent)
3017 csd=gtk_color_selection_dialog_new ("This is a modal color selection dialog");
3020 gtk_window_set_modal (GTK_WINDOW(csd),TRUE);
3022 /* And mark it as a transient dialog */
3023 gtk_window_set_transient_for (GTK_WINDOW (csd), GTK_WINDOW (parent));
3025 gtk_signal_connect (GTK_OBJECT(csd), "destroy",
3026 GTK_SIGNAL_FUNC(cmw_destroy_cb),NULL);
3028 gtk_signal_connect_object (GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(csd)->ok_button),
3029 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
3031 gtk_signal_connect_object (GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(csd)->cancel_button),
3032 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
3035 /* wait until destroy calls gtk_main_quit */
3036 gtk_widget_show (csd);
3041 cmw_file (GtkWidget *widget, GtkWidget *parent)
3045 fs = gtk_file_selection_new("This is a modal file selection dialog");
3048 gtk_window_set_modal (GTK_WINDOW(fs),TRUE);
3050 /* And mark it as a transient dialog */
3051 gtk_window_set_transient_for (GTK_WINDOW (fs), GTK_WINDOW (parent));
3053 gtk_signal_connect (GTK_OBJECT(fs), "destroy",
3054 GTK_SIGNAL_FUNC(cmw_destroy_cb),NULL);
3056 gtk_signal_connect_object (GTK_OBJECT(GTK_FILE_SELECTION(fs)->ok_button),
3057 "clicked",GTK_SIGNAL_FUNC(gtk_widget_destroy),
3059 gtk_signal_connect_object (GTK_OBJECT(GTK_FILE_SELECTION(fs)->cancel_button),
3060 "clicked",GTK_SIGNAL_FUNC(gtk_widget_destroy),
3063 /* wait until destroy calls gtk_main_quit */
3064 gtk_widget_show (fs);
3071 create_modal_window (void)
3073 GtkWidget *window = NULL;
3074 GtkWidget *box1,*box2;
3076 GtkWidget *btnColor,*btnFile,*btnClose;
3078 /* Create modal window (Here you can use any window descendent )*/
3079 window=gtk_window_new (GTK_WINDOW_TOPLEVEL);
3080 gtk_window_set_title (GTK_WINDOW(window),"This window is modal");
3082 /* Set window as modal */
3083 gtk_window_set_modal (GTK_WINDOW(window),TRUE);
3085 /* Create widgets */
3086 box1 = gtk_vbox_new (FALSE,5);
3087 frame1 = gtk_frame_new ("Standard dialogs in modal form");
3088 box2 = gtk_vbox_new (TRUE,5);
3089 btnColor = gtk_button_new_with_label ("Color");
3090 btnFile = gtk_button_new_with_label ("File Selection");
3091 btnClose = gtk_button_new_with_label ("Close");
3094 gtk_container_set_border_width (GTK_CONTAINER(box1),3);
3095 gtk_container_set_border_width (GTK_CONTAINER(box2),3);
3098 gtk_container_add (GTK_CONTAINER (window), box1);
3099 gtk_box_pack_start (GTK_BOX (box1), frame1, TRUE, TRUE, 4);
3100 gtk_container_add (GTK_CONTAINER (frame1), box2);
3101 gtk_box_pack_start (GTK_BOX (box2), btnColor, FALSE, FALSE, 4);
3102 gtk_box_pack_start (GTK_BOX (box2), btnFile, FALSE, FALSE, 4);
3103 gtk_box_pack_start (GTK_BOX (box1), gtk_hseparator_new (), FALSE, FALSE, 4);
3104 gtk_box_pack_start (GTK_BOX (box1), btnClose, FALSE, FALSE, 4);
3106 /* connect signals */
3107 gtk_signal_connect_object (GTK_OBJECT (btnClose), "clicked",
3108 GTK_SIGNAL_FUNC (gtk_widget_destroy),
3109 GTK_OBJECT (window));
3111 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3112 GTK_SIGNAL_FUNC (cmw_destroy_cb),NULL);
3114 gtk_signal_connect (GTK_OBJECT (btnColor), "clicked",
3115 GTK_SIGNAL_FUNC (cmw_color),window);
3116 gtk_signal_connect (GTK_OBJECT (btnFile), "clicked",
3117 GTK_SIGNAL_FUNC (cmw_file),window);
3120 gtk_widget_show_all (window);
3122 /* wait until dialog get destroyed */
3131 make_message_dialog (GtkWidget **dialog,
3132 GtkMessageType type,
3133 GtkButtonsType buttons)
3137 gtk_widget_destroy (*dialog);
3142 *dialog = gtk_message_dialog_new (NULL, 0, type, buttons,
3143 "This is a message dialog; it can wrap long lines. This is a long line. La la la. Look this line is wrapped. Blah blah blah blah blah blah. (Note: testgtk has a nonstandard gtkrc that changes some of the message dialog icons.)");
3145 gtk_signal_connect_object (GTK_OBJECT (*dialog),
3147 GTK_SIGNAL_FUNC (gtk_widget_destroy),
3148 GTK_OBJECT (*dialog));
3150 gtk_signal_connect (GTK_OBJECT (*dialog),
3152 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
3155 gtk_widget_show (*dialog);
3159 create_message_dialog (void)
3161 static GtkWidget *info = NULL;
3162 static GtkWidget *warning = NULL;
3163 static GtkWidget *error = NULL;
3164 static GtkWidget *question = NULL;
3166 make_message_dialog (&info, GTK_MESSAGE_INFO, GTK_BUTTONS_OK);
3167 make_message_dialog (&warning, GTK_MESSAGE_WARNING, GTK_BUTTONS_CLOSE);
3168 make_message_dialog (&error, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK_CANCEL);
3169 make_message_dialog (&question, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO);
3176 static GtkWidget *sw_parent = NULL;
3177 static GtkWidget *sw_float_parent;
3178 static guint sw_destroyed_handler = 0;
3181 scrolled_windows_delete_cb (GtkWidget *widget, GdkEventAny *event, GtkWidget *scrollwin)
3183 gtk_widget_reparent (scrollwin, sw_parent);
3185 gtk_signal_disconnect (GTK_OBJECT (sw_parent), sw_destroyed_handler);
3186 sw_float_parent = NULL;
3188 sw_destroyed_handler = 0;
3194 scrolled_windows_destroy_cb (GtkWidget *widget, GtkWidget *scrollwin)
3196 gtk_widget_destroy (sw_float_parent);
3198 sw_float_parent = NULL;
3200 sw_destroyed_handler = 0;
3204 scrolled_windows_remove (GtkWidget *widget, GtkWidget *scrollwin)
3208 gtk_widget_reparent (scrollwin, sw_parent);
3209 gtk_widget_destroy (sw_float_parent);
3211 gtk_signal_disconnect (GTK_OBJECT (sw_parent), sw_destroyed_handler);
3212 sw_float_parent = NULL;
3214 sw_destroyed_handler = 0;
3218 sw_parent = scrollwin->parent;
3219 sw_float_parent = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3220 gtk_window_set_default_size (GTK_WINDOW (sw_float_parent), 200, 200);
3222 gtk_widget_reparent (scrollwin, sw_float_parent);
3223 gtk_widget_show (sw_float_parent);
3225 sw_destroyed_handler =
3226 gtk_signal_connect (GTK_OBJECT (sw_parent), "destroy",
3227 GTK_SIGNAL_FUNC (scrolled_windows_destroy_cb), scrollwin);
3228 gtk_signal_connect (GTK_OBJECT (sw_float_parent), "delete_event",
3229 GTK_SIGNAL_FUNC (scrolled_windows_delete_cb), scrollwin);
3234 create_scrolled_windows (void)
3236 static GtkWidget *window;
3237 GtkWidget *scrolled_window;
3245 window = gtk_dialog_new ();
3247 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3248 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
3251 gtk_window_set_title (GTK_WINDOW (window), "dialog");
3252 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
3255 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
3256 gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10);
3257 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
3258 GTK_POLICY_AUTOMATIC,
3259 GTK_POLICY_AUTOMATIC);
3260 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
3261 scrolled_window, TRUE, TRUE, 0);
3262 gtk_widget_show (scrolled_window);
3264 table = gtk_table_new (20, 20, FALSE);
3265 gtk_table_set_row_spacings (GTK_TABLE (table), 10);
3266 gtk_table_set_col_spacings (GTK_TABLE (table), 10);
3267 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), table);
3268 gtk_container_set_focus_hadjustment (GTK_CONTAINER (table),
3269 gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
3270 gtk_container_set_focus_vadjustment (GTK_CONTAINER (table),
3271 gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
3272 gtk_widget_show (table);
3274 for (i = 0; i < 20; i++)
3275 for (j = 0; j < 20; j++)
3277 sprintf (buffer, "button (%d,%d)\n", i, j);
3278 button = gtk_toggle_button_new_with_label (buffer);
3279 gtk_table_attach_defaults (GTK_TABLE (table), button,
3281 gtk_widget_show (button);
3285 button = gtk_button_new_with_label ("Close");
3286 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
3287 GTK_SIGNAL_FUNC(gtk_widget_destroy),
3288 GTK_OBJECT (window));
3289 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
3290 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
3291 button, TRUE, TRUE, 0);
3292 gtk_widget_grab_default (button);
3293 gtk_widget_show (button);
3295 button = gtk_button_new_with_label ("Reparent Out");
3296 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3297 GTK_SIGNAL_FUNC(scrolled_windows_remove),
3299 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
3300 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
3301 button, TRUE, TRUE, 0);
3302 gtk_widget_grab_default (button);
3303 gtk_widget_show (button);
3305 gtk_window_set_default_size (GTK_WINDOW (window), 300, 300);
3308 if (!GTK_WIDGET_VISIBLE (window))
3309 gtk_widget_show (window);
3311 gtk_widget_destroy (window);
3319 entry_toggle_frame (GtkWidget *checkbutton,
3322 gtk_entry_set_has_frame (GTK_ENTRY(entry),
3323 GTK_TOGGLE_BUTTON(checkbutton)->active);
3327 entry_toggle_editable (GtkWidget *checkbutton,
3330 gtk_entry_set_editable(GTK_ENTRY(entry),
3331 GTK_TOGGLE_BUTTON(checkbutton)->active);
3335 entry_toggle_sensitive (GtkWidget *checkbutton,
3338 gtk_widget_set_sensitive (entry, GTK_TOGGLE_BUTTON(checkbutton)->active);
3342 entry_toggle_visibility (GtkWidget *checkbutton,
3345 gtk_entry_set_visibility(GTK_ENTRY(entry),
3346 GTK_TOGGLE_BUTTON(checkbutton)->active);
3350 entry_toggle_invisible_char (GtkWidget *checkbutton,
3353 if (GTK_TOGGLE_BUTTON (checkbutton)->active)
3354 gtk_entry_set_invisible_char (GTK_ENTRY (entry), 0);
3356 gtk_entry_set_invisible_char (GTK_ENTRY (entry), '*');
3362 static GtkWidget *window = NULL;
3365 GtkWidget *editable_check;
3366 GtkWidget *sensitive_check;
3367 GtkWidget *invisible_char_check;
3368 GtkWidget *entry, *cb;
3370 GtkWidget *separator;
3371 GList *cbitems = NULL;
3375 cbitems = g_list_append(cbitems, "item0");
3376 cbitems = g_list_append(cbitems, "item1 item1");
3377 cbitems = g_list_append(cbitems, "item2 item2 item2");
3378 cbitems = g_list_append(cbitems, "item3 item3 item3 item3");
3379 cbitems = g_list_append(cbitems, "item4 item4 item4 item4 item4");
3380 cbitems = g_list_append(cbitems, "item5 item5 item5 item5 item5 item5");
3381 cbitems = g_list_append(cbitems, "item6 item6 item6 item6 item6");
3382 cbitems = g_list_append(cbitems, "item7 item7 item7 item7");
3383 cbitems = g_list_append(cbitems, "item8 item8 item8");
3384 cbitems = g_list_append(cbitems, "item9 item9");
3386 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3388 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3389 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
3392 gtk_window_set_title (GTK_WINDOW (window), "entry");
3393 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
3396 box1 = gtk_vbox_new (FALSE, 0);
3397 gtk_container_add (GTK_CONTAINER (window), box1);
3398 gtk_widget_show (box1);
3401 box2 = gtk_vbox_new (FALSE, 10);
3402 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
3403 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
3404 gtk_widget_show (box2);
3406 entry = gtk_entry_new ();
3407 gtk_entry_set_text (GTK_ENTRY (entry), "hello world السلام عليكم");
3408 gtk_editable_select_region (GTK_EDITABLE (entry), 0, 5);
3409 gtk_box_pack_start (GTK_BOX (box2), entry, TRUE, TRUE, 0);
3410 gtk_widget_show (entry);
3412 cb = gtk_combo_new ();
3413 gtk_combo_set_popdown_strings (GTK_COMBO (cb), cbitems);
3414 gtk_entry_set_text (GTK_ENTRY (GTK_COMBO(cb)->entry), "hello world");
3415 gtk_editable_select_region (GTK_EDITABLE (GTK_COMBO(cb)->entry),
3417 gtk_box_pack_start (GTK_BOX (box2), cb, TRUE, TRUE, 0);
3418 gtk_widget_show (cb);
3420 editable_check = gtk_check_button_new_with_label("Editable");
3421 gtk_box_pack_start (GTK_BOX (box2), editable_check, FALSE, TRUE, 0);
3422 gtk_signal_connect (GTK_OBJECT(editable_check), "toggled",
3423 GTK_SIGNAL_FUNC(entry_toggle_editable), entry);
3424 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(editable_check), TRUE);
3425 gtk_widget_show (editable_check);
3427 editable_check = gtk_check_button_new_with_label("Visible");
3428 gtk_box_pack_start (GTK_BOX (box2), editable_check, FALSE, TRUE, 0);
3429 gtk_signal_connect (GTK_OBJECT(editable_check), "toggled",
3430 GTK_SIGNAL_FUNC(entry_toggle_visibility), entry);
3431 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(editable_check), TRUE);
3432 gtk_widget_show (editable_check);
3434 sensitive_check = gtk_check_button_new_with_label("Sensitive");
3435 gtk_box_pack_start (GTK_BOX (box2), sensitive_check, FALSE, TRUE, 0);
3436 gtk_signal_connect (GTK_OBJECT(sensitive_check), "toggled",
3437 GTK_SIGNAL_FUNC(entry_toggle_sensitive), entry);
3438 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(sensitive_check), TRUE);
3439 gtk_widget_show (sensitive_check);
3441 invisible_char_check = gtk_check_button_new_with_label("invisible_char = 0");
3442 gtk_box_pack_start (GTK_BOX (box2), invisible_char_check, FALSE, TRUE, 0);
3443 gtk_signal_connect (GTK_OBJECT(invisible_char_check), "toggled",
3444 GTK_SIGNAL_FUNC(entry_toggle_invisible_char), entry);
3445 gtk_widget_show (invisible_char_check);
3447 editable_check = gtk_check_button_new_with_label("Has Frame");
3448 gtk_box_pack_start (GTK_BOX (box2), editable_check, FALSE, TRUE, 0);
3449 gtk_signal_connect (GTK_OBJECT(editable_check), "toggled",
3450 GTK_SIGNAL_FUNC(entry_toggle_frame), entry);
3451 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(editable_check), TRUE);
3452 gtk_widget_show (editable_check);
3454 separator = gtk_hseparator_new ();
3455 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
3456 gtk_widget_show (separator);
3459 box2 = gtk_vbox_new (FALSE, 10);
3460 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
3461 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
3462 gtk_widget_show (box2);
3465 button = gtk_button_new_with_label ("close");
3466 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
3467 GTK_SIGNAL_FUNC(gtk_widget_destroy),
3468 GTK_OBJECT (window));
3469 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
3470 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
3471 gtk_widget_grab_default (button);
3472 gtk_widget_show (button);
3475 if (!GTK_WIDGET_VISIBLE (window))
3476 gtk_widget_show (window);
3478 gtk_widget_destroy (window);
3485 static GtkWidget *spinner1;
3488 toggle_snap (GtkWidget *widget, GtkSpinButton *spin)
3490 gtk_spin_button_set_snap_to_ticks (spin, GTK_TOGGLE_BUTTON (widget)->active);
3494 toggle_numeric (GtkWidget *widget, GtkSpinButton *spin)
3496 gtk_spin_button_set_numeric (spin, GTK_TOGGLE_BUTTON (widget)->active);
3500 change_digits (GtkWidget *widget, GtkSpinButton *spin)
3502 gtk_spin_button_set_digits (GTK_SPIN_BUTTON (spinner1),
3503 gtk_spin_button_get_value_as_int (spin));
3507 get_value (GtkWidget *widget, gpointer data)
3511 GtkSpinButton *spin;
3513 spin = GTK_SPIN_BUTTON (spinner1);
3514 label = GTK_LABEL (gtk_object_get_user_data (GTK_OBJECT (widget)));
3515 if (GPOINTER_TO_INT (data) == 1)
3516 sprintf (buf, "%d", gtk_spin_button_get_value_as_int (spin));
3518 sprintf (buf, "%0.*f", spin->digits,
3519 gtk_spin_button_get_value_as_float (spin));
3520 gtk_label_set_text (label, buf);
3524 spin_button_time_output_func (GtkSpinButton *spin_button)
3526 static gchar buf[6];
3530 hours = spin_button->adjustment->value / 60.0;
3531 minutes = (fabs(floor (hours) - hours) < 1e-5) ? 0.0 : 30;
3532 sprintf (buf, "%02.0f:%02.0f", floor (hours), minutes);
3533 if (strcmp (buf, gtk_entry_get_text (GTK_ENTRY (spin_button))))
3534 gtk_entry_set_text (GTK_ENTRY (spin_button), buf);
3539 spin_button_month_input_func (GtkSpinButton *spin_button,
3543 static gchar *month[12] = { "January", "February", "March", "April",
3544 "May", "June", "July", "August",
3545 "September", "October", "November", "December" };
3547 gboolean found = FALSE;
3549 for (i = 1; i <= 12; i++)
3551 tmp1 = g_strdup (month[i-1]);
3553 tmp2 = g_strdup (gtk_entry_get_text (GTK_ENTRY (spin_button)));
3555 if (strstr (tmp1, tmp2) == tmp1)
3565 return GTK_INPUT_ERROR;
3567 *new_val = (gfloat) i;
3572 spin_button_month_output_func (GtkSpinButton *spin_button)
3575 static gchar *month[12] = { "January", "February", "March", "April",
3576 "May", "June", "July", "August", "September",
3577 "October", "November", "December" };
3579 for (i = 1; i <= 12; i++)
3580 if (fabs (spin_button->adjustment->value - (double)i) < 1e-5)
3582 if (strcmp (month[i-1], gtk_entry_get_text (GTK_ENTRY (spin_button))))
3583 gtk_entry_set_text (GTK_ENTRY (spin_button), month[i-1]);
3589 spin_button_hex_input_func (GtkSpinButton *spin_button,
3596 buf = gtk_entry_get_text (GTK_ENTRY (spin_button));
3597 res = (gfloat)(strtol(buf, &err, 16));
3600 return GTK_INPUT_ERROR;
3606 spin_button_hex_output_func (GtkSpinButton *spin_button)
3608 static gchar buf[7];
3611 val = (gint) spin_button->adjustment->value;
3612 if (fabs (val) < 1e-5)
3613 sprintf (buf, "0x00");
3615 sprintf (buf, "0x%.2X", val);
3616 if (strcmp (buf, gtk_entry_get_text (GTK_ENTRY (spin_button))))
3617 gtk_entry_set_text (GTK_ENTRY (spin_button), buf);
3624 static GtkWidget *window = NULL;
3627 GtkWidget *main_vbox;
3630 GtkWidget *spinner2;
3634 GtkWidget *val_label;
3639 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3641 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3642 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
3645 gtk_window_set_title (GTK_WINDOW (window), "GtkSpinButton");
3647 main_vbox = gtk_vbox_new (FALSE, 5);
3648 gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 10);
3649 gtk_container_add (GTK_CONTAINER (window), main_vbox);
3651 frame = gtk_frame_new ("Not accelerated");
3652 gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0);
3654 vbox = gtk_vbox_new (FALSE, 0);
3655 gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
3656 gtk_container_add (GTK_CONTAINER (frame), vbox);
3658 /* Time, month, hex spinners */
3660 hbox = gtk_hbox_new (FALSE, 0);
3661 gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 5);
3663 vbox2 = gtk_vbox_new (FALSE, 0);
3664 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
3666 label = gtk_label_new ("Time :");
3667 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
3668 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
3670 adj = (GtkAdjustment *) gtk_adjustment_new (0, 0, 1410, 30, 60, 0);
3671 spinner = gtk_spin_button_new (adj, 0, 0);
3672 gtk_editable_set_editable (GTK_EDITABLE (spinner), FALSE);
3673 gtk_signal_connect (GTK_OBJECT (spinner),
3675 GTK_SIGNAL_FUNC (spin_button_time_output_func),
3677 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
3678 gtk_widget_set_usize (spinner, 55, -1);
3679 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
3681 vbox2 = gtk_vbox_new (FALSE, 0);
3682 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
3684 label = gtk_label_new ("Month :");
3685 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
3686 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
3688 adj = (GtkAdjustment *) gtk_adjustment_new (1.0, 1.0, 12.0, 1.0,
3690 spinner = gtk_spin_button_new (adj, 0, 0);
3691 gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (spinner),
3692 GTK_UPDATE_IF_VALID);
3693 gtk_signal_connect (GTK_OBJECT (spinner),
3695 GTK_SIGNAL_FUNC (spin_button_month_input_func),
3697 gtk_signal_connect (GTK_OBJECT (spinner),
3699 GTK_SIGNAL_FUNC (spin_button_month_output_func),
3701 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
3702 gtk_widget_set_usize (spinner, 85, -1);
3703 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
3705 vbox2 = gtk_vbox_new (FALSE, 0);
3706 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
3708 label = gtk_label_new ("Hex :");
3709 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
3710 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
3712 adj = (GtkAdjustment *) gtk_adjustment_new (0, 0, 255, 1, 16, 0);
3713 spinner = gtk_spin_button_new (adj, 0, 0);
3714 gtk_editable_set_editable (GTK_EDITABLE (spinner), TRUE);
3715 gtk_signal_connect (GTK_OBJECT (spinner),
3717 GTK_SIGNAL_FUNC (spin_button_hex_input_func),
3719 gtk_signal_connect (GTK_OBJECT (spinner),
3721 GTK_SIGNAL_FUNC (spin_button_hex_output_func),
3723 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
3724 gtk_widget_set_usize (spinner, 55, 0);
3725 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
3727 frame = gtk_frame_new ("Accelerated");
3728 gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0);
3730 vbox = gtk_vbox_new (FALSE, 0);
3731 gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
3732 gtk_container_add (GTK_CONTAINER (frame), vbox);
3734 hbox = gtk_hbox_new (FALSE, 0);
3735 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
3737 vbox2 = gtk_vbox_new (FALSE, 0);
3738 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
3740 label = gtk_label_new ("Value :");
3741 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
3742 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
3744 adj = (GtkAdjustment *) gtk_adjustment_new (0.0, -10000.0, 10000.0,
3746 spinner1 = gtk_spin_button_new (adj, 1.0, 2);
3747 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner1), TRUE);
3748 gtk_widget_set_usize (spinner1, 100, 0);
3749 gtk_box_pack_start (GTK_BOX (vbox2), spinner1, FALSE, TRUE, 0);
3751 vbox2 = gtk_vbox_new (FALSE, 0);
3752 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
3754 label = gtk_label_new ("Digits :");
3755 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
3756 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
3758 adj = (GtkAdjustment *) gtk_adjustment_new (2, 1, 5, 1, 1, 0);
3759 spinner2 = gtk_spin_button_new (adj, 0.0, 0);
3760 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
3761 GTK_SIGNAL_FUNC (change_digits),
3762 (gpointer) spinner2);
3763 gtk_box_pack_start (GTK_BOX (vbox2), spinner2, FALSE, TRUE, 0);
3765 hbox = gtk_hbox_new (FALSE, 0);
3766 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
3768 button = gtk_check_button_new_with_label ("Snap to 0.5-ticks");
3769 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3770 GTK_SIGNAL_FUNC (toggle_snap),
3772 gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
3773 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
3775 button = gtk_check_button_new_with_label ("Numeric only input mode");
3776 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3777 GTK_SIGNAL_FUNC (toggle_numeric),
3779 gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
3780 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
3782 val_label = gtk_label_new ("");
3784 hbox = gtk_hbox_new (FALSE, 0);
3785 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
3787 button = gtk_button_new_with_label ("Value as Int");
3788 gtk_object_set_user_data (GTK_OBJECT (button), val_label);
3789 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3790 GTK_SIGNAL_FUNC (get_value),
3791 GINT_TO_POINTER (1));
3792 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
3794 button = gtk_button_new_with_label ("Value as Float");
3795 gtk_object_set_user_data (GTK_OBJECT (button), val_label);
3796 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3797 GTK_SIGNAL_FUNC (get_value),
3798 GINT_TO_POINTER (2));
3799 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
3801 gtk_box_pack_start (GTK_BOX (vbox), val_label, TRUE, TRUE, 0);
3802 gtk_label_set_text (GTK_LABEL (val_label), "0");
3804 hbox = gtk_hbox_new (FALSE, 0);
3805 gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
3807 button = gtk_button_new_with_label ("Close");
3808 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
3809 GTK_SIGNAL_FUNC (gtk_widget_destroy),
3810 GTK_OBJECT (window));
3811 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
3814 if (!GTK_WIDGET_VISIBLE (window))
3815 gtk_widget_show_all (window);
3817 gtk_widget_destroy (window);
3826 cursor_expose_event (GtkWidget *widget,
3830 GtkDrawingArea *darea;
3831 GdkDrawable *drawable;
3838 g_return_val_if_fail (widget != NULL, TRUE);
3839 g_return_val_if_fail (GTK_IS_DRAWING_AREA (widget), TRUE);
3841 darea = GTK_DRAWING_AREA (widget);
3842 drawable = widget->window;
3843 white_gc = widget->style->white_gc;
3844 gray_gc = widget->style->bg_gc[GTK_STATE_NORMAL];
3845 black_gc = widget->style->black_gc;
3846 max_width = widget->allocation.width;
3847 max_height = widget->allocation.height;
3849 gdk_draw_rectangle (drawable, white_gc,
3856 gdk_draw_rectangle (drawable, black_gc,
3863 gdk_draw_rectangle (drawable, gray_gc,
3874 set_cursor (GtkWidget *spinner,
3882 c = CLAMP (gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spinner)), 0, 152);
3885 label = gtk_object_get_user_data (GTK_OBJECT (spinner));
3886 vals = gtk_type_enum_get_values (GTK_TYPE_GDK_CURSOR_TYPE);
3887 while (vals && vals->value != c)
3890 gtk_label_set_text (GTK_LABEL (label), vals->value_nick);
3892 gtk_label_set_text (GTK_LABEL (label), "<unknown>");
3894 cursor = gdk_cursor_new (c);
3895 gdk_window_set_cursor (widget->window, cursor);
3896 gdk_cursor_unref (cursor);
3900 cursor_event (GtkWidget *widget,
3902 GtkSpinButton *spinner)
3904 if ((event->type == GDK_BUTTON_PRESS) &&
3905 ((event->button.button == 1) ||
3906 (event->button.button == 3)))
3908 gtk_spin_button_spin (spinner, event->button.button == 1 ?
3909 GTK_SPIN_STEP_FORWARD : GTK_SPIN_STEP_BACKWARD, 0);
3917 create_cursors (void)
3919 static GtkWidget *window = NULL;
3922 GtkWidget *main_vbox;
3933 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3935 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3936 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
3939 gtk_window_set_title (GTK_WINDOW (window), "Cursors");
3941 main_vbox = gtk_vbox_new (FALSE, 5);
3942 gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 0);
3943 gtk_container_add (GTK_CONTAINER (window), main_vbox);
3946 gtk_widget_new (gtk_vbox_get_type (),
3947 "GtkBox::homogeneous", FALSE,
3948 "GtkBox::spacing", 5,
3949 "GtkContainer::border_width", 10,
3950 "GtkWidget::parent", main_vbox,
3951 "GtkWidget::visible", TRUE,
3954 hbox = gtk_hbox_new (FALSE, 0);
3955 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
3956 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
3958 label = gtk_label_new ("Cursor Value : ");
3959 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
3960 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
3962 adj = (GtkAdjustment *) gtk_adjustment_new (0,
3966 spinner = gtk_spin_button_new (adj, 0, 0);
3967 gtk_box_pack_start (GTK_BOX (hbox), spinner, TRUE, TRUE, 0);
3970 gtk_widget_new (gtk_frame_get_type (),
3971 "GtkFrame::shadow", GTK_SHADOW_ETCHED_IN,
3972 "GtkFrame::label_xalign", 0.5,
3973 "GtkFrame::label", "Cursor Area",
3974 "GtkContainer::border_width", 10,
3975 "GtkWidget::parent", vbox,
3976 "GtkWidget::visible", TRUE,
3979 darea = gtk_drawing_area_new ();
3980 gtk_widget_set_usize (darea, 80, 80);
3981 gtk_container_add (GTK_CONTAINER (frame), darea);
3982 gtk_signal_connect (GTK_OBJECT (darea),
3984 GTK_SIGNAL_FUNC (cursor_expose_event),
3986 gtk_widget_set_events (darea, GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK);
3987 gtk_signal_connect (GTK_OBJECT (darea),
3988 "button_press_event",
3989 GTK_SIGNAL_FUNC (cursor_event),
3991 gtk_widget_show (darea);
3993 gtk_signal_connect (GTK_OBJECT (spinner), "changed",
3994 GTK_SIGNAL_FUNC (set_cursor),
3997 label = gtk_widget_new (GTK_TYPE_LABEL,
4002 gtk_container_child_set (GTK_CONTAINER (vbox), label,
4005 gtk_object_set_user_data (GTK_OBJECT (spinner), label);
4008 gtk_widget_new (gtk_hseparator_get_type (),
4009 "GtkWidget::visible", TRUE,
4011 gtk_box_pack_start (GTK_BOX (main_vbox), any, FALSE, TRUE, 0);
4013 hbox = gtk_hbox_new (FALSE, 0);
4014 gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
4015 gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
4017 button = gtk_button_new_with_label ("Close");
4018 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
4019 GTK_SIGNAL_FUNC (gtk_widget_destroy),
4020 GTK_OBJECT (window));
4021 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
4023 gtk_widget_show_all (window);
4025 set_cursor (spinner, darea);
4028 gtk_widget_destroy (window);
4036 list_add (GtkWidget *widget,
4041 GtkWidget *list_item;
4042 GtkContainer *container;
4044 container = GTK_CONTAINER (list);
4046 sprintf (buffer, "added item %d", i++);
4047 list_item = gtk_list_item_new_with_label (buffer);
4048 gtk_widget_show (list_item);
4050 gtk_container_add (container, list_item);
4054 list_remove (GtkWidget *widget,
4057 GList *clear_list = NULL;
4058 GList *sel_row = NULL;
4061 if (list->selection_mode == GTK_SELECTION_EXTENDED)
4065 item = GTK_CONTAINER (list)->focus_child;
4066 if (!item && list->selection)
4067 item = list->selection->data;
4071 work = g_list_find (list->children, item);
4072 for (sel_row = work; sel_row; sel_row = sel_row->next)
4073 if (GTK_WIDGET (sel_row->data)->state != GTK_STATE_SELECTED)
4078 for (sel_row = work; sel_row; sel_row = sel_row->prev)
4079 if (GTK_WIDGET (sel_row->data)->state != GTK_STATE_SELECTED)
4085 for (work = list->selection; work; work = work->next)
4086 clear_list = g_list_prepend (clear_list, work->data);
4088 clear_list = g_list_reverse (clear_list);
4089 gtk_list_remove_items (GTK_LIST (list), clear_list);
4090 g_list_free (clear_list);
4092 if (list->selection_mode == GTK_SELECTION_EXTENDED && sel_row)
4093 gtk_list_select_child (list, GTK_WIDGET(sel_row->data));
4097 list_clear (GtkWidget *widget,
4100 gtk_list_clear_items (GTK_LIST (list), 0, -1);
4103 #define RADIOMENUTOGGLED(_rmi_, __i) { \
4106 __g = gtk_radio_menu_item_group(_rmi_); \
4107 while( __g && !((GtkCheckMenuItem *)(__g->data))->active) { \
4113 static GtkWidget *list_omenu;
4116 list_toggle_sel_mode (GtkWidget *widget, GtkList *list)
4120 if (!GTK_WIDGET_MAPPED (widget))
4123 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
4124 (((GtkOptionMenu *)list_omenu)->menu_item), i);
4126 gtk_list_set_selection_mode (list, (GtkSelectionMode) (3-i));
4132 static GtkWidget *window = NULL;
4134 static OptionMenuItem items[] =
4136 { "Single", list_toggle_sel_mode },
4137 { "Browse", list_toggle_sel_mode },
4138 { "Multiple", list_toggle_sel_mode },
4139 { "Extended", list_toggle_sel_mode }
4148 GtkWidget *scrolled_win;
4151 GtkWidget *separator;
4154 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
4156 gtk_signal_connect (GTK_OBJECT (window), "destroy",
4157 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
4160 gtk_window_set_title (GTK_WINDOW (window), "list");
4161 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
4163 vbox = gtk_vbox_new (FALSE, 0);
4164 gtk_container_add (GTK_CONTAINER (window), vbox);
4166 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
4167 gtk_container_set_border_width (GTK_CONTAINER (scrolled_win), 5);
4168 gtk_widget_set_usize (scrolled_win, -1, 300);
4169 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
4170 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
4171 GTK_POLICY_AUTOMATIC,
4172 GTK_POLICY_AUTOMATIC);
4174 list = gtk_list_new ();
4175 gtk_list_set_selection_mode (GTK_LIST (list), GTK_SELECTION_EXTENDED);
4176 gtk_scrolled_window_add_with_viewport
4177 (GTK_SCROLLED_WINDOW (scrolled_win), list);
4178 gtk_container_set_focus_vadjustment
4179 (GTK_CONTAINER (list),
4180 gtk_scrolled_window_get_vadjustment
4181 (GTK_SCROLLED_WINDOW (scrolled_win)));
4182 gtk_container_set_focus_hadjustment
4183 (GTK_CONTAINER (list),
4184 gtk_scrolled_window_get_hadjustment
4185 (GTK_SCROLLED_WINDOW (scrolled_win)));
4187 if ((infile = fopen("gtkenums.h", "r")))
4193 while (fgets (buffer, 256, infile))
4195 if ((pos = strchr (buffer, '\n')))
4197 item = gtk_list_item_new_with_label (buffer);
4198 gtk_container_add (GTK_CONTAINER (list), item);
4205 hbox = gtk_hbox_new (TRUE, 5);
4206 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4207 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
4209 button = gtk_button_new_with_label ("Insert Row");
4210 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4211 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4212 GTK_SIGNAL_FUNC (list_add),
4215 button = gtk_button_new_with_label ("Clear List");
4216 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4217 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4218 GTK_SIGNAL_FUNC (list_clear),
4221 button = gtk_button_new_with_label ("Remove Selection");
4222 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4223 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4224 GTK_SIGNAL_FUNC (list_remove),
4227 cbox = gtk_hbox_new (FALSE, 0);
4228 gtk_box_pack_start (GTK_BOX (vbox), cbox, FALSE, TRUE, 0);
4230 hbox = gtk_hbox_new (FALSE, 5);
4231 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4232 gtk_box_pack_start (GTK_BOX (cbox), hbox, TRUE, FALSE, 0);
4234 label = gtk_label_new ("Selection Mode :");
4235 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
4237 list_omenu = build_option_menu (items, 4, 3, list);
4238 gtk_box_pack_start (GTK_BOX (hbox), list_omenu, FALSE, TRUE, 0);
4240 separator = gtk_hseparator_new ();
4241 gtk_box_pack_start (GTK_BOX (vbox), separator, FALSE, TRUE, 0);
4243 cbox = gtk_hbox_new (FALSE, 0);
4244 gtk_box_pack_start (GTK_BOX (vbox), cbox, FALSE, TRUE, 0);
4246 button = gtk_button_new_with_label ("close");
4247 gtk_container_set_border_width (GTK_CONTAINER (button), 10);
4248 gtk_box_pack_start (GTK_BOX (cbox), button, TRUE, TRUE, 0);
4249 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
4250 GTK_SIGNAL_FUNC(gtk_widget_destroy),
4251 GTK_OBJECT (window));
4253 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
4254 gtk_widget_grab_default (button);
4257 if (!GTK_WIDGET_VISIBLE (window))
4258 gtk_widget_show_all (window);
4260 gtk_widget_destroy (window);
4267 static char * book_open_xpm[] = {
4290 static char * book_closed_xpm[] = {
4315 static char * mini_page_xpm[] = {
4338 static char * gtk_mini_xpm[] = {
4378 #define TESTGTK_CLIST_COLUMNS 12
4379 static gint clist_rows = 0;
4380 static GtkWidget *clist_omenu;
4383 add1000_clist (GtkWidget *widget, gpointer data)
4386 char text[TESTGTK_CLIST_COLUMNS][50];
4387 char *texts[TESTGTK_CLIST_COLUMNS];
4392 clist = GTK_CLIST (data);
4394 pixmap = gdk_pixmap_create_from_xpm_d (clist->clist_window,
4396 >K_WIDGET (data)->style->white,
4399 for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++)
4402 sprintf (text[i], "Column %d", i);
4406 sprintf (text[1], "Right");
4407 sprintf (text[2], "Center");
4409 gtk_clist_freeze (GTK_CLIST (data));
4410 for (i = 0; i < 1000; i++)
4412 sprintf (text[0], "CListRow %d", rand() % 10000);
4413 row = gtk_clist_append (clist, texts);
4414 gtk_clist_set_pixtext (clist, row, 3, "gtk+", 5, pixmap, mask);
4417 gtk_clist_thaw (GTK_CLIST (data));
4419 gdk_pixmap_unref (pixmap);
4420 gdk_bitmap_unref (mask);
4424 add10000_clist (GtkWidget *widget, gpointer data)
4427 char text[TESTGTK_CLIST_COLUMNS][50];
4428 char *texts[TESTGTK_CLIST_COLUMNS];
4430 for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++)
4433 sprintf (text[i], "Column %d", i);
4436 sprintf (text[1], "Right");
4437 sprintf (text[2], "Center");
4439 gtk_clist_freeze (GTK_CLIST (data));
4440 for (i = 0; i < 10000; i++)
4442 sprintf (text[0], "CListRow %d", rand() % 10000);
4443 gtk_clist_append (GTK_CLIST (data), texts);
4445 gtk_clist_thaw (GTK_CLIST (data));
4449 clear_clist (GtkWidget *widget, gpointer data)
4451 gtk_clist_clear (GTK_CLIST (data));
4455 void clist_remove_selection (GtkWidget *widget, GtkCList *clist)
4457 gtk_clist_freeze (clist);
4459 while (clist->selection)
4464 row = GPOINTER_TO_INT (clist->selection->data);
4466 gtk_clist_remove (clist, row);
4468 if (clist->selection_mode == GTK_SELECTION_BROWSE)
4472 if (clist->selection_mode == GTK_SELECTION_EXTENDED && !clist->selection &&
4473 clist->focus_row >= 0)
4474 gtk_clist_select_row (clist, clist->focus_row, -1);
4476 gtk_clist_thaw (clist);
4479 void toggle_title_buttons (GtkWidget *widget, GtkCList *clist)
4481 if (GTK_TOGGLE_BUTTON (widget)->active)
4482 gtk_clist_column_titles_show (clist);
4484 gtk_clist_column_titles_hide (clist);
4487 void toggle_reorderable (GtkWidget *widget, GtkCList *clist)
4489 gtk_clist_set_reorderable (clist, GTK_TOGGLE_BUTTON (widget)->active);
4493 insert_row_clist (GtkWidget *widget, gpointer data)
4495 static char *text[] =
4497 "This", "is an", "inserted", "row.",
4498 "This", "is an", "inserted", "row.",
4499 "This", "is an", "inserted", "row."
4502 static GtkStyle *style1 = NULL;
4503 static GtkStyle *style2 = NULL;
4504 static GtkStyle *style3 = NULL;
4507 if (GTK_CLIST (data)->focus_row >= 0)
4508 row = gtk_clist_insert (GTK_CLIST (data), GTK_CLIST (data)->focus_row,
4511 row = gtk_clist_prepend (GTK_CLIST (data), text);
4525 style1 = gtk_style_copy (GTK_WIDGET (data)->style);
4526 style1->base[GTK_STATE_NORMAL] = col1;
4527 style1->base[GTK_STATE_SELECTED] = col2;
4529 style2 = gtk_style_copy (GTK_WIDGET (data)->style);
4530 style2->fg[GTK_STATE_NORMAL] = col1;
4531 style2->fg[GTK_STATE_SELECTED] = col2;
4533 style3 = gtk_style_copy (GTK_WIDGET (data)->style);
4534 style3->fg[GTK_STATE_NORMAL] = col1;
4535 style3->base[GTK_STATE_NORMAL] = col2;
4536 pango_font_description_free (style3->font_desc);
4537 style3->font_desc = pango_font_description_from_string ("courier 12");
4540 gtk_clist_set_cell_style (GTK_CLIST (data), row, 3, style1);
4541 gtk_clist_set_cell_style (GTK_CLIST (data), row, 4, style2);
4542 gtk_clist_set_cell_style (GTK_CLIST (data), row, 0, style3);
4548 clist_warning_test (GtkWidget *button,
4552 static gboolean add_remove = FALSE;
4554 add_remove = !add_remove;
4556 child = gtk_label_new ("Test");
4557 gtk_widget_ref (child);
4558 gtk_object_sink (GTK_OBJECT (child));
4561 gtk_container_add (GTK_CONTAINER (clist), child);
4564 child->parent = clist;
4565 gtk_container_remove (GTK_CONTAINER (clist), child);
4566 child->parent = NULL;
4569 gtk_widget_destroy (child);
4570 gtk_widget_unref (child);
4574 undo_selection (GtkWidget *button, GtkCList *clist)
4576 gtk_clist_undo_selection (clist);
4580 clist_toggle_sel_mode (GtkWidget *widget, GtkCList *clist)
4584 if (!GTK_WIDGET_MAPPED (widget))
4587 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
4588 (((GtkOptionMenu *)clist_omenu)->menu_item), i);
4590 gtk_clist_set_selection_mode (clist, (GtkSelectionMode) (3-i));
4594 clist_click_column (GtkCList *clist, gint column, gpointer data)
4597 gtk_clist_set_column_visibility (clist, column, FALSE);
4598 else if (column == clist->sort_column)
4600 if (clist->sort_type == GTK_SORT_ASCENDING)
4601 clist->sort_type = GTK_SORT_DESCENDING;
4603 clist->sort_type = GTK_SORT_ASCENDING;
4606 gtk_clist_set_sort_column (clist, column);
4608 gtk_clist_sort (clist);
4615 static GtkWidget *window = NULL;
4617 static char *titles[] =
4619 "auto resize", "not resizeable", "max width 100", "min width 50",
4620 "hide column", "Title 5", "Title 6", "Title 7",
4621 "Title 8", "Title 9", "Title 10", "Title 11"
4624 static OptionMenuItem items[] =
4626 { "Single", clist_toggle_sel_mode },
4627 { "Browse", clist_toggle_sel_mode },
4628 { "Multiple", clist_toggle_sel_mode },
4629 { "Extended", clist_toggle_sel_mode }
4632 char text[TESTGTK_CLIST_COLUMNS][50];
4633 char *texts[TESTGTK_CLIST_COLUMNS];
4639 GtkWidget *separator;
4640 GtkWidget *scrolled_win;
4643 GtkWidget *undo_button;
4653 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
4655 gtk_signal_connect (GTK_OBJECT (window), "destroy",
4656 GTK_SIGNAL_FUNC (gtk_widget_destroyed), &window);
4658 gtk_window_set_title (GTK_WINDOW (window), "clist");
4659 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
4661 vbox = gtk_vbox_new (FALSE, 0);
4662 gtk_container_add (GTK_CONTAINER (window), vbox);
4664 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
4665 gtk_container_set_border_width (GTK_CONTAINER (scrolled_win), 5);
4666 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
4667 GTK_POLICY_AUTOMATIC,
4668 GTK_POLICY_AUTOMATIC);
4670 /* create GtkCList here so we have a pointer to throw at the
4671 * button callbacks -- more is done with it later */
4672 clist = gtk_clist_new_with_titles (TESTGTK_CLIST_COLUMNS, titles);
4673 gtk_container_add (GTK_CONTAINER (scrolled_win), clist);
4674 gtk_signal_connect (GTK_OBJECT (clist), "click_column",
4675 (GtkSignalFunc) clist_click_column, NULL);
4677 /* control buttons */
4678 hbox = gtk_hbox_new (FALSE, 5);
4679 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4680 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
4682 button = gtk_button_new_with_label ("Insert Row");
4683 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4684 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4685 (GtkSignalFunc) insert_row_clist, (gpointer) clist);
4687 button = gtk_button_new_with_label ("Add 1,000 Rows With Pixmaps");
4688 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4689 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4690 (GtkSignalFunc) add1000_clist, (gpointer) clist);
4692 button = gtk_button_new_with_label ("Add 10,000 Rows");
4693 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4694 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4695 (GtkSignalFunc) add10000_clist, (gpointer) clist);
4697 /* second layer of buttons */
4698 hbox = gtk_hbox_new (FALSE, 5);
4699 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4700 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
4702 button = gtk_button_new_with_label ("Clear List");
4703 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4704 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4705 (GtkSignalFunc) clear_clist, (gpointer) clist);
4707 button = gtk_button_new_with_label ("Remove Selection");
4708 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4709 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4710 (GtkSignalFunc) clist_remove_selection,
4713 undo_button = gtk_button_new_with_label ("Undo Selection");
4714 gtk_box_pack_start (GTK_BOX (hbox), undo_button, TRUE, TRUE, 0);
4715 gtk_signal_connect (GTK_OBJECT (undo_button), "clicked",
4716 (GtkSignalFunc) undo_selection, (gpointer) clist);
4718 button = gtk_button_new_with_label ("Warning Test");
4719 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4720 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4721 (GtkSignalFunc) clist_warning_test,(gpointer) clist);
4723 /* third layer of buttons */
4724 hbox = gtk_hbox_new (FALSE, 5);
4725 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4726 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
4728 check = gtk_check_button_new_with_label ("Show Title Buttons");
4729 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
4730 gtk_signal_connect (GTK_OBJECT (check), "clicked",
4731 GTK_SIGNAL_FUNC (toggle_title_buttons), clist);
4732 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE);
4734 check = gtk_check_button_new_with_label ("Reorderable");
4735 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
4736 gtk_signal_connect (GTK_OBJECT (check), "clicked",
4737 GTK_SIGNAL_FUNC (toggle_reorderable), clist);
4738 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE);
4740 label = gtk_label_new ("Selection Mode :");
4741 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
4743 clist_omenu = build_option_menu (items, 4, 3, clist);
4744 gtk_box_pack_start (GTK_BOX (hbox), clist_omenu, FALSE, TRUE, 0);
4747 * the rest of the clist configuration
4750 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
4751 gtk_clist_set_row_height (GTK_CLIST (clist), 18);
4752 gtk_widget_set_usize (clist, -1, 300);
4754 for (i = 1; i < TESTGTK_CLIST_COLUMNS; i++)
4755 gtk_clist_set_column_width (GTK_CLIST (clist), i, 80);
4757 gtk_clist_set_column_auto_resize (GTK_CLIST (clist), 0, TRUE);
4758 gtk_clist_set_column_resizeable (GTK_CLIST (clist), 1, FALSE);
4759 gtk_clist_set_column_max_width (GTK_CLIST (clist), 2, 100);
4760 gtk_clist_set_column_min_width (GTK_CLIST (clist), 3, 50);
4761 gtk_clist_set_selection_mode (GTK_CLIST (clist), GTK_SELECTION_EXTENDED);
4762 gtk_clist_set_column_justification (GTK_CLIST (clist), 1,
4764 gtk_clist_set_column_justification (GTK_CLIST (clist), 2,
4765 GTK_JUSTIFY_CENTER);
4767 for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++)
4770 sprintf (text[i], "Column %d", i);
4773 sprintf (text[1], "Right");
4774 sprintf (text[2], "Center");
4783 style = gtk_style_new ();
4784 style->fg[GTK_STATE_NORMAL] = col1;
4785 style->base[GTK_STATE_NORMAL] = col2;
4787 style->font_desc->size = 14 * PANGO_SCALE;
4788 style->font_desc->weight = PANGO_WEIGHT_BOLD;
4790 for (i = 0; i < 10; i++)
4792 sprintf (text[0], "CListRow %d", clist_rows++);
4793 gtk_clist_append (GTK_CLIST (clist), texts);
4798 gtk_clist_set_row_style (GTK_CLIST (clist), i, style);
4801 gtk_clist_set_cell_style (GTK_CLIST (clist), i, i % 4, style);
4806 gtk_style_unref (style);
4808 separator = gtk_hseparator_new ();
4809 gtk_box_pack_start (GTK_BOX (vbox), separator, FALSE, TRUE, 0);
4811 hbox = gtk_hbox_new (FALSE, 0);
4812 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
4814 button = gtk_button_new_with_label ("close");
4815 gtk_container_set_border_width (GTK_CONTAINER (button), 10);
4816 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4817 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
4818 GTK_SIGNAL_FUNC(gtk_widget_destroy),
4819 GTK_OBJECT (window));
4821 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
4822 gtk_widget_grab_default (button);
4825 if (!GTK_WIDGET_VISIBLE (window))
4826 gtk_widget_show_all (window);
4830 gtk_widget_destroy (window);
4845 static gint books = 0;
4846 static gint pages = 0;
4848 static GtkWidget *book_label;
4849 static GtkWidget *page_label;
4850 static GtkWidget *sel_label;
4851 static GtkWidget *vis_label;
4852 static GtkWidget *omenu1;
4853 static GtkWidget *omenu2;
4854 static GtkWidget *omenu3;
4855 static GtkWidget *omenu4;
4856 static GtkWidget *spin1;
4857 static GtkWidget *spin2;
4858 static GtkWidget *spin3;
4859 static gint line_style;
4861 void after_press (GtkCTree *ctree, gpointer data)
4865 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->selection));
4866 gtk_label_set_text (GTK_LABEL (sel_label), buf);
4868 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->row_list));
4869 gtk_label_set_text (GTK_LABEL (vis_label), buf);
4871 sprintf (buf, "%d", books);
4872 gtk_label_set_text (GTK_LABEL (book_label), buf);
4874 sprintf (buf, "%d", pages);
4875 gtk_label_set_text (GTK_LABEL (page_label), buf);
4878 void after_move (GtkCTree *ctree, GtkCTreeNode *child, GtkCTreeNode *parent,
4879 GtkCTreeNode *sibling, gpointer data)
4885 gtk_ctree_get_node_info (ctree, child, &source,
4886 NULL, NULL, NULL, NULL, NULL, NULL, NULL);
4888 gtk_ctree_get_node_info (ctree, parent, &target1,
4889 NULL, NULL, NULL, NULL, NULL, NULL, NULL);
4891 gtk_ctree_get_node_info (ctree, sibling, &target2,
4892 NULL, NULL, NULL, NULL, NULL, NULL, NULL);
4894 g_print ("Moving \"%s\" to \"%s\" with sibling \"%s\".\n", source,
4895 (parent) ? target1 : "nil", (sibling) ? target2 : "nil");
4898 void count_items (GtkCTree *ctree, GtkCTreeNode *list)
4900 if (GTK_CTREE_ROW (list)->is_leaf)
4906 void expand_all (GtkWidget *widget, GtkCTree *ctree)
4908 gtk_ctree_expand_recursive (ctree, NULL);
4909 after_press (ctree, NULL);
4912 void collapse_all (GtkWidget *widget, GtkCTree *ctree)
4914 gtk_ctree_collapse_recursive (ctree, NULL);
4915 after_press (ctree, NULL);
4918 void select_all (GtkWidget *widget, GtkCTree *ctree)
4920 gtk_ctree_select_recursive (ctree, NULL);
4921 after_press (ctree, NULL);
4924 void change_style (GtkWidget *widget, GtkCTree *ctree)
4926 static GtkStyle *style1 = NULL;
4927 static GtkStyle *style2 = NULL;
4933 if (GTK_CLIST (ctree)->focus_row >= 0)
4934 node = GTK_CTREE_NODE
4935 (g_list_nth (GTK_CLIST (ctree)->row_list,GTK_CLIST (ctree)->focus_row));
4937 node = GTK_CTREE_NODE (GTK_CLIST (ctree)->row_list);
4951 style1 = gtk_style_new ();
4952 style1->base[GTK_STATE_NORMAL] = col1;
4953 style1->fg[GTK_STATE_SELECTED] = col2;
4955 style2 = gtk_style_new ();
4956 style2->base[GTK_STATE_SELECTED] = col2;
4957 style2->fg[GTK_STATE_NORMAL] = col1;
4958 style2->base[GTK_STATE_NORMAL] = col2;
4959 pango_font_description_free (style2->font_desc);
4960 style2->font_desc = pango_font_description_from_string ("courier 30");
4963 gtk_ctree_node_set_cell_style (ctree, node, 1, style1);
4964 gtk_ctree_node_set_cell_style (ctree, node, 0, style2);
4966 if (GTK_CTREE_ROW (node)->children)
4967 gtk_ctree_node_set_row_style (ctree, GTK_CTREE_ROW (node)->children,
4971 void unselect_all (GtkWidget *widget, GtkCTree *ctree)
4973 gtk_ctree_unselect_recursive (ctree, NULL);
4974 after_press (ctree, NULL);
4977 void remove_selection (GtkWidget *widget, GtkCTree *ctree)
4982 clist = GTK_CLIST (ctree);
4984 gtk_clist_freeze (clist);
4986 while (clist->selection)
4988 node = clist->selection->data;
4990 if (GTK_CTREE_ROW (node)->is_leaf)
4993 gtk_ctree_post_recursive (ctree, node,
4994 (GtkCTreeFunc) count_items, NULL);
4996 gtk_ctree_remove_node (ctree, node);
4998 if (clist->selection_mode == GTK_SELECTION_BROWSE)
5002 if (clist->selection_mode == GTK_SELECTION_EXTENDED && !clist->selection &&
5003 clist->focus_row >= 0)
5005 node = gtk_ctree_node_nth (ctree, clist->focus_row);
5008 gtk_ctree_select (ctree, node);
5011 gtk_clist_thaw (clist);
5012 after_press (ctree, NULL);
5015 struct _ExportStruct {
5021 typedef struct _ExportStruct ExportStruct;
5024 gnode2ctree (GtkCTree *ctree,
5027 GtkCTreeNode *cnode,
5031 GdkPixmap *pixmap_closed;
5032 GdkBitmap *mask_closed;
5033 GdkPixmap *pixmap_opened;
5034 GdkBitmap *mask_opened;
5036 if (!cnode || !gnode || (!(es = gnode->data)))
5041 pixmap_closed = pixmap3;
5042 mask_closed = mask3;
5043 pixmap_opened = NULL;
5048 pixmap_closed = pixmap1;
5049 mask_closed = mask1;
5050 pixmap_opened = pixmap2;
5051 mask_opened = mask2;
5054 gtk_ctree_set_node_info (ctree, cnode, es->tree, 2, pixmap_closed,
5055 mask_closed, pixmap_opened, mask_opened,
5056 es->is_leaf, (depth < 3));
5057 gtk_ctree_node_set_text (ctree, cnode, 1, es->info);
5065 ctree2gnode (GtkCTree *ctree,
5068 GtkCTreeNode *cnode,
5073 if (!cnode || !gnode)
5076 es = g_new (ExportStruct, 1);
5078 es->is_leaf = GTK_CTREE_ROW (cnode)->is_leaf;
5079 es->tree = GTK_CELL_PIXTEXT (GTK_CTREE_ROW (cnode)->row.cell[0])->text;
5080 es->info = GTK_CELL_PIXTEXT (GTK_CTREE_ROW (cnode)->row.cell[1])->text;
5084 void export_ctree (GtkWidget *widget, GtkCTree *ctree)
5086 char *title[] = { "Tree" , "Info" };
5087 static GtkWidget *export_window = NULL;
5088 static GtkCTree *export_ctree;
5090 GtkWidget *scrolled_win;
5098 export_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5100 gtk_signal_connect (GTK_OBJECT (export_window), "destroy",
5101 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
5104 gtk_window_set_title (GTK_WINDOW (export_window), "exported ctree");
5105 gtk_container_set_border_width (GTK_CONTAINER (export_window), 5);
5107 vbox = gtk_vbox_new (FALSE, 0);
5108 gtk_container_add (GTK_CONTAINER (export_window), vbox);
5110 button = gtk_button_new_with_label ("Close");
5111 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, TRUE, 0);
5113 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5114 (GtkSignalFunc) gtk_widget_destroy,
5115 GTK_OBJECT(export_window));
5117 sep = gtk_hseparator_new ();
5118 gtk_box_pack_end (GTK_BOX (vbox), sep, FALSE, TRUE, 10);
5120 export_ctree = GTK_CTREE (gtk_ctree_new_with_titles (2, 0, title));
5121 gtk_ctree_set_line_style (export_ctree, GTK_CTREE_LINES_DOTTED);
5123 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
5124 gtk_container_add (GTK_CONTAINER (scrolled_win),
5125 GTK_WIDGET (export_ctree));
5126 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
5127 GTK_POLICY_AUTOMATIC,
5128 GTK_POLICY_AUTOMATIC);
5129 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
5130 gtk_clist_set_selection_mode (GTK_CLIST (export_ctree),
5131 GTK_SELECTION_EXTENDED);
5132 gtk_clist_set_column_width (GTK_CLIST (export_ctree), 0, 200);
5133 gtk_clist_set_column_width (GTK_CLIST (export_ctree), 1, 200);
5134 gtk_widget_set_usize (GTK_WIDGET (export_ctree), 300, 200);
5137 if (!GTK_WIDGET_VISIBLE (export_window))
5138 gtk_widget_show_all (export_window);
5140 gtk_clist_clear (GTK_CLIST (export_ctree));
5142 node = GTK_CTREE_NODE (g_list_nth (GTK_CLIST (ctree)->row_list,
5143 GTK_CLIST (ctree)->focus_row));
5147 gnode = gtk_ctree_export_to_gnode (ctree, NULL, NULL, node,
5151 gtk_ctree_insert_gnode (export_ctree, NULL, NULL, gnode,
5153 g_node_destroy (gnode);
5157 void change_indent (GtkWidget *widget, GtkCTree *ctree)
5159 gtk_ctree_set_indent (ctree, GTK_ADJUSTMENT (widget)->value);
5162 void change_spacing (GtkWidget *widget, GtkCTree *ctree)
5164 gtk_ctree_set_spacing (ctree, GTK_ADJUSTMENT (widget)->value);
5167 void change_row_height (GtkWidget *widget, GtkCList *clist)
5169 gtk_clist_set_row_height (clist, GTK_ADJUSTMENT (widget)->value);
5172 void set_background (GtkCTree *ctree, GtkCTreeNode *node, gpointer data)
5174 GtkStyle *style = NULL;
5179 if (ctree->line_style != GTK_CTREE_LINES_TABBED)
5181 if (!GTK_CTREE_ROW (node)->is_leaf)
5182 style = GTK_CTREE_ROW (node)->row.data;
5183 else if (GTK_CTREE_ROW (node)->parent)
5184 style = GTK_CTREE_ROW (GTK_CTREE_ROW (node)->parent)->row.data;
5187 gtk_ctree_node_set_row_style (ctree, node, style);
5190 void ctree_toggle_line_style (GtkWidget *widget, GtkCTree *ctree)
5194 if (!GTK_WIDGET_MAPPED (widget))
5197 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
5198 (((GtkOptionMenu *)omenu1)->menu_item), i);
5200 if ((ctree->line_style == GTK_CTREE_LINES_TABBED &&
5201 ((GtkCTreeLineStyle) (3 - i)) != GTK_CTREE_LINES_TABBED) ||
5202 (ctree->line_style != GTK_CTREE_LINES_TABBED &&
5203 ((GtkCTreeLineStyle) (3 - i)) == GTK_CTREE_LINES_TABBED))
5204 gtk_ctree_pre_recursive (ctree, NULL, set_background, NULL);
5205 gtk_ctree_set_line_style (ctree, 3 - i);
5209 void ctree_toggle_expander_style (GtkWidget *widget, GtkCTree *ctree)
5213 if (!GTK_WIDGET_MAPPED (widget))
5216 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
5217 (((GtkOptionMenu *)omenu2)->menu_item), i);
5219 gtk_ctree_set_expander_style (ctree, (GtkCTreeExpanderStyle) (3 - i));
5222 void ctree_toggle_justify (GtkWidget *widget, GtkCTree *ctree)
5226 if (!GTK_WIDGET_MAPPED (widget))
5229 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
5230 (((GtkOptionMenu *)omenu3)->menu_item), i);
5232 gtk_clist_set_column_justification (GTK_CLIST (ctree), ctree->tree_column,
5233 (GtkJustification) (1 - i));
5236 void ctree_toggle_sel_mode (GtkWidget *widget, GtkCTree *ctree)
5240 if (!GTK_WIDGET_MAPPED (widget))
5243 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
5244 (((GtkOptionMenu *)omenu4)->menu_item), i);
5246 gtk_clist_set_selection_mode (GTK_CLIST (ctree), (GtkSelectionMode) (3 - i));
5247 after_press (ctree, NULL);
5250 void build_recursive (GtkCTree *ctree, gint cur_depth, gint depth,
5251 gint num_books, gint num_pages, GtkCTreeNode *parent)
5256 GtkCTreeNode *sibling;
5263 for (i = num_pages + num_books; i > num_books; i--)
5266 sprintf (buf1, "Page %02d", (gint) rand() % 100);
5267 sprintf (buf2, "Item %d-%d", cur_depth, i);
5268 sibling = gtk_ctree_insert_node (ctree, parent, sibling, text, 5,
5269 pixmap3, mask3, NULL, NULL,
5272 if (parent && ctree->line_style == GTK_CTREE_LINES_TABBED)
5273 gtk_ctree_node_set_row_style (ctree, sibling,
5274 GTK_CTREE_ROW (parent)->row.style);
5277 if (cur_depth == depth)
5280 for (i = num_books; i > 0; i--)
5285 sprintf (buf1, "Book %02d", (gint) rand() % 100);
5286 sprintf (buf2, "Item %d-%d", cur_depth, i);
5287 sibling = gtk_ctree_insert_node (ctree, parent, sibling, text, 5,
5288 pixmap1, mask1, pixmap2, mask2,
5291 style = gtk_style_new ();
5292 switch (cur_depth % 3)
5295 style->base[GTK_STATE_NORMAL].red = 10000 * (cur_depth % 6);
5296 style->base[GTK_STATE_NORMAL].green = 0;
5297 style->base[GTK_STATE_NORMAL].blue = 65535 - ((i * 10000) % 65535);
5300 style->base[GTK_STATE_NORMAL].red = 10000 * (cur_depth % 6);
5301 style->base[GTK_STATE_NORMAL].green = 65535 - ((i * 10000) % 65535);
5302 style->base[GTK_STATE_NORMAL].blue = 0;
5305 style->base[GTK_STATE_NORMAL].red = 65535 - ((i * 10000) % 65535);
5306 style->base[GTK_STATE_NORMAL].green = 0;
5307 style->base[GTK_STATE_NORMAL].blue = 10000 * (cur_depth % 6);
5310 gtk_ctree_node_set_row_data_full (ctree, sibling, style,
5311 (GtkDestroyNotify) gtk_style_unref);
5313 if (ctree->line_style == GTK_CTREE_LINES_TABBED)
5314 gtk_ctree_node_set_row_style (ctree, sibling, style);
5316 build_recursive (ctree, cur_depth + 1, depth, num_books, num_pages,
5321 void rebuild_tree (GtkWidget *widget, GtkCTree *ctree)
5324 gchar label1[] = "Root";
5325 gchar label2[] = "";
5326 GtkCTreeNode *parent;
5333 d = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin1));
5334 b = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin2));
5335 p = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin3));
5337 n = ((pow (b, d) - 1) / (b - 1)) * (p + 1);
5341 g_print ("%d total items? Try less\n",n);
5345 gtk_clist_freeze (GTK_CLIST (ctree));
5346 gtk_clist_clear (GTK_CLIST (ctree));
5351 parent = gtk_ctree_insert_node (ctree, NULL, NULL, text, 5, pixmap1,
5352 mask1, pixmap2, mask2, FALSE, TRUE);
5354 style = gtk_style_new ();
5355 style->base[GTK_STATE_NORMAL].red = 0;
5356 style->base[GTK_STATE_NORMAL].green = 45000;
5357 style->base[GTK_STATE_NORMAL].blue = 55000;
5358 gtk_ctree_node_set_row_data_full (ctree, parent, style,
5359 (GtkDestroyNotify) gtk_style_unref);
5361 if (ctree->line_style == GTK_CTREE_LINES_TABBED)
5362 gtk_ctree_node_set_row_style (ctree, parent, style);
5364 build_recursive (ctree, 1, d, b, p, parent);
5365 gtk_clist_thaw (GTK_CLIST (ctree));
5366 after_press (ctree, NULL);
5370 ctree_click_column (GtkCTree *ctree, gint column, gpointer data)
5374 clist = GTK_CLIST (ctree);
5376 if (column == clist->sort_column)
5378 if (clist->sort_type == GTK_SORT_ASCENDING)
5379 clist->sort_type = GTK_SORT_DESCENDING;
5381 clist->sort_type = GTK_SORT_ASCENDING;
5384 gtk_clist_set_sort_column (clist, column);
5386 gtk_ctree_sort_recursive (ctree, NULL);
5389 void create_ctree (void)
5391 static GtkWidget *window = NULL;
5392 GtkTooltips *tooltips;
5394 GtkWidget *scrolled_win;
5406 GdkColor transparent = { 0 };
5408 char *title[] = { "Tree" , "Info" };
5411 static OptionMenuItem items1[] =
5413 { "No lines", ctree_toggle_line_style },
5414 { "Solid", ctree_toggle_line_style },
5415 { "Dotted", ctree_toggle_line_style },
5416 { "Tabbed", ctree_toggle_line_style }
5419 static OptionMenuItem items2[] =
5421 { "None", ctree_toggle_expander_style },
5422 { "Square", ctree_toggle_expander_style },
5423 { "Triangle", ctree_toggle_expander_style },
5424 { "Circular", ctree_toggle_expander_style }
5427 static OptionMenuItem items3[] =
5429 { "Left", ctree_toggle_justify },
5430 { "Right", ctree_toggle_justify }
5433 static OptionMenuItem items4[] =
5435 { "Single", ctree_toggle_sel_mode },
5436 { "Browse", ctree_toggle_sel_mode },
5437 { "Multiple", ctree_toggle_sel_mode },
5438 { "Extended", ctree_toggle_sel_mode }
5443 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5445 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5446 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
5449 gtk_window_set_title (GTK_WINDOW (window), "GtkCTree");
5450 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
5452 tooltips = gtk_tooltips_new ();
5453 gtk_object_ref (GTK_OBJECT (tooltips));
5454 gtk_object_sink (GTK_OBJECT (tooltips));
5456 gtk_object_set_data_full (GTK_OBJECT (window), "tooltips", tooltips,
5457 (GtkDestroyNotify) gtk_object_unref);
5459 vbox = gtk_vbox_new (FALSE, 0);
5460 gtk_container_add (GTK_CONTAINER (window), vbox);
5462 hbox = gtk_hbox_new (FALSE, 5);
5463 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
5464 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
5466 label = gtk_label_new ("Depth :");
5467 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
5469 adj = (GtkAdjustment *) gtk_adjustment_new (4, 1, 10, 1, 5, 0);
5470 spin1 = gtk_spin_button_new (adj, 0, 0);
5471 gtk_box_pack_start (GTK_BOX (hbox), spin1, FALSE, TRUE, 5);
5473 label = gtk_label_new ("Books :");
5474 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
5476 adj = (GtkAdjustment *) gtk_adjustment_new (3, 1, 20, 1, 5, 0);
5477 spin2 = gtk_spin_button_new (adj, 0, 0);
5478 gtk_box_pack_start (GTK_BOX (hbox), spin2, FALSE, TRUE, 5);
5480 label = gtk_label_new ("Pages :");
5481 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
5483 adj = (GtkAdjustment *) gtk_adjustment_new (5, 1, 20, 1, 5, 0);
5484 spin3 = gtk_spin_button_new (adj, 0, 0);
5485 gtk_box_pack_start (GTK_BOX (hbox), spin3, FALSE, TRUE, 5);
5487 button = gtk_button_new_with_label ("Close");
5488 gtk_box_pack_end (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5490 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5491 (GtkSignalFunc) gtk_widget_destroy,
5492 GTK_OBJECT(window));
5494 button = gtk_button_new_with_label ("Rebuild Tree");
5495 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5497 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
5498 gtk_container_set_border_width (GTK_CONTAINER (scrolled_win), 5);
5499 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
5500 GTK_POLICY_AUTOMATIC,
5502 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
5504 ctree = GTK_CTREE (gtk_ctree_new_with_titles (2, 0, title));
5505 gtk_container_add (GTK_CONTAINER (scrolled_win), GTK_WIDGET (ctree));
5507 gtk_clist_set_column_auto_resize (GTK_CLIST (ctree), 0, TRUE);
5508 gtk_clist_set_column_width (GTK_CLIST (ctree), 1, 200);
5509 gtk_clist_set_selection_mode (GTK_CLIST (ctree), GTK_SELECTION_EXTENDED);
5510 gtk_ctree_set_line_style (ctree, GTK_CTREE_LINES_DOTTED);
5511 line_style = GTK_CTREE_LINES_DOTTED;
5513 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5514 GTK_SIGNAL_FUNC (rebuild_tree), ctree);
5515 gtk_signal_connect (GTK_OBJECT (ctree), "click_column",
5516 (GtkSignalFunc) ctree_click_column, NULL);
5518 gtk_signal_connect_after (GTK_OBJECT (ctree), "button_press_event",
5519 GTK_SIGNAL_FUNC (after_press), NULL);
5520 gtk_signal_connect_after (GTK_OBJECT (ctree), "button_release_event",
5521 GTK_SIGNAL_FUNC (after_press), NULL);
5522 gtk_signal_connect_after (GTK_OBJECT (ctree), "tree_move",
5523 GTK_SIGNAL_FUNC (after_move), NULL);
5524 gtk_signal_connect_after (GTK_OBJECT (ctree), "end_selection",
5525 GTK_SIGNAL_FUNC (after_press), NULL);
5526 gtk_signal_connect_after (GTK_OBJECT (ctree), "toggle_focus_row",
5527 GTK_SIGNAL_FUNC (after_press), NULL);
5528 gtk_signal_connect_after (GTK_OBJECT (ctree), "select_all",
5529 GTK_SIGNAL_FUNC (after_press), NULL);
5530 gtk_signal_connect_after (GTK_OBJECT (ctree), "unselect_all",
5531 GTK_SIGNAL_FUNC (after_press), NULL);
5532 gtk_signal_connect_after (GTK_OBJECT (ctree), "scroll_vertical",
5533 GTK_SIGNAL_FUNC (after_press), NULL);
5535 bbox = gtk_hbox_new (FALSE, 5);
5536 gtk_container_set_border_width (GTK_CONTAINER (bbox), 5);
5537 gtk_box_pack_start (GTK_BOX (vbox), bbox, FALSE, TRUE, 0);
5539 mbox = gtk_vbox_new (TRUE, 5);
5540 gtk_box_pack_start (GTK_BOX (bbox), mbox, FALSE, TRUE, 0);
5542 label = gtk_label_new ("Row Height :");
5543 gtk_box_pack_start (GTK_BOX (mbox), label, FALSE, FALSE, 0);
5545 label = gtk_label_new ("Indent :");
5546 gtk_box_pack_start (GTK_BOX (mbox), label, FALSE, FALSE, 0);
5548 label = gtk_label_new ("Spacing :");
5549 gtk_box_pack_start (GTK_BOX (mbox), label, FALSE, FALSE, 0);
5551 mbox = gtk_vbox_new (TRUE, 5);
5552 gtk_box_pack_start (GTK_BOX (bbox), mbox, FALSE, TRUE, 0);
5554 adj = (GtkAdjustment *) gtk_adjustment_new (20, 12, 100, 1, 10, 0);
5555 spinner = gtk_spin_button_new (adj, 0, 0);
5556 gtk_box_pack_start (GTK_BOX (mbox), spinner, FALSE, FALSE, 5);
5557 gtk_tooltips_set_tip (tooltips, spinner,
5558 "Row height of list items", NULL);
5559 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
5560 GTK_SIGNAL_FUNC (change_row_height), ctree);
5561 gtk_clist_set_row_height ( GTK_CLIST (ctree), adj->value);
5563 adj = (GtkAdjustment *) gtk_adjustment_new (20, 0, 60, 1, 10, 0);
5564 spinner = gtk_spin_button_new (adj, 0, 0);
5565 gtk_box_pack_start (GTK_BOX (mbox), spinner, FALSE, FALSE, 5);
5566 gtk_tooltips_set_tip (tooltips, spinner, "Tree Indentation.", NULL);
5567 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
5568 GTK_SIGNAL_FUNC (change_indent), ctree);
5570 adj = (GtkAdjustment *) gtk_adjustment_new (5, 0, 60, 1, 10, 0);
5571 spinner = gtk_spin_button_new (adj, 0, 0);
5572 gtk_box_pack_start (GTK_BOX (mbox), spinner, FALSE, FALSE, 5);
5573 gtk_tooltips_set_tip (tooltips, spinner, "Tree Spacing.", NULL);
5574 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
5575 GTK_SIGNAL_FUNC (change_spacing), ctree);
5577 mbox = gtk_vbox_new (TRUE, 5);
5578 gtk_box_pack_start (GTK_BOX (bbox), mbox, FALSE, TRUE, 0);
5580 hbox = gtk_hbox_new (FALSE, 5);
5581 gtk_box_pack_start (GTK_BOX (mbox), hbox, FALSE, FALSE, 0);
5583 button = gtk_button_new_with_label ("Expand All");
5584 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5585 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5586 GTK_SIGNAL_FUNC (expand_all), ctree);
5588 button = gtk_button_new_with_label ("Collapse All");
5589 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5590 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5591 GTK_SIGNAL_FUNC (collapse_all), ctree);
5593 button = gtk_button_new_with_label ("Change Style");
5594 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5595 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5596 GTK_SIGNAL_FUNC (change_style), ctree);
5598 button = gtk_button_new_with_label ("Export Tree");
5599 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5600 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5601 GTK_SIGNAL_FUNC (export_ctree), ctree);
5603 hbox = gtk_hbox_new (FALSE, 5);
5604 gtk_box_pack_start (GTK_BOX (mbox), hbox, FALSE, FALSE, 0);
5606 button = gtk_button_new_with_label ("Select All");
5607 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5608 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5609 GTK_SIGNAL_FUNC (select_all), ctree);
5611 button = gtk_button_new_with_label ("Unselect All");
5612 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5613 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5614 GTK_SIGNAL_FUNC (unselect_all), ctree);
5616 button = gtk_button_new_with_label ("Remove Selection");
5617 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5618 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5619 GTK_SIGNAL_FUNC (remove_selection), ctree);
5621 check = gtk_check_button_new_with_label ("Reorderable");
5622 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
5623 gtk_tooltips_set_tip (tooltips, check,
5624 "Tree items can be reordered by dragging.", NULL);
5625 gtk_signal_connect (GTK_OBJECT (check), "clicked",
5626 GTK_SIGNAL_FUNC (toggle_reorderable), ctree);
5627 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE);
5629 hbox = gtk_hbox_new (TRUE, 5);
5630 gtk_box_pack_start (GTK_BOX (mbox), hbox, FALSE, FALSE, 0);
5632 omenu1 = build_option_menu (items1, 4, 2, ctree);
5633 gtk_box_pack_start (GTK_BOX (hbox), omenu1, FALSE, TRUE, 0);
5634 gtk_tooltips_set_tip (tooltips, omenu1, "The tree's line style.", NULL);
5636 omenu2 = build_option_menu (items2, 4, 1, ctree);
5637 gtk_box_pack_start (GTK_BOX (hbox), omenu2, FALSE, TRUE, 0);
5638 gtk_tooltips_set_tip (tooltips, omenu2, "The tree's expander style.",
5641 omenu3 = build_option_menu (items3, 2, 0, ctree);
5642 gtk_box_pack_start (GTK_BOX (hbox), omenu3, FALSE, TRUE, 0);
5643 gtk_tooltips_set_tip (tooltips, omenu3, "The tree's justification.",
5646 omenu4 = build_option_menu (items4, 4, 3, ctree);
5647 gtk_box_pack_start (GTK_BOX (hbox), omenu4, FALSE, TRUE, 0);
5648 gtk_tooltips_set_tip (tooltips, omenu4, "The list's selection mode.",
5651 gtk_widget_realize (window);
5654 pixmap1 = gdk_pixmap_create_from_xpm_d (window->window, &mask1,
5655 &transparent, book_closed_xpm);
5657 pixmap2 = gdk_pixmap_create_from_xpm_d (window->window, &mask2,
5658 &transparent, book_open_xpm);
5660 pixmap3 = gdk_pixmap_create_from_xpm_d (window->window, &mask3,
5661 &transparent, mini_page_xpm);
5663 gtk_widget_set_usize (GTK_WIDGET (ctree), 0, 300);
5665 frame = gtk_frame_new (NULL);
5666 gtk_container_set_border_width (GTK_CONTAINER (frame), 0);
5667 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_OUT);
5668 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
5670 hbox = gtk_hbox_new (TRUE, 2);
5671 gtk_container_set_border_width (GTK_CONTAINER (hbox), 2);
5672 gtk_container_add (GTK_CONTAINER (frame), hbox);
5674 frame = gtk_frame_new (NULL);
5675 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
5676 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
5678 hbox2 = gtk_hbox_new (FALSE, 0);
5679 gtk_container_set_border_width (GTK_CONTAINER (hbox2), 2);
5680 gtk_container_add (GTK_CONTAINER (frame), hbox2);
5682 label = gtk_label_new ("Books :");
5683 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
5685 sprintf (buf, "%d", books);
5686 book_label = gtk_label_new (buf);
5687 gtk_box_pack_end (GTK_BOX (hbox2), book_label, FALSE, TRUE, 5);
5689 frame = gtk_frame_new (NULL);
5690 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
5691 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
5693 hbox2 = gtk_hbox_new (FALSE, 0);
5694 gtk_container_set_border_width (GTK_CONTAINER (hbox2), 2);
5695 gtk_container_add (GTK_CONTAINER (frame), hbox2);
5697 label = gtk_label_new ("Pages :");
5698 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
5700 sprintf (buf, "%d", pages);
5701 page_label = gtk_label_new (buf);
5702 gtk_box_pack_end (GTK_BOX (hbox2), page_label, FALSE, TRUE, 5);
5704 frame = gtk_frame_new (NULL);
5705 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
5706 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
5708 hbox2 = gtk_hbox_new (FALSE, 0);
5709 gtk_container_set_border_width (GTK_CONTAINER (hbox2), 2);
5710 gtk_container_add (GTK_CONTAINER (frame), hbox2);
5712 label = gtk_label_new ("Selected :");
5713 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
5715 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->selection));
5716 sel_label = gtk_label_new (buf);
5717 gtk_box_pack_end (GTK_BOX (hbox2), sel_label, FALSE, TRUE, 5);
5719 frame = gtk_frame_new (NULL);
5720 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
5721 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
5723 hbox2 = gtk_hbox_new (FALSE, 0);
5724 gtk_container_set_border_width (GTK_CONTAINER (hbox2), 2);
5725 gtk_container_add (GTK_CONTAINER (frame), hbox2);
5727 label = gtk_label_new ("Visible :");
5728 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
5730 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->row_list));
5731 vis_label = gtk_label_new (buf);
5732 gtk_box_pack_end (GTK_BOX (hbox2), vis_label, FALSE, TRUE, 5);
5734 rebuild_tree (NULL, ctree);
5737 if (!GTK_WIDGET_VISIBLE (window))
5738 gtk_widget_show_all (window);
5740 gtk_widget_destroy (window);
5748 color_selection_ok (GtkWidget *w,
5749 GtkColorSelectionDialog *cs)
5751 GtkColorSelection *colorsel;
5754 colorsel=GTK_COLOR_SELECTION(cs->colorsel);
5756 gtk_color_selection_get_color(colorsel,color);
5757 gtk_color_selection_set_color(colorsel,color);
5761 color_selection_changed (GtkWidget *w,
5762 GtkColorSelectionDialog *cs)
5764 GtkColorSelection *colorsel;
5767 colorsel=GTK_COLOR_SELECTION(cs->colorsel);
5768 gtk_color_selection_get_color(colorsel,color);
5772 opacity_toggled_cb (GtkWidget *w,
5773 GtkColorSelectionDialog *cs)
5775 GtkColorSelection *colorsel;
5777 colorsel = GTK_COLOR_SELECTION (cs->colorsel);
5778 gtk_color_selection_set_use_opacity (colorsel,
5779 gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w)));
5783 palette_toggled_cb (GtkWidget *w,
5784 GtkColorSelectionDialog *cs)
5786 GtkColorSelection *colorsel;
5788 colorsel = GTK_COLOR_SELECTION (cs->colorsel);
5789 gtk_color_selection_set_use_palette (colorsel,
5790 gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w)));
5794 create_color_selection (void)
5796 static GtkWidget *window = NULL;
5800 GtkWidget *options_hbox;
5801 GtkWidget *check_button;
5803 window = gtk_color_selection_dialog_new ("color selection dialog");
5805 gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
5807 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5808 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5811 options_hbox = gtk_hbox_new (FALSE, 0);
5812 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), options_hbox, FALSE, FALSE, 0);
5813 gtk_container_set_border_width (GTK_CONTAINER (options_hbox), 10);
5815 check_button = gtk_check_button_new_with_label ("Show Opacity");
5816 gtk_box_pack_start (GTK_BOX (options_hbox), check_button, FALSE, FALSE, 0);
5817 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
5818 GTK_SIGNAL_FUNC (opacity_toggled_cb), window);
5820 check_button = gtk_check_button_new_with_label ("Show Palette");
5821 gtk_box_pack_end (GTK_BOX (options_hbox), check_button, FALSE, FALSE, 0);
5822 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
5823 GTK_SIGNAL_FUNC (palette_toggled_cb), window);
5825 gtk_widget_show_all (options_hbox);
5827 gtk_signal_connect (
5828 GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (window)->colorsel),
5830 GTK_SIGNAL_FUNC(color_selection_changed),
5833 gtk_signal_connect (
5834 GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (window)->ok_button),
5836 GTK_SIGNAL_FUNC(color_selection_ok),
5839 gtk_signal_connect_object (
5840 GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (window)->cancel_button),
5842 GTK_SIGNAL_FUNC(gtk_widget_destroy),
5843 GTK_OBJECT (window));
5846 if (!GTK_WIDGET_VISIBLE (window))
5847 gtk_widget_show (window);
5849 gtk_widget_destroy (window);
5857 file_selection_hide_fileops (GtkWidget *widget,
5858 GtkFileSelection *fs)
5860 gtk_file_selection_hide_fileop_buttons (fs);
5864 file_selection_ok (GtkWidget *w,
5865 GtkFileSelection *fs)
5867 g_print ("%s\n", gtk_file_selection_get_filename (fs));
5868 gtk_widget_destroy (GTK_WIDGET (fs));
5872 create_file_selection (void)
5874 static GtkWidget *window = NULL;
5879 window = gtk_file_selection_new ("file selection dialog");
5881 gtk_file_selection_hide_fileop_buttons (GTK_FILE_SELECTION (window));
5883 gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
5885 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5886 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5889 gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (window)->ok_button),
5890 "clicked", GTK_SIGNAL_FUNC(file_selection_ok),
5892 gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION (window)->cancel_button),
5893 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
5894 GTK_OBJECT (window));
5896 button = gtk_button_new_with_label ("Hide Fileops");
5897 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5898 (GtkSignalFunc) file_selection_hide_fileops,
5900 gtk_box_pack_start (GTK_BOX (GTK_FILE_SELECTION (window)->action_area),
5901 button, FALSE, FALSE, 0);
5902 gtk_widget_show (button);
5904 button = gtk_button_new_with_label ("Show Fileops");
5905 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5906 (GtkSignalFunc) gtk_file_selection_show_fileop_buttons,
5908 gtk_box_pack_start (GTK_BOX (GTK_FILE_SELECTION (window)->action_area),
5909 button, FALSE, FALSE, 0);
5910 gtk_widget_show (button);
5913 if (!GTK_WIDGET_VISIBLE (window))
5914 gtk_widget_show (window);
5916 gtk_widget_destroy (window);
5920 flipping_toggled_cb (GtkWidget *widget, gpointer data)
5922 int state = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
5923 int new_direction = state ? GTK_TEXT_DIR_RTL : GTK_TEXT_DIR_LTR;
5925 gtk_widget_set_default_direction (new_direction);
5929 create_flipping (void)
5931 static GtkWidget *window = NULL;
5932 GtkWidget *check_button, *button;
5936 window = gtk_dialog_new ();
5938 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5939 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5942 gtk_window_set_title (GTK_WINDOW (window), "Bidirectional Flipping");
5944 check_button = gtk_check_button_new_with_label ("Right-to-left global direction");
5945 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
5946 check_button, TRUE, TRUE, 0);
5948 if (gtk_widget_get_default_direction () == GTK_TEXT_DIR_RTL)
5949 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button), TRUE);
5951 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
5952 flipping_toggled_cb, FALSE);
5954 gtk_container_set_border_width (GTK_CONTAINER (check_button), 10);
5956 button = gtk_button_new_with_label ("Close");
5957 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5958 GTK_SIGNAL_FUNC (gtk_widget_destroy), GTK_OBJECT (window));
5959 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
5960 button, TRUE, TRUE, 0);
5963 if (!GTK_WIDGET_VISIBLE (window))
5964 gtk_widget_show_all (window);
5966 gtk_widget_destroy (window);
5974 font_selection_ok (GtkWidget *w,
5975 GtkFontSelectionDialog *fs)
5977 gchar *s = gtk_font_selection_dialog_get_font_name (fs);
5979 g_print ("%s\n", s);
5981 gtk_widget_destroy (GTK_WIDGET (fs));
5985 create_font_selection (void)
5987 static GtkWidget *window = NULL;
5991 window = gtk_font_selection_dialog_new ("Font Selection Dialog");
5993 gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
5995 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5996 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5999 gtk_signal_connect (GTK_OBJECT (GTK_FONT_SELECTION_DIALOG (window)->ok_button),
6000 "clicked", GTK_SIGNAL_FUNC(font_selection_ok),
6001 GTK_FONT_SELECTION_DIALOG (window));
6002 gtk_signal_connect_object (GTK_OBJECT (GTK_FONT_SELECTION_DIALOG (window)->cancel_button),
6003 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
6004 GTK_OBJECT (window));
6007 if (!GTK_WIDGET_VISIBLE (window))
6008 gtk_widget_show (window);
6010 gtk_widget_destroy (window);
6017 static GtkWidget *dialog_window = NULL;
6020 label_toggle (GtkWidget *widget,
6025 *label = gtk_label_new ("Dialog Test");
6026 gtk_signal_connect (GTK_OBJECT (*label),
6028 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
6030 gtk_misc_set_padding (GTK_MISC (*label), 10, 10);
6031 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->vbox),
6032 *label, TRUE, TRUE, 0);
6033 gtk_widget_show (*label);
6036 gtk_widget_destroy (*label);
6040 create_dialog (void)
6042 static GtkWidget *label;
6047 dialog_window = gtk_dialog_new ();
6049 gtk_signal_connect (GTK_OBJECT (dialog_window), "destroy",
6050 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6053 gtk_window_set_title (GTK_WINDOW (dialog_window), "GtkDialog");
6054 gtk_container_set_border_width (GTK_CONTAINER (dialog_window), 0);
6055 gtk_widget_set_usize (dialog_window, 200, 110);
6057 button = gtk_button_new_with_label ("OK");
6058 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6059 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->action_area),
6060 button, TRUE, TRUE, 0);
6061 gtk_widget_grab_default (button);
6062 gtk_widget_show (button);
6064 button = gtk_button_new_with_label ("Toggle");
6065 gtk_signal_connect (GTK_OBJECT (button), "clicked",
6066 GTK_SIGNAL_FUNC (label_toggle),
6068 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6069 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->action_area),
6070 button, TRUE, TRUE, 0);
6071 gtk_widget_show (button);
6076 if (!GTK_WIDGET_VISIBLE (dialog_window))
6077 gtk_widget_show (dialog_window);
6079 gtk_widget_destroy (dialog_window);
6084 static gboolean event_watcher_enter_id = 0;
6085 static gboolean event_watcher_leave_id = 0;
6088 event_watcher (GtkObject *object,
6094 g_print ("Watch: \"%s\" emitted for %s\n",
6095 gtk_signal_name (signal_id),
6096 gtk_type_name (GTK_OBJECT_TYPE (object)));
6102 event_watcher_down (void)
6104 if (event_watcher_enter_id)
6108 signal_id = gtk_signal_lookup ("enter_notify_event", GTK_TYPE_WIDGET);
6109 gtk_signal_remove_emission_hook (signal_id, event_watcher_enter_id);
6110 event_watcher_enter_id = 0;
6111 signal_id = gtk_signal_lookup ("leave_notify_event", GTK_TYPE_WIDGET);
6112 gtk_signal_remove_emission_hook (signal_id, event_watcher_leave_id);
6113 event_watcher_leave_id = 0;
6118 event_watcher_toggle (void)
6120 if (event_watcher_enter_id)
6121 event_watcher_down ();
6126 signal_id = gtk_signal_lookup ("enter_notify_event", GTK_TYPE_WIDGET);
6127 event_watcher_enter_id = gtk_signal_add_emission_hook (signal_id, event_watcher, NULL);
6128 signal_id = gtk_signal_lookup ("leave_notify_event", GTK_TYPE_WIDGET);
6129 event_watcher_leave_id = gtk_signal_add_emission_hook (signal_id, event_watcher, NULL);
6134 create_event_watcher (void)
6140 dialog_window = gtk_dialog_new ();
6142 gtk_signal_connect (GTK_OBJECT (dialog_window), "destroy",
6143 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
6145 gtk_signal_connect (GTK_OBJECT (dialog_window),
6147 GTK_SIGNAL_FUNC (event_watcher_down),
6150 gtk_window_set_title (GTK_WINDOW (dialog_window), "Event Watcher");
6151 gtk_container_set_border_width (GTK_CONTAINER (dialog_window), 0);
6152 gtk_widget_set_usize (dialog_window, 200, 110);
6154 button = gtk_toggle_button_new_with_label ("Activate Watch");
6155 gtk_signal_connect (GTK_OBJECT (button), "clicked",
6156 GTK_SIGNAL_FUNC (event_watcher_toggle),
6158 gtk_container_set_border_width (GTK_CONTAINER (button), 10);
6159 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->vbox),
6160 button, TRUE, TRUE, 0);
6161 gtk_widget_show (button);
6163 button = gtk_button_new_with_label ("Close");
6164 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6165 GTK_SIGNAL_FUNC (gtk_widget_destroy),
6166 (GtkObject*) dialog_window);
6167 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6168 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->action_area),
6169 button, TRUE, TRUE, 0);
6170 gtk_widget_grab_default (button);
6171 gtk_widget_show (button);
6174 if (!GTK_WIDGET_VISIBLE (dialog_window))
6175 gtk_widget_show (dialog_window);
6177 gtk_widget_destroy (dialog_window);
6185 create_range_controls (void)
6187 static GtkWidget *window = NULL;
6191 GtkWidget *scrollbar;
6193 GtkWidget *separator;
6194 GtkObject *adjustment;
6198 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6200 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6201 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6204 gtk_window_set_title (GTK_WINDOW (window), "range controls");
6205 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6208 box1 = gtk_vbox_new (FALSE, 0);
6209 gtk_container_add (GTK_CONTAINER (window), box1);
6210 gtk_widget_show (box1);
6213 box2 = gtk_vbox_new (FALSE, 10);
6214 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6215 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
6216 gtk_widget_show (box2);
6219 adjustment = gtk_adjustment_new (0.0, 0.0, 101.0, 0.1, 1.0, 1.0);
6221 scale = gtk_hscale_new (GTK_ADJUSTMENT (adjustment));
6222 gtk_widget_set_usize (GTK_WIDGET (scale), 150, 30);
6223 gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED);
6224 gtk_scale_set_digits (GTK_SCALE (scale), 1);
6225 gtk_scale_set_draw_value (GTK_SCALE (scale), TRUE);
6226 gtk_box_pack_start (GTK_BOX (box2), scale, TRUE, TRUE, 0);
6227 gtk_widget_show (scale);
6229 scrollbar = gtk_hscrollbar_new (GTK_ADJUSTMENT (adjustment));
6230 gtk_range_set_update_policy (GTK_RANGE (scrollbar),
6231 GTK_UPDATE_CONTINUOUS);
6232 gtk_box_pack_start (GTK_BOX (box2), scrollbar, TRUE, TRUE, 0);
6233 gtk_widget_show (scrollbar);
6236 separator = gtk_hseparator_new ();
6237 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
6238 gtk_widget_show (separator);
6241 box2 = gtk_vbox_new (FALSE, 10);
6242 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6243 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6244 gtk_widget_show (box2);
6247 button = gtk_button_new_with_label ("close");
6248 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6249 GTK_SIGNAL_FUNC(gtk_widget_destroy),
6250 GTK_OBJECT (window));
6251 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6252 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6253 gtk_widget_grab_default (button);
6254 gtk_widget_show (button);
6257 if (!GTK_WIDGET_VISIBLE (window))
6258 gtk_widget_show (window);
6260 gtk_widget_destroy (window);
6268 create_rulers (void)
6270 static GtkWidget *window = NULL;
6276 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6277 gtk_window_set_policy (GTK_WINDOW (window), TRUE, TRUE, FALSE);
6279 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6280 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6283 gtk_window_set_title (GTK_WINDOW (window), "rulers");
6284 gtk_widget_set_usize (window, 300, 300);
6285 gtk_widget_set_events (window,
6286 GDK_POINTER_MOTION_MASK
6287 | GDK_POINTER_MOTION_HINT_MASK);
6288 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6290 table = gtk_table_new (2, 2, FALSE);
6291 gtk_container_add (GTK_CONTAINER (window), table);
6292 gtk_widget_show (table);
6294 ruler = gtk_hruler_new ();
6295 gtk_ruler_set_metric (GTK_RULER (ruler), GTK_CENTIMETERS);
6296 gtk_ruler_set_range (GTK_RULER (ruler), 100, 0, 0, 20);
6298 gtk_signal_connect_object (GTK_OBJECT (window),
6299 "motion_notify_event",
6300 GTK_SIGNAL_FUNC (GTK_WIDGET_GET_CLASS (ruler)->motion_notify_event),
6301 GTK_OBJECT (ruler));
6303 gtk_table_attach (GTK_TABLE (table), ruler, 1, 2, 0, 1,
6304 GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
6305 gtk_widget_show (ruler);
6308 ruler = gtk_vruler_new ();
6309 gtk_ruler_set_range (GTK_RULER (ruler), 5, 15, 0, 20);
6311 gtk_signal_connect_object (GTK_OBJECT (window),
6312 "motion_notify_event",
6313 GTK_SIGNAL_FUNC (GTK_WIDGET_GET_CLASS (ruler)->motion_notify_event),
6314 GTK_OBJECT (ruler));
6316 gtk_table_attach (GTK_TABLE (table), ruler, 0, 1, 1, 2,
6317 GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
6318 gtk_widget_show (ruler);
6321 if (!GTK_WIDGET_VISIBLE (window))
6322 gtk_widget_show (window);
6324 gtk_widget_destroy (window);
6328 text_toggle_editable (GtkWidget *checkbutton,
6331 gtk_text_set_editable(GTK_TEXT(text),
6332 GTK_TOGGLE_BUTTON(checkbutton)->active);
6336 text_toggle_word_wrap (GtkWidget *checkbutton,
6339 gtk_text_set_word_wrap(GTK_TEXT(text),
6340 GTK_TOGGLE_BUTTON(checkbutton)->active);
6347 { { 0, 0x0000, 0x0000, 0x0000 }, "black" },
6348 { { 0, 0xFFFF, 0xFFFF, 0xFFFF }, "white" },
6349 { { 0, 0xFFFF, 0x0000, 0x0000 }, "red" },
6350 { { 0, 0x0000, 0xFFFF, 0x0000 }, "green" },
6351 { { 0, 0x0000, 0x0000, 0xFFFF }, "blue" },
6352 { { 0, 0x0000, 0xFFFF, 0xFFFF }, "cyan" },
6353 { { 0, 0xFFFF, 0x0000, 0xFFFF }, "magenta" },
6354 { { 0, 0xFFFF, 0xFFFF, 0x0000 }, "yellow" }
6357 int ntext_colors = sizeof(text_colors) / sizeof(text_colors[0]);
6363 text_insert_random (GtkWidget *w, GtkText *text)
6367 for (i=0; i<10; i++)
6369 c = 'A' + rand() % ('Z' - 'A');
6370 gtk_text_set_point (text, rand() % gtk_text_get_length (text));
6371 gtk_text_insert (text, NULL, NULL, NULL, &c, 1);
6380 static GtkWidget *window = NULL;
6386 GtkWidget *separator;
6387 GtkWidget *scrolled_window;
6394 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6395 gtk_widget_set_name (window, "text window");
6396 gtk_widget_set_usize (window, 500, 500);
6397 gtk_window_set_policy (GTK_WINDOW(window), TRUE, TRUE, FALSE);
6399 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6400 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6403 gtk_window_set_title (GTK_WINDOW (window), "test");
6404 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6407 box1 = gtk_vbox_new (FALSE, 0);
6408 gtk_container_add (GTK_CONTAINER (window), box1);
6409 gtk_widget_show (box1);
6412 box2 = gtk_vbox_new (FALSE, 10);
6413 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6414 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
6415 gtk_widget_show (box2);
6418 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
6419 gtk_box_pack_start (GTK_BOX (box2), scrolled_window, TRUE, TRUE, 0);
6420 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
6423 gtk_widget_show (scrolled_window);
6425 text = gtk_text_new (NULL, NULL);
6426 gtk_text_set_editable (GTK_TEXT (text), TRUE);
6427 gtk_container_add (GTK_CONTAINER (scrolled_window), text);
6428 gtk_widget_grab_focus (text);
6429 gtk_widget_show (text);
6432 gtk_text_freeze (GTK_TEXT (text));
6434 for (i=0; i<ntext_colors; i++)
6436 gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL,
6437 text_colors[i].name, -1);
6438 gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL, "\t", -1);
6440 for (j=0; j<ntext_colors; j++)
6442 gtk_text_insert (GTK_TEXT (text), NULL,
6443 &text_colors[j].color, &text_colors[i].color,
6446 gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL, "\n", -1);
6449 infile = fopen("testgtk.c", "r");
6454 int nbytes_read, nbytes_alloc;
6457 nbytes_alloc = 1024;
6458 buffer = g_new (char, nbytes_alloc);
6462 if (nbytes_alloc < nbytes_read + 1024)
6465 buffer = g_realloc (buffer, nbytes_alloc);
6467 len = fread (buffer + nbytes_read, 1, 1024, infile);
6473 gtk_text_insert (GTK_TEXT (text), NULL, NULL,
6474 NULL, buffer, nbytes_read);
6479 gtk_text_thaw (GTK_TEXT (text));
6481 hbox = gtk_hbutton_box_new ();
6482 gtk_box_pack_start (GTK_BOX (box2), hbox, FALSE, FALSE, 0);
6483 gtk_widget_show (hbox);
6485 check = gtk_check_button_new_with_label("Editable");
6486 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, FALSE, 0);
6487 gtk_signal_connect (GTK_OBJECT(check), "toggled",
6488 GTK_SIGNAL_FUNC(text_toggle_editable), text);
6489 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), TRUE);
6490 gtk_widget_show (check);
6492 check = gtk_check_button_new_with_label("Wrap Words");
6493 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
6494 gtk_signal_connect (GTK_OBJECT(check), "toggled",
6495 GTK_SIGNAL_FUNC(text_toggle_word_wrap), text);
6496 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), FALSE);
6497 gtk_widget_show (check);
6499 separator = gtk_hseparator_new ();
6500 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
6501 gtk_widget_show (separator);
6504 box2 = gtk_vbox_new (FALSE, 10);
6505 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6506 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6507 gtk_widget_show (box2);
6510 button = gtk_button_new_with_label ("insert random");
6511 gtk_signal_connect (GTK_OBJECT (button), "clicked",
6512 GTK_SIGNAL_FUNC(text_insert_random),
6514 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6515 gtk_widget_show (button);
6517 button = gtk_button_new_with_label ("close");
6518 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6519 GTK_SIGNAL_FUNC(gtk_widget_destroy),
6520 GTK_OBJECT (window));
6521 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6522 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6523 gtk_widget_grab_default (button);
6524 gtk_widget_show (button);
6527 if (!GTK_WIDGET_VISIBLE (window))
6528 gtk_widget_show (window);
6530 gtk_widget_destroy (window);
6537 GdkPixmap *book_open;
6538 GdkPixmap *book_closed;
6539 GdkBitmap *book_open_mask;
6540 GdkBitmap *book_closed_mask;
6541 GtkWidget *sample_notebook;
6544 set_page_pixmaps (GtkNotebook *notebook, gint page_num,
6545 GdkPixmap *pixmap, GdkPixmap *mask)
6547 GtkWidget *page_widget;
6550 page_widget = gtk_notebook_get_nth_page (notebook, page_num);
6552 pixwid = gtk_object_get_data (GTK_OBJECT (page_widget), "tab_pixmap");
6553 gtk_pixmap_set (GTK_PIXMAP (pixwid), pixmap, mask);
6555 pixwid = gtk_object_get_data (GTK_OBJECT (page_widget), "menu_pixmap");
6556 gtk_pixmap_set (GTK_PIXMAP (pixwid), pixmap, mask);
6560 page_switch (GtkWidget *widget, GtkNotebookPage *page, gint page_num)
6562 GtkNotebook *notebook = GTK_NOTEBOOK (widget);
6563 gint old_page_num = gtk_notebook_get_current_page (notebook);
6565 if (page_num == old_page_num)
6568 set_page_pixmaps (notebook, page_num, book_open, book_open_mask);
6570 if (old_page_num != -1)
6571 set_page_pixmaps (notebook, old_page_num, book_closed, book_closed_mask);
6575 tab_fill (GtkToggleButton *button, GtkWidget *child)
6578 GtkPackType pack_type;
6580 gtk_notebook_query_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
6581 &expand, NULL, &pack_type);
6582 gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
6583 expand, button->active, pack_type);
6587 tab_expand (GtkToggleButton *button, GtkWidget *child)
6590 GtkPackType pack_type;
6592 gtk_notebook_query_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
6593 NULL, &fill, &pack_type);
6594 gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
6595 button->active, fill, pack_type);
6599 tab_pack (GtkToggleButton *button, GtkWidget *child)
6605 gtk_notebook_query_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
6606 &expand, &fill, NULL);
6607 gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
6608 expand, fill, button->active);
6612 create_pages (GtkNotebook *notebook, gint start, gint end)
6614 GtkWidget *child = NULL;
6619 GtkWidget *label_box;
6620 GtkWidget *menu_box;
6625 for (i = start; i <= end; i++)
6627 sprintf (buffer, "Page %d", i);
6629 child = gtk_frame_new (buffer);
6630 gtk_container_set_border_width (GTK_CONTAINER (child), 10);
6632 vbox = gtk_vbox_new (TRUE,0);
6633 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
6634 gtk_container_add (GTK_CONTAINER (child), vbox);
6636 hbox = gtk_hbox_new (TRUE,0);
6637 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
6639 button = gtk_check_button_new_with_label ("Fill Tab");
6640 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
6641 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
6642 gtk_signal_connect (GTK_OBJECT (button), "toggled",
6643 GTK_SIGNAL_FUNC (tab_fill), child);
6645 button = gtk_check_button_new_with_label ("Expand Tab");
6646 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
6647 gtk_signal_connect (GTK_OBJECT (button), "toggled",
6648 GTK_SIGNAL_FUNC (tab_expand), child);
6650 button = gtk_check_button_new_with_label ("Pack end");
6651 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
6652 gtk_signal_connect (GTK_OBJECT (button), "toggled",
6653 GTK_SIGNAL_FUNC (tab_pack), child);
6655 button = gtk_button_new_with_label ("Hide Page");
6656 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 5);
6657 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6658 GTK_SIGNAL_FUNC (gtk_widget_hide),
6659 GTK_OBJECT (child));
6661 gtk_widget_show_all (child);
6663 label_box = gtk_hbox_new (FALSE, 0);
6664 pixwid = gtk_pixmap_new (book_closed, book_closed_mask);
6665 gtk_object_set_data (GTK_OBJECT (child), "tab_pixmap", pixwid);
6667 gtk_box_pack_start (GTK_BOX (label_box), pixwid, FALSE, TRUE, 0);
6668 gtk_misc_set_padding (GTK_MISC (pixwid), 3, 1);
6669 label = gtk_label_new (buffer);
6670 gtk_box_pack_start (GTK_BOX (label_box), label, FALSE, TRUE, 0);
6671 gtk_widget_show_all (label_box);
6674 menu_box = gtk_hbox_new (FALSE, 0);
6675 pixwid = gtk_pixmap_new (book_closed, book_closed_mask);
6676 gtk_object_set_data (GTK_OBJECT (child), "menu_pixmap", pixwid);
6678 gtk_box_pack_start (GTK_BOX (menu_box), pixwid, FALSE, TRUE, 0);
6679 gtk_misc_set_padding (GTK_MISC (pixwid), 3, 1);
6680 label = gtk_label_new (buffer);
6681 gtk_box_pack_start (GTK_BOX (menu_box), label, FALSE, TRUE, 0);
6682 gtk_widget_show_all (menu_box);
6684 gtk_notebook_append_page_menu (notebook, child, label_box, menu_box);
6689 rotate_notebook (GtkButton *button,
6690 GtkNotebook *notebook)
6692 gtk_notebook_set_tab_pos (notebook, (notebook->tab_pos + 1) % 4);
6696 show_all_pages (GtkButton *button,
6697 GtkNotebook *notebook)
6699 gtk_container_foreach (GTK_CONTAINER (notebook),
6700 (GtkCallback) gtk_widget_show, NULL);
6704 standard_notebook (GtkButton *button,
6705 GtkNotebook *notebook)
6709 gtk_notebook_set_show_tabs (notebook, TRUE);
6710 gtk_notebook_set_show_border (notebook, TRUE);
6711 gtk_notebook_set_scrollable (notebook, FALSE);
6712 if (g_list_length (notebook->children) == 15)
6713 for (i = 0; i < 10; i++)
6714 gtk_notebook_remove_page (notebook, 5);
6718 notabs_notebook (GtkButton *button,
6719 GtkNotebook *notebook)
6723 gtk_notebook_set_show_tabs (notebook, FALSE);
6724 gtk_notebook_set_show_border (notebook, TRUE);
6725 if (g_list_length (notebook->children) == 15)
6726 for (i = 0; i < 10; i++)
6727 gtk_notebook_remove_page (notebook, 5);
6731 borderless_notebook (GtkButton *button,
6732 GtkNotebook *notebook)
6736 gtk_notebook_set_show_tabs (notebook, FALSE);
6737 gtk_notebook_set_show_border (notebook, FALSE);
6738 if (g_list_length (notebook->children) == 15)
6739 for (i = 0; i < 10; i++)
6740 gtk_notebook_remove_page (notebook, 5);
6744 scrollable_notebook (GtkButton *button,
6745 GtkNotebook *notebook)
6747 gtk_notebook_set_show_tabs (notebook, TRUE);
6748 gtk_notebook_set_show_border (notebook, TRUE);
6749 gtk_notebook_set_scrollable (notebook, TRUE);
6750 if (g_list_length (notebook->children) == 5)
6751 create_pages (notebook, 6, 15);
6755 notebook_popup (GtkToggleButton *button,
6756 GtkNotebook *notebook)
6759 gtk_notebook_popup_enable (notebook);
6761 gtk_notebook_popup_disable (notebook);
6765 notebook_homogeneous (GtkToggleButton *button,
6766 GtkNotebook *notebook)
6768 gtk_notebook_set_homogeneous_tabs (notebook, button->active);
6772 create_notebook (void)
6774 static GtkWidget *window = NULL;
6778 GtkWidget *separator;
6780 GdkColor *transparent = NULL;
6783 static OptionMenuItem items[] =
6785 { "Standard", standard_notebook },
6786 { "No tabs", notabs_notebook },
6787 { "Borderless", borderless_notebook },
6788 { "Scrollable", scrollable_notebook },
6793 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6795 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6796 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6799 gtk_window_set_title (GTK_WINDOW (window), "notebook");
6800 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6802 box1 = gtk_vbox_new (FALSE, 0);
6803 gtk_container_add (GTK_CONTAINER (window), box1);
6805 sample_notebook = gtk_notebook_new ();
6806 gtk_signal_connect (GTK_OBJECT (sample_notebook), "switch_page",
6807 GTK_SIGNAL_FUNC (page_switch), NULL);
6808 gtk_notebook_set_tab_pos (GTK_NOTEBOOK (sample_notebook), GTK_POS_TOP);
6809 gtk_box_pack_start (GTK_BOX (box1), sample_notebook, TRUE, TRUE, 0);
6810 gtk_container_set_border_width (GTK_CONTAINER (sample_notebook), 10);
6812 gtk_widget_realize (sample_notebook);
6814 book_open = gdk_pixmap_create_from_xpm_d (sample_notebook->window,
6819 book_closed = gdk_pixmap_create_from_xpm_d (sample_notebook->window,
6824 create_pages (GTK_NOTEBOOK (sample_notebook), 1, 5);
6826 separator = gtk_hseparator_new ();
6827 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 10);
6829 box2 = gtk_hbox_new (FALSE, 5);
6830 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6831 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6833 button = gtk_check_button_new_with_label ("popup menu");
6834 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, FALSE, 0);
6835 gtk_signal_connect (GTK_OBJECT(button), "clicked",
6836 GTK_SIGNAL_FUNC (notebook_popup),
6837 GTK_OBJECT (sample_notebook));
6839 button = gtk_check_button_new_with_label ("homogeneous tabs");
6840 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, FALSE, 0);
6841 gtk_signal_connect (GTK_OBJECT(button), "clicked",
6842 GTK_SIGNAL_FUNC (notebook_homogeneous),
6843 GTK_OBJECT (sample_notebook));
6845 box2 = gtk_hbox_new (FALSE, 5);
6846 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6847 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6849 label = gtk_label_new ("Notebook Style :");
6850 gtk_box_pack_start (GTK_BOX (box2), label, FALSE, TRUE, 0);
6852 omenu = build_option_menu (items, G_N_ELEMENTS (items), 0, sample_notebook);
6853 gtk_box_pack_start (GTK_BOX (box2), omenu, FALSE, TRUE, 0);
6855 button = gtk_button_new_with_label ("Show all Pages");
6856 gtk_box_pack_start (GTK_BOX (box2), button, FALSE, TRUE, 0);
6857 gtk_signal_connect (GTK_OBJECT (button), "clicked",
6858 GTK_SIGNAL_FUNC (show_all_pages), sample_notebook);
6860 box2 = gtk_hbox_new (TRUE, 10);
6861 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6862 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6864 button = gtk_button_new_with_label ("prev");
6865 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6866 GTK_SIGNAL_FUNC (gtk_notebook_prev_page),
6867 GTK_OBJECT (sample_notebook));
6868 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6870 button = gtk_button_new_with_label ("next");
6871 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6872 GTK_SIGNAL_FUNC (gtk_notebook_next_page),
6873 GTK_OBJECT (sample_notebook));
6874 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6876 button = gtk_button_new_with_label ("rotate");
6877 gtk_signal_connect (GTK_OBJECT (button), "clicked",
6878 GTK_SIGNAL_FUNC (rotate_notebook), sample_notebook);
6879 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6881 separator = gtk_hseparator_new ();
6882 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 5);
6884 button = gtk_button_new_with_label ("close");
6885 gtk_container_set_border_width (GTK_CONTAINER (button), 5);
6886 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6887 GTK_SIGNAL_FUNC (gtk_widget_destroy),
6888 GTK_OBJECT (window));
6889 gtk_box_pack_start (GTK_BOX (box1), button, FALSE, FALSE, 0);
6890 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6891 gtk_widget_grab_default (button);
6894 if (!GTK_WIDGET_VISIBLE (window))
6895 gtk_widget_show_all (window);
6897 gtk_widget_destroy (window);
6905 toggle_resize (GtkWidget *widget, GtkWidget *child)
6907 GtkPaned *paned = GTK_PANED (child->parent);
6908 gboolean is_child1 = (child == paned->child1);
6909 gboolean resize, shrink;
6911 resize = is_child1 ? paned->child1_resize : paned->child2_resize;
6912 shrink = is_child1 ? paned->child1_shrink : paned->child2_shrink;
6914 gtk_widget_ref (child);
6915 gtk_container_remove (GTK_CONTAINER (child->parent), child);
6917 gtk_paned_pack1 (paned, child, !resize, shrink);
6919 gtk_paned_pack2 (paned, child, !resize, shrink);
6920 gtk_widget_unref (child);
6924 toggle_shrink (GtkWidget *widget, GtkWidget *child)
6926 GtkPaned *paned = GTK_PANED (child->parent);
6927 gboolean is_child1 = (child == paned->child1);
6928 gboolean resize, shrink;
6930 resize = is_child1 ? paned->child1_resize : paned->child2_resize;
6931 shrink = is_child1 ? paned->child1_shrink : paned->child2_shrink;
6933 gtk_widget_ref (child);
6934 gtk_container_remove (GTK_CONTAINER (child->parent), child);
6936 gtk_paned_pack1 (paned, child, resize, !shrink);
6938 gtk_paned_pack2 (paned, child, resize, !shrink);
6939 gtk_widget_unref (child);
6943 create_pane_options (GtkPaned *paned,
6944 const gchar *frame_label,
6945 const gchar *label1,
6946 const gchar *label2)
6951 GtkWidget *check_button;
6953 frame = gtk_frame_new (frame_label);
6954 gtk_container_set_border_width (GTK_CONTAINER (frame), 4);
6956 table = gtk_table_new (3, 2, 4);
6957 gtk_container_add (GTK_CONTAINER (frame), table);
6959 label = gtk_label_new (label1);
6960 gtk_table_attach_defaults (GTK_TABLE (table), label,
6963 check_button = gtk_check_button_new_with_label ("Resize");
6964 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
6966 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
6967 GTK_SIGNAL_FUNC (toggle_resize),
6970 check_button = gtk_check_button_new_with_label ("Shrink");
6971 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
6973 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
6975 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
6976 GTK_SIGNAL_FUNC (toggle_shrink),
6979 label = gtk_label_new (label2);
6980 gtk_table_attach_defaults (GTK_TABLE (table), label,
6983 check_button = gtk_check_button_new_with_label ("Resize");
6984 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
6986 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
6988 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
6989 GTK_SIGNAL_FUNC (toggle_resize),
6992 check_button = gtk_check_button_new_with_label ("Shrink");
6993 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
6995 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
6997 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
6998 GTK_SIGNAL_FUNC (toggle_shrink),
7007 static GtkWidget *window = NULL;
7016 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7018 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7019 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7022 gtk_window_set_title (GTK_WINDOW (window), "Panes");
7023 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
7025 vbox = gtk_vbox_new (FALSE, 0);
7026 gtk_container_add (GTK_CONTAINER (window), vbox);
7028 vpaned = gtk_vpaned_new ();
7029 gtk_box_pack_start (GTK_BOX (vbox), vpaned, TRUE, TRUE, 0);
7030 gtk_container_set_border_width (GTK_CONTAINER(vpaned), 5);
7032 hpaned = gtk_hpaned_new ();
7033 gtk_paned_add1 (GTK_PANED (vpaned), hpaned);
7035 frame = gtk_frame_new (NULL);
7036 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
7037 gtk_widget_set_usize (frame, 60, 60);
7038 gtk_paned_add1 (GTK_PANED (hpaned), frame);
7040 button = gtk_button_new_with_label ("Hi there");
7041 gtk_container_add (GTK_CONTAINER(frame), button);
7043 frame = gtk_frame_new (NULL);
7044 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
7045 gtk_widget_set_usize (frame, 80, 60);
7046 gtk_paned_add2 (GTK_PANED (hpaned), frame);
7048 frame = gtk_frame_new (NULL);
7049 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
7050 gtk_widget_set_usize (frame, 60, 80);
7051 gtk_paned_add2 (GTK_PANED (vpaned), frame);
7053 /* Now create toggle buttons to control sizing */
7055 gtk_box_pack_start (GTK_BOX (vbox),
7056 create_pane_options (GTK_PANED (hpaned),
7062 gtk_box_pack_start (GTK_BOX (vbox),
7063 create_pane_options (GTK_PANED (vpaned),
7069 gtk_widget_show_all (vbox);
7072 if (!GTK_WIDGET_VISIBLE (window))
7073 gtk_widget_show (window);
7075 gtk_widget_destroy (window);
7084 dnd_drop_destroy_popup (GtkWidget *widget, GtkWindow **window)
7086 if(GTK_IS_BUTTON(widget)) /* I.e. they clicked the close button */
7087 gtk_widget_destroy(GTK_WIDGET(*window));
7089 gtk_grab_remove(GTK_WIDGET(*window));
7097 dnd_drop (GtkWidget *button, GdkEvent *event)
7099 static GtkWidget *window = NULL;
7100 GtkWidget *vbox, *lbl, *btn;
7103 /* DND doesn't obey gtk_grab's, so check if we're already displaying
7104 * drop modal dialog first
7109 window = gtk_window_new(GTK_WINDOW_DIALOG);
7110 gtk_container_set_border_width (GTK_CONTAINER(window), 10);
7112 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7113 GTK_SIGNAL_FUNC(dnd_drop_destroy_popup),
7115 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
7116 GTK_SIGNAL_FUNC(gtk_false),
7119 vbox = gtk_vbox_new(FALSE, 5);
7121 /* Display message that we got from drop source */
7122 msg = g_malloc(strlen(event->dropdataavailable.data)
7123 + strlen(event->dropdataavailable.data_type) + 100);
7124 sprintf(msg, "Drop data of type %s was:\n\n%s",
7125 event->dropdataavailable.data_type,
7126 (char *)event->dropdataavailable.data);
7127 lbl = gtk_label_new(msg);
7128 gtk_label_set_justify(GTK_LABEL(lbl), GTK_JUSTIFY_FILL);
7130 gtk_widget_show(lbl);
7131 gtk_box_pack_start_defaults(GTK_BOX(vbox), lbl);
7133 /* Provide an obvious way out of this heinousness */
7134 btn = gtk_button_new_with_label("Continue with life in\nspite of this oppression");
7135 gtk_signal_connect_object (GTK_OBJECT (btn), "clicked",
7136 GTK_SIGNAL_FUNC(gtk_widget_destroy),
7137 GTK_OBJECT (window));
7138 gtk_widget_show(btn);
7139 gtk_box_pack_start_defaults(GTK_BOX(vbox), btn);
7141 gtk_container_add(GTK_CONTAINER(window), vbox);
7143 gtk_widget_show(vbox);
7144 gtk_grab_add(window);
7145 gtk_widget_show(window);
7149 dnd_drag_request (GtkWidget *button, GdkEvent *event)
7151 #define DND_STRING "Bill Gates demands royalties for\nyour use of his innovation."
7152 gtk_widget_dnd_data_set (button, event, DND_STRING, strlen(DND_STRING) + 1);
7158 static GtkWidget *window = NULL;
7164 GtkWidget *separator;
7166 /* For clarity... */
7167 char *possible_drag_types[] = {"text/plain"};
7168 char *accepted_drop_types[] = {"text/plain"};
7170 static GtkWidget *drag_icon = NULL;
7171 static GtkWidget *drop_icon = NULL;
7175 GdkPoint hotspot = {5,5};
7179 drag_icon = shape_create_icon ("Modeller.xpm",
7180 440, 140, 0,0, GTK_WINDOW_POPUP);
7182 gtk_signal_connect (GTK_OBJECT (drag_icon), "destroy",
7183 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7186 gtk_widget_hide (drag_icon);
7191 drop_icon = shape_create_icon ("3DRings.xpm",
7192 440, 140, 0,0, GTK_WINDOW_POPUP);
7194 gtk_signal_connect (GTK_OBJECT (drop_icon), "destroy",
7195 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7198 gtk_widget_hide (drop_icon);
7201 gdk_dnd_set_drag_shape(drag_icon->window,
7206 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7208 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7209 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7212 gtk_window_set_title (GTK_WINDOW (window), "Drag -N- Drop");
7213 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
7215 box1 = gtk_vbox_new (FALSE, 0);
7216 gtk_container_add (GTK_CONTAINER (window), box1);
7217 gtk_widget_show (box1);
7219 box2 = gtk_hbox_new (FALSE, 5);
7220 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
7221 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
7222 gtk_widget_show (box2);
7224 frame = gtk_frame_new ("Drag");
7225 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
7226 gtk_widget_show (frame);
7228 box3 = gtk_vbox_new (FALSE, 5);
7229 gtk_container_set_border_width (GTK_CONTAINER (box3), 5);
7230 gtk_container_add (GTK_CONTAINER (frame), box3);
7231 gtk_widget_show (box3);
7236 button = gtk_button_new_with_label ("Drag me!");
7237 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
7238 gtk_widget_show (button);
7241 * currently, the widget has to be realized to
7242 * set dnd on it, this needs to change
7244 gtk_widget_realize (button);
7245 gtk_signal_connect (GTK_OBJECT (button),
7246 "drag_request_event",
7247 GTK_SIGNAL_FUNC(dnd_drag_request),
7250 gtk_widget_dnd_drag_set (button, TRUE, possible_drag_types, 1);
7253 frame = gtk_frame_new ("Drop");
7254 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
7255 gtk_widget_show (frame);
7257 box3 = gtk_vbox_new (FALSE, 5);
7258 gtk_container_set_border_width (GTK_CONTAINER (box3), 5);
7259 gtk_container_add (GTK_CONTAINER (frame), box3);
7260 gtk_widget_show (box3);
7266 button = gtk_button_new_with_label ("To");
7267 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
7268 gtk_widget_show (button);
7270 gtk_widget_realize (button);
7271 gtk_signal_connect (GTK_OBJECT (button),
7272 "drop_data_available_event",
7273 GTK_SIGNAL_FUNC(dnd_drop),
7276 gtk_widget_dnd_drop_set (button, TRUE, accepted_drop_types, 1, FALSE);
7279 separator = gtk_hseparator_new ();
7280 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
7281 gtk_widget_show (separator);
7284 box2 = gtk_vbox_new (FALSE, 10);
7285 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
7286 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
7287 gtk_widget_show (box2);
7290 button = gtk_button_new_with_label ("close");
7292 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7293 GTK_SIGNAL_FUNC(gtk_widget_destroy),
7294 GTK_OBJECT (window));
7296 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
7297 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7298 gtk_widget_grab_default (button);
7299 gtk_widget_show (button);
7302 if (!GTK_WIDGET_VISIBLE (window))
7303 gtk_widget_show (window);
7305 gtk_widget_destroy (window);
7313 typedef struct _cursoroffset {gint x,y;} CursorOffset;
7316 shape_pressed (GtkWidget *widget, GdkEventButton *event)
7320 /* ignore double and triple click */
7321 if (event->type != GDK_BUTTON_PRESS)
7324 p = gtk_object_get_user_data (GTK_OBJECT(widget));
7325 p->x = (int) event->x;
7326 p->y = (int) event->y;
7328 gtk_grab_add (widget);
7329 gdk_pointer_grab (widget->window, TRUE,
7330 GDK_BUTTON_RELEASE_MASK |
7331 GDK_BUTTON_MOTION_MASK |
7332 GDK_POINTER_MOTION_HINT_MASK,
7337 shape_released (GtkWidget *widget)
7339 gtk_grab_remove (widget);
7340 gdk_pointer_ungrab (0);
7344 shape_motion (GtkWidget *widget,
7345 GdkEventMotion *event)
7349 GdkModifierType mask;
7351 p = gtk_object_get_user_data (GTK_OBJECT (widget));
7354 * Can't use event->x / event->y here
7355 * because I need absolute coordinates.
7357 gdk_window_get_pointer (NULL, &xp, &yp, &mask);
7358 gtk_widget_set_uposition (widget, xp - p->x, yp - p->y);
7362 shape_create_icon (char *xpm_file,
7372 CursorOffset* icon_pos;
7374 GdkBitmap *gdk_pixmap_mask;
7375 GdkPixmap *gdk_pixmap;
7378 style = gtk_widget_get_default_style ();
7379 gc = style->black_gc;
7382 * GDK_WINDOW_TOPLEVEL works also, giving you a title border
7384 window = gtk_window_new (window_type);
7386 fixed = gtk_fixed_new ();
7387 gtk_widget_set_usize (fixed, 100,100);
7388 gtk_container_add (GTK_CONTAINER (window), fixed);
7389 gtk_widget_show (fixed);
7391 gtk_widget_set_events (window,
7392 gtk_widget_get_events (window) |
7393 GDK_BUTTON_MOTION_MASK |
7394 GDK_POINTER_MOTION_HINT_MASK |
7395 GDK_BUTTON_PRESS_MASK);
7397 gtk_widget_realize (window);
7398 gdk_pixmap = gdk_pixmap_create_from_xpm (window->window, &gdk_pixmap_mask,
7399 &style->bg[GTK_STATE_NORMAL],
7402 pixmap = gtk_pixmap_new (gdk_pixmap, gdk_pixmap_mask);
7403 gtk_fixed_put (GTK_FIXED (fixed), pixmap, px,py);
7404 gtk_widget_show (pixmap);
7406 gtk_widget_shape_combine_mask (window, gdk_pixmap_mask, px, py);
7408 gdk_drawable_unref (gdk_pixmap_mask);
7409 gdk_drawable_unref (gdk_pixmap);
7411 gtk_signal_connect (GTK_OBJECT (window), "button_press_event",
7412 GTK_SIGNAL_FUNC (shape_pressed),NULL);
7413 gtk_signal_connect (GTK_OBJECT (window), "button_release_event",
7414 GTK_SIGNAL_FUNC (shape_released),NULL);
7415 gtk_signal_connect (GTK_OBJECT (window), "motion_notify_event",
7416 GTK_SIGNAL_FUNC (shape_motion),NULL);
7418 icon_pos = g_new (CursorOffset, 1);
7419 gtk_object_set_user_data(GTK_OBJECT(window), icon_pos);
7421 gtk_widget_set_uposition (window, x, y);
7422 gtk_widget_show (window);
7428 create_shapes (void)
7430 /* Variables used by the Drag/Drop and Shape Window demos */
7431 static GtkWidget *modeller = NULL;
7432 static GtkWidget *sheets = NULL;
7433 static GtkWidget *rings = NULL;
7435 if (!(file_exists ("Modeller.xpm") &&
7436 file_exists ("FilesQueue.xpm") &&
7437 file_exists ("3DRings.xpm")))
7443 modeller = shape_create_icon ("Modeller.xpm",
7444 440, 140, 0,0, GTK_WINDOW_POPUP);
7446 gtk_signal_connect (GTK_OBJECT (modeller), "destroy",
7447 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7451 gtk_widget_destroy (modeller);
7455 sheets = shape_create_icon ("FilesQueue.xpm",
7456 580, 170, 0,0, GTK_WINDOW_POPUP);
7458 gtk_signal_connect (GTK_OBJECT (sheets), "destroy",
7459 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7464 gtk_widget_destroy (sheets);
7468 rings = shape_create_icon ("3DRings.xpm",
7469 460, 270, 25,25, GTK_WINDOW_TOPLEVEL);
7471 gtk_signal_connect (GTK_OBJECT (rings), "destroy",
7472 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7476 gtk_widget_destroy (rings);
7484 create_wmhints (void)
7486 static GtkWidget *window = NULL;
7488 GtkWidget *separator;
7497 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7499 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7500 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7503 gtk_window_set_title (GTK_WINDOW (window), "WM Hints");
7504 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
7506 gtk_widget_realize (window);
7508 circles = gdk_bitmap_create_from_data (window->window,
7512 gdk_window_set_icon (window->window, NULL,
7515 gdk_window_set_icon_name (window->window, "WMHints Test Icon");
7517 gdk_window_set_decorations (window->window, GDK_DECOR_ALL | GDK_DECOR_MENU);
7518 gdk_window_set_functions (window->window, GDK_FUNC_ALL | GDK_FUNC_RESIZE);
7520 box1 = gtk_vbox_new (FALSE, 0);
7521 gtk_container_add (GTK_CONTAINER (window), box1);
7522 gtk_widget_show (box1);
7524 label = gtk_label_new ("Try iconizing me!");
7525 gtk_widget_set_usize (label, 150, 50);
7526 gtk_box_pack_start (GTK_BOX (box1), label, TRUE, TRUE, 0);
7527 gtk_widget_show (label);
7530 separator = gtk_hseparator_new ();
7531 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
7532 gtk_widget_show (separator);
7535 box2 = gtk_vbox_new (FALSE, 10);
7536 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
7537 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
7538 gtk_widget_show (box2);
7541 button = gtk_button_new_with_label ("close");
7543 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7544 GTK_SIGNAL_FUNC(gtk_widget_destroy),
7545 GTK_OBJECT (window));
7547 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
7548 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7549 gtk_widget_grab_default (button);
7550 gtk_widget_show (button);
7553 if (!GTK_WIDGET_VISIBLE (window))
7554 gtk_widget_show (window);
7556 gtk_widget_destroy (window);
7563 typedef struct _ProgressData {
7566 GtkWidget *block_spin;
7567 GtkWidget *x_align_spin;
7568 GtkWidget *y_align_spin;
7569 GtkWidget *step_spin;
7570 GtkWidget *act_blocks_spin;
7579 progress_timeout (gpointer data)
7584 adj = GTK_PROGRESS (data)->adjustment;
7586 new_val = adj->value + 1;
7587 if (new_val > adj->upper)
7588 new_val = adj->lower;
7590 gtk_progress_set_value (GTK_PROGRESS (data), new_val);
7596 destroy_progress (GtkWidget *widget,
7597 ProgressData **pdata)
7599 gtk_timeout_remove ((*pdata)->timer);
7600 (*pdata)->timer = 0;
7601 (*pdata)->window = NULL;
7607 progressbar_toggle_orientation (GtkWidget *widget, ProgressData *pdata)
7611 if (!GTK_WIDGET_MAPPED (widget))
7614 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
7615 (((GtkOptionMenu *)(pdata->omenu1))->menu_item), i);
7617 gtk_progress_bar_set_orientation (GTK_PROGRESS_BAR (pdata->pbar),
7618 (GtkProgressBarOrientation) (3-i));
7622 toggle_show_text (GtkWidget *widget, ProgressData *pdata)
7624 gtk_progress_set_show_text (GTK_PROGRESS (pdata->pbar),
7625 GTK_TOGGLE_BUTTON (widget)->active);
7626 gtk_widget_set_sensitive (pdata->entry, GTK_TOGGLE_BUTTON (widget)->active);
7627 gtk_widget_set_sensitive (pdata->x_align_spin,
7628 GTK_TOGGLE_BUTTON (widget)->active);
7629 gtk_widget_set_sensitive (pdata->y_align_spin,
7630 GTK_TOGGLE_BUTTON (widget)->active);
7634 progressbar_toggle_bar_style (GtkWidget *widget, ProgressData *pdata)
7638 if (!GTK_WIDGET_MAPPED (widget))
7641 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
7642 (((GtkOptionMenu *)(pdata->omenu2))->menu_item), i);
7647 gtk_widget_set_sensitive (pdata->block_spin, TRUE);
7649 gtk_widget_set_sensitive (pdata->block_spin, FALSE);
7651 gtk_progress_bar_set_bar_style (GTK_PROGRESS_BAR (pdata->pbar),
7652 (GtkProgressBarStyle) i);
7656 progress_value_changed (GtkAdjustment *adj, ProgressData *pdata)
7660 if (GTK_PROGRESS (pdata->pbar)->activity_mode)
7661 sprintf (buf, "???");
7663 sprintf (buf, "%.0f%%", 100 *
7664 gtk_progress_get_current_percentage (GTK_PROGRESS (pdata->pbar)));
7665 gtk_label_set_text (GTK_LABEL (pdata->label), buf);
7669 adjust_blocks (GtkAdjustment *adj, ProgressData *pdata)
7671 gtk_progress_set_percentage (GTK_PROGRESS (pdata->pbar), 0);
7672 gtk_progress_bar_set_discrete_blocks (GTK_PROGRESS_BAR (pdata->pbar),
7673 gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (pdata->block_spin)));
7677 adjust_step (GtkAdjustment *adj, ProgressData *pdata)
7679 gtk_progress_bar_set_activity_step (GTK_PROGRESS_BAR (pdata->pbar),
7680 gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (pdata->step_spin)));
7684 adjust_act_blocks (GtkAdjustment *adj, ProgressData *pdata)
7686 gtk_progress_bar_set_activity_blocks (GTK_PROGRESS_BAR (pdata->pbar),
7687 gtk_spin_button_get_value_as_int
7688 (GTK_SPIN_BUTTON (pdata->act_blocks_spin)));
7692 adjust_align (GtkAdjustment *adj, ProgressData *pdata)
7694 gtk_progress_set_text_alignment (GTK_PROGRESS (pdata->pbar),
7695 gtk_spin_button_get_value_as_float
7696 (GTK_SPIN_BUTTON (pdata->x_align_spin)),
7697 gtk_spin_button_get_value_as_float
7698 (GTK_SPIN_BUTTON (pdata->y_align_spin)));
7702 toggle_activity_mode (GtkWidget *widget, ProgressData *pdata)
7704 gtk_progress_set_activity_mode (GTK_PROGRESS (pdata->pbar),
7705 GTK_TOGGLE_BUTTON (widget)->active);
7706 gtk_widget_set_sensitive (pdata->step_spin,
7707 GTK_TOGGLE_BUTTON (widget)->active);
7708 gtk_widget_set_sensitive (pdata->act_blocks_spin,
7709 GTK_TOGGLE_BUTTON (widget)->active);
7713 entry_changed (GtkWidget *widget, ProgressData *pdata)
7715 gtk_progress_set_format_string (GTK_PROGRESS (pdata->pbar),
7716 gtk_entry_get_text (GTK_ENTRY (pdata->entry)));
7720 create_progress_bar (void)
7732 static ProgressData *pdata = NULL;
7734 static OptionMenuItem items1[] =
7736 { "Left-Right", progressbar_toggle_orientation },
7737 { "Right-Left", progressbar_toggle_orientation },
7738 { "Bottom-Top", progressbar_toggle_orientation },
7739 { "Top-Bottom", progressbar_toggle_orientation }
7742 static OptionMenuItem items2[] =
7744 { "Continuous", progressbar_toggle_bar_style },
7745 { "Discrete", progressbar_toggle_bar_style }
7749 pdata = g_new0 (ProgressData, 1);
7753 pdata->window = gtk_dialog_new ();
7755 gtk_window_set_policy (GTK_WINDOW (pdata->window), FALSE, FALSE, TRUE);
7757 gtk_signal_connect (GTK_OBJECT (pdata->window), "destroy",
7758 GTK_SIGNAL_FUNC (destroy_progress),
7763 gtk_window_set_title (GTK_WINDOW (pdata->window), "GtkProgressBar");
7764 gtk_container_set_border_width (GTK_CONTAINER (pdata->window), 0);
7766 vbox = gtk_vbox_new (FALSE, 5);
7767 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
7768 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (pdata->window)->vbox),
7769 vbox, FALSE, TRUE, 0);
7771 frame = gtk_frame_new ("Progress");
7772 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
7774 vbox2 = gtk_vbox_new (FALSE, 5);
7775 gtk_container_add (GTK_CONTAINER (frame), vbox2);
7777 align = gtk_alignment_new (0.5, 0.5, 0, 0);
7778 gtk_box_pack_start (GTK_BOX (vbox2), align, FALSE, FALSE, 5);
7780 adj = (GtkAdjustment *) gtk_adjustment_new (0, 1, 300, 0, 0, 0);
7781 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
7782 GTK_SIGNAL_FUNC (progress_value_changed), pdata);
7784 pdata->pbar = gtk_progress_bar_new_with_adjustment (adj);
7785 gtk_progress_set_format_string (GTK_PROGRESS (pdata->pbar),
7786 "%v from [%l,%u] (=%p%%)");
7787 gtk_container_add (GTK_CONTAINER (align), pdata->pbar);
7788 pdata->timer = gtk_timeout_add (100, progress_timeout, pdata->pbar);
7790 align = gtk_alignment_new (0.5, 0.5, 0, 0);
7791 gtk_box_pack_start (GTK_BOX (vbox2), align, FALSE, FALSE, 5);
7793 hbox = gtk_hbox_new (FALSE, 5);
7794 gtk_container_add (GTK_CONTAINER (align), hbox);
7795 label = gtk_label_new ("Label updated by user :");
7796 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
7797 pdata->label = gtk_label_new ("");
7798 gtk_box_pack_start (GTK_BOX (hbox), pdata->label, FALSE, TRUE, 0);
7800 frame = gtk_frame_new ("Options");
7801 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
7803 vbox2 = gtk_vbox_new (FALSE, 5);
7804 gtk_container_add (GTK_CONTAINER (frame), vbox2);
7806 tab = gtk_table_new (7, 2, FALSE);
7807 gtk_box_pack_start (GTK_BOX (vbox2), tab, FALSE, TRUE, 0);
7809 label = gtk_label_new ("Orientation :");
7810 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 0, 1,
7811 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7813 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
7815 pdata->omenu1 = build_option_menu (items1, 4, 0, pdata);
7816 hbox = gtk_hbox_new (FALSE, 0);
7817 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 0, 1,
7818 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7820 gtk_box_pack_start (GTK_BOX (hbox), pdata->omenu1, TRUE, TRUE, 0);
7822 check = gtk_check_button_new_with_label ("Show text");
7823 gtk_signal_connect (GTK_OBJECT (check), "clicked",
7824 GTK_SIGNAL_FUNC (toggle_show_text),
7826 gtk_table_attach (GTK_TABLE (tab), check, 0, 1, 1, 2,
7827 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7830 hbox = gtk_hbox_new (FALSE, 0);
7831 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 1, 2,
7832 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7835 label = gtk_label_new ("Format : ");
7836 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
7838 pdata->entry = gtk_entry_new ();
7839 gtk_signal_connect (GTK_OBJECT (pdata->entry), "changed",
7840 GTK_SIGNAL_FUNC (entry_changed),
7842 gtk_box_pack_start (GTK_BOX (hbox), pdata->entry, TRUE, TRUE, 0);
7843 gtk_entry_set_text (GTK_ENTRY (pdata->entry), "%v from [%l,%u] (=%p%%)");
7844 gtk_widget_set_usize (pdata->entry, 100, -1);
7845 gtk_widget_set_sensitive (pdata->entry, FALSE);
7847 label = gtk_label_new ("Text align :");
7848 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 2, 3,
7849 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7851 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
7853 hbox = gtk_hbox_new (FALSE, 0);
7854 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 2, 3,
7855 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7858 label = gtk_label_new ("x :");
7859 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 5);
7861 adj = (GtkAdjustment *) gtk_adjustment_new (0.5, 0, 1, 0.1, 0.1, 0);
7862 pdata->x_align_spin = gtk_spin_button_new (adj, 0, 1);
7863 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
7864 GTK_SIGNAL_FUNC (adjust_align), pdata);
7865 gtk_box_pack_start (GTK_BOX (hbox), pdata->x_align_spin, FALSE, TRUE, 0);
7866 gtk_widget_set_sensitive (pdata->x_align_spin, FALSE);
7868 label = gtk_label_new ("y :");
7869 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 5);
7871 adj = (GtkAdjustment *) gtk_adjustment_new (0.5, 0, 1, 0.1, 0.1, 0);
7872 pdata->y_align_spin = gtk_spin_button_new (adj, 0, 1);
7873 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
7874 GTK_SIGNAL_FUNC (adjust_align), pdata);
7875 gtk_box_pack_start (GTK_BOX (hbox), pdata->y_align_spin, FALSE, TRUE, 0);
7876 gtk_widget_set_sensitive (pdata->y_align_spin, FALSE);
7878 label = gtk_label_new ("Bar Style :");
7879 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 3, 4,
7880 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7882 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
7884 pdata->omenu2 = build_option_menu (items2, 2, 0, pdata);
7885 hbox = gtk_hbox_new (FALSE, 0);
7886 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 3, 4,
7887 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7889 gtk_box_pack_start (GTK_BOX (hbox), pdata->omenu2, TRUE, TRUE, 0);
7891 label = gtk_label_new ("Block count :");
7892 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 4, 5,
7893 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7895 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
7897 hbox = gtk_hbox_new (FALSE, 0);
7898 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 4, 5,
7899 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7901 adj = (GtkAdjustment *) gtk_adjustment_new (10, 2, 20, 1, 5, 0);
7902 pdata->block_spin = gtk_spin_button_new (adj, 0, 0);
7903 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
7904 GTK_SIGNAL_FUNC (adjust_blocks), pdata);
7905 gtk_box_pack_start (GTK_BOX (hbox), pdata->block_spin, FALSE, TRUE, 0);
7906 gtk_widget_set_sensitive (pdata->block_spin, FALSE);
7908 check = gtk_check_button_new_with_label ("Activity mode");
7909 gtk_signal_connect (GTK_OBJECT (check), "clicked",
7910 GTK_SIGNAL_FUNC (toggle_activity_mode),
7912 gtk_table_attach (GTK_TABLE (tab), check, 0, 1, 5, 6,
7913 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7916 hbox = gtk_hbox_new (FALSE, 0);
7917 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 5, 6,
7918 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7920 label = gtk_label_new ("Step size : ");
7921 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
7922 adj = (GtkAdjustment *) gtk_adjustment_new (3, 1, 20, 1, 5, 0);
7923 pdata->step_spin = gtk_spin_button_new (adj, 0, 0);
7924 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
7925 GTK_SIGNAL_FUNC (adjust_step), pdata);
7926 gtk_box_pack_start (GTK_BOX (hbox), pdata->step_spin, FALSE, TRUE, 0);
7927 gtk_widget_set_sensitive (pdata->step_spin, FALSE);
7929 hbox = gtk_hbox_new (FALSE, 0);
7930 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 6, 7,
7931 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7933 label = gtk_label_new ("Blocks : ");
7934 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
7935 adj = (GtkAdjustment *) gtk_adjustment_new (5, 2, 10, 1, 5, 0);
7936 pdata->act_blocks_spin = gtk_spin_button_new (adj, 0, 0);
7937 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
7938 GTK_SIGNAL_FUNC (adjust_act_blocks), pdata);
7939 gtk_box_pack_start (GTK_BOX (hbox), pdata->act_blocks_spin, FALSE, TRUE,
7941 gtk_widget_set_sensitive (pdata->act_blocks_spin, FALSE);
7943 button = gtk_button_new_with_label ("close");
7944 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7945 GTK_SIGNAL_FUNC (gtk_widget_destroy),
7946 GTK_OBJECT (pdata->window));
7947 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7948 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (pdata->window)->action_area),
7949 button, TRUE, TRUE, 0);
7950 gtk_widget_grab_default (button);
7953 if (!GTK_WIDGET_VISIBLE (pdata->window))
7954 gtk_widget_show_all (pdata->window);
7956 gtk_widget_destroy (pdata->window);
7963 static int color_idle = 0;
7966 color_idle_func (GtkWidget *preview)
7968 static int count = 1;
7972 for (i = 0; i < 256; i++)
7974 for (j = 0, k = 0; j < 256; j++)
7976 buf[k+0] = i + count;
7978 buf[k+2] = j + count;
7982 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
7987 gtk_widget_draw (preview, NULL);
7993 color_preview_destroy (GtkWidget *widget,
7996 gtk_idle_remove (color_idle);
8003 create_color_preview (void)
8005 static GtkWidget *window = NULL;
8012 gtk_widget_push_colormap (gdk_rgb_get_cmap ());
8013 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
8014 gtk_widget_pop_colormap ();
8016 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8017 GTK_SIGNAL_FUNC(color_preview_destroy),
8020 gtk_window_set_title (GTK_WINDOW (window), "test");
8021 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
8023 preview = gtk_preview_new (GTK_PREVIEW_COLOR);
8024 gtk_preview_size (GTK_PREVIEW (preview), 256, 256);
8025 gtk_container_add (GTK_CONTAINER (window), preview);
8027 for (i = 0; i < 256; i++)
8029 for (j = 0, k = 0; j < 256; j++)
8037 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
8040 color_idle = gtk_idle_add ((GtkFunction) color_idle_func, preview);
8043 if (!GTK_WIDGET_VISIBLE (window))
8044 gtk_widget_show_all (window);
8046 gtk_widget_destroy (window);
8053 static int gray_idle = 0;
8056 gray_idle_func (GtkWidget *preview)
8058 static int count = 1;
8062 for (i = 0; i < 256; i++)
8064 for (j = 0; j < 256; j++)
8065 buf[j] = i + j + count;
8067 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
8072 gtk_widget_draw (preview, NULL);
8078 gray_preview_destroy (GtkWidget *widget,
8081 gtk_idle_remove (gray_idle);
8088 create_gray_preview (void)
8090 static GtkWidget *window = NULL;
8097 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
8099 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8100 GTK_SIGNAL_FUNC(gray_preview_destroy),
8103 gtk_window_set_title (GTK_WINDOW (window), "test");
8104 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
8106 preview = gtk_preview_new (GTK_PREVIEW_GRAYSCALE);
8107 gtk_preview_size (GTK_PREVIEW (preview), 256, 256);
8108 gtk_container_add (GTK_CONTAINER (window), preview);
8110 for (i = 0; i < 256; i++)
8112 for (j = 0; j < 256; j++)
8115 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
8118 gray_idle = gtk_idle_add ((GtkFunction) gray_idle_func, preview);
8121 if (!GTK_WIDGET_VISIBLE (window))
8122 gtk_widget_show_all (window);
8124 gtk_widget_destroy (window);
8133 selection_test_received (GtkWidget *list, GtkSelectionData *data)
8136 GtkWidget *list_item;
8140 if (data->length < 0)
8142 g_print ("Selection retrieval failed\n");
8145 if (data->type != GDK_SELECTION_TYPE_ATOM)
8147 g_print ("Selection \"TARGETS\" was not returned as atoms!\n");
8151 /* Clear out any current list items */
8153 gtk_list_clear_items (GTK_LIST(list), 0, -1);
8155 /* Add new items to list */
8157 atoms = (GdkAtom *)data->data;
8160 l = data->length / sizeof (GdkAtom);
8161 for (i = 0; i < l; i++)
8164 name = gdk_atom_name (atoms[i]);
8167 list_item = gtk_list_item_new_with_label (name);
8171 list_item = gtk_list_item_new_with_label ("(bad atom)");
8173 gtk_widget_show (list_item);
8174 item_list = g_list_append (item_list, list_item);
8177 gtk_list_append_items (GTK_LIST (list), item_list);
8183 selection_test_get_targets (GtkWidget *widget, GtkWidget *list)
8185 static GdkAtom targets_atom = GDK_NONE;
8187 if (targets_atom == GDK_NONE)
8188 targets_atom = gdk_atom_intern ("TARGETS", FALSE);
8190 gtk_selection_convert (list, GDK_SELECTION_PRIMARY, targets_atom,
8195 create_selection_test (void)
8197 static GtkWidget *window = NULL;
8200 GtkWidget *scrolled_win;
8206 window = gtk_dialog_new ();
8208 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8209 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
8212 gtk_window_set_title (GTK_WINDOW (window), "Selection Test");
8213 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
8215 /* Create the list */
8217 vbox = gtk_vbox_new (FALSE, 5);
8218 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
8219 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), vbox,
8222 label = gtk_label_new ("Gets available targets for current selection");
8223 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
8225 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
8226 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
8227 GTK_POLICY_AUTOMATIC,
8228 GTK_POLICY_AUTOMATIC);
8229 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
8230 gtk_widget_set_usize (scrolled_win, 100, 200);
8232 list = gtk_list_new ();
8233 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_win), list);
8235 gtk_signal_connect (GTK_OBJECT(list), "selection_received",
8236 GTK_SIGNAL_FUNC (selection_test_received), NULL);
8238 /* .. And create some buttons */
8239 button = gtk_button_new_with_label ("Get Targets");
8240 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8241 button, TRUE, TRUE, 0);
8243 gtk_signal_connect (GTK_OBJECT (button), "clicked",
8244 GTK_SIGNAL_FUNC (selection_test_get_targets), list);
8246 button = gtk_button_new_with_label ("Quit");
8247 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8248 button, TRUE, TRUE, 0);
8250 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
8251 GTK_SIGNAL_FUNC (gtk_widget_destroy),
8252 GTK_OBJECT (window));
8255 if (!GTK_WIDGET_VISIBLE (window))
8256 gtk_widget_show_all (window);
8258 gtk_widget_destroy (window);
8266 create_gamma_curve (void)
8268 static GtkWidget *window = NULL, *curve;
8269 static int count = 0;
8276 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
8277 gtk_window_set_title (GTK_WINDOW (window), "test");
8278 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
8280 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8281 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
8284 curve = gtk_gamma_curve_new ();
8285 gtk_container_add (GTK_CONTAINER (window), curve);
8286 gtk_widget_show (curve);
8289 max = 127 + (count % 2)*128;
8290 gtk_curve_set_range (GTK_CURVE (GTK_GAMMA_CURVE (curve)->curve),
8292 for (i = 0; i < max; ++i)
8293 vec[i] = (127 / sqrt (max)) * sqrt (i);
8294 gtk_curve_set_vector (GTK_CURVE (GTK_GAMMA_CURVE (curve)->curve),
8297 if (!GTK_WIDGET_VISIBLE (window))
8298 gtk_widget_show (window);
8299 else if (count % 4 == 3)
8301 gtk_widget_destroy (window);
8312 static int scroll_test_pos = 0.0;
8313 static GdkGC *scroll_test_gc = NULL;
8316 scroll_test_expose (GtkWidget *widget, GdkEventExpose *event,
8320 gint imin, imax, jmin, jmax;
8322 imin = (event->area.x) / 10;
8323 imax = (event->area.x + event->area.width + 9) / 10;
8325 jmin = ((int)adj->value + event->area.y) / 10;
8326 jmax = ((int)adj->value + event->area.y + event->area.height + 9) / 10;
8328 gdk_window_clear_area (widget->window,
8329 event->area.x, event->area.y,
8330 event->area.width, event->area.height);
8332 for (i=imin; i<imax; i++)
8333 for (j=jmin; j<jmax; j++)
8335 gdk_draw_rectangle (widget->window,
8336 widget->style->black_gc,
8338 10*i, 10*j - (int)adj->value, 1+i%10, 1+j%10);
8344 scroll_test_scroll (GtkWidget *widget, GdkEventScroll *event,
8347 gfloat new_value = adj->value + ((event->direction == GDK_SCROLL_UP) ?
8348 -adj->page_increment / 2:
8349 adj->page_increment / 2);
8350 new_value = CLAMP (new_value, adj->lower, adj->upper - adj->page_size);
8351 gtk_adjustment_set_value (adj, new_value);
8357 scroll_test_configure (GtkWidget *widget, GdkEventConfigure *event,
8360 adj->page_increment = 0.9 * widget->allocation.height;
8361 adj->page_size = widget->allocation.height;
8363 gtk_signal_emit_by_name (GTK_OBJECT (adj), "changed");
8367 scroll_test_adjustment_changed (GtkAdjustment *adj, GtkWidget *widget)
8369 gint source_min = (int)adj->value - scroll_test_pos;
8370 gint source_max = source_min + widget->allocation.height;
8372 gint dest_max = widget->allocation.height;
8376 scroll_test_pos = adj->value;
8378 if (!GTK_WIDGET_DRAWABLE (widget))
8385 rect.width = widget->allocation.width;
8386 rect.height = -source_min;
8387 if (rect.height > widget->allocation.height)
8388 rect.height = widget->allocation.height;
8391 dest_min = rect.height;
8396 rect.y = 2*widget->allocation.height - source_max;
8399 rect.width = widget->allocation.width;
8400 rect.height = widget->allocation.height - rect.y;
8402 source_max = widget->allocation.height;
8406 if (source_min != source_max)
8408 if (scroll_test_gc == NULL)
8410 scroll_test_gc = gdk_gc_new (widget->window);
8411 gdk_gc_set_exposures (scroll_test_gc, TRUE);
8414 gdk_draw_pixmap (widget->window,
8419 widget->allocation.width,
8420 source_max - source_min);
8422 /* Make sure graphics expose events are processed before scrolling
8425 while ((event = gdk_event_get_graphics_expose (widget->window)) != NULL)
8427 gtk_widget_event (widget, event);
8428 if (event->expose.count == 0)
8430 gdk_event_free (event);
8433 gdk_event_free (event);
8437 if (rect.height != 0)
8438 gtk_widget_draw (widget, &rect);
8443 create_scroll_test (void)
8445 static GtkWidget *window = NULL;
8447 GtkWidget *drawing_area;
8448 GtkWidget *scrollbar;
8451 GdkGeometry geometry;
8452 GdkWindowHints geometry_mask;
8456 window = gtk_dialog_new ();
8458 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8459 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
8462 gtk_window_set_title (GTK_WINDOW (window), "Scroll Test");
8463 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
8465 hbox = gtk_hbox_new (FALSE, 0);
8466 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), hbox,
8468 gtk_widget_show (hbox);
8470 drawing_area = gtk_drawing_area_new ();
8471 gtk_drawing_area_size (GTK_DRAWING_AREA (drawing_area), 200, 200);
8472 gtk_box_pack_start (GTK_BOX (hbox), drawing_area, TRUE, TRUE, 0);
8473 gtk_widget_show (drawing_area);
8475 gtk_widget_set_events (drawing_area, GDK_EXPOSURE_MASK | GDK_SCROLL_MASK);
8477 adj = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.0, 1000.0, 1.0, 180.0, 200.0));
8478 scroll_test_pos = 0.0;
8480 scrollbar = gtk_vscrollbar_new (adj);
8481 gtk_box_pack_start (GTK_BOX (hbox), scrollbar, FALSE, FALSE, 0);
8482 gtk_widget_show (scrollbar);
8484 gtk_signal_connect (GTK_OBJECT (drawing_area), "expose_event",
8485 GTK_SIGNAL_FUNC (scroll_test_expose), adj);
8486 gtk_signal_connect (GTK_OBJECT (drawing_area), "configure_event",
8487 GTK_SIGNAL_FUNC (scroll_test_configure), adj);
8488 gtk_signal_connect (GTK_OBJECT (drawing_area), "scroll_event",
8489 GTK_SIGNAL_FUNC (scroll_test_scroll), adj);
8491 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
8492 GTK_SIGNAL_FUNC (scroll_test_adjustment_changed),
8495 /* .. And create some buttons */
8497 button = gtk_button_new_with_label ("Quit");
8498 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8499 button, TRUE, TRUE, 0);
8501 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
8502 GTK_SIGNAL_FUNC (gtk_widget_destroy),
8503 GTK_OBJECT (window));
8504 gtk_widget_show (button);
8506 /* Set up gridded geometry */
8508 geometry_mask = GDK_HINT_MIN_SIZE |
8509 GDK_HINT_BASE_SIZE |
8510 GDK_HINT_RESIZE_INC;
8512 geometry.min_width = 20;
8513 geometry.min_height = 20;
8514 geometry.base_width = 0;
8515 geometry.base_height = 0;
8516 geometry.width_inc = 10;
8517 geometry.height_inc = 10;
8519 gtk_window_set_geometry_hints (GTK_WINDOW (window),
8520 drawing_area, &geometry, geometry_mask);
8523 if (!GTK_WIDGET_VISIBLE (window))
8524 gtk_widget_show (window);
8526 gtk_widget_destroy (window);
8533 static int timer = 0;
8536 timeout_test (GtkWidget *label)
8538 static int count = 0;
8539 static char buffer[32];
8541 sprintf (buffer, "count: %d", ++count);
8542 gtk_label_set_text (GTK_LABEL (label), buffer);
8548 start_timeout_test (GtkWidget *widget,
8553 timer = gtk_timeout_add (100, (GtkFunction) timeout_test, label);
8558 stop_timeout_test (GtkWidget *widget,
8563 gtk_timeout_remove (timer);
8569 destroy_timeout_test (GtkWidget *widget,
8572 stop_timeout_test (NULL, NULL);
8578 create_timeout_test (void)
8580 static GtkWidget *window = NULL;
8586 window = gtk_dialog_new ();
8588 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8589 GTK_SIGNAL_FUNC(destroy_timeout_test),
8592 gtk_window_set_title (GTK_WINDOW (window), "Timeout Test");
8593 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
8595 label = gtk_label_new ("count: 0");
8596 gtk_misc_set_padding (GTK_MISC (label), 10, 10);
8597 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
8598 label, TRUE, TRUE, 0);
8599 gtk_widget_show (label);
8601 button = gtk_button_new_with_label ("close");
8602 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
8603 GTK_SIGNAL_FUNC(gtk_widget_destroy),
8604 GTK_OBJECT (window));
8605 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8606 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8607 button, TRUE, TRUE, 0);
8608 gtk_widget_grab_default (button);
8609 gtk_widget_show (button);
8611 button = gtk_button_new_with_label ("start");
8612 gtk_signal_connect (GTK_OBJECT (button), "clicked",
8613 GTK_SIGNAL_FUNC(start_timeout_test),
8615 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8616 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8617 button, TRUE, TRUE, 0);
8618 gtk_widget_show (button);
8620 button = gtk_button_new_with_label ("stop");
8621 gtk_signal_connect (GTK_OBJECT (button), "clicked",
8622 GTK_SIGNAL_FUNC(stop_timeout_test),
8624 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8625 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8626 button, TRUE, TRUE, 0);
8627 gtk_widget_show (button);
8630 if (!GTK_WIDGET_VISIBLE (window))
8631 gtk_widget_show (window);
8633 gtk_widget_destroy (window);
8640 static int idle_id = 0;
8643 idle_test (GtkWidget *label)
8645 static int count = 0;
8646 static char buffer[32];
8648 sprintf (buffer, "count: %d", ++count);
8649 gtk_label_set_text (GTK_LABEL (label), buffer);
8655 start_idle_test (GtkWidget *widget,
8660 idle_id = gtk_idle_add ((GtkFunction) idle_test, label);
8665 stop_idle_test (GtkWidget *widget,
8670 gtk_idle_remove (idle_id);
8676 destroy_idle_test (GtkWidget *widget,
8679 stop_idle_test (NULL, NULL);
8685 toggle_idle_container (GtkObject *button,
8686 GtkContainer *container)
8688 gtk_container_set_resize_mode (container, GPOINTER_TO_INT (gtk_object_get_user_data (button)));
8692 create_idle_test (void)
8694 static GtkWidget *window = NULL;
8697 GtkWidget *container;
8704 window = gtk_dialog_new ();
8706 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8707 GTK_SIGNAL_FUNC(destroy_idle_test),
8710 gtk_window_set_title (GTK_WINDOW (window), "Idle Test");
8711 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
8713 label = gtk_label_new ("count: 0");
8714 gtk_misc_set_padding (GTK_MISC (label), 10, 10);
8715 gtk_widget_show (label);
8718 gtk_widget_new (GTK_TYPE_HBOX,
8719 "GtkWidget::visible", TRUE,
8720 /* "GtkContainer::child", gtk_widget_new (GTK_TYPE_HBOX,
8721 * "GtkWidget::visible", TRUE,
8723 "GtkContainer::child", label,
8726 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
8727 container, TRUE, TRUE, 0);
8730 gtk_widget_new (GTK_TYPE_FRAME,
8731 "GtkContainer::border_width", 5,
8732 "GtkFrame::label", "Label Container",
8733 "GtkWidget::visible", TRUE,
8734 "GtkWidget::parent", GTK_DIALOG (window)->vbox,
8737 gtk_widget_new (GTK_TYPE_VBOX,
8738 "GtkWidget::visible", TRUE,
8739 "GtkWidget::parent", frame,
8742 gtk_widget_new (GTK_TYPE_RADIO_BUTTON,
8743 "GtkButton::label", "Resize-Parent",
8744 "GtkObject::user_data", (void*)GTK_RESIZE_PARENT,
8745 "GtkObject::signal::clicked", toggle_idle_container, container,
8746 "GtkWidget::visible", TRUE,
8747 "GtkWidget::parent", box,
8750 gtk_widget_new (GTK_TYPE_RADIO_BUTTON,
8751 "GtkButton::label", "Resize-Queue",
8752 "GtkObject::user_data", (void*)GTK_RESIZE_QUEUE,
8753 "GtkObject::signal::clicked", toggle_idle_container, container,
8754 "GtkRadioButton::group", button,
8755 "GtkWidget::visible", TRUE,
8756 "GtkWidget::parent", box,
8759 gtk_widget_new (GTK_TYPE_RADIO_BUTTON,
8760 "GtkButton::label", "Resize-Immediate",
8761 "GtkObject::user_data", (void*)GTK_RESIZE_IMMEDIATE,
8762 "GtkObject::signal::clicked", toggle_idle_container, container,
8763 "GtkRadioButton::group", button,
8764 "GtkWidget::visible", TRUE,
8765 "GtkWidget::parent", box,
8769 button = gtk_button_new_with_label ("close");
8770 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
8771 GTK_SIGNAL_FUNC(gtk_widget_destroy),
8772 GTK_OBJECT (window));
8773 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8774 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8775 button, TRUE, TRUE, 0);
8776 gtk_widget_grab_default (button);
8777 gtk_widget_show (button);
8779 button = gtk_button_new_with_label ("start");
8780 gtk_signal_connect (GTK_OBJECT (button), "clicked",
8781 GTK_SIGNAL_FUNC(start_idle_test),
8783 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8784 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8785 button, TRUE, TRUE, 0);
8786 gtk_widget_show (button);
8788 button = gtk_button_new_with_label ("stop");
8789 gtk_signal_connect (GTK_OBJECT (button), "clicked",
8790 GTK_SIGNAL_FUNC(stop_idle_test),
8792 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8793 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8794 button, TRUE, TRUE, 0);
8795 gtk_widget_show (button);
8798 if (!GTK_WIDGET_VISIBLE (window))
8799 gtk_widget_show (window);
8801 gtk_widget_destroy (window);
8809 reload_rc_file (void)
8813 if (gtk_rc_reparse_all ())
8815 toplevels = gdk_window_get_toplevels();
8819 gdk_window_get_user_data (toplevels->data, (gpointer *)&widget);
8822 gtk_widget_reset_rc_styles (widget);
8824 toplevels = toplevels->next;
8826 g_list_free (toplevels);
8831 reload_all_rc_files (void)
8833 static GdkAtom atom_rcfiles = GDK_NONE;
8839 atom_rcfiles = gdk_atom_intern("_GTK_READ_RCFILES", FALSE);
8841 for(i = 0; i < 5; i++)
8843 sev.data_format = 32;
8844 sev.message_type = atom_rcfiles;
8845 gdk_event_send_clientmessage_toall ((GdkEvent *) &sev);
8849 create_rc_file (void)
8851 static GtkWidget *window = NULL;
8856 window = gtk_dialog_new ();
8858 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8859 GTK_SIGNAL_FUNC(destroy_idle_test),
8862 gtk_window_set_title (GTK_WINDOW (window), "Reload Rc file");
8863 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
8865 button = gtk_button_new_with_label ("Reload");
8866 gtk_signal_connect (GTK_OBJECT (button), "clicked",
8867 GTK_SIGNAL_FUNC(reload_rc_file), NULL);
8868 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8869 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8870 button, TRUE, TRUE, 0);
8871 gtk_widget_grab_default (button);
8872 gtk_widget_show (button);
8874 button = gtk_button_new_with_label ("Reload All");
8875 gtk_signal_connect (GTK_OBJECT (button), "clicked",
8876 GTK_SIGNAL_FUNC(reload_all_rc_files), NULL);
8877 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8878 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8879 button, TRUE, TRUE, 0);
8880 gtk_widget_show (button);
8882 button = gtk_button_new_with_label ("Close");
8883 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
8884 GTK_SIGNAL_FUNC(gtk_widget_destroy),
8885 GTK_OBJECT (window));
8886 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8887 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8888 button, TRUE, TRUE, 0);
8889 gtk_widget_show (button);
8893 if (!GTK_WIDGET_VISIBLE (window))
8894 gtk_widget_show (window);
8896 gtk_widget_destroy (window);
8900 * Test of recursive mainloop
8904 mainloop_destroyed (GtkWidget *w, GtkWidget **window)
8911 create_mainloop (void)
8913 static GtkWidget *window = NULL;
8919 window = gtk_dialog_new ();
8921 gtk_window_set_title (GTK_WINDOW (window), "Test Main Loop");
8923 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8924 GTK_SIGNAL_FUNC(mainloop_destroyed),
8927 label = gtk_label_new ("In recursive main loop...");
8928 gtk_misc_set_padding (GTK_MISC(label), 20, 20);
8930 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), label,
8932 gtk_widget_show (label);
8934 button = gtk_button_new_with_label ("Leave");
8935 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area), button,
8938 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
8939 GTK_SIGNAL_FUNC (gtk_widget_destroy),
8940 GTK_OBJECT (window));
8942 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8943 gtk_widget_grab_default (button);
8945 gtk_widget_show (button);
8948 if (!GTK_WIDGET_VISIBLE (window))
8950 gtk_widget_show (window);
8952 g_print ("create_mainloop: start\n");
8954 g_print ("create_mainloop: done\n");
8957 gtk_widget_destroy (window);
8961 layout_expose_handler (GtkWidget *widget, GdkEventExpose *event)
8966 gint imin, imax, jmin, jmax;
8968 layout = GTK_LAYOUT (widget);
8970 imin = (layout->xoffset + event->area.x) / 10;
8971 imax = (layout->xoffset + event->area.x + event->area.width + 9) / 10;
8973 jmin = (layout->yoffset + event->area.y) / 10;
8974 jmax = (layout->yoffset + event->area.y + event->area.height + 9) / 10;
8976 gdk_window_clear_area (widget->window,
8977 event->area.x, event->area.y,
8978 event->area.width, event->area.height);
8980 for (i=imin; i<imax; i++)
8981 for (j=jmin; j<jmax; j++)
8983 gdk_draw_rectangle (layout->bin_window,
8984 widget->style->black_gc,
8986 10*i - layout->xoffset, 10*j - layout->yoffset,
8992 void create_layout (void)
8994 static GtkWidget *window = NULL;
8996 GtkWidget *scrolledwindow;
9005 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
9006 gtk_signal_connect (GTK_OBJECT (window), "destroy",
9007 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
9010 gtk_window_set_title (GTK_WINDOW (window), "Layout");
9011 gtk_widget_set_usize (window, 200, 200);
9013 scrolledwindow = gtk_scrolled_window_new (NULL, NULL);
9014 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow),
9016 gtk_scrolled_window_set_placement (GTK_SCROLLED_WINDOW (scrolledwindow),
9017 GTK_CORNER_TOP_RIGHT);
9019 gtk_container_add (GTK_CONTAINER (window), scrolledwindow);
9021 layout = gtk_layout_new (NULL, NULL);
9022 gtk_container_add (GTK_CONTAINER (scrolledwindow), layout);
9024 /* We set step sizes here since GtkLayout does not set
9027 GTK_LAYOUT (layout)->hadjustment->step_increment = 10.0;
9028 GTK_LAYOUT (layout)->vadjustment->step_increment = 10.0;
9030 gtk_widget_set_events (layout, GDK_EXPOSURE_MASK);
9031 gtk_signal_connect (GTK_OBJECT (layout), "expose_event",
9032 GTK_SIGNAL_FUNC (layout_expose_handler), NULL);
9034 gtk_layout_set_size (GTK_LAYOUT (layout), 1600, 128000);
9036 for (i=0 ; i < 16 ; i++)
9037 for (j=0 ; j < 16 ; j++)
9039 sprintf(buf, "Button %d, %d", i, j);
9041 button = gtk_button_new_with_label (buf);
9043 button = gtk_label_new (buf);
9045 gtk_layout_put (GTK_LAYOUT (layout), button,
9049 for (i=16; i < 1280; i++)
9051 sprintf(buf, "Button %d, %d", i, 0);
9053 button = gtk_button_new_with_label (buf);
9055 button = gtk_label_new (buf);
9057 gtk_layout_put (GTK_LAYOUT (layout), button,
9062 if (!GTK_WIDGET_VISIBLE (window))
9063 gtk_widget_show_all (window);
9065 gtk_widget_destroy (window);
9069 create_styles (void)
9071 static GtkWidget *window = NULL;
9076 static GdkColor red = { 0, 0xffff, 0, 0 };
9077 static GdkColor green = { 0, 0, 0xffff, 0 };
9078 static GdkColor blue = { 0, 0, 0, 0xffff };
9079 static GdkColor yellow = { 0, 0xffff, 0xffff, 0 };
9080 static GdkColor cyan = { 0, 0 , 0xffff, 0xffff };
9081 PangoFontDescription *font_desc;
9083 GtkRcStyle *rc_style;
9087 window = gtk_dialog_new ();
9088 gtk_signal_connect (GTK_OBJECT (window), "destroy",
9089 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
9093 button = gtk_button_new_with_label ("Close");
9094 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
9095 GTK_SIGNAL_FUNC(gtk_widget_destroy),
9096 GTK_OBJECT (window));
9097 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
9098 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
9099 button, TRUE, TRUE, 0);
9100 gtk_widget_show (button);
9102 vbox = gtk_vbox_new (FALSE, 5);
9103 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
9104 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), vbox, FALSE, FALSE, 0);
9106 label = gtk_label_new ("Font:");
9107 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
9108 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9110 font_desc = pango_font_description_from_string ("Helvetica,Sans Oblique 18");
9112 button = gtk_button_new_with_label ("Some Text");
9113 gtk_widget_modify_font (GTK_BIN (button)->child, font_desc);
9114 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
9116 label = gtk_label_new ("Foreground:");
9117 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
9118 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9120 button = gtk_button_new_with_label ("Some Text");
9121 gtk_widget_modify_fg (GTK_BIN (button)->child, GTK_STATE_NORMAL, &red);
9122 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
9124 label = gtk_label_new ("Background:");
9125 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
9126 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9128 button = gtk_button_new_with_label ("Some Text");
9129 gtk_widget_modify_bg (button, GTK_STATE_NORMAL, &green);
9130 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
9132 label = gtk_label_new ("Text:");
9133 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
9134 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9136 entry = gtk_entry_new ();
9137 gtk_entry_set_text (GTK_ENTRY (entry), "Some Text");
9138 gtk_widget_modify_text (entry, GTK_STATE_NORMAL, &blue);
9139 gtk_box_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 0);
9141 label = gtk_label_new ("Base:");
9142 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
9143 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9145 entry = gtk_entry_new ();
9146 gtk_entry_set_text (GTK_ENTRY (entry), "Some Text");
9147 gtk_widget_modify_base (entry, GTK_STATE_NORMAL, &yellow);
9148 gtk_box_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 0);
9150 label = gtk_label_new ("Multiple:");
9151 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
9152 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9154 button = gtk_button_new_with_label ("Some Text");
9156 rc_style = gtk_rc_style_new ();
9158 rc_style->font_desc = font_desc;
9159 rc_style->color_flags[GTK_STATE_NORMAL] = GTK_RC_FG | GTK_RC_BG;
9160 rc_style->color_flags[GTK_STATE_PRELIGHT] = GTK_RC_FG | GTK_RC_BG;
9161 rc_style->color_flags[GTK_STATE_ACTIVE] = GTK_RC_FG | GTK_RC_BG;
9162 rc_style->fg[GTK_STATE_NORMAL] = yellow;
9163 rc_style->bg[GTK_STATE_NORMAL] = blue;
9164 rc_style->fg[GTK_STATE_PRELIGHT] = blue;
9165 rc_style->bg[GTK_STATE_PRELIGHT] = yellow;
9166 rc_style->fg[GTK_STATE_ACTIVE] = red;
9167 rc_style->bg[GTK_STATE_ACTIVE] = cyan;
9168 rc_style->xthickness = 5;
9169 rc_style->ythickness = 5;
9171 gtk_widget_modify_style (button, rc_style);
9172 gtk_widget_modify_style (GTK_BIN (button)->child, rc_style);
9174 g_object_unref (G_OBJECT (rc_style));
9176 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
9179 if (!GTK_WIDGET_VISIBLE (window))
9180 gtk_widget_show_all (window);
9182 gtk_widget_destroy (window);
9186 * Main Window and Exit
9190 do_exit (GtkWidget *widget, GtkWidget *window)
9192 gtk_widget_destroy (window);
9197 create_main_window (void)
9204 { "button box", create_button_box },
9205 { "buttons", create_buttons },
9206 { "check buttons", create_check_buttons },
9207 { "clist", create_clist},
9208 { "color selection", create_color_selection },
9209 { "ctree", create_ctree },
9210 { "cursors", create_cursors },
9211 { "dialog", create_dialog },
9212 /* { "dnd", create_dnd }, */
9213 { "entry", create_entry },
9214 { "event watcher", create_event_watcher },
9215 { "file selection", create_file_selection },
9216 { "flipping", create_flipping },
9217 { "font selection", create_font_selection },
9218 { "gamma curve", create_gamma_curve },
9219 { "handle box", create_handle_box },
9220 { "image from drawable", create_get_image },
9221 { "image", create_image },
9222 { "item factory", create_item_factory },
9223 { "labels", create_labels },
9224 { "layout", create_layout },
9225 { "list", create_list },
9226 { "menus", create_menus },
9227 { "message dialog", create_message_dialog },
9228 { "modal window", create_modal_window },
9229 { "notebook", create_notebook },
9230 { "panes", create_panes },
9231 { "pixmap", create_pixmap },
9232 { "preview color", create_color_preview },
9233 { "preview gray", create_gray_preview },
9234 { "progress bar", create_progress_bar },
9235 { "radio buttons", create_radio_buttons },
9236 { "range controls", create_range_controls },
9237 { "rc file", create_rc_file },
9238 { "reparent", create_reparent },
9239 { "rulers", create_rulers },
9240 { "saved position", create_saved_position },
9241 { "scrolled windows", create_scrolled_windows },
9242 { "shapes", create_shapes },
9243 { "spinbutton", create_spins },
9244 { "statusbar", create_statusbar },
9245 { "styles", create_styles },
9246 { "test idle", create_idle_test },
9247 { "test mainloop", create_mainloop },
9248 { "test scrolling", create_scroll_test },
9249 { "test selection", create_selection_test },
9250 { "test timeout", create_timeout_test },
9251 { "text", create_text },
9252 { "toggle buttons", create_toggle_buttons },
9253 { "toolbar", create_toolbar },
9254 { "tooltips", create_tooltips },
9255 { "tree", create_tree_mode_window},
9256 { "WM hints", create_wmhints },
9258 int nbuttons = sizeof (buttons) / sizeof (buttons[0]);
9262 GtkWidget *scrolled_window;
9266 GtkWidget *separator;
9267 GdkGeometry geometry;
9270 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
9271 gtk_widget_set_name (window, "main window");
9272 gtk_widget_set_uposition (window, 20, 20);
9273 gtk_window_set_default_size (GTK_WINDOW (window), -1, 400);
9275 geometry.min_width = -1;
9276 geometry.min_height = -1;
9277 geometry.max_width = -1;
9278 geometry.max_height = G_MAXSHORT;
9279 gtk_window_set_geometry_hints (GTK_WINDOW (window), NULL,
9281 GDK_HINT_MIN_SIZE | GDK_HINT_MAX_SIZE);
9283 gtk_signal_connect (GTK_OBJECT (window), "destroy",
9284 GTK_SIGNAL_FUNC(gtk_main_quit),
9286 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
9287 GTK_SIGNAL_FUNC (gtk_false),
9290 box1 = gtk_vbox_new (FALSE, 0);
9291 gtk_container_add (GTK_CONTAINER (window), box1);
9293 if (gtk_micro_version > 0)
9305 label = gtk_label_new (buffer);
9306 gtk_box_pack_start (GTK_BOX (box1), label, FALSE, FALSE, 0);
9308 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
9309 gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10);
9310 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
9312 GTK_POLICY_AUTOMATIC);
9313 gtk_box_pack_start (GTK_BOX (box1), scrolled_window, TRUE, TRUE, 0);
9315 box2 = gtk_vbox_new (FALSE, 0);
9316 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
9317 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), box2);
9318 gtk_container_set_focus_vadjustment (GTK_CONTAINER (box2),
9319 gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
9320 gtk_widget_show (box2);
9322 for (i = 0; i < nbuttons; i++)
9324 button = gtk_button_new_with_label (buttons[i].label);
9325 if (buttons[i].func)
9326 gtk_signal_connect (GTK_OBJECT (button),
9328 GTK_SIGNAL_FUNC(buttons[i].func),
9331 gtk_widget_set_sensitive (button, FALSE);
9332 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
9335 separator = gtk_hseparator_new ();
9336 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
9338 box2 = gtk_vbox_new (FALSE, 10);
9339 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
9340 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
9342 button = gtk_button_new_with_label ("close");
9343 gtk_signal_connect (GTK_OBJECT (button), "clicked",
9344 GTK_SIGNAL_FUNC (do_exit),
9346 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
9347 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
9348 gtk_widget_grab_default (button);
9350 gtk_widget_show_all (window);
9356 if (file_exists ("../gdk-pixbuf/.libs/libpixbufloader-pnm.so"))
9358 putenv ("GDK_PIXBUF_MODULEDIR=../gdk-pixbuf/.libs");
9359 putenv ("GTK_IM_MODULE_FILE=./gtk.immodules");
9364 main (int argc, char *argv[])
9366 GtkBindingSet *binding_set;
9368 srand (time (NULL));
9373 /* Check to see if we are being run from the correct
9376 if (file_exists ("testgtkrc"))
9377 gtk_rc_add_default_file ("testgtkrc");
9379 gtk_init (&argc, &argv);
9383 binding_set = gtk_binding_set_by_class (gtk_type_class (GTK_TYPE_WIDGET));
9384 gtk_binding_entry_add_signal (binding_set,
9385 '9', GDK_CONTROL_MASK | GDK_RELEASE_MASK,
9388 GTK_TYPE_STRING, "GtkWidgetClass <ctrl><release>9 test");
9390 create_main_window ();
9397 while (g_main_pending ())
9398 g_main_iteration (FALSE);
9400 while (g_main_pending ())
9401 g_main_iteration (FALSE);