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/.
43 #include "gdk/gdkkeysyms.h"
46 #define sleep(n) _sleep(n)
49 #include "circles.xbm"
52 typedef struct _OptionMenuItem
59 file_exists (const char *filename)
63 return stat (filename, &statbuf) == 0;
67 shape_create_icon (char *xpm_file,
75 build_option_menu (OptionMenuItem items[],
80 /* macro, structure and variables used by tree window demos */
81 #define DEFAULT_NUMBER_OF_ITEM 3
82 #define DEFAULT_RECURSION_LEVEL 3
85 GSList* selection_mode_group;
86 GtkWidget* single_button;
87 GtkWidget* browse_button;
88 GtkWidget* multiple_button;
89 GtkWidget* draw_line_button;
90 GtkWidget* view_line_button;
91 GtkWidget* no_root_item_button;
92 GtkWidget* nb_item_spinner;
93 GtkWidget* recursion_spinner;
94 } sTreeSampleSelection;
96 typedef struct sTreeButtons {
98 GtkWidget* add_button;
99 GtkWidget* remove_button;
100 GtkWidget* subtree_button;
102 /* end of tree section */
105 build_option_menu (OptionMenuItem items[],
112 GtkWidget *menu_item;
115 omenu = gtk_option_menu_new ();
117 menu = gtk_menu_new ();
119 for (i = 0; i < num_items; i++)
121 menu_item = gtk_menu_item_new_with_label (items[i].name);
122 gtk_signal_connect (GTK_OBJECT (menu_item), "activate",
123 (GtkSignalFunc) items[i].func, data);
124 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
125 gtk_widget_show (menu_item);
128 gtk_option_menu_set_menu (GTK_OPTION_MENU (omenu), menu);
129 gtk_option_menu_set_history (GTK_OPTION_MENU (omenu), history);
135 destroy_tooltips (GtkWidget *widget, GtkWindow **window)
137 GtkTooltips *tt = gtk_object_get_data (GTK_OBJECT (*window), "tooltips");
138 gtk_object_unref (GTK_OBJECT (tt));
147 button_window (GtkWidget *widget,
150 if (!GTK_WIDGET_VISIBLE (button))
151 gtk_widget_show (button);
153 gtk_widget_hide (button);
157 create_buttons (void)
159 static GtkWidget *window = NULL;
163 GtkWidget *button[10];
164 GtkWidget *separator;
168 GtkAccelGroup *accel_group;
170 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
172 accel_group = gtk_window_get_default_accel_group (GTK_WINDOW (window));
174 gtk_signal_connect (GTK_OBJECT (window), "destroy",
175 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
178 gtk_window_set_title (GTK_WINDOW (window), "GtkButton");
179 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
181 box1 = gtk_vbox_new (FALSE, 0);
182 gtk_container_add (GTK_CONTAINER (window), box1);
184 table = gtk_table_new (3, 3, FALSE);
185 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
186 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
187 gtk_container_set_border_width (GTK_CONTAINER (table), 10);
188 gtk_box_pack_start (GTK_BOX (box1), table, TRUE, TRUE, 0);
190 button[0] = gtk_button_new_with_label ("button1");
191 button[1] = gtk_button_new_accel ("_button2", accel_group);
192 button[2] = gtk_button_new_with_label ("button3");
193 button[3] = gtk_button_new_stock (GTK_STOCK_BUTTON_OK, NULL);
194 button[4] = gtk_button_new_with_label ("button5");
195 button[5] = gtk_button_new_with_label ("button6");
196 button[6] = gtk_button_new_with_label ("button7");
197 button[7] = gtk_button_new_stock (GTK_STOCK_BUTTON_CLOSE, accel_group);
198 button[8] = gtk_button_new_with_label ("button9");
200 gtk_signal_connect (GTK_OBJECT (button[0]), "clicked",
201 GTK_SIGNAL_FUNC(button_window),
204 gtk_table_attach (GTK_TABLE (table), button[0], 0, 1, 0, 1,
205 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
207 gtk_signal_connect (GTK_OBJECT (button[1]), "clicked",
208 GTK_SIGNAL_FUNC(button_window),
211 gtk_table_attach (GTK_TABLE (table), button[1], 1, 2, 1, 2,
212 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
214 gtk_signal_connect (GTK_OBJECT (button[2]), "clicked",
215 GTK_SIGNAL_FUNC(button_window),
217 gtk_table_attach (GTK_TABLE (table), button[2], 2, 3, 2, 3,
218 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
220 gtk_signal_connect (GTK_OBJECT (button[3]), "clicked",
221 GTK_SIGNAL_FUNC(button_window),
223 gtk_table_attach (GTK_TABLE (table), button[3], 0, 1, 2, 3,
224 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
226 gtk_signal_connect (GTK_OBJECT (button[4]), "clicked",
227 GTK_SIGNAL_FUNC(button_window),
229 gtk_table_attach (GTK_TABLE (table), button[4], 2, 3, 0, 1,
230 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
232 gtk_signal_connect (GTK_OBJECT (button[5]), "clicked",
233 GTK_SIGNAL_FUNC(button_window),
235 gtk_table_attach (GTK_TABLE (table), button[5], 1, 2, 2, 3,
236 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
238 gtk_signal_connect (GTK_OBJECT (button[6]), "clicked",
239 GTK_SIGNAL_FUNC(button_window),
241 gtk_table_attach (GTK_TABLE (table), button[6], 1, 2, 0, 1,
242 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
244 gtk_signal_connect (GTK_OBJECT (button[7]), "clicked",
245 GTK_SIGNAL_FUNC(button_window),
247 gtk_table_attach (GTK_TABLE (table), button[7], 2, 3, 1, 2,
248 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
250 gtk_signal_connect (GTK_OBJECT (button[8]), "clicked",
251 GTK_SIGNAL_FUNC(button_window),
253 gtk_table_attach (GTK_TABLE (table), button[8], 0, 1, 1, 2,
254 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
256 separator = gtk_hseparator_new ();
257 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
259 box2 = gtk_vbox_new (FALSE, 10);
260 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
261 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
263 button[9] = gtk_button_new_with_label ("close");
264 gtk_signal_connect_object (GTK_OBJECT (button[9]), "clicked",
265 GTK_SIGNAL_FUNC(gtk_widget_destroy),
266 GTK_OBJECT (window));
267 gtk_box_pack_start (GTK_BOX (box2), button[9], TRUE, TRUE, 0);
268 GTK_WIDGET_SET_FLAGS (button[9], GTK_CAN_DEFAULT);
269 gtk_widget_grab_default (button[9]);
272 if (!GTK_WIDGET_VISIBLE (window))
273 gtk_widget_show_all (window);
275 gtk_widget_hide (window);
283 create_toggle_buttons (void)
285 static GtkWidget *window = NULL;
289 GtkWidget *separator;
293 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
295 gtk_signal_connect (GTK_OBJECT (window), "destroy",
296 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
299 gtk_window_set_title (GTK_WINDOW (window), "GtkToggleButton");
300 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
302 box1 = gtk_vbox_new (FALSE, 0);
303 gtk_container_add (GTK_CONTAINER (window), box1);
305 box2 = gtk_vbox_new (FALSE, 10);
306 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
307 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
309 button = gtk_toggle_button_new_with_label ("button1");
310 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
312 button = gtk_toggle_button_new_with_label ("button2");
313 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
315 button = gtk_toggle_button_new_with_label ("button3");
316 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
318 separator = gtk_hseparator_new ();
319 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
321 box2 = gtk_vbox_new (FALSE, 10);
322 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
323 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
325 button = gtk_button_new_with_label ("close");
326 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
327 GTK_SIGNAL_FUNC(gtk_widget_destroy),
328 GTK_OBJECT (window));
329 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
330 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
331 gtk_widget_grab_default (button);
334 if (!GTK_WIDGET_VISIBLE (window))
335 gtk_widget_show_all (window);
337 gtk_widget_destroy (window);
345 create_check_buttons (void)
347 static GtkWidget *window = NULL;
351 GtkWidget *separator;
355 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
357 gtk_signal_connect (GTK_OBJECT (window), "destroy",
358 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
361 gtk_window_set_title (GTK_WINDOW (window), "GtkCheckButton");
362 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
364 box1 = gtk_vbox_new (FALSE, 0);
365 gtk_container_add (GTK_CONTAINER (window), box1);
367 box2 = gtk_vbox_new (FALSE, 10);
368 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
369 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
371 button = gtk_check_button_new_with_label ("button1");
372 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
374 button = gtk_check_button_new_with_label ("button2");
375 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
377 button = gtk_check_button_new_with_label ("button3");
378 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
380 separator = gtk_hseparator_new ();
381 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
383 box2 = gtk_vbox_new (FALSE, 10);
384 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
385 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
387 button = gtk_button_new_with_label ("close");
388 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
389 GTK_SIGNAL_FUNC(gtk_widget_destroy),
390 GTK_OBJECT (window));
391 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
392 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
393 gtk_widget_grab_default (button);
396 if (!GTK_WIDGET_VISIBLE (window))
397 gtk_widget_show_all (window);
399 gtk_widget_destroy (window);
407 create_radio_buttons (void)
409 static GtkWidget *window = NULL;
413 GtkWidget *separator;
417 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
419 gtk_signal_connect (GTK_OBJECT (window), "destroy",
420 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
423 gtk_window_set_title (GTK_WINDOW (window), "radio buttons");
424 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
426 box1 = gtk_vbox_new (FALSE, 0);
427 gtk_container_add (GTK_CONTAINER (window), box1);
429 box2 = gtk_vbox_new (FALSE, 10);
430 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
431 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
433 button = gtk_radio_button_new_with_label (NULL, "button1");
434 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
436 button = gtk_radio_button_new_with_label (
437 gtk_radio_button_group (GTK_RADIO_BUTTON (button)),
439 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
440 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
442 button = gtk_radio_button_new_with_label (
443 gtk_radio_button_group (GTK_RADIO_BUTTON (button)),
445 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
447 separator = gtk_hseparator_new ();
448 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
450 box2 = gtk_vbox_new (FALSE, 10);
451 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
452 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
454 button = gtk_button_new_with_label ("close");
455 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
456 GTK_SIGNAL_FUNC(gtk_widget_destroy),
457 GTK_OBJECT (window));
458 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
459 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
460 gtk_widget_grab_default (button);
463 if (!GTK_WIDGET_VISIBLE (window))
464 gtk_widget_show_all (window);
466 gtk_widget_destroy (window);
474 create_bbox (gint horizontal,
485 frame = gtk_frame_new (title);
488 bbox = gtk_hbutton_box_new ();
490 bbox = gtk_vbutton_box_new ();
492 gtk_container_set_border_width (GTK_CONTAINER (bbox), 5);
493 gtk_container_add (GTK_CONTAINER (frame), bbox);
495 gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), layout);
496 gtk_button_box_set_spacing (GTK_BUTTON_BOX (bbox), spacing);
497 gtk_button_box_set_child_size (GTK_BUTTON_BOX (bbox), child_w, child_h);
499 button = gtk_button_new_with_label ("OK");
500 gtk_container_add (GTK_CONTAINER (bbox), button);
502 button = gtk_button_new_with_label ("Cancel");
503 gtk_container_add (GTK_CONTAINER (bbox), button);
505 button = gtk_button_new_with_label ("Help");
506 gtk_container_add (GTK_CONTAINER (bbox), button);
512 create_button_box (void)
514 static GtkWidget* window = NULL;
515 GtkWidget *main_vbox;
518 GtkWidget *frame_horz;
519 GtkWidget *frame_vert;
523 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
524 gtk_window_set_title (GTK_WINDOW (window), "Button Boxes");
526 gtk_signal_connect (GTK_OBJECT (window), "destroy",
527 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
530 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
532 main_vbox = gtk_vbox_new (FALSE, 0);
533 gtk_container_add (GTK_CONTAINER (window), main_vbox);
535 frame_horz = gtk_frame_new ("Horizontal Button Boxes");
536 gtk_box_pack_start (GTK_BOX (main_vbox), frame_horz, TRUE, TRUE, 10);
538 vbox = gtk_vbox_new (FALSE, 0);
539 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
540 gtk_container_add (GTK_CONTAINER (frame_horz), vbox);
542 gtk_box_pack_start (GTK_BOX (vbox),
543 create_bbox (TRUE, "Spread", 40, 85, 20, GTK_BUTTONBOX_SPREAD),
546 gtk_box_pack_start (GTK_BOX (vbox),
547 create_bbox (TRUE, "Edge", 40, 85, 20, GTK_BUTTONBOX_EDGE),
550 gtk_box_pack_start (GTK_BOX (vbox),
551 create_bbox (TRUE, "Start", 40, 85, 20, GTK_BUTTONBOX_START),
554 gtk_box_pack_start (GTK_BOX (vbox),
555 create_bbox (TRUE, "End", 40, 85, 20, GTK_BUTTONBOX_END),
558 frame_vert = gtk_frame_new ("Vertical Button Boxes");
559 gtk_box_pack_start (GTK_BOX (main_vbox), frame_vert, TRUE, TRUE, 10);
561 hbox = gtk_hbox_new (FALSE, 0);
562 gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
563 gtk_container_add (GTK_CONTAINER (frame_vert), hbox);
565 gtk_box_pack_start (GTK_BOX (hbox),
566 create_bbox (FALSE, "Spread", 30, 85, 20, GTK_BUTTONBOX_SPREAD),
569 gtk_box_pack_start (GTK_BOX (hbox),
570 create_bbox (FALSE, "Edge", 30, 85, 20, GTK_BUTTONBOX_EDGE),
573 gtk_box_pack_start (GTK_BOX (hbox),
574 create_bbox (FALSE, "Start", 30, 85, 20, GTK_BUTTONBOX_START),
577 gtk_box_pack_start (GTK_BOX (hbox),
578 create_bbox (FALSE, "End", 30, 85, 20, GTK_BUTTONBOX_END),
582 if (!GTK_WIDGET_VISIBLE (window))
583 gtk_widget_show_all (window);
585 gtk_widget_destroy (window);
593 new_pixmap (char *filename,
595 GdkColor *background)
601 if (strcmp (filename, "test.xpm") == 0 ||
602 !file_exists (filename))
604 pixmap = gdk_pixmap_create_from_xpm_d (window, &mask,
609 pixmap = gdk_pixmap_create_from_xpm (window, &mask,
613 wpixmap = gtk_pixmap_new (pixmap, mask);
619 set_toolbar_horizontal (GtkWidget *widget,
622 gtk_toolbar_set_orientation (GTK_TOOLBAR (data), GTK_ORIENTATION_HORIZONTAL);
626 set_toolbar_vertical (GtkWidget *widget,
629 gtk_toolbar_set_orientation (GTK_TOOLBAR (data), GTK_ORIENTATION_VERTICAL);
633 set_toolbar_icons (GtkWidget *widget,
636 gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_ICONS);
640 set_toolbar_text (GtkWidget *widget,
643 gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_TEXT);
647 set_toolbar_both (GtkWidget *widget,
650 gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_BOTH);
654 set_toolbar_both_horiz (GtkWidget *widget,
657 gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_BOTH_HORIZ);
661 set_toolbar_small_space (GtkWidget *widget,
664 gtk_toolbar_set_space_size (GTK_TOOLBAR (data), 5);
668 set_toolbar_big_space (GtkWidget *widget,
671 gtk_toolbar_set_space_size (GTK_TOOLBAR (data), 10);
675 set_toolbar_enable (GtkWidget *widget,
678 gtk_toolbar_set_tooltips (GTK_TOOLBAR (data), TRUE);
682 set_toolbar_disable (GtkWidget *widget,
685 gtk_toolbar_set_tooltips (GTK_TOOLBAR (data), FALSE);
689 set_toolbar_borders (GtkWidget *widget,
692 gtk_toolbar_set_button_relief (GTK_TOOLBAR (data), GTK_RELIEF_NORMAL);
696 set_toolbar_borderless (GtkWidget *widget,
699 gtk_toolbar_set_button_relief (GTK_TOOLBAR (data), GTK_RELIEF_NONE);
703 set_toolbar_space_style_empty (GtkWidget *widget,
706 gtk_toolbar_set_space_style (GTK_TOOLBAR (data), GTK_TOOLBAR_SPACE_EMPTY);
710 set_toolbar_space_style_line (GtkWidget *widget,
713 gtk_toolbar_set_space_style (GTK_TOOLBAR (data), GTK_TOOLBAR_SPACE_LINE);
717 create_toolbar (void)
719 static GtkWidget *window = NULL;
725 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
726 gtk_window_set_title (GTK_WINDOW (window), "Toolbar test");
727 gtk_window_set_policy (GTK_WINDOW (window), FALSE, TRUE, TRUE);
729 gtk_signal_connect (GTK_OBJECT (window), "destroy",
730 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
733 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
734 gtk_widget_realize (window);
736 toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_BOTH);
737 gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NONE);
739 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
740 "Horizontal", "Horizontal toolbar layout", "Toolbar/Horizontal",
741 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
742 (GtkSignalFunc) set_toolbar_horizontal, toolbar);
743 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
744 "Vertical", "Vertical toolbar layout", "Toolbar/Vertical",
745 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
746 (GtkSignalFunc) set_toolbar_vertical, toolbar);
748 gtk_toolbar_append_space (GTK_TOOLBAR(toolbar));
750 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
751 "Icons", "Only show toolbar icons", "Toolbar/IconsOnly",
752 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
753 (GtkSignalFunc) set_toolbar_icons, toolbar);
754 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
755 "Text", "Only show toolbar text", "Toolbar/TextOnly",
756 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
757 (GtkSignalFunc) set_toolbar_text, toolbar);
758 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
759 "Both", "Show toolbar icons and text", "Toolbar/Both",
760 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
761 (GtkSignalFunc) set_toolbar_both, toolbar);
762 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
764 "Show toolbar icons and text in a horizontal fashion",
766 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
767 (GtkSignalFunc) set_toolbar_both_horiz, toolbar);
769 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
771 entry = gtk_entry_new ();
773 gtk_toolbar_append_widget (GTK_TOOLBAR (toolbar), entry, "This is an unusable GtkEntry ;)", "Hey don't click me!!!");
775 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
777 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
778 "Small", "Use small spaces", "Toolbar/Small",
779 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
780 (GtkSignalFunc) set_toolbar_small_space, toolbar);
781 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
782 "Big", "Use big spaces", "Toolbar/Big",
783 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
784 (GtkSignalFunc) set_toolbar_big_space, toolbar);
786 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
788 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
789 "Enable", "Enable tooltips", NULL,
790 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
791 (GtkSignalFunc) set_toolbar_enable, toolbar);
792 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
793 "Disable", "Disable tooltips", NULL,
794 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
795 (GtkSignalFunc) set_toolbar_disable, toolbar);
797 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
799 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
800 "Borders", "Show Borders", NULL,
801 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
802 (GtkSignalFunc) set_toolbar_borders, toolbar);
803 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
804 "Borderless", "Hide Borders", NULL,
805 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
806 (GtkSignalFunc) set_toolbar_borderless, toolbar);
808 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
810 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
811 "Empty", "Empty spaces", NULL,
812 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
813 (GtkSignalFunc) set_toolbar_space_style_empty, toolbar);
814 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
815 "Lines", "Lines in spaces", NULL,
816 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
817 (GtkSignalFunc) set_toolbar_space_style_line, toolbar);
819 gtk_container_add (GTK_CONTAINER (window), toolbar);
822 if (!GTK_WIDGET_VISIBLE (window))
823 gtk_widget_show_all (window);
825 gtk_widget_destroy (window);
829 make_toolbar (GtkWidget *window)
833 if (!GTK_WIDGET_REALIZED (window))
834 gtk_widget_realize (window);
836 toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_BOTH);
837 gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NONE);
839 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
840 "Horizontal", "Horizontal toolbar layout", NULL,
841 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
842 (GtkSignalFunc) set_toolbar_horizontal, toolbar);
843 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
844 "Vertical", "Vertical toolbar layout", NULL,
845 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
846 (GtkSignalFunc) set_toolbar_vertical, toolbar);
848 gtk_toolbar_append_space (GTK_TOOLBAR(toolbar));
850 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
851 "Icons", "Only show toolbar icons", NULL,
852 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
853 (GtkSignalFunc) set_toolbar_icons, toolbar);
854 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
855 "Text", "Only show toolbar text", NULL,
856 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
857 (GtkSignalFunc) set_toolbar_text, toolbar);
858 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
859 "Both", "Show toolbar icons and text", NULL,
860 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
861 (GtkSignalFunc) set_toolbar_both, toolbar);
863 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
865 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
866 "Small", "Use small spaces", NULL,
867 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
868 (GtkSignalFunc) set_toolbar_small_space, toolbar);
869 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
870 "Big", "Use big spaces", "Toolbar/Big",
871 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
872 (GtkSignalFunc) set_toolbar_big_space, toolbar);
874 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
876 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
877 "Enable", "Enable tooltips", NULL,
878 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
879 (GtkSignalFunc) set_toolbar_enable, toolbar);
880 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
881 "Disable", "Disable tooltips", NULL,
882 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
883 (GtkSignalFunc) set_toolbar_disable, toolbar);
885 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
887 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
888 "Borders", "Show Borders", NULL,
889 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
890 (GtkSignalFunc) set_toolbar_borders, toolbar);
891 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
892 "Borderless", "Hide Borders", NULL,
893 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
894 (GtkSignalFunc) set_toolbar_borderless, toolbar);
903 static guint statusbar_counter = 1;
906 statusbar_push (GtkWidget *button,
907 GtkStatusbar *statusbar)
911 sprintf (text, "something %d", statusbar_counter++);
913 gtk_statusbar_push (statusbar, 1, text);
917 statusbar_pop (GtkWidget *button,
918 GtkStatusbar *statusbar)
920 gtk_statusbar_pop (statusbar, 1);
924 statusbar_steal (GtkWidget *button,
925 GtkStatusbar *statusbar)
927 gtk_statusbar_remove (statusbar, 1, 4);
931 statusbar_popped (GtkStatusbar *statusbar,
935 if (!statusbar->messages)
936 statusbar_counter = 1;
940 statusbar_contexts (GtkStatusbar *statusbar)
944 string = "any context";
945 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
947 gtk_statusbar_get_context_id (statusbar, string));
949 string = "idle messages";
950 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
952 gtk_statusbar_get_context_id (statusbar, string));
954 string = "some text";
955 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
957 gtk_statusbar_get_context_id (statusbar, string));
959 string = "hit the mouse";
960 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
962 gtk_statusbar_get_context_id (statusbar, string));
964 string = "hit the mouse2";
965 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
967 gtk_statusbar_get_context_id (statusbar, string));
971 statusbar_dump_stack (GtkStatusbar *statusbar)
975 for (list = statusbar->messages; list; list = list->next)
977 GtkStatusbarMsg *msg;
980 g_print ("context_id: %d, message_id: %d, status_text: \"%s\"\n",
988 create_statusbar (void)
990 static GtkWidget *window = NULL;
994 GtkWidget *separator;
995 GtkWidget *statusbar;
999 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1001 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1002 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
1005 gtk_window_set_title (GTK_WINDOW (window), "statusbar");
1006 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
1008 box1 = gtk_vbox_new (FALSE, 0);
1009 gtk_container_add (GTK_CONTAINER (window), box1);
1011 box2 = gtk_vbox_new (FALSE, 10);
1012 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
1013 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
1015 statusbar = gtk_statusbar_new ();
1016 gtk_box_pack_end (GTK_BOX (box1), statusbar, TRUE, TRUE, 0);
1017 gtk_signal_connect (GTK_OBJECT (statusbar),
1019 GTK_SIGNAL_FUNC (statusbar_popped),
1022 button = gtk_widget_new (gtk_button_get_type (),
1023 "label", "push something",
1026 "signal::clicked", statusbar_push, statusbar,
1029 button = gtk_widget_new (gtk_button_get_type (),
1033 "signal_after::clicked", statusbar_pop, statusbar,
1036 button = gtk_widget_new (gtk_button_get_type (),
1037 "label", "steal #4",
1040 "signal_after::clicked", statusbar_steal, statusbar,
1043 button = gtk_widget_new (gtk_button_get_type (),
1044 "label", "dump stack",
1047 "object_signal::clicked", statusbar_dump_stack, statusbar,
1050 button = gtk_widget_new (gtk_button_get_type (),
1051 "label", "test contexts",
1054 "object_signal_after::clicked", statusbar_contexts, statusbar,
1057 separator = gtk_hseparator_new ();
1058 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
1060 box2 = gtk_vbox_new (FALSE, 10);
1061 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
1062 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
1064 button = gtk_button_new_with_label ("close");
1065 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
1066 GTK_SIGNAL_FUNC(gtk_widget_destroy),
1067 GTK_OBJECT (window));
1068 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
1069 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
1070 gtk_widget_grab_default (button);
1073 if (!GTK_WIDGET_VISIBLE (window))
1074 gtk_widget_show_all (window);
1076 gtk_widget_destroy (window);
1084 cb_tree_destroy_event(GtkWidget* w)
1086 sTreeButtons* tree_buttons;
1088 /* free buttons structure associate at this tree */
1089 tree_buttons = gtk_object_get_user_data (GTK_OBJECT (w));
1090 g_free (tree_buttons);
1094 cb_add_new_item(GtkWidget* w, GtkTree* tree)
1096 sTreeButtons* tree_buttons;
1097 GList* selected_list;
1098 GtkWidget* selected_item;
1100 GtkWidget* item_new;
1103 tree_buttons = gtk_object_get_user_data(GTK_OBJECT(tree));
1105 selected_list = GTK_TREE_SELECTION_OLD(tree);
1107 if(selected_list == NULL)
1109 /* there is no item in tree */
1110 subtree = GTK_WIDGET(tree);
1114 /* list can have only one element */
1115 selected_item = GTK_WIDGET(selected_list->data);
1117 subtree = GTK_TREE_ITEM_SUBTREE(selected_item);
1121 /* current selected item have not subtree ... create it */
1122 subtree = gtk_tree_new();
1123 gtk_tree_item_set_subtree(GTK_TREE_ITEM(selected_item),
1128 /* at this point, we know which subtree will be used to add new item */
1129 /* create a new item */
1130 sprintf(buffer, "item add %d", tree_buttons->nb_item_add);
1131 item_new = gtk_tree_item_new_with_label(buffer);
1132 gtk_tree_append(GTK_TREE(subtree), item_new);
1133 gtk_widget_show(item_new);
1135 tree_buttons->nb_item_add++;
1139 cb_remove_item(GtkWidget*w, GtkTree* tree)
1141 GList* selected_list;
1144 selected_list = GTK_TREE_SELECTION_OLD(tree);
1148 while (selected_list)
1150 clear_list = g_list_prepend (clear_list, selected_list->data);
1151 selected_list = selected_list->next;
1154 clear_list = g_list_reverse (clear_list);
1155 gtk_tree_remove_items(tree, clear_list);
1157 g_list_free (clear_list);
1161 cb_remove_subtree(GtkWidget*w, GtkTree* tree)
1163 GList* selected_list;
1166 selected_list = GTK_TREE_SELECTION_OLD(tree);
1170 item = GTK_TREE_ITEM (selected_list->data);
1172 gtk_tree_item_remove_subtree (item);
1177 cb_tree_changed(GtkTree* tree)
1179 sTreeButtons* tree_buttons;
1180 GList* selected_list;
1183 tree_buttons = gtk_object_get_user_data(GTK_OBJECT(tree));
1185 selected_list = GTK_TREE_SELECTION_OLD(tree);
1186 nb_selected = g_list_length(selected_list);
1188 if(nb_selected == 0)
1190 if(tree->children == NULL)
1191 gtk_widget_set_sensitive(tree_buttons->add_button, TRUE);
1193 gtk_widget_set_sensitive(tree_buttons->add_button, FALSE);
1194 gtk_widget_set_sensitive(tree_buttons->remove_button, FALSE);
1195 gtk_widget_set_sensitive(tree_buttons->subtree_button, FALSE);
1199 gtk_widget_set_sensitive(tree_buttons->remove_button, TRUE);
1200 gtk_widget_set_sensitive(tree_buttons->add_button, (nb_selected == 1));
1201 gtk_widget_set_sensitive(tree_buttons->subtree_button, (nb_selected == 1));
1206 create_subtree(GtkWidget* item, guint level, guint nb_item_max, guint recursion_level_max)
1208 GtkWidget* item_subtree;
1209 GtkWidget* item_new;
1214 if(level == recursion_level_max) return;
1218 /* query with no root item */
1220 item_subtree = item;
1225 /* query with no root item */
1226 /* create subtree and associate it with current item */
1227 item_subtree = gtk_tree_new();
1231 for(nb_item = 0; nb_item < nb_item_max; nb_item++)
1233 sprintf(buffer, "item %d-%d", level, nb_item);
1234 item_new = gtk_tree_item_new_with_label(buffer);
1235 gtk_tree_append(GTK_TREE(item_subtree), item_new);
1236 create_subtree(item_new, level+1, nb_item_max, recursion_level_max);
1237 gtk_widget_show(item_new);
1241 gtk_tree_item_set_subtree(GTK_TREE_ITEM(item), item_subtree);
1245 create_tree_sample(guint selection_mode,
1246 guint draw_line, guint view_line, guint no_root_item,
1247 guint nb_item_max, guint recursion_level_max)
1252 GtkWidget* separator;
1254 GtkWidget* scrolled_win;
1255 GtkWidget* root_tree;
1256 GtkWidget* root_item;
1257 sTreeButtons* tree_buttons;
1259 /* create tree buttons struct */
1260 if ((tree_buttons = g_malloc (sizeof (sTreeButtons))) == NULL)
1262 g_error("can't allocate memory for tree structure !\n");
1265 tree_buttons->nb_item_add = 0;
1267 /* create top level window */
1268 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
1269 gtk_window_set_title(GTK_WINDOW(window), "Tree Sample");
1270 gtk_signal_connect(GTK_OBJECT(window), "destroy",
1271 (GtkSignalFunc) cb_tree_destroy_event, NULL);
1272 gtk_object_set_user_data(GTK_OBJECT(window), tree_buttons);
1274 box1 = gtk_vbox_new(FALSE, 0);
1275 gtk_container_add(GTK_CONTAINER(window), box1);
1276 gtk_widget_show(box1);
1278 /* create tree box */
1279 box2 = gtk_vbox_new(FALSE, 0);
1280 gtk_box_pack_start(GTK_BOX(box1), box2, TRUE, TRUE, 0);
1281 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1282 gtk_widget_show(box2);
1284 /* create scrolled window */
1285 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
1286 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
1287 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1288 gtk_box_pack_start (GTK_BOX (box2), scrolled_win, TRUE, TRUE, 0);
1289 gtk_widget_set_usize (scrolled_win, 200, 200);
1290 gtk_widget_show (scrolled_win);
1292 /* create root tree widget */
1293 root_tree = gtk_tree_new();
1294 gtk_signal_connect(GTK_OBJECT(root_tree), "selection_changed",
1295 (GtkSignalFunc)cb_tree_changed,
1297 gtk_object_set_user_data(GTK_OBJECT(root_tree), tree_buttons);
1298 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_win), root_tree);
1299 gtk_tree_set_selection_mode(GTK_TREE(root_tree), selection_mode);
1300 gtk_tree_set_view_lines(GTK_TREE(root_tree), draw_line);
1301 gtk_tree_set_view_mode(GTK_TREE(root_tree), !view_line);
1302 gtk_widget_show(root_tree);
1306 /* set root tree to subtree function with root item variable */
1307 root_item = GTK_WIDGET(root_tree);
1311 /* create root tree item widget */
1312 root_item = gtk_tree_item_new_with_label("root item");
1313 gtk_tree_append(GTK_TREE(root_tree), root_item);
1314 gtk_widget_show(root_item);
1316 create_subtree(root_item, -no_root_item, nb_item_max, recursion_level_max);
1318 box2 = gtk_vbox_new(FALSE, 0);
1319 gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, FALSE, 0);
1320 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1321 gtk_widget_show(box2);
1323 button = gtk_button_new_with_label("Add Item");
1324 gtk_widget_set_sensitive(button, FALSE);
1325 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1326 (GtkSignalFunc) cb_add_new_item,
1327 (gpointer)root_tree);
1328 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1329 gtk_widget_show(button);
1330 tree_buttons->add_button = button;
1332 button = gtk_button_new_with_label("Remove Item(s)");
1333 gtk_widget_set_sensitive(button, FALSE);
1334 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1335 (GtkSignalFunc) cb_remove_item,
1336 (gpointer)root_tree);
1337 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1338 gtk_widget_show(button);
1339 tree_buttons->remove_button = button;
1341 button = gtk_button_new_with_label("Remove Subtree");
1342 gtk_widget_set_sensitive(button, FALSE);
1343 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1344 (GtkSignalFunc) cb_remove_subtree,
1345 (gpointer)root_tree);
1346 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1347 gtk_widget_show(button);
1348 tree_buttons->subtree_button = button;
1350 /* create separator */
1351 separator = gtk_hseparator_new();
1352 gtk_box_pack_start(GTK_BOX(box1), separator, FALSE, FALSE, 0);
1353 gtk_widget_show(separator);
1355 /* create button box */
1356 box2 = gtk_vbox_new(FALSE, 0);
1357 gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, FALSE, 0);
1358 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1359 gtk_widget_show(box2);
1361 button = gtk_button_new_with_label("Close");
1362 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1363 gtk_signal_connect_object(GTK_OBJECT (button), "clicked",
1364 (GtkSignalFunc) gtk_widget_destroy,
1365 GTK_OBJECT(window));
1366 gtk_widget_show(button);
1368 gtk_widget_show(window);
1372 cb_create_tree(GtkWidget* w)
1374 guint selection_mode = GTK_SELECTION_SINGLE;
1379 guint recursion_level;
1381 /* get selection mode choice */
1382 if(GTK_TOGGLE_BUTTON(sTreeSampleSelection.single_button)->active)
1383 selection_mode = GTK_SELECTION_SINGLE;
1385 if(GTK_TOGGLE_BUTTON(sTreeSampleSelection.browse_button)->active)
1386 selection_mode = GTK_SELECTION_BROWSE;
1388 selection_mode = GTK_SELECTION_MULTIPLE;
1390 /* get options choice */
1391 draw_line = GTK_TOGGLE_BUTTON(sTreeSampleSelection.draw_line_button)->active;
1392 view_line = GTK_TOGGLE_BUTTON(sTreeSampleSelection.view_line_button)->active;
1393 no_root_item = GTK_TOGGLE_BUTTON(sTreeSampleSelection.no_root_item_button)->active;
1396 nb_item = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(sTreeSampleSelection.nb_item_spinner));
1397 recursion_level = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(sTreeSampleSelection.recursion_spinner));
1399 if (pow (nb_item, recursion_level) > 10000)
1401 g_print ("%g total items? That will take a very long time. Try less\n",
1402 pow (nb_item, recursion_level));
1406 create_tree_sample(selection_mode, draw_line, view_line, no_root_item, nb_item, recursion_level);
1410 create_tree_mode_window(void)
1412 static GtkWidget* window;
1420 GtkWidget* separator;
1427 /* create toplevel window */
1428 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
1429 gtk_window_set_title(GTK_WINDOW(window), "Set Tree Parameters");
1430 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1431 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
1433 box1 = gtk_vbox_new(FALSE, 0);
1434 gtk_container_add(GTK_CONTAINER(window), box1);
1436 /* create upper box - selection box */
1437 box2 = gtk_vbox_new(FALSE, 5);
1438 gtk_box_pack_start(GTK_BOX(box1), box2, TRUE, TRUE, 0);
1439 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1441 box3 = gtk_hbox_new(FALSE, 5);
1442 gtk_box_pack_start(GTK_BOX(box2), box3, TRUE, TRUE, 0);
1444 /* create selection mode frame */
1445 frame = gtk_frame_new("Selection Mode");
1446 gtk_box_pack_start(GTK_BOX(box3), frame, TRUE, TRUE, 0);
1448 box4 = gtk_vbox_new(FALSE, 0);
1449 gtk_container_add(GTK_CONTAINER(frame), box4);
1450 gtk_container_set_border_width(GTK_CONTAINER(box4), 5);
1452 /* create radio button */
1453 button = gtk_radio_button_new_with_label(NULL, "SINGLE");
1454 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1455 sTreeSampleSelection.single_button = button;
1457 button = gtk_radio_button_new_with_label(gtk_radio_button_group (GTK_RADIO_BUTTON (button)),
1459 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1460 sTreeSampleSelection.browse_button = button;
1462 button = gtk_radio_button_new_with_label(gtk_radio_button_group (GTK_RADIO_BUTTON (button)),
1464 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1465 sTreeSampleSelection.multiple_button = button;
1467 sTreeSampleSelection.selection_mode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (button));
1469 /* create option mode frame */
1470 frame = gtk_frame_new("Options");
1471 gtk_box_pack_start(GTK_BOX(box3), frame, TRUE, TRUE, 0);
1473 box4 = gtk_vbox_new(FALSE, 0);
1474 gtk_container_add(GTK_CONTAINER(frame), box4);
1475 gtk_container_set_border_width(GTK_CONTAINER(box4), 5);
1477 /* create check button */
1478 button = gtk_check_button_new_with_label("Draw line");
1479 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1480 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
1481 sTreeSampleSelection.draw_line_button = button;
1483 button = gtk_check_button_new_with_label("View Line mode");
1484 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1485 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
1486 sTreeSampleSelection.view_line_button = button;
1488 button = gtk_check_button_new_with_label("Without Root item");
1489 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1490 sTreeSampleSelection.no_root_item_button = button;
1492 /* create recursion parameter */
1493 frame = gtk_frame_new("Size Parameters");
1494 gtk_box_pack_start(GTK_BOX(box2), frame, TRUE, TRUE, 0);
1496 box4 = gtk_hbox_new(FALSE, 5);
1497 gtk_container_add(GTK_CONTAINER(frame), box4);
1498 gtk_container_set_border_width(GTK_CONTAINER(box4), 5);
1500 /* create number of item spin button */
1501 box5 = gtk_hbox_new(FALSE, 5);
1502 gtk_box_pack_start(GTK_BOX(box4), box5, FALSE, FALSE, 0);
1504 label = gtk_label_new("Number of items : ");
1505 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
1506 gtk_box_pack_start (GTK_BOX (box5), label, FALSE, TRUE, 0);
1508 adj = (GtkAdjustment *) gtk_adjustment_new ((gfloat)DEFAULT_NUMBER_OF_ITEM, 1.0, 255.0, 1.0,
1510 spinner = gtk_spin_button_new (adj, 0, 0);
1511 gtk_box_pack_start (GTK_BOX (box5), spinner, FALSE, TRUE, 0);
1512 sTreeSampleSelection.nb_item_spinner = spinner;
1514 /* create recursion level spin button */
1515 box5 = gtk_hbox_new(FALSE, 5);
1516 gtk_box_pack_start(GTK_BOX(box4), box5, FALSE, FALSE, 0);
1518 label = gtk_label_new("Depth : ");
1519 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
1520 gtk_box_pack_start (GTK_BOX (box5), label, FALSE, TRUE, 0);
1522 adj = (GtkAdjustment *) gtk_adjustment_new ((gfloat)DEFAULT_RECURSION_LEVEL, 0.0, 255.0, 1.0,
1524 spinner = gtk_spin_button_new (adj, 0, 0);
1525 gtk_box_pack_start (GTK_BOX (box5), spinner, FALSE, TRUE, 0);
1526 sTreeSampleSelection.recursion_spinner = spinner;
1528 /* create horizontal separator */
1529 separator = gtk_hseparator_new();
1530 gtk_box_pack_start(GTK_BOX(box1), separator, FALSE, FALSE, 0);
1532 /* create bottom button box */
1533 box2 = gtk_hbox_new(TRUE, 10);
1534 gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, FALSE, 0);
1535 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1537 button = gtk_button_new_with_label("Create Tree");
1538 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1539 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1540 (GtkSignalFunc) cb_create_tree, NULL);
1542 button = gtk_button_new_with_label("Close");
1543 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1544 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
1545 GTK_SIGNAL_FUNC(gtk_widget_destroy),
1546 GTK_OBJECT (window));
1548 if (!GTK_WIDGET_VISIBLE (window))
1549 gtk_widget_show_all (window);
1551 gtk_widget_destroy (window);
1559 handle_box_child_signal (GtkHandleBox *hb,
1561 const gchar *action)
1563 printf ("%s: child <%s> %sed\n",
1564 gtk_type_name (GTK_OBJECT_TYPE (hb)),
1565 gtk_type_name (GTK_OBJECT_TYPE (child)),
1570 create_handle_box (void)
1572 static GtkWidget* window = NULL;
1573 GtkWidget *handle_box;
1574 GtkWidget *handle_box2;
1579 GtkWidget *separator;
1583 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1584 gtk_window_set_title (GTK_WINDOW (window),
1586 gtk_window_set_policy (GTK_WINDOW (window),
1591 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1592 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
1595 gtk_container_set_border_width (GTK_CONTAINER (window), 20);
1597 vbox = gtk_vbox_new (FALSE, 0);
1598 gtk_container_add (GTK_CONTAINER (window), vbox);
1599 gtk_widget_show (vbox);
1601 label = gtk_label_new ("Above");
1602 gtk_container_add (GTK_CONTAINER (vbox), label);
1603 gtk_widget_show (label);
1605 separator = gtk_hseparator_new ();
1606 gtk_container_add (GTK_CONTAINER (vbox), separator);
1607 gtk_widget_show (separator);
1609 hbox = gtk_hbox_new (FALSE, 10);
1610 gtk_container_add (GTK_CONTAINER (vbox), hbox);
1611 gtk_widget_show (hbox);
1613 separator = gtk_hseparator_new ();
1614 gtk_container_add (GTK_CONTAINER (vbox), separator);
1615 gtk_widget_show (separator);
1617 label = gtk_label_new ("Below");
1618 gtk_container_add (GTK_CONTAINER (vbox), label);
1619 gtk_widget_show (label);
1621 handle_box = gtk_handle_box_new ();
1622 gtk_box_pack_start (GTK_BOX (hbox), handle_box, FALSE, FALSE, 0);
1623 gtk_signal_connect (GTK_OBJECT (handle_box),
1625 GTK_SIGNAL_FUNC (handle_box_child_signal),
1627 gtk_signal_connect (GTK_OBJECT (handle_box),
1629 GTK_SIGNAL_FUNC (handle_box_child_signal),
1631 gtk_widget_show (handle_box);
1633 toolbar = make_toolbar (window);
1634 gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NORMAL);
1635 gtk_container_add (GTK_CONTAINER (handle_box), toolbar);
1636 gtk_widget_show (toolbar);
1638 handle_box = gtk_handle_box_new ();
1639 gtk_box_pack_start (GTK_BOX (hbox), handle_box, FALSE, FALSE, 0);
1640 gtk_signal_connect (GTK_OBJECT (handle_box),
1642 GTK_SIGNAL_FUNC (handle_box_child_signal),
1644 gtk_signal_connect (GTK_OBJECT (handle_box),
1646 GTK_SIGNAL_FUNC (handle_box_child_signal),
1648 gtk_widget_show (handle_box);
1650 handle_box2 = gtk_handle_box_new ();
1651 gtk_container_add (GTK_CONTAINER (handle_box), handle_box2);
1652 gtk_signal_connect (GTK_OBJECT (handle_box2),
1654 GTK_SIGNAL_FUNC (handle_box_child_signal),
1656 gtk_signal_connect (GTK_OBJECT (handle_box2),
1658 GTK_SIGNAL_FUNC (handle_box_child_signal),
1660 gtk_widget_show (handle_box2);
1662 label = gtk_label_new ("Fooo!");
1663 gtk_container_add (GTK_CONTAINER (handle_box2), label);
1664 gtk_widget_show (label);
1667 if (!GTK_WIDGET_VISIBLE (window))
1668 gtk_widget_show (window);
1670 gtk_widget_destroy (window);
1674 * Test for getting an image from a drawable
1685 take_snapshot (GtkWidget *button,
1688 struct GetImageData *gid = data;
1689 GdkRectangle visible;
1691 int height_fraction;
1694 GdkColor color = { 0, 30000, 0, 0 };
1695 GdkRectangle target;
1698 /* Do some begin_paint_rect on some random rects, draw some
1699 * distinctive stuff into those rects, then take the snapshot.
1700 * figure out whether any rects were overlapped and report to
1704 visible = gid->sw->allocation;
1706 visible.x = gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (gid->sw))->value;
1707 visible.y = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (gid->sw))->value;
1709 width_fraction = visible.width / 4;
1710 height_fraction = visible.height / 4;
1712 gc = gdk_gc_new (gid->src->window);
1713 black_gc = gid->src->style->black_gc;
1715 gdk_gc_set_rgb_fg_color (gc, &color);
1718 target.x = visible.x + width_fraction;
1719 target.y = visible.y + height_fraction * 3;
1720 target.width = width_fraction;
1721 target.height = height_fraction / 2;
1723 gdk_window_begin_paint_rect (gid->src->window,
1726 gdk_draw_rectangle (gid->src->window,
1730 target.width, target.height);
1732 gdk_draw_rectangle (gid->src->window,
1735 target.x + 10, target.y + 10,
1736 target.width - 20, target.height - 20);
1738 target.x = visible.x + width_fraction;
1739 target.y = visible.y + height_fraction;
1740 target.width = width_fraction;
1741 target.height = height_fraction;
1743 gdk_window_begin_paint_rect (gid->src->window,
1746 gdk_draw_rectangle (gid->src->window,
1750 target.width, target.height);
1752 gdk_draw_rectangle (gid->src->window,
1755 target.x + 10, target.y + 10,
1756 target.width - 20, target.height - 20);
1758 target.x = visible.x + width_fraction * 3;
1759 target.y = visible.y + height_fraction;
1760 target.width = width_fraction / 2;
1761 target.height = height_fraction;
1763 gdk_window_begin_paint_rect (gid->src->window,
1766 gdk_draw_rectangle (gid->src->window,
1770 target.width, target.height);
1772 gdk_draw_rectangle (gid->src->window,
1775 target.x + 10, target.y + 10,
1776 target.width - 20, target.height - 20);
1778 target.x = visible.x + width_fraction * 2;
1779 target.y = visible.y + height_fraction * 2;
1780 target.width = width_fraction / 4;
1781 target.height = height_fraction / 4;
1783 gdk_window_begin_paint_rect (gid->src->window,
1786 gdk_draw_rectangle (gid->src->window,
1790 target.width, target.height);
1792 gdk_draw_rectangle (gid->src->window,
1795 target.x + 10, target.y + 10,
1796 target.width - 20, target.height - 20);
1798 target.x += target.width / 2;
1799 target.y += target.width / 2;
1801 gdk_window_begin_paint_rect (gid->src->window,
1804 gdk_draw_rectangle (gid->src->window,
1808 target.width, target.height);
1810 gdk_draw_rectangle (gid->src->window,
1813 target.x + 10, target.y + 10,
1814 target.width - 20, target.height - 20);
1816 /* Screen shot area */
1818 target.x = visible.x + width_fraction * 1.5;
1819 target.y = visible.y + height_fraction * 1.5;
1820 target.width = width_fraction * 2;
1821 target.height = height_fraction * 2;
1823 shot = gdk_drawable_get_image (gid->src->window,
1825 target.width, target.height);
1827 gtk_image_set_from_image (GTK_IMAGE (gid->snap),
1830 g_object_unref (G_OBJECT (shot));
1832 gdk_window_end_paint (gid->src->window);
1833 gdk_window_end_paint (gid->src->window);
1834 gdk_window_end_paint (gid->src->window);
1835 gdk_window_end_paint (gid->src->window);
1836 gdk_window_end_paint (gid->src->window);
1838 gdk_draw_rectangle (gid->src->window,
1839 gid->src->style->black_gc,
1842 target.width, target.height);
1844 g_object_unref (G_OBJECT (gc));
1848 image_source_expose (GtkWidget *da,
1849 GdkEventExpose *event,
1852 int x = event->area.x;
1853 GdkColor red = { 0, 65535, 0, 0 };
1854 GdkColor green = { 0, 0, 65535, 0 };
1855 GdkColor blue = { 0, 0, 0, 65535 };
1858 gc = gdk_gc_new (event->window);
1860 while (x < (event->area.x + event->area.width))
1867 gdk_gc_set_rgb_fg_color (gc, &red);
1873 gdk_gc_set_rgb_fg_color (gc, &green);
1879 gdk_gc_set_rgb_fg_color (gc, &blue);
1883 g_assert_not_reached ();
1887 gdk_draw_line (event->window,
1890 x, event->area.y + event->area.height);
1895 g_object_unref (G_OBJECT (gc));
1901 create_get_image (void)
1903 static GtkWidget *window = NULL;
1906 gtk_widget_destroy (window);
1915 struct GetImageData *gid;
1917 gid = g_new (struct GetImageData, 1);
1919 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1921 gtk_signal_connect (GTK_OBJECT (window),
1923 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
1926 gtk_object_set_data_full (GTK_OBJECT (window),
1927 "testgtk-get-image-data",
1931 vbox = gtk_vbox_new (FALSE, 0);
1933 gtk_container_add (GTK_CONTAINER (window), vbox);
1935 sw = gtk_scrolled_window_new (NULL, NULL);
1936 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
1937 GTK_POLICY_AUTOMATIC,
1938 GTK_POLICY_AUTOMATIC);
1942 gtk_widget_set_usize (sw, 400, 400);
1944 src = gtk_drawing_area_new ();
1945 gtk_widget_set_usize (src, 10000, 10000);
1947 gtk_signal_connect (GTK_OBJECT (src),
1949 GTK_SIGNAL_FUNC (image_source_expose),
1954 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (sw),
1957 gtk_box_pack_start (GTK_BOX (vbox),
1961 hbox = gtk_hbox_new (FALSE, 3);
1963 snap = gtk_widget_new (GTK_TYPE_IMAGE, NULL);
1967 sw = gtk_scrolled_window_new (NULL, NULL);
1968 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
1969 GTK_POLICY_AUTOMATIC,
1970 GTK_POLICY_AUTOMATIC);
1971 gtk_widget_set_usize (sw, 300, 300);
1973 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (sw), snap);
1975 gtk_box_pack_end (GTK_BOX (hbox), sw, FALSE, FALSE, 5);
1977 button = gtk_button_new_with_label ("Get image from drawable");
1979 gtk_signal_connect (GTK_OBJECT (button),
1981 GTK_SIGNAL_FUNC (take_snapshot),
1984 gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
1986 gtk_box_pack_end (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
1988 gtk_widget_show_all (window);
1995 void create_labels (void)
1997 static GtkWidget *window = NULL;
2007 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2008 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2009 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2012 gtk_window_set_title (GTK_WINDOW (window), "Label");
2013 vbox = gtk_vbox_new (FALSE, 5);
2014 hbox = gtk_hbox_new (FALSE, 5);
2015 gtk_container_add (GTK_CONTAINER (window), hbox);
2016 gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);
2017 gtk_container_set_border_width (GTK_CONTAINER (window), 5);
2019 frame = gtk_frame_new ("Normal Label");
2020 label = gtk_label_new ("This is a Normal label");
2021 gtk_container_add (GTK_CONTAINER (frame), label);
2022 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2024 frame = gtk_frame_new ("Multi-line Label");
2025 label = gtk_label_new ("This is a Multi-line label.\nSecond line\nThird line");
2026 gtk_container_add (GTK_CONTAINER (frame), label);
2027 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2029 frame = gtk_frame_new ("Left Justified Label");
2030 label = gtk_label_new ("This is a Left-Justified\nMulti-line label.\nThird line");
2031 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2032 gtk_container_add (GTK_CONTAINER (frame), label);
2033 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2035 frame = gtk_frame_new ("Right Justified Label");
2036 label = gtk_label_new ("This is a Right-Justified\nMulti-line label.\nFourth line, (j/k)");
2037 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_RIGHT);
2038 gtk_container_add (GTK_CONTAINER (frame), label);
2039 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2041 frame = gtk_frame_new ("Internationalized Label");
2042 label = gtk_label_new ("French (Français) Bonjour, Salut\n"
2043 "Korean (한글) 안녕하세요, 안녕하십니까\n"
2044 "Russian (Русский) Здравствуйте!");
2045 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2046 gtk_container_add (GTK_CONTAINER (frame), label);
2047 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2049 frame = gtk_frame_new ("Bidirection Label");
2050 label = gtk_label_new ("Arabic السلام عليكم\n"
2052 gtk_widget_set_direction (label, GTK_TEXT_DIR_RTL);
2053 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_RIGHT);
2054 gtk_container_add (GTK_CONTAINER (frame), label);
2055 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2057 vbox = gtk_vbox_new (FALSE, 5);
2058 gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);
2059 frame = gtk_frame_new ("Line wrapped label");
2060 label = gtk_label_new ("This is an example of a line-wrapped label. It should not be taking "\
2061 "up the entire "/* big space to test spacing */\
2062 "width allocated to it, but automatically wraps the words to fit. "\
2063 "The time has come, for all good men, to come to the aid of their party. "\
2064 "The sixth sheik's six sheep's sick.\n"\
2065 " It supports multiple paragraphs correctly, and correctly adds "\
2066 "many extra spaces. ");
2068 gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
2069 gtk_container_add (GTK_CONTAINER (frame), label);
2070 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2072 frame = gtk_frame_new ("Filled, wrapped label");
2073 label = gtk_label_new ("This is an example of a line-wrapped, filled label. It should be taking "\
2074 "up the entire width allocated to it. Here is a seneance to prove "\
2075 "my point. Here is another sentence. "\
2076 "Here comes the sun, do de do de do.\n"\
2077 " This is a new paragraph.\n"\
2078 " This is another newer, longer, better paragraph. It is coming to an end, "\
2080 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_FILL);
2081 gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
2082 gtk_container_add (GTK_CONTAINER (frame), label);
2083 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2085 frame = gtk_frame_new ("Underlined label");
2086 label = gtk_label_new ("This label is underlined!\n"
2087 "This one is underlined (こんにちは) in quite a funky fashion");
2088 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2089 gtk_label_set_pattern (GTK_LABEL (label), "_________________________ _ _________ _ _____ _ __ __ ___ ____ _____");
2090 gtk_container_add (GTK_CONTAINER (frame), label);
2091 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2093 frame = gtk_frame_new ("Markup label");
2094 label = gtk_label_new (NULL);
2096 /* There's also a gtk_label_set_markup() without accel if you
2097 * don't have an accelerator key
2100 gtk_label_set_markup_with_accel (GTK_LABEL (label),
2101 "This <span foreground=\"blue\" background=\"orange\">label</span> has "
2102 "<b>markup</b> _such as "
2103 "<big><i>Big Italics</i></big>\n"
2104 "<tt>Monospace font</tt>\n"
2105 "<u>Underline!</u>\n"
2107 "<span foreground=\"green\" background=\"red\">Ugly colors</span>\n"
2108 "and nothing on this line,\n"
2111 "or even on this one\n"
2112 "la <big>la <big>la <big>la <big>la</big></big></big></big>\n"
2113 "but this _word is <span foreground=\"purple\"><big>purple</big></span>\n"
2114 "We like <sup>superscript</sup> and <sub>subscript</sub> too");
2116 g_return_if_fail (keyval == GDK_s);
2118 gtk_container_add (GTK_CONTAINER (frame), label);
2119 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2122 if (!GTK_WIDGET_VISIBLE (window))
2123 gtk_widget_show_all (window);
2125 gtk_widget_destroy (window);
2133 reparent_label (GtkWidget *widget,
2134 GtkWidget *new_parent)
2138 label = gtk_object_get_user_data (GTK_OBJECT (widget));
2140 gtk_widget_reparent (label, new_parent);
2144 set_parent_signal (GtkWidget *child,
2145 GtkWidget *old_parent,
2148 g_print ("set_parent for \"%s\": new parent: \"%s\", old parent: \"%s\", data: %d\n",
2149 gtk_type_name (GTK_OBJECT_TYPE (child)),
2150 child->parent ? gtk_type_name (GTK_OBJECT_TYPE (child->parent)) : "NULL",
2151 old_parent ? gtk_type_name (GTK_OBJECT_TYPE (old_parent)) : "NULL",
2152 GPOINTER_TO_INT (func_data));
2156 create_reparent (void)
2158 static GtkWidget *window = NULL;
2165 GtkWidget *separator;
2169 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2171 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2172 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2175 gtk_window_set_title (GTK_WINDOW (window), "reparent");
2176 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
2178 box1 = gtk_vbox_new (FALSE, 0);
2179 gtk_container_add (GTK_CONTAINER (window), box1);
2181 box2 = gtk_hbox_new (FALSE, 5);
2182 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2183 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2185 label = gtk_label_new ("Hello World");
2187 frame = gtk_frame_new ("Frame 1");
2188 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
2190 box3 = gtk_vbox_new (FALSE, 5);
2191 gtk_container_set_border_width (GTK_CONTAINER (box3), 5);
2192 gtk_container_add (GTK_CONTAINER (frame), box3);
2194 button = gtk_button_new_with_label ("switch");
2195 gtk_signal_connect (GTK_OBJECT (button), "clicked",
2196 GTK_SIGNAL_FUNC(reparent_label),
2198 gtk_object_set_user_data (GTK_OBJECT (button), label);
2199 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
2201 gtk_box_pack_start (GTK_BOX (box3), label, FALSE, TRUE, 0);
2202 gtk_signal_connect (GTK_OBJECT (label),
2204 GTK_SIGNAL_FUNC (set_parent_signal),
2205 GINT_TO_POINTER (42));
2207 frame = gtk_frame_new ("Frame 2");
2208 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
2210 box3 = gtk_vbox_new (FALSE, 5);
2211 gtk_container_set_border_width (GTK_CONTAINER (box3), 5);
2212 gtk_container_add (GTK_CONTAINER (frame), box3);
2214 button = gtk_button_new_with_label ("switch");
2215 gtk_signal_connect (GTK_OBJECT (button), "clicked",
2216 GTK_SIGNAL_FUNC(reparent_label),
2218 gtk_object_set_user_data (GTK_OBJECT (button), label);
2219 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
2221 separator = gtk_hseparator_new ();
2222 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2224 box2 = gtk_vbox_new (FALSE, 10);
2225 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2226 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2228 button = gtk_button_new_with_label ("close");
2229 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2230 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2231 GTK_OBJECT (window));
2232 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2233 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2234 gtk_widget_grab_default (button);
2237 if (!GTK_WIDGET_VISIBLE (window))
2238 gtk_widget_show_all (window);
2240 gtk_widget_destroy (window);
2246 gint upositionx = 0;
2247 gint upositiony = 0;
2250 uposition_configure (GtkWidget *window)
2256 lx = gtk_object_get_data (GTK_OBJECT (window), "x");
2257 ly = gtk_object_get_data (GTK_OBJECT (window), "y");
2259 gdk_window_get_root_origin (window->window, &upositionx, &upositiony);
2260 sprintf (buffer, "%d", upositionx);
2261 gtk_label_set_text (lx, buffer);
2262 sprintf (buffer, "%d", upositiony);
2263 gtk_label_set_text (ly, buffer);
2269 uposition_stop_configure (GtkToggleButton *toggle,
2273 gtk_signal_handler_block_by_func (window, uposition_configure, NULL);
2275 gtk_signal_handler_unblock_by_func (window, uposition_configure, NULL);
2279 create_saved_position (void)
2281 static GtkWidget *window = NULL;
2286 GtkWidget *main_vbox;
2294 window = gtk_widget_new (GTK_TYPE_WINDOW,
2295 "type", GTK_WINDOW_TOPLEVEL,
2296 "signal::configure_event", uposition_configure, NULL,
2299 "title", "Saved Position",
2302 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2303 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
2306 main_vbox = gtk_vbox_new (FALSE, 5);
2307 gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 0);
2308 gtk_container_add (GTK_CONTAINER (window), main_vbox);
2311 gtk_widget_new (gtk_vbox_get_type (),
2312 "GtkBox::homogeneous", FALSE,
2313 "GtkBox::spacing", 5,
2314 "GtkContainer::border_width", 10,
2315 "GtkWidget::parent", main_vbox,
2316 "GtkWidget::visible", TRUE,
2317 "child", gtk_widget_new (GTK_TYPE_TOGGLE_BUTTON,
2318 "label", "Stop Events",
2320 "signal::clicked", uposition_stop_configure, window,
2325 hbox = gtk_hbox_new (FALSE, 0);
2326 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
2327 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
2329 label = gtk_label_new ("X Origin : ");
2330 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
2331 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
2333 x_label = gtk_label_new ("");
2334 gtk_box_pack_start (GTK_BOX (hbox), x_label, TRUE, TRUE, 0);
2335 gtk_object_set_data (GTK_OBJECT (window), "x", x_label);
2337 hbox = gtk_hbox_new (FALSE, 0);
2338 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
2339 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
2341 label = gtk_label_new ("Y Origin : ");
2342 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
2343 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
2345 y_label = gtk_label_new ("");
2346 gtk_box_pack_start (GTK_BOX (hbox), y_label, TRUE, TRUE, 0);
2347 gtk_object_set_data (GTK_OBJECT (window), "y", y_label);
2350 gtk_widget_new (gtk_hseparator_get_type (),
2351 "GtkWidget::visible", TRUE,
2353 gtk_box_pack_start (GTK_BOX (main_vbox), any, FALSE, TRUE, 0);
2355 hbox = gtk_hbox_new (FALSE, 0);
2356 gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
2357 gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
2359 button = gtk_button_new_with_label ("Close");
2360 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2361 GTK_SIGNAL_FUNC (gtk_widget_destroy),
2362 GTK_OBJECT (window));
2363 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
2364 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2365 gtk_widget_grab_default (button);
2367 gtk_widget_show_all (window);
2370 gtk_widget_destroy (window);
2378 create_pixmap (void)
2380 static GtkWidget *window = NULL;
2386 GtkWidget *separator;
2387 GtkWidget *pixmapwid;
2391 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2393 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2394 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2397 gtk_window_set_title (GTK_WINDOW (window), "GtkPixmap");
2398 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
2399 gtk_widget_realize(window);
2401 box1 = gtk_vbox_new (FALSE, 0);
2402 gtk_container_add (GTK_CONTAINER (window), box1);
2404 box2 = gtk_vbox_new (FALSE, 10);
2405 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2406 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2408 button = gtk_button_new ();
2409 gtk_box_pack_start (GTK_BOX (box2), button, FALSE, FALSE, 0);
2411 pixmapwid = new_pixmap ("test.xpm", window->window, NULL);
2413 label = gtk_label_new ("Pixmap\ntest");
2414 box3 = gtk_hbox_new (FALSE, 0);
2415 gtk_container_set_border_width (GTK_CONTAINER (box3), 2);
2416 gtk_container_add (GTK_CONTAINER (box3), pixmapwid);
2417 gtk_container_add (GTK_CONTAINER (box3), label);
2418 gtk_container_add (GTK_CONTAINER (button), box3);
2420 separator = gtk_hseparator_new ();
2421 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2423 box2 = gtk_vbox_new (FALSE, 10);
2424 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2425 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2427 button = gtk_button_new_with_label ("close");
2428 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2429 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2430 GTK_OBJECT (window));
2431 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2432 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2433 gtk_widget_grab_default (button);
2436 if (!GTK_WIDGET_VISIBLE (window))
2437 gtk_widget_show_all (window);
2439 gtk_widget_destroy (window);
2443 tips_query_widget_entered (GtkTipsQuery *tips_query,
2445 const gchar *tip_text,
2446 const gchar *tip_private,
2449 if (GTK_TOGGLE_BUTTON (toggle)->active)
2451 gtk_label_set_text (GTK_LABEL (tips_query), tip_text ? "There is a Tip!" : "There is no Tip!");
2452 /* don't let GtkTipsQuery reset its label */
2453 gtk_signal_emit_stop_by_name (GTK_OBJECT (tips_query), "widget_entered");
2458 tips_query_widget_selected (GtkWidget *tips_query,
2460 const gchar *tip_text,
2461 const gchar *tip_private,
2462 GdkEventButton *event,
2466 g_print ("Help \"%s\" requested for <%s>\n",
2467 tip_private ? tip_private : "None",
2468 gtk_type_name (GTK_OBJECT_TYPE (widget)));
2473 create_tooltips (void)
2475 static GtkWidget *window = NULL;
2482 GtkWidget *tips_query;
2483 GtkWidget *separator;
2484 GtkTooltips *tooltips;
2489 gtk_widget_new (gtk_window_get_type (),
2490 "GtkWindow::type", GTK_WINDOW_TOPLEVEL,
2491 "GtkContainer::border_width", 0,
2492 "GtkWindow::title", "Tooltips",
2493 "GtkWindow::allow_shrink", TRUE,
2494 "GtkWindow::allow_grow", FALSE,
2495 "GtkWindow::auto_shrink", TRUE,
2496 "GtkWidget::width", 200,
2499 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2500 GTK_SIGNAL_FUNC (destroy_tooltips),
2503 tooltips=gtk_tooltips_new();
2504 gtk_object_set_data (GTK_OBJECT (window), "tooltips", tooltips);
2506 box1 = gtk_vbox_new (FALSE, 0);
2507 gtk_container_add (GTK_CONTAINER (window), box1);
2509 box2 = gtk_vbox_new (FALSE, 10);
2510 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2511 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2513 button = gtk_toggle_button_new_with_label ("button1");
2514 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2516 gtk_tooltips_set_tip (tooltips,button,"This is button 1", "ContextHelp/buttons/1");
2518 button = gtk_toggle_button_new_with_label ("button2");
2519 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2521 gtk_tooltips_set_tip (tooltips,
2523 "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.",
2524 "ContextHelp/buttons/2_long");
2526 toggle = gtk_toggle_button_new_with_label ("Override TipsQuery Label");
2527 gtk_box_pack_start (GTK_BOX (box2), toggle, TRUE, TRUE, 0);
2529 gtk_tooltips_set_tip (tooltips, toggle, "Toggle TipsQuery view.", "Hi msw! ;)");
2532 gtk_widget_new (gtk_vbox_get_type (),
2533 "GtkBox::homogeneous", FALSE,
2534 "GtkBox::spacing", 5,
2535 "GtkContainer::border_width", 5,
2536 "GtkWidget::visible", TRUE,
2539 tips_query = gtk_tips_query_new ();
2542 gtk_widget_new (gtk_button_get_type (),
2543 "GtkButton::label", "[?]",
2544 "GtkWidget::visible", TRUE,
2545 "GtkWidget::parent", box3,
2546 "GtkObject::object_signal::clicked", gtk_tips_query_start_query, tips_query,
2548 gtk_box_set_child_packing (GTK_BOX (box3), button, FALSE, FALSE, 0, GTK_PACK_START);
2549 gtk_tooltips_set_tip (tooltips,
2551 "Start the Tooltips Inspector",
2552 "ContextHelp/buttons/?");
2555 gtk_widget_set (tips_query,
2556 "GtkWidget::visible", TRUE,
2557 "GtkWidget::parent", box3,
2558 "GtkTipsQuery::caller", button,
2559 "GtkObject::signal::widget_entered", tips_query_widget_entered, toggle,
2560 "GtkObject::signal::widget_selected", tips_query_widget_selected, NULL,
2564 gtk_widget_new (gtk_frame_get_type (),
2565 "GtkFrame::label", "ToolTips Inspector",
2566 "GtkFrame::label_xalign", (double) 0.5,
2567 "GtkContainer::border_width", 0,
2568 "GtkWidget::visible", TRUE,
2569 "GtkWidget::parent", box2,
2570 "GtkContainer::child", box3,
2572 gtk_box_set_child_packing (GTK_BOX (box2), frame, TRUE, TRUE, 10, GTK_PACK_START);
2574 separator = gtk_hseparator_new ();
2575 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2577 box2 = gtk_vbox_new (FALSE, 10);
2578 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2579 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2581 button = gtk_button_new_with_label ("close");
2582 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2583 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2584 GTK_OBJECT (window));
2585 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2586 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2587 gtk_widget_grab_default (button);
2589 gtk_tooltips_set_tip (tooltips, button, "Push this button to close window", "ContextHelp/buttons/Close");
2592 if (!GTK_WIDGET_VISIBLE (window))
2593 gtk_widget_show_all (window);
2595 gtk_widget_destroy (window);
2603 pack_image (GtkWidget *box,
2607 gtk_box_pack_start (GTK_BOX (box),
2608 gtk_label_new (text),
2611 gtk_box_pack_start (GTK_BOX (box),
2619 static GtkWidget *window = NULL;
2627 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2629 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2630 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2633 vbox = gtk_vbox_new (FALSE, 5);
2635 gtk_container_add (GTK_CONTAINER (window), vbox);
2637 pack_image (vbox, "Stock Warning Dialog",
2638 gtk_image_new_from_stock (GTK_STOCK_DIALOG_WARNING,
2639 GTK_ICON_SIZE_DIALOG));
2641 pixmap = gdk_pixmap_colormap_create_from_xpm_d (NULL,
2642 gtk_widget_get_colormap (window),
2647 pack_image (vbox, "Pixmap",
2648 gtk_image_new_from_pixmap (pixmap, mask));
2651 if (!GTK_WIDGET_VISIBLE (window))
2652 gtk_widget_show_all (window);
2654 gtk_widget_destroy (window);
2662 create_menu (gint depth, gint length, gboolean tearoff)
2665 GtkWidget *menuitem;
2673 menu = gtk_menu_new ();
2678 menuitem = gtk_tearoff_menu_item_new ();
2679 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
2680 gtk_widget_show (menuitem);
2683 for (i = 0, j = 1; i < length; i++, j++)
2685 sprintf (buf, "item %2d - %d", depth, j);
2686 menuitem = gtk_radio_menu_item_new_with_label (group, buf);
2687 group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menuitem));
2689 gtk_check_menu_item_set_show_toggle (GTK_CHECK_MENU_ITEM (menuitem), TRUE);
2690 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
2691 gtk_widget_show (menuitem);
2693 gtk_widget_set_sensitive (menuitem, FALSE);
2696 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (depth - 1, 5, TRUE));
2705 static GtkWidget *window = NULL;
2709 GtkWidget *optionmenu;
2710 GtkWidget *separator;
2716 GtkWidget *menuitem;
2717 GtkAccelGroup *accel_group;
2719 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2721 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2722 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2724 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
2725 GTK_SIGNAL_FUNC (gtk_true),
2728 accel_group = gtk_accel_group_new ();
2729 gtk_accel_group_attach (accel_group, GTK_OBJECT (window));
2731 gtk_window_set_title (GTK_WINDOW (window), "menus");
2732 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
2735 box1 = gtk_vbox_new (FALSE, 0);
2736 gtk_container_add (GTK_CONTAINER (window), box1);
2737 gtk_widget_show (box1);
2739 menubar = gtk_menu_bar_new ();
2740 gtk_box_pack_start (GTK_BOX (box1), menubar, FALSE, TRUE, 0);
2741 gtk_widget_show (menubar);
2743 menu = create_menu (2, 50, TRUE);
2745 menuitem = gtk_menu_item_new_with_label ("test\nline2");
2746 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), menu);
2747 gtk_menu_bar_append (GTK_MENU_BAR (menubar), menuitem);
2748 gtk_widget_show (menuitem);
2750 menuitem = gtk_menu_item_new_with_label ("foo");
2751 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (3, 5, TRUE));
2752 gtk_menu_bar_append (GTK_MENU_BAR (menubar), menuitem);
2753 gtk_widget_show (menuitem);
2755 menuitem = gtk_menu_item_new_with_label ("bar");
2756 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (4, 5, TRUE));
2757 gtk_menu_item_right_justify (GTK_MENU_ITEM (menuitem));
2758 gtk_menu_bar_append (GTK_MENU_BAR (menubar), menuitem);
2759 gtk_widget_show (menuitem);
2761 box2 = gtk_vbox_new (FALSE, 10);
2762 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2763 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2764 gtk_widget_show (box2);
2766 menu = create_menu (1, 5, FALSE);
2767 gtk_menu_set_accel_group (GTK_MENU (menu), accel_group);
2769 menuitem = gtk_check_menu_item_new_with_label ("Accelerate Me");
2770 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
2771 gtk_widget_show (menuitem);
2772 gtk_widget_add_accelerator (menuitem,
2777 GTK_ACCEL_VISIBLE | GTK_ACCEL_SIGNAL_VISIBLE);
2778 menuitem = gtk_check_menu_item_new_with_label ("Accelerator Locked");
2779 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
2780 gtk_widget_show (menuitem);
2781 gtk_widget_add_accelerator (menuitem,
2786 GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
2787 menuitem = gtk_check_menu_item_new_with_label ("Accelerators Frozen");
2788 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
2789 gtk_widget_show (menuitem);
2790 gtk_widget_add_accelerator (menuitem,
2796 gtk_widget_add_accelerator (menuitem,
2802 gtk_widget_lock_accelerators (menuitem);
2804 optionmenu = gtk_option_menu_new ();
2805 gtk_option_menu_set_menu (GTK_OPTION_MENU (optionmenu), menu);
2806 gtk_option_menu_set_history (GTK_OPTION_MENU (optionmenu), 3);
2807 gtk_box_pack_start (GTK_BOX (box2), optionmenu, TRUE, TRUE, 0);
2808 gtk_widget_show (optionmenu);
2810 separator = gtk_hseparator_new ();
2811 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2812 gtk_widget_show (separator);
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, FALSE, TRUE, 0);
2817 gtk_widget_show (box2);
2819 button = gtk_button_new_with_label ("close");
2820 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2821 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2822 GTK_OBJECT (window));
2823 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2824 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2825 gtk_widget_grab_default (button);
2826 gtk_widget_show (button);
2829 if (!GTK_WIDGET_VISIBLE (window))
2830 gtk_widget_show (window);
2832 gtk_widget_destroy (window);
2836 gtk_ifactory_cb (gpointer callback_data,
2837 guint callback_action,
2840 g_message ("ItemFactory: activated \"%s\"", gtk_item_factory_path_from_widget (widget));
2843 static GtkItemFactoryEntry menu_items[] =
2845 { "/_File", NULL, 0, 0, "<Branch>" },
2846 { "/File/tearoff1", NULL, gtk_ifactory_cb, 0, "<Tearoff>" },
2847 { "/File/_New", "<control>N", gtk_ifactory_cb, 0 },
2848 { "/File/_Open", "<control>O", gtk_ifactory_cb, 0 },
2849 { "/File/_Save", "<control>S", gtk_ifactory_cb, 0 },
2850 { "/File/Save _As...", NULL, gtk_ifactory_cb, 0 },
2851 { "/File/sep1", NULL, gtk_ifactory_cb, 0, "<Separator>" },
2852 { "/File/_Quit", "<control>Q", gtk_ifactory_cb, 0 },
2854 { "/_Preferences", NULL, 0, 0, "<Branch>" },
2855 { "/_Preferences/_Color", NULL, 0, 0, "<Branch>" },
2856 { "/_Preferences/Color/_Red", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
2857 { "/_Preferences/Color/_Green", NULL, gtk_ifactory_cb, 0, "/Preferences/Color/Red" },
2858 { "/_Preferences/Color/_Blue", NULL, gtk_ifactory_cb, 0, "/Preferences/Color/Red" },
2859 { "/_Preferences/_Shape", NULL, 0, 0, "<Branch>" },
2860 { "/_Preferences/Shape/_Square", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
2861 { "/_Preferences/Shape/_Rectangle", NULL, gtk_ifactory_cb, 0, "/Preferences/Shape/Square" },
2862 { "/_Preferences/Shape/_Oval", NULL, gtk_ifactory_cb, 0, "/Preferences/Shape/Rectangle" },
2864 { "/_Help", NULL, 0, 0, "<LastBranch>" },
2865 { "/Help/_About", NULL, gtk_ifactory_cb, 0 },
2868 static int nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]);
2871 create_item_factory (void)
2873 static GtkWidget *window = NULL;
2879 GtkWidget *separator;
2882 GtkAccelGroup *accel_group;
2883 GtkItemFactory *item_factory;
2885 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2887 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2888 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2890 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
2891 GTK_SIGNAL_FUNC (gtk_true),
2894 accel_group = gtk_accel_group_new ();
2895 item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>", accel_group);
2896 gtk_object_set_data_full (GTK_OBJECT (window),
2899 (GtkDestroyNotify) gtk_object_unref);
2900 gtk_accel_group_attach (accel_group, GTK_OBJECT (window));
2901 gtk_window_set_title (GTK_WINDOW (window), "Item Factory");
2902 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
2903 gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL);
2905 /* preselect /Preferences/Shape/Oval over the other radios
2907 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (gtk_item_factory_get_item (item_factory,
2908 "/Preferences/Shape/Oval")),
2911 box1 = gtk_vbox_new (FALSE, 0);
2912 gtk_container_add (GTK_CONTAINER (window), box1);
2914 gtk_box_pack_start (GTK_BOX (box1),
2915 gtk_item_factory_get_widget (item_factory, "<main>"),
2918 label = gtk_label_new ("Type\n<alt>\nto start");
2919 gtk_widget_set_usize (label, 200, 200);
2920 gtk_misc_set_alignment (GTK_MISC (label), 0.5, 0.5);
2921 gtk_box_pack_start (GTK_BOX (box1), label, TRUE, TRUE, 0);
2924 separator = gtk_hseparator_new ();
2925 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2928 box2 = gtk_vbox_new (FALSE, 10);
2929 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2930 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2932 button = gtk_button_new_with_label ("close");
2933 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2934 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2935 GTK_OBJECT (window));
2936 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2937 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2938 gtk_widget_grab_default (button);
2940 gtk_widget_show_all (window);
2943 gtk_widget_destroy (window);
2951 cmw_destroy_cb(GtkWidget *widget)
2953 /* This is needed to get out of gtk_main */
2960 cmw_color (GtkWidget *widget, GtkWidget *parent)
2964 csd=gtk_color_selection_dialog_new ("This is a modal color selection dialog");
2967 gtk_window_set_modal (GTK_WINDOW(csd),TRUE);
2969 /* And mark it as a transient dialog */
2970 gtk_window_set_transient_for (GTK_WINDOW (csd), GTK_WINDOW (parent));
2972 gtk_signal_connect (GTK_OBJECT(csd), "destroy",
2973 GTK_SIGNAL_FUNC(cmw_destroy_cb),NULL);
2975 gtk_signal_connect_object (GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(csd)->ok_button),
2976 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
2978 gtk_signal_connect_object (GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(csd)->cancel_button),
2979 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
2982 /* wait until destroy calls gtk_main_quit */
2983 gtk_widget_show (csd);
2988 cmw_file (GtkWidget *widget, GtkWidget *parent)
2992 fs = gtk_file_selection_new("This is a modal file selection dialog");
2995 gtk_window_set_modal (GTK_WINDOW(fs),TRUE);
2997 /* And mark it as a transient dialog */
2998 gtk_window_set_transient_for (GTK_WINDOW (fs), GTK_WINDOW (parent));
3000 gtk_signal_connect (GTK_OBJECT(fs), "destroy",
3001 GTK_SIGNAL_FUNC(cmw_destroy_cb),NULL);
3003 gtk_signal_connect_object (GTK_OBJECT(GTK_FILE_SELECTION(fs)->ok_button),
3004 "clicked",GTK_SIGNAL_FUNC(gtk_widget_destroy),
3006 gtk_signal_connect_object (GTK_OBJECT(GTK_FILE_SELECTION(fs)->cancel_button),
3007 "clicked",GTK_SIGNAL_FUNC(gtk_widget_destroy),
3010 /* wait until destroy calls gtk_main_quit */
3011 gtk_widget_show (fs);
3018 create_modal_window (void)
3020 GtkWidget *window = NULL;
3021 GtkWidget *box1,*box2;
3023 GtkWidget *btnColor,*btnFile,*btnClose;
3025 /* Create modal window (Here you can use any window descendent )*/
3026 window=gtk_window_new (GTK_WINDOW_TOPLEVEL);
3027 gtk_window_set_title (GTK_WINDOW(window),"This window is modal");
3029 /* Set window as modal */
3030 gtk_window_set_modal (GTK_WINDOW(window),TRUE);
3032 /* Create widgets */
3033 box1 = gtk_vbox_new (FALSE,5);
3034 frame1 = gtk_frame_new ("Standard dialogs in modal form");
3035 box2 = gtk_vbox_new (TRUE,5);
3036 btnColor = gtk_button_new_with_label ("Color");
3037 btnFile = gtk_button_new_with_label ("File Selection");
3038 btnClose = gtk_button_new_with_label ("Close");
3041 gtk_container_set_border_width (GTK_CONTAINER(box1),3);
3042 gtk_container_set_border_width (GTK_CONTAINER(box2),3);
3045 gtk_container_add (GTK_CONTAINER (window), box1);
3046 gtk_box_pack_start (GTK_BOX (box1), frame1, TRUE, TRUE, 4);
3047 gtk_container_add (GTK_CONTAINER (frame1), box2);
3048 gtk_box_pack_start (GTK_BOX (box2), btnColor, FALSE, FALSE, 4);
3049 gtk_box_pack_start (GTK_BOX (box2), btnFile, FALSE, FALSE, 4);
3050 gtk_box_pack_start (GTK_BOX (box1), gtk_hseparator_new (), FALSE, FALSE, 4);
3051 gtk_box_pack_start (GTK_BOX (box1), btnClose, FALSE, FALSE, 4);
3053 /* connect signals */
3054 gtk_signal_connect_object (GTK_OBJECT (btnClose), "clicked",
3055 GTK_SIGNAL_FUNC (gtk_widget_destroy),
3056 GTK_OBJECT (window));
3058 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3059 GTK_SIGNAL_FUNC (cmw_destroy_cb),NULL);
3061 gtk_signal_connect (GTK_OBJECT (btnColor), "clicked",
3062 GTK_SIGNAL_FUNC (cmw_color),window);
3063 gtk_signal_connect (GTK_OBJECT (btnFile), "clicked",
3064 GTK_SIGNAL_FUNC (cmw_file),window);
3067 gtk_widget_show_all (window);
3069 /* wait until dialog get destroyed */
3078 make_message_dialog (GtkWidget **dialog,
3079 GtkMessageType type,
3080 GtkButtonsType buttons)
3084 gtk_widget_destroy (*dialog);
3089 *dialog = gtk_message_dialog_new (NULL, 0, type, buttons,
3090 "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.)");
3092 gtk_signal_connect_object (GTK_OBJECT (*dialog),
3094 GTK_SIGNAL_FUNC (gtk_widget_destroy),
3095 GTK_OBJECT (*dialog));
3097 gtk_signal_connect (GTK_OBJECT (*dialog),
3099 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
3102 gtk_widget_show (*dialog);
3106 create_message_dialog (void)
3108 static GtkWidget *info = NULL;
3109 static GtkWidget *warning = NULL;
3110 static GtkWidget *error = NULL;
3111 static GtkWidget *question = NULL;
3113 make_message_dialog (&info, GTK_MESSAGE_INFO, GTK_BUTTONS_OK);
3114 make_message_dialog (&warning, GTK_MESSAGE_WARNING, GTK_BUTTONS_CLOSE);
3115 make_message_dialog (&error, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK_CANCEL);
3116 make_message_dialog (&question, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO);
3123 static GtkWidget *sw_parent = NULL;
3124 static GtkWidget *sw_float_parent;
3125 static guint sw_destroyed_handler = 0;
3128 scrolled_windows_delete_cb (GtkWidget *widget, GdkEventAny *event, GtkWidget *scrollwin)
3130 gtk_widget_reparent (scrollwin, sw_parent);
3132 gtk_signal_disconnect (GTK_OBJECT (sw_parent), sw_destroyed_handler);
3133 sw_float_parent = NULL;
3135 sw_destroyed_handler = 0;
3141 scrolled_windows_destroy_cb (GtkWidget *widget, GtkWidget *scrollwin)
3143 gtk_widget_destroy (sw_float_parent);
3145 sw_float_parent = NULL;
3147 sw_destroyed_handler = 0;
3151 scrolled_windows_remove (GtkWidget *widget, GtkWidget *scrollwin)
3155 gtk_widget_reparent (scrollwin, sw_parent);
3156 gtk_widget_destroy (sw_float_parent);
3158 gtk_signal_disconnect (GTK_OBJECT (sw_parent), sw_destroyed_handler);
3159 sw_float_parent = NULL;
3161 sw_destroyed_handler = 0;
3165 sw_parent = scrollwin->parent;
3166 sw_float_parent = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3167 gtk_window_set_default_size (GTK_WINDOW (sw_float_parent), 200, 200);
3169 gtk_widget_reparent (scrollwin, sw_float_parent);
3170 gtk_widget_show (sw_float_parent);
3172 sw_destroyed_handler =
3173 gtk_signal_connect (GTK_OBJECT (sw_parent), "destroy",
3174 GTK_SIGNAL_FUNC (scrolled_windows_destroy_cb), scrollwin);
3175 gtk_signal_connect (GTK_OBJECT (sw_float_parent), "delete_event",
3176 GTK_SIGNAL_FUNC (scrolled_windows_delete_cb), scrollwin);
3181 create_scrolled_windows (void)
3183 static GtkWidget *window;
3184 GtkWidget *scrolled_window;
3192 window = gtk_dialog_new ();
3194 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3195 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
3198 gtk_window_set_title (GTK_WINDOW (window), "dialog");
3199 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
3202 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
3203 gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10);
3204 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
3205 GTK_POLICY_AUTOMATIC,
3206 GTK_POLICY_AUTOMATIC);
3207 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
3208 scrolled_window, TRUE, TRUE, 0);
3209 gtk_widget_show (scrolled_window);
3211 table = gtk_table_new (20, 20, FALSE);
3212 gtk_table_set_row_spacings (GTK_TABLE (table), 10);
3213 gtk_table_set_col_spacings (GTK_TABLE (table), 10);
3214 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), table);
3215 gtk_container_set_focus_hadjustment (GTK_CONTAINER (table),
3216 gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
3217 gtk_container_set_focus_vadjustment (GTK_CONTAINER (table),
3218 gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
3219 gtk_widget_show (table);
3221 for (i = 0; i < 20; i++)
3222 for (j = 0; j < 20; j++)
3224 sprintf (buffer, "button (%d,%d)\n", i, j);
3225 button = gtk_toggle_button_new_with_label (buffer);
3226 gtk_table_attach_defaults (GTK_TABLE (table), button,
3228 gtk_widget_show (button);
3232 button = gtk_button_new_with_label ("Close");
3233 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
3234 GTK_SIGNAL_FUNC(gtk_widget_destroy),
3235 GTK_OBJECT (window));
3236 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
3237 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
3238 button, TRUE, TRUE, 0);
3239 gtk_widget_grab_default (button);
3240 gtk_widget_show (button);
3242 button = gtk_button_new_with_label ("Reparent Out");
3243 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3244 GTK_SIGNAL_FUNC(scrolled_windows_remove),
3246 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
3247 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
3248 button, TRUE, TRUE, 0);
3249 gtk_widget_grab_default (button);
3250 gtk_widget_show (button);
3252 gtk_window_set_default_size (GTK_WINDOW (window), 300, 300);
3255 if (!GTK_WIDGET_VISIBLE (window))
3256 gtk_widget_show (window);
3258 gtk_widget_destroy (window);
3266 entry_toggle_editable (GtkWidget *checkbutton,
3269 gtk_entry_set_editable(GTK_ENTRY(entry),
3270 GTK_TOGGLE_BUTTON(checkbutton)->active);
3274 entry_toggle_sensitive (GtkWidget *checkbutton,
3277 gtk_widget_set_sensitive (entry, GTK_TOGGLE_BUTTON(checkbutton)->active);
3281 entry_toggle_visibility (GtkWidget *checkbutton,
3284 gtk_entry_set_visibility(GTK_ENTRY(entry),
3285 GTK_TOGGLE_BUTTON(checkbutton)->active);
3289 entry_toggle_invisible_char (GtkWidget *checkbutton,
3292 if (GTK_TOGGLE_BUTTON (checkbutton)->active)
3293 gtk_entry_set_invisible_char (GTK_ENTRY (entry), 0);
3295 gtk_entry_set_invisible_char (GTK_ENTRY (entry), '*');
3301 static GtkWidget *window = NULL;
3304 GtkWidget *editable_check;
3305 GtkWidget *sensitive_check;
3306 GtkWidget *invisible_char_check;
3307 GtkWidget *entry, *cb;
3309 GtkWidget *separator;
3310 GList *cbitems = NULL;
3314 cbitems = g_list_append(cbitems, "item0");
3315 cbitems = g_list_append(cbitems, "item1 item1");
3316 cbitems = g_list_append(cbitems, "item2 item2 item2");
3317 cbitems = g_list_append(cbitems, "item3 item3 item3 item3");
3318 cbitems = g_list_append(cbitems, "item4 item4 item4 item4 item4");
3319 cbitems = g_list_append(cbitems, "item5 item5 item5 item5 item5 item5");
3320 cbitems = g_list_append(cbitems, "item6 item6 item6 item6 item6");
3321 cbitems = g_list_append(cbitems, "item7 item7 item7 item7");
3322 cbitems = g_list_append(cbitems, "item8 item8 item8");
3323 cbitems = g_list_append(cbitems, "item9 item9");
3325 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3327 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3328 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
3331 gtk_window_set_title (GTK_WINDOW (window), "entry");
3332 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
3335 box1 = gtk_vbox_new (FALSE, 0);
3336 gtk_container_add (GTK_CONTAINER (window), box1);
3337 gtk_widget_show (box1);
3340 box2 = gtk_vbox_new (FALSE, 10);
3341 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
3342 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
3343 gtk_widget_show (box2);
3345 entry = gtk_entry_new ();
3346 gtk_entry_set_text (GTK_ENTRY (entry), "hello world السلام عليكم");
3347 gtk_editable_select_region (GTK_EDITABLE (entry), 0, 5);
3348 gtk_box_pack_start (GTK_BOX (box2), entry, TRUE, TRUE, 0);
3349 gtk_widget_show (entry);
3351 cb = gtk_combo_new ();
3352 gtk_combo_set_popdown_strings (GTK_COMBO (cb), cbitems);
3353 gtk_entry_set_text (GTK_ENTRY (GTK_COMBO(cb)->entry), "hello world");
3354 gtk_editable_select_region (GTK_EDITABLE (GTK_COMBO(cb)->entry),
3356 gtk_box_pack_start (GTK_BOX (box2), cb, TRUE, TRUE, 0);
3357 gtk_widget_show (cb);
3359 editable_check = gtk_check_button_new_with_label("Editable");
3360 gtk_box_pack_start (GTK_BOX (box2), editable_check, FALSE, TRUE, 0);
3361 gtk_signal_connect (GTK_OBJECT(editable_check), "toggled",
3362 GTK_SIGNAL_FUNC(entry_toggle_editable), entry);
3363 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(editable_check), TRUE);
3364 gtk_widget_show (editable_check);
3366 editable_check = gtk_check_button_new_with_label("Visible");
3367 gtk_box_pack_start (GTK_BOX (box2), editable_check, FALSE, TRUE, 0);
3368 gtk_signal_connect (GTK_OBJECT(editable_check), "toggled",
3369 GTK_SIGNAL_FUNC(entry_toggle_visibility), entry);
3370 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(editable_check), TRUE);
3371 gtk_widget_show (editable_check);
3373 sensitive_check = gtk_check_button_new_with_label("Sensitive");
3374 gtk_box_pack_start (GTK_BOX (box2), sensitive_check, FALSE, TRUE, 0);
3375 gtk_signal_connect (GTK_OBJECT(sensitive_check), "toggled",
3376 GTK_SIGNAL_FUNC(entry_toggle_sensitive), entry);
3377 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(sensitive_check), TRUE);
3378 gtk_widget_show (sensitive_check);
3380 invisible_char_check = gtk_check_button_new_with_label("invisible_char = 0");
3381 gtk_box_pack_start (GTK_BOX (box2), invisible_char_check, FALSE, TRUE, 0);
3382 gtk_signal_connect (GTK_OBJECT(invisible_char_check), "toggled",
3383 GTK_SIGNAL_FUNC(entry_toggle_invisible_char), entry);
3384 gtk_widget_show (invisible_char_check);
3386 separator = gtk_hseparator_new ();
3387 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
3388 gtk_widget_show (separator);
3391 box2 = gtk_vbox_new (FALSE, 10);
3392 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
3393 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
3394 gtk_widget_show (box2);
3397 button = gtk_button_new_with_label ("close");
3398 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
3399 GTK_SIGNAL_FUNC(gtk_widget_destroy),
3400 GTK_OBJECT (window));
3401 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
3402 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
3403 gtk_widget_grab_default (button);
3404 gtk_widget_show (button);
3407 if (!GTK_WIDGET_VISIBLE (window))
3408 gtk_widget_show (window);
3410 gtk_widget_destroy (window);
3417 static GtkWidget *spinner1;
3420 toggle_snap (GtkWidget *widget, GtkSpinButton *spin)
3422 gtk_spin_button_set_snap_to_ticks (spin, GTK_TOGGLE_BUTTON (widget)->active);
3426 toggle_numeric (GtkWidget *widget, GtkSpinButton *spin)
3428 gtk_spin_button_set_numeric (spin, GTK_TOGGLE_BUTTON (widget)->active);
3432 change_digits (GtkWidget *widget, GtkSpinButton *spin)
3434 gtk_spin_button_set_digits (GTK_SPIN_BUTTON (spinner1),
3435 gtk_spin_button_get_value_as_int (spin));
3439 get_value (GtkWidget *widget, gpointer data)
3443 GtkSpinButton *spin;
3445 spin = GTK_SPIN_BUTTON (spinner1);
3446 label = GTK_LABEL (gtk_object_get_user_data (GTK_OBJECT (widget)));
3447 if (GPOINTER_TO_INT (data) == 1)
3448 sprintf (buf, "%d", gtk_spin_button_get_value_as_int (spin));
3450 sprintf (buf, "%0.*f", spin->digits,
3451 gtk_spin_button_get_value_as_float (spin));
3452 gtk_label_set_text (label, buf);
3456 spin_button_time_output_func (GtkSpinButton *spin_button)
3458 static gchar buf[6];
3462 hours = spin_button->adjustment->value / 60.0;
3463 minutes = (fabs(floor (hours) - hours) < 1e-5) ? 0.0 : 30;
3464 sprintf (buf, "%02.0f:%02.0f", floor (hours), minutes);
3465 if (strcmp (buf, gtk_entry_get_text (GTK_ENTRY (spin_button))))
3466 gtk_entry_set_text (GTK_ENTRY (spin_button), buf);
3471 spin_button_month_input_func (GtkSpinButton *spin_button,
3475 static gchar *month[12] = { "January", "February", "March", "April",
3476 "May", "June", "July", "August",
3477 "September", "October", "November", "December" };
3479 gboolean found = FALSE;
3481 for (i = 1; i <= 12; i++)
3483 tmp1 = g_strdup (month[i-1]);
3485 tmp2 = g_strdup (gtk_entry_get_text (GTK_ENTRY (spin_button)));
3487 if (strstr (tmp1, tmp2) == tmp1)
3497 return GTK_INPUT_ERROR;
3499 *new_val = (gfloat) i;
3504 spin_button_month_output_func (GtkSpinButton *spin_button)
3507 static gchar *month[12] = { "January", "February", "March", "April",
3508 "May", "June", "July", "August", "September",
3509 "October", "November", "December" };
3511 for (i = 1; i <= 12; i++)
3512 if (fabs (spin_button->adjustment->value - (double)i) < 1e-5)
3514 if (strcmp (month[i-1], gtk_entry_get_text (GTK_ENTRY (spin_button))))
3515 gtk_entry_set_text (GTK_ENTRY (spin_button), month[i-1]);
3521 spin_button_hex_input_func (GtkSpinButton *spin_button,
3528 buf = gtk_entry_get_text (GTK_ENTRY (spin_button));
3529 res = (gfloat)(strtol(buf, &err, 16));
3532 return GTK_INPUT_ERROR;
3538 spin_button_hex_output_func (GtkSpinButton *spin_button)
3540 static gchar buf[7];
3543 val = (gint) spin_button->adjustment->value;
3544 if (fabs (val) < 1e-5)
3545 sprintf (buf, "0x00");
3547 sprintf (buf, "0x%.2X", val);
3548 if (strcmp (buf, gtk_entry_get_text (GTK_ENTRY (spin_button))))
3549 gtk_entry_set_text (GTK_ENTRY (spin_button), buf);
3556 static GtkWidget *window = NULL;
3559 GtkWidget *main_vbox;
3562 GtkWidget *spinner2;
3566 GtkWidget *val_label;
3571 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3573 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3574 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
3577 gtk_window_set_title (GTK_WINDOW (window), "GtkSpinButton");
3579 main_vbox = gtk_vbox_new (FALSE, 5);
3580 gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 10);
3581 gtk_container_add (GTK_CONTAINER (window), main_vbox);
3583 frame = gtk_frame_new ("Not accelerated");
3584 gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0);
3586 vbox = gtk_vbox_new (FALSE, 0);
3587 gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
3588 gtk_container_add (GTK_CONTAINER (frame), vbox);
3590 /* Time, month, hex spinners */
3592 hbox = gtk_hbox_new (FALSE, 0);
3593 gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 5);
3595 vbox2 = gtk_vbox_new (FALSE, 0);
3596 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
3598 label = gtk_label_new ("Time :");
3599 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
3600 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
3602 adj = (GtkAdjustment *) gtk_adjustment_new (0, 0, 1410, 30, 60, 0);
3603 spinner = gtk_spin_button_new (adj, 0, 0);
3604 gtk_editable_set_editable (GTK_EDITABLE (spinner), FALSE);
3605 gtk_signal_connect (GTK_OBJECT (spinner),
3607 GTK_SIGNAL_FUNC (spin_button_time_output_func),
3609 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
3610 gtk_widget_set_usize (spinner, 55, -1);
3611 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
3613 vbox2 = gtk_vbox_new (FALSE, 0);
3614 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
3616 label = gtk_label_new ("Month :");
3617 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
3618 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
3620 adj = (GtkAdjustment *) gtk_adjustment_new (1.0, 1.0, 12.0, 1.0,
3622 spinner = gtk_spin_button_new (adj, 0, 0);
3623 gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (spinner),
3624 GTK_UPDATE_IF_VALID);
3625 gtk_signal_connect (GTK_OBJECT (spinner),
3627 GTK_SIGNAL_FUNC (spin_button_month_input_func),
3629 gtk_signal_connect (GTK_OBJECT (spinner),
3631 GTK_SIGNAL_FUNC (spin_button_month_output_func),
3633 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
3634 gtk_widget_set_usize (spinner, 85, -1);
3635 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
3637 vbox2 = gtk_vbox_new (FALSE, 0);
3638 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
3640 label = gtk_label_new ("Hex :");
3641 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
3642 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
3644 adj = (GtkAdjustment *) gtk_adjustment_new (0, 0, 255, 1, 16, 0);
3645 spinner = gtk_spin_button_new (adj, 0, 0);
3646 gtk_editable_set_editable (GTK_EDITABLE (spinner), TRUE);
3647 gtk_signal_connect (GTK_OBJECT (spinner),
3649 GTK_SIGNAL_FUNC (spin_button_hex_input_func),
3651 gtk_signal_connect (GTK_OBJECT (spinner),
3653 GTK_SIGNAL_FUNC (spin_button_hex_output_func),
3655 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
3656 gtk_widget_set_usize (spinner, 55, 0);
3657 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
3659 frame = gtk_frame_new ("Accelerated");
3660 gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0);
3662 vbox = gtk_vbox_new (FALSE, 0);
3663 gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
3664 gtk_container_add (GTK_CONTAINER (frame), vbox);
3666 hbox = gtk_hbox_new (FALSE, 0);
3667 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
3669 vbox2 = gtk_vbox_new (FALSE, 0);
3670 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
3672 label = gtk_label_new ("Value :");
3673 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
3674 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
3676 adj = (GtkAdjustment *) gtk_adjustment_new (0.0, -10000.0, 10000.0,
3678 spinner1 = gtk_spin_button_new (adj, 1.0, 2);
3679 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner1), TRUE);
3680 gtk_widget_set_usize (spinner1, 100, 0);
3681 gtk_box_pack_start (GTK_BOX (vbox2), spinner1, FALSE, TRUE, 0);
3683 vbox2 = gtk_vbox_new (FALSE, 0);
3684 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
3686 label = gtk_label_new ("Digits :");
3687 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
3688 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
3690 adj = (GtkAdjustment *) gtk_adjustment_new (2, 1, 5, 1, 1, 0);
3691 spinner2 = gtk_spin_button_new (adj, 0.0, 0);
3692 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
3693 GTK_SIGNAL_FUNC (change_digits),
3694 (gpointer) spinner2);
3695 gtk_box_pack_start (GTK_BOX (vbox2), spinner2, FALSE, TRUE, 0);
3697 hbox = gtk_hbox_new (FALSE, 0);
3698 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
3700 button = gtk_check_button_new_with_label ("Snap to 0.5-ticks");
3701 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3702 GTK_SIGNAL_FUNC (toggle_snap),
3704 gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
3705 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
3707 button = gtk_check_button_new_with_label ("Numeric only input mode");
3708 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3709 GTK_SIGNAL_FUNC (toggle_numeric),
3711 gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
3712 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
3714 val_label = gtk_label_new ("");
3716 hbox = gtk_hbox_new (FALSE, 0);
3717 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
3719 button = gtk_button_new_with_label ("Value as Int");
3720 gtk_object_set_user_data (GTK_OBJECT (button), val_label);
3721 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3722 GTK_SIGNAL_FUNC (get_value),
3723 GINT_TO_POINTER (1));
3724 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
3726 button = gtk_button_new_with_label ("Value as Float");
3727 gtk_object_set_user_data (GTK_OBJECT (button), val_label);
3728 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3729 GTK_SIGNAL_FUNC (get_value),
3730 GINT_TO_POINTER (2));
3731 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
3733 gtk_box_pack_start (GTK_BOX (vbox), val_label, TRUE, TRUE, 0);
3734 gtk_label_set_text (GTK_LABEL (val_label), "0");
3736 hbox = gtk_hbox_new (FALSE, 0);
3737 gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
3739 button = gtk_button_new_with_label ("Close");
3740 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
3741 GTK_SIGNAL_FUNC (gtk_widget_destroy),
3742 GTK_OBJECT (window));
3743 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
3746 if (!GTK_WIDGET_VISIBLE (window))
3747 gtk_widget_show_all (window);
3749 gtk_widget_destroy (window);
3758 cursor_expose_event (GtkWidget *widget,
3762 GtkDrawingArea *darea;
3763 GdkDrawable *drawable;
3770 g_return_val_if_fail (widget != NULL, TRUE);
3771 g_return_val_if_fail (GTK_IS_DRAWING_AREA (widget), TRUE);
3773 darea = GTK_DRAWING_AREA (widget);
3774 drawable = widget->window;
3775 white_gc = widget->style->white_gc;
3776 gray_gc = widget->style->bg_gc[GTK_STATE_NORMAL];
3777 black_gc = widget->style->black_gc;
3778 max_width = widget->allocation.width;
3779 max_height = widget->allocation.height;
3781 gdk_draw_rectangle (drawable, white_gc,
3788 gdk_draw_rectangle (drawable, black_gc,
3795 gdk_draw_rectangle (drawable, gray_gc,
3806 set_cursor (GtkWidget *spinner,
3814 c = CLAMP (gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spinner)), 0, 152);
3817 label = gtk_object_get_user_data (GTK_OBJECT (spinner));
3818 vals = gtk_type_enum_get_values (GTK_TYPE_GDK_CURSOR_TYPE);
3819 while (vals && vals->value != c)
3822 gtk_label_set_text (GTK_LABEL (label), vals->value_nick);
3824 gtk_label_set_text (GTK_LABEL (label), "<unknown>");
3826 cursor = gdk_cursor_new (c);
3827 gdk_window_set_cursor (widget->window, cursor);
3828 gdk_cursor_unref (cursor);
3832 cursor_event (GtkWidget *widget,
3834 GtkSpinButton *spinner)
3836 if ((event->type == GDK_BUTTON_PRESS) &&
3837 ((event->button.button == 1) ||
3838 (event->button.button == 3)))
3840 gtk_spin_button_spin (spinner, event->button.button == 1 ?
3841 GTK_SPIN_STEP_FORWARD : GTK_SPIN_STEP_BACKWARD, 0);
3849 create_cursors (void)
3851 static GtkWidget *window = NULL;
3854 GtkWidget *main_vbox;
3865 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3867 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3868 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
3871 gtk_window_set_title (GTK_WINDOW (window), "Cursors");
3873 main_vbox = gtk_vbox_new (FALSE, 5);
3874 gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 0);
3875 gtk_container_add (GTK_CONTAINER (window), main_vbox);
3878 gtk_widget_new (gtk_vbox_get_type (),
3879 "GtkBox::homogeneous", FALSE,
3880 "GtkBox::spacing", 5,
3881 "GtkContainer::border_width", 10,
3882 "GtkWidget::parent", main_vbox,
3883 "GtkWidget::visible", TRUE,
3886 hbox = gtk_hbox_new (FALSE, 0);
3887 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
3888 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
3890 label = gtk_label_new ("Cursor Value : ");
3891 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
3892 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
3894 adj = (GtkAdjustment *) gtk_adjustment_new (0,
3898 spinner = gtk_spin_button_new (adj, 0, 0);
3899 gtk_box_pack_start (GTK_BOX (hbox), spinner, TRUE, TRUE, 0);
3902 gtk_widget_new (gtk_frame_get_type (),
3903 "GtkFrame::shadow", GTK_SHADOW_ETCHED_IN,
3904 "GtkFrame::label_xalign", 0.5,
3905 "GtkFrame::label", "Cursor Area",
3906 "GtkContainer::border_width", 10,
3907 "GtkWidget::parent", vbox,
3908 "GtkWidget::visible", TRUE,
3911 darea = gtk_drawing_area_new ();
3912 gtk_widget_set_usize (darea, 80, 80);
3913 gtk_container_add (GTK_CONTAINER (frame), darea);
3914 gtk_signal_connect (GTK_OBJECT (darea),
3916 GTK_SIGNAL_FUNC (cursor_expose_event),
3918 gtk_widget_set_events (darea, GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK);
3919 gtk_signal_connect (GTK_OBJECT (darea),
3920 "button_press_event",
3921 GTK_SIGNAL_FUNC (cursor_event),
3923 gtk_widget_show (darea);
3925 gtk_signal_connect (GTK_OBJECT (spinner), "changed",
3926 GTK_SIGNAL_FUNC (set_cursor),
3929 label = gtk_widget_new (GTK_TYPE_LABEL,
3934 gtk_container_child_set (GTK_CONTAINER (vbox), label,
3937 gtk_object_set_user_data (GTK_OBJECT (spinner), label);
3940 gtk_widget_new (gtk_hseparator_get_type (),
3941 "GtkWidget::visible", TRUE,
3943 gtk_box_pack_start (GTK_BOX (main_vbox), any, FALSE, TRUE, 0);
3945 hbox = gtk_hbox_new (FALSE, 0);
3946 gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
3947 gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
3949 button = gtk_button_new_with_label ("Close");
3950 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
3951 GTK_SIGNAL_FUNC (gtk_widget_destroy),
3952 GTK_OBJECT (window));
3953 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
3955 gtk_widget_show_all (window);
3957 set_cursor (spinner, darea);
3960 gtk_widget_destroy (window);
3968 list_add (GtkWidget *widget,
3973 GtkWidget *list_item;
3974 GtkContainer *container;
3976 container = GTK_CONTAINER (list);
3978 sprintf (buffer, "added item %d", i++);
3979 list_item = gtk_list_item_new_with_label (buffer);
3980 gtk_widget_show (list_item);
3982 gtk_container_add (container, list_item);
3986 list_remove (GtkWidget *widget,
3989 GList *clear_list = NULL;
3990 GList *sel_row = NULL;
3993 if (list->selection_mode == GTK_SELECTION_EXTENDED)
3997 item = GTK_CONTAINER (list)->focus_child;
3998 if (!item && list->selection)
3999 item = list->selection->data;
4003 work = g_list_find (list->children, item);
4004 for (sel_row = work; sel_row; sel_row = sel_row->next)
4005 if (GTK_WIDGET (sel_row->data)->state != GTK_STATE_SELECTED)
4010 for (sel_row = work; sel_row; sel_row = sel_row->prev)
4011 if (GTK_WIDGET (sel_row->data)->state != GTK_STATE_SELECTED)
4017 for (work = list->selection; work; work = work->next)
4018 clear_list = g_list_prepend (clear_list, work->data);
4020 clear_list = g_list_reverse (clear_list);
4021 gtk_list_remove_items (GTK_LIST (list), clear_list);
4022 g_list_free (clear_list);
4024 if (list->selection_mode == GTK_SELECTION_EXTENDED && sel_row)
4025 gtk_list_select_child (list, GTK_WIDGET(sel_row->data));
4029 list_clear (GtkWidget *widget,
4032 gtk_list_clear_items (GTK_LIST (list), 0, -1);
4035 #define RADIOMENUTOGGLED(_rmi_, __i) { \
4038 __g = gtk_radio_menu_item_group(_rmi_); \
4039 while( __g && !((GtkCheckMenuItem *)(__g->data))->active) { \
4045 static GtkWidget *list_omenu;
4048 list_toggle_sel_mode (GtkWidget *widget, GtkList *list)
4052 if (!GTK_WIDGET_MAPPED (widget))
4055 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
4056 (((GtkOptionMenu *)list_omenu)->menu_item), i);
4058 gtk_list_set_selection_mode (list, (GtkSelectionMode) (3-i));
4064 static GtkWidget *window = NULL;
4066 static OptionMenuItem items[] =
4068 { "Single", list_toggle_sel_mode },
4069 { "Browse", list_toggle_sel_mode },
4070 { "Multiple", list_toggle_sel_mode },
4071 { "Extended", list_toggle_sel_mode }
4080 GtkWidget *scrolled_win;
4083 GtkWidget *separator;
4086 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
4088 gtk_signal_connect (GTK_OBJECT (window), "destroy",
4089 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
4092 gtk_window_set_title (GTK_WINDOW (window), "list");
4093 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
4095 vbox = gtk_vbox_new (FALSE, 0);
4096 gtk_container_add (GTK_CONTAINER (window), vbox);
4098 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
4099 gtk_container_set_border_width (GTK_CONTAINER (scrolled_win), 5);
4100 gtk_widget_set_usize (scrolled_win, -1, 300);
4101 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
4102 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
4103 GTK_POLICY_AUTOMATIC,
4104 GTK_POLICY_AUTOMATIC);
4106 list = gtk_list_new ();
4107 gtk_list_set_selection_mode (GTK_LIST (list), GTK_SELECTION_EXTENDED);
4108 gtk_scrolled_window_add_with_viewport
4109 (GTK_SCROLLED_WINDOW (scrolled_win), list);
4110 gtk_container_set_focus_vadjustment
4111 (GTK_CONTAINER (list),
4112 gtk_scrolled_window_get_vadjustment
4113 (GTK_SCROLLED_WINDOW (scrolled_win)));
4114 gtk_container_set_focus_hadjustment
4115 (GTK_CONTAINER (list),
4116 gtk_scrolled_window_get_hadjustment
4117 (GTK_SCROLLED_WINDOW (scrolled_win)));
4119 if ((infile = fopen("gtkenums.h", "r")))
4125 while (fgets (buffer, 256, infile))
4127 if ((pos = strchr (buffer, '\n')))
4129 item = gtk_list_item_new_with_label (buffer);
4130 gtk_container_add (GTK_CONTAINER (list), item);
4137 hbox = gtk_hbox_new (TRUE, 5);
4138 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4139 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
4141 button = gtk_button_new_with_label ("Insert Row");
4142 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4143 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4144 GTK_SIGNAL_FUNC (list_add),
4147 button = gtk_button_new_with_label ("Clear List");
4148 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4149 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4150 GTK_SIGNAL_FUNC (list_clear),
4153 button = gtk_button_new_with_label ("Remove Selection");
4154 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4155 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4156 GTK_SIGNAL_FUNC (list_remove),
4159 cbox = gtk_hbox_new (FALSE, 0);
4160 gtk_box_pack_start (GTK_BOX (vbox), cbox, FALSE, TRUE, 0);
4162 hbox = gtk_hbox_new (FALSE, 5);
4163 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4164 gtk_box_pack_start (GTK_BOX (cbox), hbox, TRUE, FALSE, 0);
4166 label = gtk_label_new ("Selection Mode :");
4167 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
4169 list_omenu = build_option_menu (items, 4, 3, list);
4170 gtk_box_pack_start (GTK_BOX (hbox), list_omenu, FALSE, TRUE, 0);
4172 separator = gtk_hseparator_new ();
4173 gtk_box_pack_start (GTK_BOX (vbox), separator, FALSE, TRUE, 0);
4175 cbox = gtk_hbox_new (FALSE, 0);
4176 gtk_box_pack_start (GTK_BOX (vbox), cbox, FALSE, TRUE, 0);
4178 button = gtk_button_new_with_label ("close");
4179 gtk_container_set_border_width (GTK_CONTAINER (button), 10);
4180 gtk_box_pack_start (GTK_BOX (cbox), button, TRUE, TRUE, 0);
4181 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
4182 GTK_SIGNAL_FUNC(gtk_widget_destroy),
4183 GTK_OBJECT (window));
4185 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
4186 gtk_widget_grab_default (button);
4189 if (!GTK_WIDGET_VISIBLE (window))
4190 gtk_widget_show_all (window);
4192 gtk_widget_destroy (window);
4199 static char * book_open_xpm[] = {
4222 static char * book_closed_xpm[] = {
4247 static char * mini_page_xpm[] = {
4270 static char * gtk_mini_xpm[] = {
4310 #define TESTGTK_CLIST_COLUMNS 12
4311 static gint clist_rows = 0;
4312 static GtkWidget *clist_omenu;
4315 add1000_clist (GtkWidget *widget, gpointer data)
4318 char text[TESTGTK_CLIST_COLUMNS][50];
4319 char *texts[TESTGTK_CLIST_COLUMNS];
4324 clist = GTK_CLIST (data);
4326 pixmap = gdk_pixmap_create_from_xpm_d (clist->clist_window,
4328 >K_WIDGET (data)->style->white,
4331 for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++)
4334 sprintf (text[i], "Column %d", i);
4338 sprintf (text[1], "Right");
4339 sprintf (text[2], "Center");
4341 gtk_clist_freeze (GTK_CLIST (data));
4342 for (i = 0; i < 1000; i++)
4344 sprintf (text[0], "CListRow %d", rand() % 10000);
4345 row = gtk_clist_append (clist, texts);
4346 gtk_clist_set_pixtext (clist, row, 3, "gtk+", 5, pixmap, mask);
4349 gtk_clist_thaw (GTK_CLIST (data));
4351 gdk_pixmap_unref (pixmap);
4352 gdk_bitmap_unref (mask);
4356 add10000_clist (GtkWidget *widget, gpointer data)
4359 char text[TESTGTK_CLIST_COLUMNS][50];
4360 char *texts[TESTGTK_CLIST_COLUMNS];
4362 for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++)
4365 sprintf (text[i], "Column %d", i);
4368 sprintf (text[1], "Right");
4369 sprintf (text[2], "Center");
4371 gtk_clist_freeze (GTK_CLIST (data));
4372 for (i = 0; i < 10000; i++)
4374 sprintf (text[0], "CListRow %d", rand() % 10000);
4375 gtk_clist_append (GTK_CLIST (data), texts);
4377 gtk_clist_thaw (GTK_CLIST (data));
4381 clear_clist (GtkWidget *widget, gpointer data)
4383 gtk_clist_clear (GTK_CLIST (data));
4387 void clist_remove_selection (GtkWidget *widget, GtkCList *clist)
4389 gtk_clist_freeze (clist);
4391 while (clist->selection)
4396 row = GPOINTER_TO_INT (clist->selection->data);
4398 gtk_clist_remove (clist, row);
4400 if (clist->selection_mode == GTK_SELECTION_BROWSE)
4404 if (clist->selection_mode == GTK_SELECTION_EXTENDED && !clist->selection &&
4405 clist->focus_row >= 0)
4406 gtk_clist_select_row (clist, clist->focus_row, -1);
4408 gtk_clist_thaw (clist);
4411 void toggle_title_buttons (GtkWidget *widget, GtkCList *clist)
4413 if (GTK_TOGGLE_BUTTON (widget)->active)
4414 gtk_clist_column_titles_show (clist);
4416 gtk_clist_column_titles_hide (clist);
4419 void toggle_reorderable (GtkWidget *widget, GtkCList *clist)
4421 gtk_clist_set_reorderable (clist, GTK_TOGGLE_BUTTON (widget)->active);
4425 insert_row_clist (GtkWidget *widget, gpointer data)
4427 static char *text[] =
4429 "This", "is an", "inserted", "row.",
4430 "This", "is an", "inserted", "row.",
4431 "This", "is an", "inserted", "row."
4434 static GtkStyle *style1 = NULL;
4435 static GtkStyle *style2 = NULL;
4436 static GtkStyle *style3 = NULL;
4439 if (GTK_CLIST (data)->focus_row >= 0)
4440 row = gtk_clist_insert (GTK_CLIST (data), GTK_CLIST (data)->focus_row,
4443 row = gtk_clist_prepend (GTK_CLIST (data), text);
4457 style1 = gtk_style_copy (GTK_WIDGET (data)->style);
4458 style1->base[GTK_STATE_NORMAL] = col1;
4459 style1->base[GTK_STATE_SELECTED] = col2;
4461 style2 = gtk_style_copy (GTK_WIDGET (data)->style);
4462 style2->fg[GTK_STATE_NORMAL] = col1;
4463 style2->fg[GTK_STATE_SELECTED] = col2;
4465 style3 = gtk_style_copy (GTK_WIDGET (data)->style);
4466 style3->fg[GTK_STATE_NORMAL] = col1;
4467 style3->base[GTK_STATE_NORMAL] = col2;
4468 pango_font_description_free (style3->font_desc);
4469 style3->font_desc = pango_font_description_from_string ("courier 12");
4472 gtk_clist_set_cell_style (GTK_CLIST (data), row, 3, style1);
4473 gtk_clist_set_cell_style (GTK_CLIST (data), row, 4, style2);
4474 gtk_clist_set_cell_style (GTK_CLIST (data), row, 0, style3);
4480 clist_warning_test (GtkWidget *button,
4484 static gboolean add_remove = FALSE;
4486 add_remove = !add_remove;
4488 child = gtk_label_new ("Test");
4489 gtk_widget_ref (child);
4490 gtk_object_sink (GTK_OBJECT (child));
4493 gtk_container_add (GTK_CONTAINER (clist), child);
4496 child->parent = clist;
4497 gtk_container_remove (GTK_CONTAINER (clist), child);
4498 child->parent = NULL;
4501 gtk_widget_destroy (child);
4502 gtk_widget_unref (child);
4506 undo_selection (GtkWidget *button, GtkCList *clist)
4508 gtk_clist_undo_selection (clist);
4512 clist_toggle_sel_mode (GtkWidget *widget, GtkCList *clist)
4516 if (!GTK_WIDGET_MAPPED (widget))
4519 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
4520 (((GtkOptionMenu *)clist_omenu)->menu_item), i);
4522 gtk_clist_set_selection_mode (clist, (GtkSelectionMode) (3-i));
4526 clist_click_column (GtkCList *clist, gint column, gpointer data)
4529 gtk_clist_set_column_visibility (clist, column, FALSE);
4530 else if (column == clist->sort_column)
4532 if (clist->sort_type == GTK_SORT_ASCENDING)
4533 clist->sort_type = GTK_SORT_DESCENDING;
4535 clist->sort_type = GTK_SORT_ASCENDING;
4538 gtk_clist_set_sort_column (clist, column);
4540 gtk_clist_sort (clist);
4547 static GtkWidget *window = NULL;
4549 static char *titles[] =
4551 "auto resize", "not resizeable", "max width 100", "min width 50",
4552 "hide column", "Title 5", "Title 6", "Title 7",
4553 "Title 8", "Title 9", "Title 10", "Title 11"
4556 static OptionMenuItem items[] =
4558 { "Single", clist_toggle_sel_mode },
4559 { "Browse", clist_toggle_sel_mode },
4560 { "Multiple", clist_toggle_sel_mode },
4561 { "Extended", clist_toggle_sel_mode }
4564 char text[TESTGTK_CLIST_COLUMNS][50];
4565 char *texts[TESTGTK_CLIST_COLUMNS];
4571 GtkWidget *separator;
4572 GtkWidget *scrolled_win;
4575 GtkWidget *undo_button;
4585 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
4587 gtk_signal_connect (GTK_OBJECT (window), "destroy",
4588 GTK_SIGNAL_FUNC (gtk_widget_destroyed), &window);
4590 gtk_window_set_title (GTK_WINDOW (window), "clist");
4591 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
4593 vbox = gtk_vbox_new (FALSE, 0);
4594 gtk_container_add (GTK_CONTAINER (window), vbox);
4596 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
4597 gtk_container_set_border_width (GTK_CONTAINER (scrolled_win), 5);
4598 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
4599 GTK_POLICY_AUTOMATIC,
4600 GTK_POLICY_AUTOMATIC);
4602 /* create GtkCList here so we have a pointer to throw at the
4603 * button callbacks -- more is done with it later */
4604 clist = gtk_clist_new_with_titles (TESTGTK_CLIST_COLUMNS, titles);
4605 gtk_container_add (GTK_CONTAINER (scrolled_win), clist);
4606 gtk_signal_connect (GTK_OBJECT (clist), "click_column",
4607 (GtkSignalFunc) clist_click_column, NULL);
4609 /* control buttons */
4610 hbox = gtk_hbox_new (FALSE, 5);
4611 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4612 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
4614 button = gtk_button_new_with_label ("Insert Row");
4615 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4616 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4617 (GtkSignalFunc) insert_row_clist, (gpointer) clist);
4619 button = gtk_button_new_with_label ("Add 1,000 Rows With Pixmaps");
4620 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4621 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4622 (GtkSignalFunc) add1000_clist, (gpointer) clist);
4624 button = gtk_button_new_with_label ("Add 10,000 Rows");
4625 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4626 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4627 (GtkSignalFunc) add10000_clist, (gpointer) clist);
4629 /* second layer of buttons */
4630 hbox = gtk_hbox_new (FALSE, 5);
4631 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4632 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
4634 button = gtk_button_new_with_label ("Clear List");
4635 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4636 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4637 (GtkSignalFunc) clear_clist, (gpointer) clist);
4639 button = gtk_button_new_with_label ("Remove Selection");
4640 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4641 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4642 (GtkSignalFunc) clist_remove_selection,
4645 undo_button = gtk_button_new_with_label ("Undo Selection");
4646 gtk_box_pack_start (GTK_BOX (hbox), undo_button, TRUE, TRUE, 0);
4647 gtk_signal_connect (GTK_OBJECT (undo_button), "clicked",
4648 (GtkSignalFunc) undo_selection, (gpointer) clist);
4650 button = gtk_button_new_with_label ("Warning Test");
4651 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4652 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4653 (GtkSignalFunc) clist_warning_test,(gpointer) clist);
4655 /* third layer of buttons */
4656 hbox = gtk_hbox_new (FALSE, 5);
4657 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4658 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
4660 check = gtk_check_button_new_with_label ("Show Title Buttons");
4661 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
4662 gtk_signal_connect (GTK_OBJECT (check), "clicked",
4663 GTK_SIGNAL_FUNC (toggle_title_buttons), clist);
4664 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE);
4666 check = gtk_check_button_new_with_label ("Reorderable");
4667 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
4668 gtk_signal_connect (GTK_OBJECT (check), "clicked",
4669 GTK_SIGNAL_FUNC (toggle_reorderable), clist);
4670 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE);
4672 label = gtk_label_new ("Selection Mode :");
4673 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
4675 clist_omenu = build_option_menu (items, 4, 3, clist);
4676 gtk_box_pack_start (GTK_BOX (hbox), clist_omenu, FALSE, TRUE, 0);
4679 * the rest of the clist configuration
4682 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
4683 gtk_clist_set_row_height (GTK_CLIST (clist), 18);
4684 gtk_widget_set_usize (clist, -1, 300);
4686 for (i = 1; i < TESTGTK_CLIST_COLUMNS; i++)
4687 gtk_clist_set_column_width (GTK_CLIST (clist), i, 80);
4689 gtk_clist_set_column_auto_resize (GTK_CLIST (clist), 0, TRUE);
4690 gtk_clist_set_column_resizeable (GTK_CLIST (clist), 1, FALSE);
4691 gtk_clist_set_column_max_width (GTK_CLIST (clist), 2, 100);
4692 gtk_clist_set_column_min_width (GTK_CLIST (clist), 3, 50);
4693 gtk_clist_set_selection_mode (GTK_CLIST (clist), GTK_SELECTION_EXTENDED);
4694 gtk_clist_set_column_justification (GTK_CLIST (clist), 1,
4696 gtk_clist_set_column_justification (GTK_CLIST (clist), 2,
4697 GTK_JUSTIFY_CENTER);
4699 for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++)
4702 sprintf (text[i], "Column %d", i);
4705 sprintf (text[1], "Right");
4706 sprintf (text[2], "Center");
4715 style = gtk_style_new ();
4716 style->fg[GTK_STATE_NORMAL] = col1;
4717 style->base[GTK_STATE_NORMAL] = col2;
4719 style->font_desc->size = 14 * PANGO_SCALE;
4720 style->font_desc->weight = PANGO_WEIGHT_BOLD;
4722 for (i = 0; i < 10; i++)
4724 sprintf (text[0], "CListRow %d", clist_rows++);
4725 gtk_clist_append (GTK_CLIST (clist), texts);
4730 gtk_clist_set_row_style (GTK_CLIST (clist), i, style);
4733 gtk_clist_set_cell_style (GTK_CLIST (clist), i, i % 4, style);
4738 separator = gtk_hseparator_new ();
4739 gtk_box_pack_start (GTK_BOX (vbox), separator, FALSE, TRUE, 0);
4741 hbox = gtk_hbox_new (FALSE, 0);
4742 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
4744 button = gtk_button_new_with_label ("close");
4745 gtk_container_set_border_width (GTK_CONTAINER (button), 10);
4746 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4747 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
4748 GTK_SIGNAL_FUNC(gtk_widget_destroy),
4749 GTK_OBJECT (window));
4751 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
4752 gtk_widget_grab_default (button);
4755 if (!GTK_WIDGET_VISIBLE (window))
4756 gtk_widget_show_all (window);
4760 gtk_widget_destroy (window);
4775 static gint books = 0;
4776 static gint pages = 0;
4778 static GtkWidget *book_label;
4779 static GtkWidget *page_label;
4780 static GtkWidget *sel_label;
4781 static GtkWidget *vis_label;
4782 static GtkWidget *omenu1;
4783 static GtkWidget *omenu2;
4784 static GtkWidget *omenu3;
4785 static GtkWidget *omenu4;
4786 static GtkWidget *spin1;
4787 static GtkWidget *spin2;
4788 static GtkWidget *spin3;
4789 static gint line_style;
4791 void after_press (GtkCTree *ctree, gpointer data)
4795 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->selection));
4796 gtk_label_set_text (GTK_LABEL (sel_label), buf);
4798 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->row_list));
4799 gtk_label_set_text (GTK_LABEL (vis_label), buf);
4801 sprintf (buf, "%d", books);
4802 gtk_label_set_text (GTK_LABEL (book_label), buf);
4804 sprintf (buf, "%d", pages);
4805 gtk_label_set_text (GTK_LABEL (page_label), buf);
4808 void after_move (GtkCTree *ctree, GtkCTreeNode *child, GtkCTreeNode *parent,
4809 GtkCTreeNode *sibling, gpointer data)
4815 gtk_ctree_get_node_info (ctree, child, &source,
4816 NULL, NULL, NULL, NULL, NULL, NULL, NULL);
4818 gtk_ctree_get_node_info (ctree, parent, &target1,
4819 NULL, NULL, NULL, NULL, NULL, NULL, NULL);
4821 gtk_ctree_get_node_info (ctree, sibling, &target2,
4822 NULL, NULL, NULL, NULL, NULL, NULL, NULL);
4824 g_print ("Moving \"%s\" to \"%s\" with sibling \"%s\".\n", source,
4825 (parent) ? target1 : "nil", (sibling) ? target2 : "nil");
4828 void count_items (GtkCTree *ctree, GtkCTreeNode *list)
4830 if (GTK_CTREE_ROW (list)->is_leaf)
4836 void expand_all (GtkWidget *widget, GtkCTree *ctree)
4838 gtk_ctree_expand_recursive (ctree, NULL);
4839 after_press (ctree, NULL);
4842 void collapse_all (GtkWidget *widget, GtkCTree *ctree)
4844 gtk_ctree_collapse_recursive (ctree, NULL);
4845 after_press (ctree, NULL);
4848 void select_all (GtkWidget *widget, GtkCTree *ctree)
4850 gtk_ctree_select_recursive (ctree, NULL);
4851 after_press (ctree, NULL);
4854 void change_style (GtkWidget *widget, GtkCTree *ctree)
4856 static GtkStyle *style1 = NULL;
4857 static GtkStyle *style2 = NULL;
4863 if (GTK_CLIST (ctree)->focus_row >= 0)
4864 node = GTK_CTREE_NODE
4865 (g_list_nth (GTK_CLIST (ctree)->row_list,GTK_CLIST (ctree)->focus_row));
4867 node = GTK_CTREE_NODE (GTK_CLIST (ctree)->row_list);
4881 style1 = gtk_style_new ();
4882 style1->base[GTK_STATE_NORMAL] = col1;
4883 style1->fg[GTK_STATE_SELECTED] = col2;
4885 style2 = gtk_style_new ();
4886 style2->base[GTK_STATE_SELECTED] = col2;
4887 style2->fg[GTK_STATE_NORMAL] = col1;
4888 style2->base[GTK_STATE_NORMAL] = col2;
4889 pango_font_description_free (style2->font_desc);
4890 style2->font_desc = pango_font_description_from_string ("courier 30");
4893 gtk_ctree_node_set_cell_style (ctree, node, 1, style1);
4894 gtk_ctree_node_set_cell_style (ctree, node, 0, style2);
4896 if (GTK_CTREE_ROW (node)->children)
4897 gtk_ctree_node_set_row_style (ctree, GTK_CTREE_ROW (node)->children,
4901 void unselect_all (GtkWidget *widget, GtkCTree *ctree)
4903 gtk_ctree_unselect_recursive (ctree, NULL);
4904 after_press (ctree, NULL);
4907 void remove_selection (GtkWidget *widget, GtkCTree *ctree)
4912 clist = GTK_CLIST (ctree);
4914 gtk_clist_freeze (clist);
4916 while (clist->selection)
4918 node = clist->selection->data;
4920 if (GTK_CTREE_ROW (node)->is_leaf)
4923 gtk_ctree_post_recursive (ctree, node,
4924 (GtkCTreeFunc) count_items, NULL);
4926 gtk_ctree_remove_node (ctree, node);
4928 if (clist->selection_mode == GTK_SELECTION_BROWSE)
4932 if (clist->selection_mode == GTK_SELECTION_EXTENDED && !clist->selection &&
4933 clist->focus_row >= 0)
4935 node = gtk_ctree_node_nth (ctree, clist->focus_row);
4938 gtk_ctree_select (ctree, node);
4941 gtk_clist_thaw (clist);
4942 after_press (ctree, NULL);
4945 struct _ExportStruct {
4951 typedef struct _ExportStruct ExportStruct;
4954 gnode2ctree (GtkCTree *ctree,
4957 GtkCTreeNode *cnode,
4961 GdkPixmap *pixmap_closed;
4962 GdkBitmap *mask_closed;
4963 GdkPixmap *pixmap_opened;
4964 GdkBitmap *mask_opened;
4966 if (!cnode || !gnode || (!(es = gnode->data)))
4971 pixmap_closed = pixmap3;
4972 mask_closed = mask3;
4973 pixmap_opened = NULL;
4978 pixmap_closed = pixmap1;
4979 mask_closed = mask1;
4980 pixmap_opened = pixmap2;
4981 mask_opened = mask2;
4984 gtk_ctree_set_node_info (ctree, cnode, es->tree, 2, pixmap_closed,
4985 mask_closed, pixmap_opened, mask_opened,
4986 es->is_leaf, (depth < 3));
4987 gtk_ctree_node_set_text (ctree, cnode, 1, es->info);
4995 ctree2gnode (GtkCTree *ctree,
4998 GtkCTreeNode *cnode,
5003 if (!cnode || !gnode)
5006 es = g_new (ExportStruct, 1);
5008 es->is_leaf = GTK_CTREE_ROW (cnode)->is_leaf;
5009 es->tree = GTK_CELL_PIXTEXT (GTK_CTREE_ROW (cnode)->row.cell[0])->text;
5010 es->info = GTK_CELL_PIXTEXT (GTK_CTREE_ROW (cnode)->row.cell[1])->text;
5014 void export_ctree (GtkWidget *widget, GtkCTree *ctree)
5016 char *title[] = { "Tree" , "Info" };
5017 static GtkWidget *export_window = NULL;
5018 static GtkCTree *export_ctree;
5020 GtkWidget *scrolled_win;
5028 export_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5030 gtk_signal_connect (GTK_OBJECT (export_window), "destroy",
5031 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
5034 gtk_window_set_title (GTK_WINDOW (export_window), "exported ctree");
5035 gtk_container_set_border_width (GTK_CONTAINER (export_window), 5);
5037 vbox = gtk_vbox_new (FALSE, 0);
5038 gtk_container_add (GTK_CONTAINER (export_window), vbox);
5040 button = gtk_button_new_with_label ("Close");
5041 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, TRUE, 0);
5043 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5044 (GtkSignalFunc) gtk_widget_destroy,
5045 GTK_OBJECT(export_window));
5047 sep = gtk_hseparator_new ();
5048 gtk_box_pack_end (GTK_BOX (vbox), sep, FALSE, TRUE, 10);
5050 export_ctree = GTK_CTREE (gtk_ctree_new_with_titles (2, 0, title));
5051 gtk_ctree_set_line_style (export_ctree, GTK_CTREE_LINES_DOTTED);
5053 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
5054 gtk_container_add (GTK_CONTAINER (scrolled_win),
5055 GTK_WIDGET (export_ctree));
5056 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
5057 GTK_POLICY_AUTOMATIC,
5058 GTK_POLICY_AUTOMATIC);
5059 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
5060 gtk_clist_set_selection_mode (GTK_CLIST (export_ctree),
5061 GTK_SELECTION_EXTENDED);
5062 gtk_clist_set_column_width (GTK_CLIST (export_ctree), 0, 200);
5063 gtk_clist_set_column_width (GTK_CLIST (export_ctree), 1, 200);
5064 gtk_widget_set_usize (GTK_WIDGET (export_ctree), 300, 200);
5067 if (!GTK_WIDGET_VISIBLE (export_window))
5068 gtk_widget_show_all (export_window);
5070 gtk_clist_clear (GTK_CLIST (export_ctree));
5072 node = GTK_CTREE_NODE (g_list_nth (GTK_CLIST (ctree)->row_list,
5073 GTK_CLIST (ctree)->focus_row));
5077 gnode = gtk_ctree_export_to_gnode (ctree, NULL, NULL, node,
5081 gtk_ctree_insert_gnode (export_ctree, NULL, NULL, gnode,
5083 g_node_destroy (gnode);
5087 void change_indent (GtkWidget *widget, GtkCTree *ctree)
5089 gtk_ctree_set_indent (ctree, GTK_ADJUSTMENT (widget)->value);
5092 void change_spacing (GtkWidget *widget, GtkCTree *ctree)
5094 gtk_ctree_set_spacing (ctree, GTK_ADJUSTMENT (widget)->value);
5097 void change_row_height (GtkWidget *widget, GtkCList *clist)
5099 gtk_clist_set_row_height (clist, GTK_ADJUSTMENT (widget)->value);
5102 void set_background (GtkCTree *ctree, GtkCTreeNode *node, gpointer data)
5104 GtkStyle *style = NULL;
5109 if (ctree->line_style != GTK_CTREE_LINES_TABBED)
5111 if (!GTK_CTREE_ROW (node)->is_leaf)
5112 style = GTK_CTREE_ROW (node)->row.data;
5113 else if (GTK_CTREE_ROW (node)->parent)
5114 style = GTK_CTREE_ROW (GTK_CTREE_ROW (node)->parent)->row.data;
5117 gtk_ctree_node_set_row_style (ctree, node, style);
5120 void ctree_toggle_line_style (GtkWidget *widget, GtkCTree *ctree)
5124 if (!GTK_WIDGET_MAPPED (widget))
5127 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
5128 (((GtkOptionMenu *)omenu1)->menu_item), i);
5130 if ((ctree->line_style == GTK_CTREE_LINES_TABBED &&
5131 ((GtkCTreeLineStyle) (3 - i)) != GTK_CTREE_LINES_TABBED) ||
5132 (ctree->line_style != GTK_CTREE_LINES_TABBED &&
5133 ((GtkCTreeLineStyle) (3 - i)) == GTK_CTREE_LINES_TABBED))
5134 gtk_ctree_pre_recursive (ctree, NULL, set_background, NULL);
5135 gtk_ctree_set_line_style (ctree, 3 - i);
5139 void ctree_toggle_expander_style (GtkWidget *widget, GtkCTree *ctree)
5143 if (!GTK_WIDGET_MAPPED (widget))
5146 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
5147 (((GtkOptionMenu *)omenu2)->menu_item), i);
5149 gtk_ctree_set_expander_style (ctree, (GtkCTreeExpanderStyle) (3 - i));
5152 void ctree_toggle_justify (GtkWidget *widget, GtkCTree *ctree)
5156 if (!GTK_WIDGET_MAPPED (widget))
5159 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
5160 (((GtkOptionMenu *)omenu3)->menu_item), i);
5162 gtk_clist_set_column_justification (GTK_CLIST (ctree), ctree->tree_column,
5163 (GtkJustification) (1 - i));
5166 void ctree_toggle_sel_mode (GtkWidget *widget, GtkCTree *ctree)
5170 if (!GTK_WIDGET_MAPPED (widget))
5173 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
5174 (((GtkOptionMenu *)omenu4)->menu_item), i);
5176 gtk_clist_set_selection_mode (GTK_CLIST (ctree), (GtkSelectionMode) (3 - i));
5177 after_press (ctree, NULL);
5180 void build_recursive (GtkCTree *ctree, gint cur_depth, gint depth,
5181 gint num_books, gint num_pages, GtkCTreeNode *parent)
5186 GtkCTreeNode *sibling;
5193 for (i = num_pages + num_books; i > num_books; i--)
5196 sprintf (buf1, "Page %02d", (gint) rand() % 100);
5197 sprintf (buf2, "Item %d-%d", cur_depth, i);
5198 sibling = gtk_ctree_insert_node (ctree, parent, sibling, text, 5,
5199 pixmap3, mask3, NULL, NULL,
5202 if (parent && ctree->line_style == GTK_CTREE_LINES_TABBED)
5203 gtk_ctree_node_set_row_style (ctree, sibling,
5204 GTK_CTREE_ROW (parent)->row.style);
5207 if (cur_depth == depth)
5210 for (i = num_books; i > 0; i--)
5215 sprintf (buf1, "Book %02d", (gint) rand() % 100);
5216 sprintf (buf2, "Item %d-%d", cur_depth, i);
5217 sibling = gtk_ctree_insert_node (ctree, parent, sibling, text, 5,
5218 pixmap1, mask1, pixmap2, mask2,
5221 style = gtk_style_new ();
5222 switch (cur_depth % 3)
5225 style->base[GTK_STATE_NORMAL].red = 10000 * (cur_depth % 6);
5226 style->base[GTK_STATE_NORMAL].green = 0;
5227 style->base[GTK_STATE_NORMAL].blue = 65535 - ((i * 10000) % 65535);
5230 style->base[GTK_STATE_NORMAL].red = 10000 * (cur_depth % 6);
5231 style->base[GTK_STATE_NORMAL].green = 65535 - ((i * 10000) % 65535);
5232 style->base[GTK_STATE_NORMAL].blue = 0;
5235 style->base[GTK_STATE_NORMAL].red = 65535 - ((i * 10000) % 65535);
5236 style->base[GTK_STATE_NORMAL].green = 0;
5237 style->base[GTK_STATE_NORMAL].blue = 10000 * (cur_depth % 6);
5240 gtk_ctree_node_set_row_data_full (ctree, sibling, style,
5241 (GtkDestroyNotify) gtk_style_unref);
5243 if (ctree->line_style == GTK_CTREE_LINES_TABBED)
5244 gtk_ctree_node_set_row_style (ctree, sibling, style);
5246 build_recursive (ctree, cur_depth + 1, depth, num_books, num_pages,
5251 void rebuild_tree (GtkWidget *widget, GtkCTree *ctree)
5254 gchar label1[] = "Root";
5255 gchar label2[] = "";
5256 GtkCTreeNode *parent;
5263 d = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin1));
5264 b = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin2));
5265 p = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin3));
5267 n = ((pow (b, d) - 1) / (b - 1)) * (p + 1);
5271 g_print ("%d total items? Try less\n",n);
5275 gtk_clist_freeze (GTK_CLIST (ctree));
5276 gtk_clist_clear (GTK_CLIST (ctree));
5281 parent = gtk_ctree_insert_node (ctree, NULL, NULL, text, 5, pixmap1,
5282 mask1, pixmap2, mask2, FALSE, TRUE);
5284 style = gtk_style_new ();
5285 style->base[GTK_STATE_NORMAL].red = 0;
5286 style->base[GTK_STATE_NORMAL].green = 45000;
5287 style->base[GTK_STATE_NORMAL].blue = 55000;
5288 gtk_ctree_node_set_row_data_full (ctree, parent, style,
5289 (GtkDestroyNotify) gtk_style_unref);
5291 if (ctree->line_style == GTK_CTREE_LINES_TABBED)
5292 gtk_ctree_node_set_row_style (ctree, parent, style);
5294 build_recursive (ctree, 1, d, b, p, parent);
5295 gtk_clist_thaw (GTK_CLIST (ctree));
5296 after_press (ctree, NULL);
5300 ctree_click_column (GtkCTree *ctree, gint column, gpointer data)
5304 clist = GTK_CLIST (ctree);
5306 if (column == clist->sort_column)
5308 if (clist->sort_type == GTK_SORT_ASCENDING)
5309 clist->sort_type = GTK_SORT_DESCENDING;
5311 clist->sort_type = GTK_SORT_ASCENDING;
5314 gtk_clist_set_sort_column (clist, column);
5316 gtk_ctree_sort_recursive (ctree, NULL);
5319 void create_ctree (void)
5321 static GtkWidget *window = NULL;
5322 GtkTooltips *tooltips;
5324 GtkWidget *scrolled_win;
5336 GdkColor transparent = { 0 };
5338 char *title[] = { "Tree" , "Info" };
5341 static OptionMenuItem items1[] =
5343 { "No lines", ctree_toggle_line_style },
5344 { "Solid", ctree_toggle_line_style },
5345 { "Dotted", ctree_toggle_line_style },
5346 { "Tabbed", ctree_toggle_line_style }
5349 static OptionMenuItem items2[] =
5351 { "None", ctree_toggle_expander_style },
5352 { "Square", ctree_toggle_expander_style },
5353 { "Triangle", ctree_toggle_expander_style },
5354 { "Circular", ctree_toggle_expander_style }
5357 static OptionMenuItem items3[] =
5359 { "Left", ctree_toggle_justify },
5360 { "Right", ctree_toggle_justify }
5363 static OptionMenuItem items4[] =
5365 { "Single", ctree_toggle_sel_mode },
5366 { "Browse", ctree_toggle_sel_mode },
5367 { "Multiple", ctree_toggle_sel_mode },
5368 { "Extended", ctree_toggle_sel_mode }
5373 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5375 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5376 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
5379 gtk_window_set_title (GTK_WINDOW (window), "GtkCTree");
5380 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
5382 tooltips = gtk_tooltips_new ();
5383 gtk_object_ref (GTK_OBJECT (tooltips));
5384 gtk_object_sink (GTK_OBJECT (tooltips));
5386 gtk_object_set_data_full (GTK_OBJECT (window), "tooltips", tooltips,
5387 (GtkDestroyNotify) gtk_object_unref);
5389 vbox = gtk_vbox_new (FALSE, 0);
5390 gtk_container_add (GTK_CONTAINER (window), vbox);
5392 hbox = gtk_hbox_new (FALSE, 5);
5393 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
5394 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
5396 label = gtk_label_new ("Depth :");
5397 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
5399 adj = (GtkAdjustment *) gtk_adjustment_new (4, 1, 10, 1, 5, 0);
5400 spin1 = gtk_spin_button_new (adj, 0, 0);
5401 gtk_box_pack_start (GTK_BOX (hbox), spin1, FALSE, TRUE, 5);
5403 label = gtk_label_new ("Books :");
5404 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
5406 adj = (GtkAdjustment *) gtk_adjustment_new (3, 1, 20, 1, 5, 0);
5407 spin2 = gtk_spin_button_new (adj, 0, 0);
5408 gtk_box_pack_start (GTK_BOX (hbox), spin2, FALSE, TRUE, 5);
5410 label = gtk_label_new ("Pages :");
5411 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
5413 adj = (GtkAdjustment *) gtk_adjustment_new (5, 1, 20, 1, 5, 0);
5414 spin3 = gtk_spin_button_new (adj, 0, 0);
5415 gtk_box_pack_start (GTK_BOX (hbox), spin3, FALSE, TRUE, 5);
5417 button = gtk_button_new_with_label ("Close");
5418 gtk_box_pack_end (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5420 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5421 (GtkSignalFunc) gtk_widget_destroy,
5422 GTK_OBJECT(window));
5424 button = gtk_button_new_with_label ("Rebuild Tree");
5425 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5427 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
5428 gtk_container_set_border_width (GTK_CONTAINER (scrolled_win), 5);
5429 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
5430 GTK_POLICY_AUTOMATIC,
5432 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
5434 ctree = GTK_CTREE (gtk_ctree_new_with_titles (2, 0, title));
5435 gtk_container_add (GTK_CONTAINER (scrolled_win), GTK_WIDGET (ctree));
5437 gtk_clist_set_column_auto_resize (GTK_CLIST (ctree), 0, TRUE);
5438 gtk_clist_set_column_width (GTK_CLIST (ctree), 1, 200);
5439 gtk_clist_set_selection_mode (GTK_CLIST (ctree), GTK_SELECTION_EXTENDED);
5440 gtk_ctree_set_line_style (ctree, GTK_CTREE_LINES_DOTTED);
5441 line_style = GTK_CTREE_LINES_DOTTED;
5443 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5444 GTK_SIGNAL_FUNC (rebuild_tree), ctree);
5445 gtk_signal_connect (GTK_OBJECT (ctree), "click_column",
5446 (GtkSignalFunc) ctree_click_column, NULL);
5448 gtk_signal_connect_after (GTK_OBJECT (ctree), "button_press_event",
5449 GTK_SIGNAL_FUNC (after_press), NULL);
5450 gtk_signal_connect_after (GTK_OBJECT (ctree), "button_release_event",
5451 GTK_SIGNAL_FUNC (after_press), NULL);
5452 gtk_signal_connect_after (GTK_OBJECT (ctree), "tree_move",
5453 GTK_SIGNAL_FUNC (after_move), NULL);
5454 gtk_signal_connect_after (GTK_OBJECT (ctree), "end_selection",
5455 GTK_SIGNAL_FUNC (after_press), NULL);
5456 gtk_signal_connect_after (GTK_OBJECT (ctree), "toggle_focus_row",
5457 GTK_SIGNAL_FUNC (after_press), NULL);
5458 gtk_signal_connect_after (GTK_OBJECT (ctree), "select_all",
5459 GTK_SIGNAL_FUNC (after_press), NULL);
5460 gtk_signal_connect_after (GTK_OBJECT (ctree), "unselect_all",
5461 GTK_SIGNAL_FUNC (after_press), NULL);
5462 gtk_signal_connect_after (GTK_OBJECT (ctree), "scroll_vertical",
5463 GTK_SIGNAL_FUNC (after_press), NULL);
5465 bbox = gtk_hbox_new (FALSE, 5);
5466 gtk_container_set_border_width (GTK_CONTAINER (bbox), 5);
5467 gtk_box_pack_start (GTK_BOX (vbox), bbox, FALSE, TRUE, 0);
5469 mbox = gtk_vbox_new (TRUE, 5);
5470 gtk_box_pack_start (GTK_BOX (bbox), mbox, FALSE, TRUE, 0);
5472 label = gtk_label_new ("Row Height :");
5473 gtk_box_pack_start (GTK_BOX (mbox), label, FALSE, FALSE, 0);
5475 label = gtk_label_new ("Indent :");
5476 gtk_box_pack_start (GTK_BOX (mbox), label, FALSE, FALSE, 0);
5478 label = gtk_label_new ("Spacing :");
5479 gtk_box_pack_start (GTK_BOX (mbox), label, FALSE, FALSE, 0);
5481 mbox = gtk_vbox_new (TRUE, 5);
5482 gtk_box_pack_start (GTK_BOX (bbox), mbox, FALSE, TRUE, 0);
5484 adj = (GtkAdjustment *) gtk_adjustment_new (20, 12, 100, 1, 10, 0);
5485 spinner = gtk_spin_button_new (adj, 0, 0);
5486 gtk_box_pack_start (GTK_BOX (mbox), spinner, FALSE, FALSE, 5);
5487 gtk_tooltips_set_tip (tooltips, spinner,
5488 "Row height of list items", NULL);
5489 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
5490 GTK_SIGNAL_FUNC (change_row_height), ctree);
5491 gtk_clist_set_row_height ( GTK_CLIST (ctree), adj->value);
5493 adj = (GtkAdjustment *) gtk_adjustment_new (20, 0, 60, 1, 10, 0);
5494 spinner = gtk_spin_button_new (adj, 0, 0);
5495 gtk_box_pack_start (GTK_BOX (mbox), spinner, FALSE, FALSE, 5);
5496 gtk_tooltips_set_tip (tooltips, spinner, "Tree Indentation.", NULL);
5497 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
5498 GTK_SIGNAL_FUNC (change_indent), ctree);
5500 adj = (GtkAdjustment *) gtk_adjustment_new (5, 0, 60, 1, 10, 0);
5501 spinner = gtk_spin_button_new (adj, 0, 0);
5502 gtk_box_pack_start (GTK_BOX (mbox), spinner, FALSE, FALSE, 5);
5503 gtk_tooltips_set_tip (tooltips, spinner, "Tree Spacing.", NULL);
5504 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
5505 GTK_SIGNAL_FUNC (change_spacing), ctree);
5507 mbox = gtk_vbox_new (TRUE, 5);
5508 gtk_box_pack_start (GTK_BOX (bbox), mbox, FALSE, TRUE, 0);
5510 hbox = gtk_hbox_new (FALSE, 5);
5511 gtk_box_pack_start (GTK_BOX (mbox), hbox, FALSE, FALSE, 0);
5513 button = gtk_button_new_with_label ("Expand All");
5514 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5515 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5516 GTK_SIGNAL_FUNC (expand_all), ctree);
5518 button = gtk_button_new_with_label ("Collapse All");
5519 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5520 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5521 GTK_SIGNAL_FUNC (collapse_all), ctree);
5523 button = gtk_button_new_with_label ("Change Style");
5524 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5525 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5526 GTK_SIGNAL_FUNC (change_style), ctree);
5528 button = gtk_button_new_with_label ("Export Tree");
5529 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5530 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5531 GTK_SIGNAL_FUNC (export_ctree), ctree);
5533 hbox = gtk_hbox_new (FALSE, 5);
5534 gtk_box_pack_start (GTK_BOX (mbox), hbox, FALSE, FALSE, 0);
5536 button = gtk_button_new_with_label ("Select All");
5537 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5538 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5539 GTK_SIGNAL_FUNC (select_all), ctree);
5541 button = gtk_button_new_with_label ("Unselect All");
5542 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5543 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5544 GTK_SIGNAL_FUNC (unselect_all), ctree);
5546 button = gtk_button_new_with_label ("Remove Selection");
5547 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5548 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5549 GTK_SIGNAL_FUNC (remove_selection), ctree);
5551 check = gtk_check_button_new_with_label ("Reorderable");
5552 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
5553 gtk_tooltips_set_tip (tooltips, check,
5554 "Tree items can be reordered by dragging.", NULL);
5555 gtk_signal_connect (GTK_OBJECT (check), "clicked",
5556 GTK_SIGNAL_FUNC (toggle_reorderable), ctree);
5557 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE);
5559 hbox = gtk_hbox_new (TRUE, 5);
5560 gtk_box_pack_start (GTK_BOX (mbox), hbox, FALSE, FALSE, 0);
5562 omenu1 = build_option_menu (items1, 4, 2, ctree);
5563 gtk_box_pack_start (GTK_BOX (hbox), omenu1, FALSE, TRUE, 0);
5564 gtk_tooltips_set_tip (tooltips, omenu1, "The tree's line style.", NULL);
5566 omenu2 = build_option_menu (items2, 4, 1, ctree);
5567 gtk_box_pack_start (GTK_BOX (hbox), omenu2, FALSE, TRUE, 0);
5568 gtk_tooltips_set_tip (tooltips, omenu2, "The tree's expander style.",
5571 omenu3 = build_option_menu (items3, 2, 0, ctree);
5572 gtk_box_pack_start (GTK_BOX (hbox), omenu3, FALSE, TRUE, 0);
5573 gtk_tooltips_set_tip (tooltips, omenu3, "The tree's justification.",
5576 omenu4 = build_option_menu (items4, 4, 3, ctree);
5577 gtk_box_pack_start (GTK_BOX (hbox), omenu4, FALSE, TRUE, 0);
5578 gtk_tooltips_set_tip (tooltips, omenu4, "The list's selection mode.",
5581 gtk_widget_realize (window);
5584 pixmap1 = gdk_pixmap_create_from_xpm_d (window->window, &mask1,
5585 &transparent, book_closed_xpm);
5587 pixmap2 = gdk_pixmap_create_from_xpm_d (window->window, &mask2,
5588 &transparent, book_open_xpm);
5590 pixmap3 = gdk_pixmap_create_from_xpm_d (window->window, &mask3,
5591 &transparent, mini_page_xpm);
5593 gtk_widget_set_usize (GTK_WIDGET (ctree), 0, 300);
5595 frame = gtk_frame_new (NULL);
5596 gtk_container_set_border_width (GTK_CONTAINER (frame), 0);
5597 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_OUT);
5598 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
5600 hbox = gtk_hbox_new (TRUE, 2);
5601 gtk_container_set_border_width (GTK_CONTAINER (hbox), 2);
5602 gtk_container_add (GTK_CONTAINER (frame), hbox);
5604 frame = gtk_frame_new (NULL);
5605 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
5606 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
5608 hbox2 = gtk_hbox_new (FALSE, 0);
5609 gtk_container_set_border_width (GTK_CONTAINER (hbox2), 2);
5610 gtk_container_add (GTK_CONTAINER (frame), hbox2);
5612 label = gtk_label_new ("Books :");
5613 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
5615 sprintf (buf, "%d", books);
5616 book_label = gtk_label_new (buf);
5617 gtk_box_pack_end (GTK_BOX (hbox2), book_label, FALSE, TRUE, 5);
5619 frame = gtk_frame_new (NULL);
5620 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
5621 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
5623 hbox2 = gtk_hbox_new (FALSE, 0);
5624 gtk_container_set_border_width (GTK_CONTAINER (hbox2), 2);
5625 gtk_container_add (GTK_CONTAINER (frame), hbox2);
5627 label = gtk_label_new ("Pages :");
5628 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
5630 sprintf (buf, "%d", pages);
5631 page_label = gtk_label_new (buf);
5632 gtk_box_pack_end (GTK_BOX (hbox2), page_label, FALSE, TRUE, 5);
5634 frame = gtk_frame_new (NULL);
5635 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
5636 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
5638 hbox2 = gtk_hbox_new (FALSE, 0);
5639 gtk_container_set_border_width (GTK_CONTAINER (hbox2), 2);
5640 gtk_container_add (GTK_CONTAINER (frame), hbox2);
5642 label = gtk_label_new ("Selected :");
5643 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
5645 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->selection));
5646 sel_label = gtk_label_new (buf);
5647 gtk_box_pack_end (GTK_BOX (hbox2), sel_label, FALSE, TRUE, 5);
5649 frame = gtk_frame_new (NULL);
5650 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
5651 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
5653 hbox2 = gtk_hbox_new (FALSE, 0);
5654 gtk_container_set_border_width (GTK_CONTAINER (hbox2), 2);
5655 gtk_container_add (GTK_CONTAINER (frame), hbox2);
5657 label = gtk_label_new ("Visible :");
5658 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
5660 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->row_list));
5661 vis_label = gtk_label_new (buf);
5662 gtk_box_pack_end (GTK_BOX (hbox2), vis_label, FALSE, TRUE, 5);
5664 rebuild_tree (NULL, ctree);
5667 if (!GTK_WIDGET_VISIBLE (window))
5668 gtk_widget_show_all (window);
5670 gtk_widget_destroy (window);
5678 color_selection_ok (GtkWidget *w,
5679 GtkColorSelectionDialog *cs)
5681 GtkColorSelection *colorsel;
5684 colorsel=GTK_COLOR_SELECTION(cs->colorsel);
5686 gtk_color_selection_get_color(colorsel,color);
5687 gtk_color_selection_set_color(colorsel,color);
5691 color_selection_changed (GtkWidget *w,
5692 GtkColorSelectionDialog *cs)
5694 GtkColorSelection *colorsel;
5697 colorsel=GTK_COLOR_SELECTION(cs->colorsel);
5698 gtk_color_selection_get_color(colorsel,color);
5702 opacity_toggled_cb (GtkWidget *w,
5703 GtkColorSelectionDialog *cs)
5705 GtkColorSelection *colorsel;
5707 colorsel = GTK_COLOR_SELECTION (cs->colorsel);
5708 gtk_color_selection_set_use_opacity (colorsel,
5709 gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w)));
5713 palette_toggled_cb (GtkWidget *w,
5714 GtkColorSelectionDialog *cs)
5716 GtkColorSelection *colorsel;
5718 colorsel = GTK_COLOR_SELECTION (cs->colorsel);
5719 gtk_color_selection_set_use_palette (colorsel,
5720 gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w)));
5724 create_color_selection (void)
5726 static GtkWidget *window = NULL;
5730 GtkWidget *options_hbox;
5731 GtkWidget *check_button;
5733 window = gtk_color_selection_dialog_new ("color selection dialog");
5735 gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
5737 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5738 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5741 options_hbox = gtk_hbox_new (FALSE, 0);
5742 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), options_hbox, FALSE, FALSE, 0);
5743 gtk_container_set_border_width (GTK_CONTAINER (options_hbox), 10);
5745 check_button = gtk_check_button_new_with_label ("Show Opacity");
5746 gtk_box_pack_start (GTK_BOX (options_hbox), check_button, FALSE, FALSE, 0);
5747 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
5748 GTK_SIGNAL_FUNC (opacity_toggled_cb), window);
5750 check_button = gtk_check_button_new_with_label ("Show Palette");
5751 gtk_box_pack_end (GTK_BOX (options_hbox), check_button, FALSE, FALSE, 0);
5752 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
5753 GTK_SIGNAL_FUNC (palette_toggled_cb), window);
5755 gtk_widget_show_all (options_hbox);
5757 gtk_signal_connect (
5758 GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (window)->colorsel),
5760 GTK_SIGNAL_FUNC(color_selection_changed),
5763 gtk_signal_connect (
5764 GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (window)->ok_button),
5766 GTK_SIGNAL_FUNC(color_selection_ok),
5769 gtk_signal_connect_object (
5770 GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (window)->cancel_button),
5772 GTK_SIGNAL_FUNC(gtk_widget_destroy),
5773 GTK_OBJECT (window));
5776 if (!GTK_WIDGET_VISIBLE (window))
5777 gtk_widget_show (window);
5779 gtk_widget_destroy (window);
5787 file_selection_hide_fileops (GtkWidget *widget,
5788 GtkFileSelection *fs)
5790 gtk_file_selection_hide_fileop_buttons (fs);
5794 file_selection_ok (GtkWidget *w,
5795 GtkFileSelection *fs)
5797 g_print ("%s\n", gtk_file_selection_get_filename (fs));
5798 gtk_widget_destroy (GTK_WIDGET (fs));
5802 create_file_selection (void)
5804 static GtkWidget *window = NULL;
5809 window = gtk_file_selection_new ("file selection dialog");
5811 gtk_file_selection_hide_fileop_buttons (GTK_FILE_SELECTION (window));
5813 gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
5815 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5816 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5819 gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (window)->ok_button),
5820 "clicked", GTK_SIGNAL_FUNC(file_selection_ok),
5822 gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION (window)->cancel_button),
5823 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
5824 GTK_OBJECT (window));
5826 button = gtk_button_new_with_label ("Hide Fileops");
5827 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5828 (GtkSignalFunc) file_selection_hide_fileops,
5830 gtk_box_pack_start (GTK_BOX (GTK_FILE_SELECTION (window)->action_area),
5831 button, FALSE, FALSE, 0);
5832 gtk_widget_show (button);
5834 button = gtk_button_new_with_label ("Show Fileops");
5835 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5836 (GtkSignalFunc) gtk_file_selection_show_fileop_buttons,
5838 gtk_box_pack_start (GTK_BOX (GTK_FILE_SELECTION (window)->action_area),
5839 button, FALSE, FALSE, 0);
5840 gtk_widget_show (button);
5843 if (!GTK_WIDGET_VISIBLE (window))
5844 gtk_widget_show (window);
5846 gtk_widget_destroy (window);
5850 flipping_toggled_cb (GtkWidget *widget, gpointer data)
5852 int state = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
5853 int new_direction = state ? GTK_TEXT_DIR_RTL : GTK_TEXT_DIR_LTR;
5855 gtk_widget_set_default_direction (new_direction);
5859 create_flipping (void)
5861 static GtkWidget *window = NULL;
5862 GtkWidget *check_button, *button;
5866 window = gtk_dialog_new ();
5868 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5869 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5872 gtk_window_set_title (GTK_WINDOW (window), "Bidirectional Flipping");
5874 check_button = gtk_check_button_new_with_label ("Right-to-left global direction");
5875 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
5876 check_button, TRUE, TRUE, 0);
5878 if (gtk_widget_get_default_direction () == GTK_TEXT_DIR_RTL)
5879 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button), TRUE);
5881 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
5882 flipping_toggled_cb, FALSE);
5884 gtk_container_set_border_width (GTK_CONTAINER (check_button), 10);
5886 button = gtk_button_new_with_label ("Close");
5887 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5888 GTK_SIGNAL_FUNC (gtk_widget_destroy), GTK_OBJECT (window));
5889 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
5890 button, TRUE, TRUE, 0);
5893 if (!GTK_WIDGET_VISIBLE (window))
5894 gtk_widget_show_all (window);
5896 gtk_widget_destroy (window);
5904 font_selection_ok (GtkWidget *w,
5905 GtkFontSelectionDialog *fs)
5907 gchar *s = gtk_font_selection_dialog_get_font_name (fs);
5909 g_print ("%s\n", s);
5911 gtk_widget_destroy (GTK_WIDGET (fs));
5915 create_font_selection (void)
5917 static GtkWidget *window = NULL;
5921 window = gtk_font_selection_dialog_new ("Font Selection Dialog");
5923 gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
5925 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5926 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5929 gtk_signal_connect (GTK_OBJECT (GTK_FONT_SELECTION_DIALOG (window)->ok_button),
5930 "clicked", GTK_SIGNAL_FUNC(font_selection_ok),
5931 GTK_FONT_SELECTION_DIALOG (window));
5932 gtk_signal_connect_object (GTK_OBJECT (GTK_FONT_SELECTION_DIALOG (window)->cancel_button),
5933 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
5934 GTK_OBJECT (window));
5937 if (!GTK_WIDGET_VISIBLE (window))
5938 gtk_widget_show (window);
5940 gtk_widget_destroy (window);
5947 static GtkWidget *dialog_window = NULL;
5950 label_toggle (GtkWidget *widget,
5955 *label = gtk_label_new ("Dialog Test");
5956 gtk_signal_connect (GTK_OBJECT (*label),
5958 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
5960 gtk_misc_set_padding (GTK_MISC (*label), 10, 10);
5961 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->vbox),
5962 *label, TRUE, TRUE, 0);
5963 gtk_widget_show (*label);
5966 gtk_widget_destroy (*label);
5970 create_dialog (void)
5972 static GtkWidget *label;
5977 dialog_window = gtk_dialog_new ();
5979 gtk_signal_connect (GTK_OBJECT (dialog_window), "destroy",
5980 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5983 gtk_window_set_title (GTK_WINDOW (dialog_window), "GtkDialog");
5984 gtk_container_set_border_width (GTK_CONTAINER (dialog_window), 0);
5985 gtk_widget_set_usize (dialog_window, 200, 110);
5987 button = gtk_button_new_with_label ("OK");
5988 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5989 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->action_area),
5990 button, TRUE, TRUE, 0);
5991 gtk_widget_grab_default (button);
5992 gtk_widget_show (button);
5994 button = gtk_button_new_with_label ("Toggle");
5995 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5996 GTK_SIGNAL_FUNC (label_toggle),
5998 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5999 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->action_area),
6000 button, TRUE, TRUE, 0);
6001 gtk_widget_show (button);
6006 if (!GTK_WIDGET_VISIBLE (dialog_window))
6007 gtk_widget_show (dialog_window);
6009 gtk_widget_destroy (dialog_window);
6014 static gboolean event_watcher_enter_id = 0;
6015 static gboolean event_watcher_leave_id = 0;
6018 event_watcher (GtkObject *object,
6024 g_print ("Watch: \"%s\" emitted for %s\n",
6025 gtk_signal_name (signal_id),
6026 gtk_type_name (GTK_OBJECT_TYPE (object)));
6032 event_watcher_down (void)
6034 if (event_watcher_enter_id)
6038 signal_id = gtk_signal_lookup ("enter_notify_event", GTK_TYPE_WIDGET);
6039 gtk_signal_remove_emission_hook (signal_id, event_watcher_enter_id);
6040 event_watcher_enter_id = 0;
6041 signal_id = gtk_signal_lookup ("leave_notify_event", GTK_TYPE_WIDGET);
6042 gtk_signal_remove_emission_hook (signal_id, event_watcher_leave_id);
6043 event_watcher_leave_id = 0;
6048 event_watcher_toggle (void)
6050 if (event_watcher_enter_id)
6051 event_watcher_down ();
6056 signal_id = gtk_signal_lookup ("enter_notify_event", GTK_TYPE_WIDGET);
6057 event_watcher_enter_id = gtk_signal_add_emission_hook (signal_id, event_watcher, NULL);
6058 signal_id = gtk_signal_lookup ("leave_notify_event", GTK_TYPE_WIDGET);
6059 event_watcher_leave_id = gtk_signal_add_emission_hook (signal_id, event_watcher, NULL);
6064 create_event_watcher (void)
6070 dialog_window = gtk_dialog_new ();
6072 gtk_signal_connect (GTK_OBJECT (dialog_window), "destroy",
6073 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
6075 gtk_signal_connect (GTK_OBJECT (dialog_window),
6077 GTK_SIGNAL_FUNC (event_watcher_down),
6080 gtk_window_set_title (GTK_WINDOW (dialog_window), "Event Watcher");
6081 gtk_container_set_border_width (GTK_CONTAINER (dialog_window), 0);
6082 gtk_widget_set_usize (dialog_window, 200, 110);
6084 button = gtk_toggle_button_new_with_label ("Activate Watch");
6085 gtk_signal_connect (GTK_OBJECT (button), "clicked",
6086 GTK_SIGNAL_FUNC (event_watcher_toggle),
6088 gtk_container_set_border_width (GTK_CONTAINER (button), 10);
6089 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->vbox),
6090 button, TRUE, TRUE, 0);
6091 gtk_widget_show (button);
6093 button = gtk_button_new_with_label ("Close");
6094 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6095 GTK_SIGNAL_FUNC (gtk_widget_destroy),
6096 (GtkObject*) dialog_window);
6097 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6098 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->action_area),
6099 button, TRUE, TRUE, 0);
6100 gtk_widget_grab_default (button);
6101 gtk_widget_show (button);
6104 if (!GTK_WIDGET_VISIBLE (dialog_window))
6105 gtk_widget_show (dialog_window);
6107 gtk_widget_destroy (dialog_window);
6115 create_range_controls (void)
6117 static GtkWidget *window = NULL;
6121 GtkWidget *scrollbar;
6123 GtkWidget *separator;
6124 GtkObject *adjustment;
6128 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6130 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6131 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6134 gtk_window_set_title (GTK_WINDOW (window), "range controls");
6135 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6138 box1 = gtk_vbox_new (FALSE, 0);
6139 gtk_container_add (GTK_CONTAINER (window), box1);
6140 gtk_widget_show (box1);
6143 box2 = gtk_vbox_new (FALSE, 10);
6144 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6145 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
6146 gtk_widget_show (box2);
6149 adjustment = gtk_adjustment_new (0.0, 0.0, 101.0, 0.1, 1.0, 1.0);
6151 scale = gtk_hscale_new (GTK_ADJUSTMENT (adjustment));
6152 gtk_widget_set_usize (GTK_WIDGET (scale), 150, 30);
6153 gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED);
6154 gtk_scale_set_digits (GTK_SCALE (scale), 1);
6155 gtk_scale_set_draw_value (GTK_SCALE (scale), TRUE);
6156 gtk_box_pack_start (GTK_BOX (box2), scale, TRUE, TRUE, 0);
6157 gtk_widget_show (scale);
6159 scrollbar = gtk_hscrollbar_new (GTK_ADJUSTMENT (adjustment));
6160 gtk_range_set_update_policy (GTK_RANGE (scrollbar),
6161 GTK_UPDATE_CONTINUOUS);
6162 gtk_box_pack_start (GTK_BOX (box2), scrollbar, TRUE, TRUE, 0);
6163 gtk_widget_show (scrollbar);
6166 separator = gtk_hseparator_new ();
6167 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
6168 gtk_widget_show (separator);
6171 box2 = gtk_vbox_new (FALSE, 10);
6172 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6173 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6174 gtk_widget_show (box2);
6177 button = gtk_button_new_with_label ("close");
6178 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6179 GTK_SIGNAL_FUNC(gtk_widget_destroy),
6180 GTK_OBJECT (window));
6181 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6182 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6183 gtk_widget_grab_default (button);
6184 gtk_widget_show (button);
6187 if (!GTK_WIDGET_VISIBLE (window))
6188 gtk_widget_show (window);
6190 gtk_widget_destroy (window);
6198 create_rulers (void)
6200 static GtkWidget *window = NULL;
6206 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6207 gtk_window_set_policy (GTK_WINDOW (window), TRUE, TRUE, FALSE);
6209 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6210 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6213 gtk_window_set_title (GTK_WINDOW (window), "rulers");
6214 gtk_widget_set_usize (window, 300, 300);
6215 gtk_widget_set_events (window,
6216 GDK_POINTER_MOTION_MASK
6217 | GDK_POINTER_MOTION_HINT_MASK);
6218 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6220 table = gtk_table_new (2, 2, FALSE);
6221 gtk_container_add (GTK_CONTAINER (window), table);
6222 gtk_widget_show (table);
6224 ruler = gtk_hruler_new ();
6225 gtk_ruler_set_metric (GTK_RULER (ruler), GTK_CENTIMETERS);
6226 gtk_ruler_set_range (GTK_RULER (ruler), 100, 0, 0, 20);
6228 gtk_signal_connect_object (GTK_OBJECT (window),
6229 "motion_notify_event",
6230 GTK_SIGNAL_FUNC (GTK_WIDGET_GET_CLASS (ruler)->motion_notify_event),
6231 GTK_OBJECT (ruler));
6233 gtk_table_attach (GTK_TABLE (table), ruler, 1, 2, 0, 1,
6234 GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
6235 gtk_widget_show (ruler);
6238 ruler = gtk_vruler_new ();
6239 gtk_ruler_set_range (GTK_RULER (ruler), 5, 15, 0, 20);
6241 gtk_signal_connect_object (GTK_OBJECT (window),
6242 "motion_notify_event",
6243 GTK_SIGNAL_FUNC (GTK_WIDGET_GET_CLASS (ruler)->motion_notify_event),
6244 GTK_OBJECT (ruler));
6246 gtk_table_attach (GTK_TABLE (table), ruler, 0, 1, 1, 2,
6247 GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
6248 gtk_widget_show (ruler);
6251 if (!GTK_WIDGET_VISIBLE (window))
6252 gtk_widget_show (window);
6254 gtk_widget_destroy (window);
6258 text_toggle_editable (GtkWidget *checkbutton,
6261 gtk_text_set_editable(GTK_TEXT(text),
6262 GTK_TOGGLE_BUTTON(checkbutton)->active);
6266 text_toggle_word_wrap (GtkWidget *checkbutton,
6269 gtk_text_set_word_wrap(GTK_TEXT(text),
6270 GTK_TOGGLE_BUTTON(checkbutton)->active);
6277 { { 0, 0x0000, 0x0000, 0x0000 }, "black" },
6278 { { 0, 0xFFFF, 0xFFFF, 0xFFFF }, "white" },
6279 { { 0, 0xFFFF, 0x0000, 0x0000 }, "red" },
6280 { { 0, 0x0000, 0xFFFF, 0x0000 }, "green" },
6281 { { 0, 0x0000, 0x0000, 0xFFFF }, "blue" },
6282 { { 0, 0x0000, 0xFFFF, 0xFFFF }, "cyan" },
6283 { { 0, 0xFFFF, 0x0000, 0xFFFF }, "magenta" },
6284 { { 0, 0xFFFF, 0xFFFF, 0x0000 }, "yellow" }
6287 int ntext_colors = sizeof(text_colors) / sizeof(text_colors[0]);
6293 text_insert_random (GtkWidget *w, GtkText *text)
6297 for (i=0; i<10; i++)
6299 c = 'A' + rand() % ('Z' - 'A');
6300 gtk_text_set_point (text, rand() % gtk_text_get_length (text));
6301 gtk_text_insert (text, NULL, NULL, NULL, &c, 1);
6310 static GtkWidget *window = NULL;
6316 GtkWidget *separator;
6317 GtkWidget *scrolled_window;
6324 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6325 gtk_widget_set_name (window, "text window");
6326 gtk_widget_set_usize (window, 500, 500);
6327 gtk_window_set_policy (GTK_WINDOW(window), TRUE, TRUE, FALSE);
6329 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6330 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6333 gtk_window_set_title (GTK_WINDOW (window), "test");
6334 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6337 box1 = gtk_vbox_new (FALSE, 0);
6338 gtk_container_add (GTK_CONTAINER (window), box1);
6339 gtk_widget_show (box1);
6342 box2 = gtk_vbox_new (FALSE, 10);
6343 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6344 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
6345 gtk_widget_show (box2);
6348 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
6349 gtk_box_pack_start (GTK_BOX (box2), scrolled_window, TRUE, TRUE, 0);
6350 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
6353 gtk_widget_show (scrolled_window);
6355 text = gtk_text_new (NULL, NULL);
6356 gtk_text_set_editable (GTK_TEXT (text), TRUE);
6357 gtk_container_add (GTK_CONTAINER (scrolled_window), text);
6358 gtk_widget_grab_focus (text);
6359 gtk_widget_show (text);
6362 gtk_text_freeze (GTK_TEXT (text));
6364 for (i=0; i<ntext_colors; i++)
6366 gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL,
6367 text_colors[i].name, -1);
6368 gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL, "\t", -1);
6370 for (j=0; j<ntext_colors; j++)
6372 gtk_text_insert (GTK_TEXT (text), NULL,
6373 &text_colors[j].color, &text_colors[i].color,
6376 gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL, "\n", -1);
6379 infile = fopen("testgtk.c", "r");
6384 int nbytes_read, nbytes_alloc;
6387 nbytes_alloc = 1024;
6388 buffer = g_new (char, nbytes_alloc);
6392 if (nbytes_alloc < nbytes_read + 1024)
6395 buffer = g_realloc (buffer, nbytes_alloc);
6397 len = fread (buffer + nbytes_read, 1, 1024, infile);
6403 gtk_text_insert (GTK_TEXT (text), NULL, NULL,
6404 NULL, buffer, nbytes_read);
6409 gtk_text_thaw (GTK_TEXT (text));
6411 hbox = gtk_hbutton_box_new ();
6412 gtk_box_pack_start (GTK_BOX (box2), hbox, FALSE, FALSE, 0);
6413 gtk_widget_show (hbox);
6415 check = gtk_check_button_new_with_label("Editable");
6416 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, FALSE, 0);
6417 gtk_signal_connect (GTK_OBJECT(check), "toggled",
6418 GTK_SIGNAL_FUNC(text_toggle_editable), text);
6419 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), TRUE);
6420 gtk_widget_show (check);
6422 check = gtk_check_button_new_with_label("Wrap Words");
6423 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
6424 gtk_signal_connect (GTK_OBJECT(check), "toggled",
6425 GTK_SIGNAL_FUNC(text_toggle_word_wrap), text);
6426 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), FALSE);
6427 gtk_widget_show (check);
6429 separator = gtk_hseparator_new ();
6430 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
6431 gtk_widget_show (separator);
6434 box2 = gtk_vbox_new (FALSE, 10);
6435 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6436 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6437 gtk_widget_show (box2);
6440 button = gtk_button_new_with_label ("insert random");
6441 gtk_signal_connect (GTK_OBJECT (button), "clicked",
6442 GTK_SIGNAL_FUNC(text_insert_random),
6444 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6445 gtk_widget_show (button);
6447 button = gtk_button_new_with_label ("close");
6448 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6449 GTK_SIGNAL_FUNC(gtk_widget_destroy),
6450 GTK_OBJECT (window));
6451 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6452 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6453 gtk_widget_grab_default (button);
6454 gtk_widget_show (button);
6457 if (!GTK_WIDGET_VISIBLE (window))
6458 gtk_widget_show (window);
6460 gtk_widget_destroy (window);
6467 GdkPixmap *book_open;
6468 GdkPixmap *book_closed;
6469 GdkBitmap *book_open_mask;
6470 GdkBitmap *book_closed_mask;
6471 GtkWidget *sample_notebook;
6474 page_switch (GtkWidget *widget, GtkNotebookPage *page, gint page_num)
6476 GtkNotebookPage *oldpage;
6479 oldpage = GTK_NOTEBOOK (widget)->cur_page;
6481 if (page == oldpage)
6483 pixwid = ((GtkBoxChild*)
6484 (GTK_BOX (page->tab_label)->children->data))->widget;
6485 gtk_pixmap_set (GTK_PIXMAP (pixwid), book_open, book_open_mask);
6486 pixwid = ((GtkBoxChild*)
6487 (GTK_BOX (page->menu_label)->children->data))->widget;
6488 gtk_pixmap_set (GTK_PIXMAP (pixwid), book_open, book_open_mask);
6492 pixwid = ((GtkBoxChild*)
6493 (GTK_BOX (oldpage->tab_label)->children->data))->widget;
6494 gtk_pixmap_set (GTK_PIXMAP (pixwid), book_closed, book_closed_mask);
6495 pixwid = ((GtkBoxChild*)
6496 (GTK_BOX (oldpage->menu_label)->children->data))->widget;
6497 gtk_pixmap_set (GTK_PIXMAP (pixwid), book_closed, book_closed_mask);
6502 tab_fill (GtkToggleButton *button, GtkWidget *child)
6505 GtkPackType pack_type;
6507 gtk_notebook_query_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
6508 &expand, NULL, &pack_type);
6509 gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
6510 expand, button->active, pack_type);
6514 tab_expand (GtkToggleButton *button, GtkWidget *child)
6517 GtkPackType pack_type;
6519 gtk_notebook_query_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
6520 NULL, &fill, &pack_type);
6521 gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
6522 button->active, fill, pack_type);
6526 tab_pack (GtkToggleButton *button, GtkWidget *child)
6532 gtk_notebook_query_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
6533 &expand, &fill, NULL);
6534 gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
6535 expand, fill, button->active);
6539 create_pages (GtkNotebook *notebook, gint start, gint end)
6541 GtkWidget *child = NULL;
6546 GtkWidget *label_box;
6547 GtkWidget *menu_box;
6552 for (i = start; i <= end; i++)
6554 sprintf (buffer, "Page %d", i);
6556 child = gtk_frame_new (buffer);
6557 gtk_container_set_border_width (GTK_CONTAINER (child), 10);
6559 vbox = gtk_vbox_new (TRUE,0);
6560 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
6561 gtk_container_add (GTK_CONTAINER (child), vbox);
6563 hbox = gtk_hbox_new (TRUE,0);
6564 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
6566 button = gtk_check_button_new_with_label ("Fill Tab");
6567 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
6568 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
6569 gtk_signal_connect (GTK_OBJECT (button), "toggled",
6570 GTK_SIGNAL_FUNC (tab_fill), child);
6572 button = gtk_check_button_new_with_label ("Expand Tab");
6573 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
6574 gtk_signal_connect (GTK_OBJECT (button), "toggled",
6575 GTK_SIGNAL_FUNC (tab_expand), child);
6577 button = gtk_check_button_new_with_label ("Pack end");
6578 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
6579 gtk_signal_connect (GTK_OBJECT (button), "toggled",
6580 GTK_SIGNAL_FUNC (tab_pack), child);
6582 button = gtk_button_new_with_label ("Hide Page");
6583 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 5);
6584 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6585 GTK_SIGNAL_FUNC (gtk_widget_hide),
6586 GTK_OBJECT (child));
6588 gtk_widget_show_all (child);
6590 label_box = gtk_hbox_new (FALSE, 0);
6591 pixwid = gtk_pixmap_new (book_closed, book_closed_mask);
6592 gtk_box_pack_start (GTK_BOX (label_box), pixwid, FALSE, TRUE, 0);
6593 gtk_misc_set_padding (GTK_MISC (pixwid), 3, 1);
6594 label = gtk_label_new (buffer);
6595 gtk_box_pack_start (GTK_BOX (label_box), label, FALSE, TRUE, 0);
6596 gtk_widget_show_all (label_box);
6598 menu_box = gtk_hbox_new (FALSE, 0);
6599 pixwid = gtk_pixmap_new (book_closed, book_closed_mask);
6600 gtk_box_pack_start (GTK_BOX (menu_box), pixwid, FALSE, TRUE, 0);
6601 gtk_misc_set_padding (GTK_MISC (pixwid), 3, 1);
6602 label = gtk_label_new (buffer);
6603 gtk_box_pack_start (GTK_BOX (menu_box), label, FALSE, TRUE, 0);
6604 gtk_widget_show_all (menu_box);
6605 gtk_notebook_append_page_menu (notebook, child, label_box, menu_box);
6610 rotate_notebook (GtkButton *button,
6611 GtkNotebook *notebook)
6613 gtk_notebook_set_tab_pos (notebook, (notebook->tab_pos + 1) % 4);
6617 show_all_pages (GtkButton *button,
6618 GtkNotebook *notebook)
6620 gtk_container_foreach (GTK_CONTAINER (notebook),
6621 (GtkCallback) gtk_widget_show, NULL);
6625 standard_notebook (GtkButton *button,
6626 GtkNotebook *notebook)
6630 gtk_notebook_set_show_tabs (notebook, TRUE);
6631 gtk_notebook_set_scrollable (notebook, FALSE);
6632 if (g_list_length (notebook->children) == 15)
6633 for (i = 0; i < 10; i++)
6634 gtk_notebook_remove_page (notebook, 5);
6638 notabs_notebook (GtkButton *button,
6639 GtkNotebook *notebook)
6643 gtk_notebook_set_show_tabs (notebook, FALSE);
6644 if (g_list_length (notebook->children) == 15)
6645 for (i = 0; i < 10; i++)
6646 gtk_notebook_remove_page (notebook, 5);
6650 scrollable_notebook (GtkButton *button,
6651 GtkNotebook *notebook)
6653 gtk_notebook_set_show_tabs (notebook, TRUE);
6654 gtk_notebook_set_scrollable (notebook, TRUE);
6655 if (g_list_length (notebook->children) == 5)
6656 create_pages (notebook, 6, 15);
6660 notebook_popup (GtkToggleButton *button,
6661 GtkNotebook *notebook)
6664 gtk_notebook_popup_enable (notebook);
6666 gtk_notebook_popup_disable (notebook);
6670 notebook_homogeneous (GtkToggleButton *button,
6671 GtkNotebook *notebook)
6673 gtk_notebook_set_homogeneous_tabs (notebook, button->active);
6677 create_notebook (void)
6679 static GtkWidget *window = NULL;
6683 GtkWidget *separator;
6685 GdkColor *transparent = NULL;
6688 static OptionMenuItem items[] =
6690 { "Standard", standard_notebook },
6691 { "No tabs", notabs_notebook },
6692 { "Scrollable", scrollable_notebook }
6697 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6699 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6700 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6703 gtk_window_set_title (GTK_WINDOW (window), "notebook");
6704 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6706 box1 = gtk_vbox_new (FALSE, 0);
6707 gtk_container_add (GTK_CONTAINER (window), box1);
6709 sample_notebook = gtk_notebook_new ();
6710 gtk_signal_connect (GTK_OBJECT (sample_notebook), "switch_page",
6711 GTK_SIGNAL_FUNC (page_switch), NULL);
6712 gtk_notebook_set_tab_pos (GTK_NOTEBOOK (sample_notebook), GTK_POS_TOP);
6713 gtk_box_pack_start (GTK_BOX (box1), sample_notebook, TRUE, TRUE, 0);
6714 gtk_container_set_border_width (GTK_CONTAINER (sample_notebook), 10);
6716 gtk_widget_realize (sample_notebook);
6718 book_open = gdk_pixmap_create_from_xpm_d (sample_notebook->window,
6723 book_closed = gdk_pixmap_create_from_xpm_d (sample_notebook->window,
6728 create_pages (GTK_NOTEBOOK (sample_notebook), 1, 5);
6730 separator = gtk_hseparator_new ();
6731 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 10);
6733 box2 = gtk_hbox_new (FALSE, 5);
6734 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6735 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6737 button = gtk_check_button_new_with_label ("popup menu");
6738 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, FALSE, 0);
6739 gtk_signal_connect (GTK_OBJECT(button), "clicked",
6740 GTK_SIGNAL_FUNC (notebook_popup),
6741 GTK_OBJECT (sample_notebook));
6743 button = gtk_check_button_new_with_label ("homogeneous tabs");
6744 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, FALSE, 0);
6745 gtk_signal_connect (GTK_OBJECT(button), "clicked",
6746 GTK_SIGNAL_FUNC (notebook_homogeneous),
6747 GTK_OBJECT (sample_notebook));
6749 box2 = gtk_hbox_new (FALSE, 5);
6750 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6751 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6753 label = gtk_label_new ("Notebook Style :");
6754 gtk_box_pack_start (GTK_BOX (box2), label, FALSE, TRUE, 0);
6756 omenu = build_option_menu (items, 3, 0, sample_notebook);
6757 gtk_box_pack_start (GTK_BOX (box2), omenu, FALSE, TRUE, 0);
6759 button = gtk_button_new_with_label ("Show all Pages");
6760 gtk_box_pack_start (GTK_BOX (box2), button, FALSE, TRUE, 0);
6761 gtk_signal_connect (GTK_OBJECT (button), "clicked",
6762 GTK_SIGNAL_FUNC (show_all_pages), sample_notebook);
6764 box2 = gtk_hbox_new (TRUE, 10);
6765 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6766 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6768 button = gtk_button_new_with_label ("prev");
6769 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6770 GTK_SIGNAL_FUNC (gtk_notebook_prev_page),
6771 GTK_OBJECT (sample_notebook));
6772 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6774 button = gtk_button_new_with_label ("next");
6775 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6776 GTK_SIGNAL_FUNC (gtk_notebook_next_page),
6777 GTK_OBJECT (sample_notebook));
6778 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6780 button = gtk_button_new_with_label ("rotate");
6781 gtk_signal_connect (GTK_OBJECT (button), "clicked",
6782 GTK_SIGNAL_FUNC (rotate_notebook), sample_notebook);
6783 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6785 separator = gtk_hseparator_new ();
6786 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 5);
6788 button = gtk_button_new_with_label ("close");
6789 gtk_container_set_border_width (GTK_CONTAINER (button), 5);
6790 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6791 GTK_SIGNAL_FUNC (gtk_widget_destroy),
6792 GTK_OBJECT (window));
6793 gtk_box_pack_start (GTK_BOX (box1), button, FALSE, FALSE, 0);
6794 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6795 gtk_widget_grab_default (button);
6798 if (!GTK_WIDGET_VISIBLE (window))
6799 gtk_widget_show_all (window);
6801 gtk_widget_destroy (window);
6809 toggle_resize (GtkWidget *widget, GtkWidget *child)
6811 GtkPaned *paned = GTK_PANED (child->parent);
6812 gboolean is_child1 = (child == paned->child1);
6813 gboolean resize, shrink;
6815 resize = is_child1 ? paned->child1_resize : paned->child2_resize;
6816 shrink = is_child1 ? paned->child1_shrink : paned->child2_shrink;
6818 gtk_widget_ref (child);
6819 gtk_container_remove (GTK_CONTAINER (child->parent), child);
6821 gtk_paned_pack1 (paned, child, !resize, shrink);
6823 gtk_paned_pack2 (paned, child, !resize, shrink);
6824 gtk_widget_unref (child);
6828 toggle_shrink (GtkWidget *widget, GtkWidget *child)
6830 GtkPaned *paned = GTK_PANED (child->parent);
6831 gboolean is_child1 = (child == paned->child1);
6832 gboolean resize, shrink;
6834 resize = is_child1 ? paned->child1_resize : paned->child2_resize;
6835 shrink = is_child1 ? paned->child1_shrink : paned->child2_shrink;
6837 gtk_widget_ref (child);
6838 gtk_container_remove (GTK_CONTAINER (child->parent), child);
6840 gtk_paned_pack1 (paned, child, resize, !shrink);
6842 gtk_paned_pack2 (paned, child, resize, !shrink);
6843 gtk_widget_unref (child);
6847 create_pane_options (GtkPaned *paned,
6848 const gchar *frame_label,
6849 const gchar *label1,
6850 const gchar *label2)
6855 GtkWidget *check_button;
6857 frame = gtk_frame_new (frame_label);
6858 gtk_container_set_border_width (GTK_CONTAINER (frame), 4);
6860 table = gtk_table_new (3, 2, 4);
6861 gtk_container_add (GTK_CONTAINER (frame), table);
6863 label = gtk_label_new (label1);
6864 gtk_table_attach_defaults (GTK_TABLE (table), label,
6867 check_button = gtk_check_button_new_with_label ("Resize");
6868 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
6870 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
6871 GTK_SIGNAL_FUNC (toggle_resize),
6874 check_button = gtk_check_button_new_with_label ("Shrink");
6875 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
6877 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
6879 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
6880 GTK_SIGNAL_FUNC (toggle_shrink),
6883 label = gtk_label_new (label2);
6884 gtk_table_attach_defaults (GTK_TABLE (table), label,
6887 check_button = gtk_check_button_new_with_label ("Resize");
6888 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
6890 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
6892 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
6893 GTK_SIGNAL_FUNC (toggle_resize),
6896 check_button = gtk_check_button_new_with_label ("Shrink");
6897 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
6899 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
6901 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
6902 GTK_SIGNAL_FUNC (toggle_shrink),
6911 static GtkWidget *window = NULL;
6920 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6922 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6923 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6926 gtk_window_set_title (GTK_WINDOW (window), "Panes");
6927 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6929 vbox = gtk_vbox_new (FALSE, 0);
6930 gtk_container_add (GTK_CONTAINER (window), vbox);
6932 vpaned = gtk_vpaned_new ();
6933 gtk_box_pack_start (GTK_BOX (vbox), vpaned, TRUE, TRUE, 0);
6934 gtk_container_set_border_width (GTK_CONTAINER(vpaned), 5);
6936 hpaned = gtk_hpaned_new ();
6937 gtk_paned_add1 (GTK_PANED (vpaned), hpaned);
6939 frame = gtk_frame_new (NULL);
6940 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
6941 gtk_widget_set_usize (frame, 60, 60);
6942 gtk_paned_add1 (GTK_PANED (hpaned), frame);
6944 button = gtk_button_new_with_label ("Hi there");
6945 gtk_container_add (GTK_CONTAINER(frame), button);
6947 frame = gtk_frame_new (NULL);
6948 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
6949 gtk_widget_set_usize (frame, 80, 60);
6950 gtk_paned_add2 (GTK_PANED (hpaned), frame);
6952 frame = gtk_frame_new (NULL);
6953 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
6954 gtk_widget_set_usize (frame, 60, 80);
6955 gtk_paned_add2 (GTK_PANED (vpaned), frame);
6957 /* Now create toggle buttons to control sizing */
6959 gtk_box_pack_start (GTK_BOX (vbox),
6960 create_pane_options (GTK_PANED (hpaned),
6966 gtk_box_pack_start (GTK_BOX (vbox),
6967 create_pane_options (GTK_PANED (vpaned),
6973 gtk_widget_show_all (vbox);
6976 if (!GTK_WIDGET_VISIBLE (window))
6977 gtk_widget_show (window);
6979 gtk_widget_destroy (window);
6988 dnd_drop_destroy_popup (GtkWidget *widget, GtkWindow **window)
6990 if(GTK_IS_BUTTON(widget)) /* I.e. they clicked the close button */
6991 gtk_widget_destroy(GTK_WIDGET(*window));
6993 gtk_grab_remove(GTK_WIDGET(*window));
7001 dnd_drop (GtkWidget *button, GdkEvent *event)
7003 static GtkWidget *window = NULL;
7004 GtkWidget *vbox, *lbl, *btn;
7007 /* DND doesn't obey gtk_grab's, so check if we're already displaying
7008 * drop modal dialog first
7013 window = gtk_window_new(GTK_WINDOW_DIALOG);
7014 gtk_container_set_border_width (GTK_CONTAINER(window), 10);
7016 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7017 GTK_SIGNAL_FUNC(dnd_drop_destroy_popup),
7019 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
7020 GTK_SIGNAL_FUNC(gtk_false),
7023 vbox = gtk_vbox_new(FALSE, 5);
7025 /* Display message that we got from drop source */
7026 msg = g_malloc(strlen(event->dropdataavailable.data)
7027 + strlen(event->dropdataavailable.data_type) + 100);
7028 sprintf(msg, "Drop data of type %s was:\n\n%s",
7029 event->dropdataavailable.data_type,
7030 (char *)event->dropdataavailable.data);
7031 lbl = gtk_label_new(msg);
7032 gtk_label_set_justify(GTK_LABEL(lbl), GTK_JUSTIFY_FILL);
7034 gtk_widget_show(lbl);
7035 gtk_box_pack_start_defaults(GTK_BOX(vbox), lbl);
7037 /* Provide an obvious way out of this heinousness */
7038 btn = gtk_button_new_with_label("Continue with life in\nspite of this oppression");
7039 gtk_signal_connect_object (GTK_OBJECT (btn), "clicked",
7040 GTK_SIGNAL_FUNC(gtk_widget_destroy),
7041 GTK_OBJECT (window));
7042 gtk_widget_show(btn);
7043 gtk_box_pack_start_defaults(GTK_BOX(vbox), btn);
7045 gtk_container_add(GTK_CONTAINER(window), vbox);
7047 gtk_widget_show(vbox);
7048 gtk_grab_add(window);
7049 gtk_widget_show(window);
7053 dnd_drag_request (GtkWidget *button, GdkEvent *event)
7055 #define DND_STRING "Bill Gates demands royalties for\nyour use of his innovation."
7056 gtk_widget_dnd_data_set (button, event, DND_STRING, strlen(DND_STRING) + 1);
7062 static GtkWidget *window = NULL;
7068 GtkWidget *separator;
7070 /* For clarity... */
7071 char *possible_drag_types[] = {"text/plain"};
7072 char *accepted_drop_types[] = {"text/plain"};
7074 static GtkWidget *drag_icon = NULL;
7075 static GtkWidget *drop_icon = NULL;
7079 GdkPoint hotspot = {5,5};
7083 drag_icon = shape_create_icon ("Modeller.xpm",
7084 440, 140, 0,0, GTK_WINDOW_POPUP);
7086 gtk_signal_connect (GTK_OBJECT (drag_icon), "destroy",
7087 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7090 gtk_widget_hide (drag_icon);
7095 drop_icon = shape_create_icon ("3DRings.xpm",
7096 440, 140, 0,0, GTK_WINDOW_POPUP);
7098 gtk_signal_connect (GTK_OBJECT (drop_icon), "destroy",
7099 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7102 gtk_widget_hide (drop_icon);
7105 gdk_dnd_set_drag_shape(drag_icon->window,
7110 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7112 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7113 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7116 gtk_window_set_title (GTK_WINDOW (window), "Drag -N- Drop");
7117 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
7119 box1 = gtk_vbox_new (FALSE, 0);
7120 gtk_container_add (GTK_CONTAINER (window), box1);
7121 gtk_widget_show (box1);
7123 box2 = gtk_hbox_new (FALSE, 5);
7124 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
7125 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
7126 gtk_widget_show (box2);
7128 frame = gtk_frame_new ("Drag");
7129 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
7130 gtk_widget_show (frame);
7132 box3 = gtk_vbox_new (FALSE, 5);
7133 gtk_container_set_border_width (GTK_CONTAINER (box3), 5);
7134 gtk_container_add (GTK_CONTAINER (frame), box3);
7135 gtk_widget_show (box3);
7140 button = gtk_button_new_with_label ("Drag me!");
7141 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
7142 gtk_widget_show (button);
7145 * currently, the widget has to be realized to
7146 * set dnd on it, this needs to change
7148 gtk_widget_realize (button);
7149 gtk_signal_connect (GTK_OBJECT (button),
7150 "drag_request_event",
7151 GTK_SIGNAL_FUNC(dnd_drag_request),
7154 gtk_widget_dnd_drag_set (button, TRUE, possible_drag_types, 1);
7157 frame = gtk_frame_new ("Drop");
7158 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
7159 gtk_widget_show (frame);
7161 box3 = gtk_vbox_new (FALSE, 5);
7162 gtk_container_set_border_width (GTK_CONTAINER (box3), 5);
7163 gtk_container_add (GTK_CONTAINER (frame), box3);
7164 gtk_widget_show (box3);
7170 button = gtk_button_new_with_label ("To");
7171 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
7172 gtk_widget_show (button);
7174 gtk_widget_realize (button);
7175 gtk_signal_connect (GTK_OBJECT (button),
7176 "drop_data_available_event",
7177 GTK_SIGNAL_FUNC(dnd_drop),
7180 gtk_widget_dnd_drop_set (button, TRUE, accepted_drop_types, 1, FALSE);
7183 separator = gtk_hseparator_new ();
7184 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
7185 gtk_widget_show (separator);
7188 box2 = gtk_vbox_new (FALSE, 10);
7189 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
7190 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
7191 gtk_widget_show (box2);
7194 button = gtk_button_new_with_label ("close");
7196 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7197 GTK_SIGNAL_FUNC(gtk_widget_destroy),
7198 GTK_OBJECT (window));
7200 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
7201 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7202 gtk_widget_grab_default (button);
7203 gtk_widget_show (button);
7206 if (!GTK_WIDGET_VISIBLE (window))
7207 gtk_widget_show (window);
7209 gtk_widget_destroy (window);
7217 typedef struct _cursoroffset {gint x,y;} CursorOffset;
7220 shape_pressed (GtkWidget *widget, GdkEventButton *event)
7224 /* ignore double and triple click */
7225 if (event->type != GDK_BUTTON_PRESS)
7228 p = gtk_object_get_user_data (GTK_OBJECT(widget));
7229 p->x = (int) event->x;
7230 p->y = (int) event->y;
7232 gtk_grab_add (widget);
7233 gdk_pointer_grab (widget->window, TRUE,
7234 GDK_BUTTON_RELEASE_MASK |
7235 GDK_BUTTON_MOTION_MASK |
7236 GDK_POINTER_MOTION_HINT_MASK,
7241 shape_released (GtkWidget *widget)
7243 gtk_grab_remove (widget);
7244 gdk_pointer_ungrab (0);
7248 shape_motion (GtkWidget *widget,
7249 GdkEventMotion *event)
7253 GdkModifierType mask;
7255 p = gtk_object_get_user_data (GTK_OBJECT (widget));
7258 * Can't use event->x / event->y here
7259 * because I need absolute coordinates.
7261 gdk_window_get_pointer (NULL, &xp, &yp, &mask);
7262 gtk_widget_set_uposition (widget, xp - p->x, yp - p->y);
7266 shape_create_icon (char *xpm_file,
7276 CursorOffset* icon_pos;
7278 GdkBitmap *gdk_pixmap_mask;
7279 GdkPixmap *gdk_pixmap;
7282 style = gtk_widget_get_default_style ();
7283 gc = style->black_gc;
7286 * GDK_WINDOW_TOPLEVEL works also, giving you a title border
7288 window = gtk_window_new (window_type);
7290 fixed = gtk_fixed_new ();
7291 gtk_widget_set_usize (fixed, 100,100);
7292 gtk_container_add (GTK_CONTAINER (window), fixed);
7293 gtk_widget_show (fixed);
7295 gtk_widget_set_events (window,
7296 gtk_widget_get_events (window) |
7297 GDK_BUTTON_MOTION_MASK |
7298 GDK_POINTER_MOTION_HINT_MASK |
7299 GDK_BUTTON_PRESS_MASK);
7301 gtk_widget_realize (window);
7302 gdk_pixmap = gdk_pixmap_create_from_xpm (window->window, &gdk_pixmap_mask,
7303 &style->bg[GTK_STATE_NORMAL],
7306 pixmap = gtk_pixmap_new (gdk_pixmap, gdk_pixmap_mask);
7307 gtk_fixed_put (GTK_FIXED (fixed), pixmap, px,py);
7308 gtk_widget_show (pixmap);
7310 gtk_widget_shape_combine_mask (window, gdk_pixmap_mask, px, py);
7312 gdk_drawable_unref (gdk_pixmap_mask);
7313 gdk_drawable_unref (gdk_pixmap);
7315 gtk_signal_connect (GTK_OBJECT (window), "button_press_event",
7316 GTK_SIGNAL_FUNC (shape_pressed),NULL);
7317 gtk_signal_connect (GTK_OBJECT (window), "button_release_event",
7318 GTK_SIGNAL_FUNC (shape_released),NULL);
7319 gtk_signal_connect (GTK_OBJECT (window), "motion_notify_event",
7320 GTK_SIGNAL_FUNC (shape_motion),NULL);
7322 icon_pos = g_new (CursorOffset, 1);
7323 gtk_object_set_user_data(GTK_OBJECT(window), icon_pos);
7325 gtk_widget_set_uposition (window, x, y);
7326 gtk_widget_show (window);
7332 create_shapes (void)
7334 /* Variables used by the Drag/Drop and Shape Window demos */
7335 static GtkWidget *modeller = NULL;
7336 static GtkWidget *sheets = NULL;
7337 static GtkWidget *rings = NULL;
7339 if (!(file_exists ("Modeller.xpm") &&
7340 file_exists ("FilesQueue.xpm") &&
7341 file_exists ("3DRings.xpm")))
7347 modeller = shape_create_icon ("Modeller.xpm",
7348 440, 140, 0,0, GTK_WINDOW_POPUP);
7350 gtk_signal_connect (GTK_OBJECT (modeller), "destroy",
7351 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7355 gtk_widget_destroy (modeller);
7359 sheets = shape_create_icon ("FilesQueue.xpm",
7360 580, 170, 0,0, GTK_WINDOW_POPUP);
7362 gtk_signal_connect (GTK_OBJECT (sheets), "destroy",
7363 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7368 gtk_widget_destroy (sheets);
7372 rings = shape_create_icon ("3DRings.xpm",
7373 460, 270, 25,25, GTK_WINDOW_TOPLEVEL);
7375 gtk_signal_connect (GTK_OBJECT (rings), "destroy",
7376 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7380 gtk_widget_destroy (rings);
7388 create_wmhints (void)
7390 static GtkWidget *window = NULL;
7392 GtkWidget *separator;
7401 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7403 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7404 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7407 gtk_window_set_title (GTK_WINDOW (window), "WM Hints");
7408 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
7410 gtk_widget_realize (window);
7412 circles = gdk_bitmap_create_from_data (window->window,
7416 gdk_window_set_icon (window->window, NULL,
7419 gdk_window_set_icon_name (window->window, "WMHints Test Icon");
7421 gdk_window_set_decorations (window->window, GDK_DECOR_ALL | GDK_DECOR_MENU);
7422 gdk_window_set_functions (window->window, GDK_FUNC_ALL | GDK_FUNC_RESIZE);
7424 box1 = gtk_vbox_new (FALSE, 0);
7425 gtk_container_add (GTK_CONTAINER (window), box1);
7426 gtk_widget_show (box1);
7428 label = gtk_label_new ("Try iconizing me!");
7429 gtk_widget_set_usize (label, 150, 50);
7430 gtk_box_pack_start (GTK_BOX (box1), label, TRUE, TRUE, 0);
7431 gtk_widget_show (label);
7434 separator = gtk_hseparator_new ();
7435 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
7436 gtk_widget_show (separator);
7439 box2 = gtk_vbox_new (FALSE, 10);
7440 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
7441 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
7442 gtk_widget_show (box2);
7445 button = gtk_button_new_with_label ("close");
7447 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7448 GTK_SIGNAL_FUNC(gtk_widget_destroy),
7449 GTK_OBJECT (window));
7451 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
7452 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7453 gtk_widget_grab_default (button);
7454 gtk_widget_show (button);
7457 if (!GTK_WIDGET_VISIBLE (window))
7458 gtk_widget_show (window);
7460 gtk_widget_destroy (window);
7467 typedef struct _ProgressData {
7470 GtkWidget *block_spin;
7471 GtkWidget *x_align_spin;
7472 GtkWidget *y_align_spin;
7473 GtkWidget *step_spin;
7474 GtkWidget *act_blocks_spin;
7483 progress_timeout (gpointer data)
7488 adj = GTK_PROGRESS (data)->adjustment;
7490 new_val = adj->value + 1;
7491 if (new_val > adj->upper)
7492 new_val = adj->lower;
7494 gtk_progress_set_value (GTK_PROGRESS (data), new_val);
7500 destroy_progress (GtkWidget *widget,
7501 ProgressData **pdata)
7503 gtk_timeout_remove ((*pdata)->timer);
7504 (*pdata)->timer = 0;
7505 (*pdata)->window = NULL;
7511 progressbar_toggle_orientation (GtkWidget *widget, ProgressData *pdata)
7515 if (!GTK_WIDGET_MAPPED (widget))
7518 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
7519 (((GtkOptionMenu *)(pdata->omenu1))->menu_item), i);
7521 gtk_progress_bar_set_orientation (GTK_PROGRESS_BAR (pdata->pbar),
7522 (GtkProgressBarOrientation) (3-i));
7526 toggle_show_text (GtkWidget *widget, ProgressData *pdata)
7528 gtk_progress_set_show_text (GTK_PROGRESS (pdata->pbar),
7529 GTK_TOGGLE_BUTTON (widget)->active);
7530 gtk_widget_set_sensitive (pdata->entry, GTK_TOGGLE_BUTTON (widget)->active);
7531 gtk_widget_set_sensitive (pdata->x_align_spin,
7532 GTK_TOGGLE_BUTTON (widget)->active);
7533 gtk_widget_set_sensitive (pdata->y_align_spin,
7534 GTK_TOGGLE_BUTTON (widget)->active);
7538 progressbar_toggle_bar_style (GtkWidget *widget, ProgressData *pdata)
7542 if (!GTK_WIDGET_MAPPED (widget))
7545 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
7546 (((GtkOptionMenu *)(pdata->omenu2))->menu_item), i);
7551 gtk_widget_set_sensitive (pdata->block_spin, TRUE);
7553 gtk_widget_set_sensitive (pdata->block_spin, FALSE);
7555 gtk_progress_bar_set_bar_style (GTK_PROGRESS_BAR (pdata->pbar),
7556 (GtkProgressBarStyle) i);
7560 progress_value_changed (GtkAdjustment *adj, ProgressData *pdata)
7564 if (GTK_PROGRESS (pdata->pbar)->activity_mode)
7565 sprintf (buf, "???");
7567 sprintf (buf, "%.0f%%", 100 *
7568 gtk_progress_get_current_percentage (GTK_PROGRESS (pdata->pbar)));
7569 gtk_label_set_text (GTK_LABEL (pdata->label), buf);
7573 adjust_blocks (GtkAdjustment *adj, ProgressData *pdata)
7575 gtk_progress_set_percentage (GTK_PROGRESS (pdata->pbar), 0);
7576 gtk_progress_bar_set_discrete_blocks (GTK_PROGRESS_BAR (pdata->pbar),
7577 gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (pdata->block_spin)));
7581 adjust_step (GtkAdjustment *adj, ProgressData *pdata)
7583 gtk_progress_bar_set_activity_step (GTK_PROGRESS_BAR (pdata->pbar),
7584 gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (pdata->step_spin)));
7588 adjust_act_blocks (GtkAdjustment *adj, ProgressData *pdata)
7590 gtk_progress_bar_set_activity_blocks (GTK_PROGRESS_BAR (pdata->pbar),
7591 gtk_spin_button_get_value_as_int
7592 (GTK_SPIN_BUTTON (pdata->act_blocks_spin)));
7596 adjust_align (GtkAdjustment *adj, ProgressData *pdata)
7598 gtk_progress_set_text_alignment (GTK_PROGRESS (pdata->pbar),
7599 gtk_spin_button_get_value_as_float
7600 (GTK_SPIN_BUTTON (pdata->x_align_spin)),
7601 gtk_spin_button_get_value_as_float
7602 (GTK_SPIN_BUTTON (pdata->y_align_spin)));
7606 toggle_activity_mode (GtkWidget *widget, ProgressData *pdata)
7608 gtk_progress_set_activity_mode (GTK_PROGRESS (pdata->pbar),
7609 GTK_TOGGLE_BUTTON (widget)->active);
7610 gtk_widget_set_sensitive (pdata->step_spin,
7611 GTK_TOGGLE_BUTTON (widget)->active);
7612 gtk_widget_set_sensitive (pdata->act_blocks_spin,
7613 GTK_TOGGLE_BUTTON (widget)->active);
7617 entry_changed (GtkWidget *widget, ProgressData *pdata)
7619 gtk_progress_set_format_string (GTK_PROGRESS (pdata->pbar),
7620 gtk_entry_get_text (GTK_ENTRY (pdata->entry)));
7624 create_progress_bar (void)
7636 static ProgressData *pdata = NULL;
7638 static OptionMenuItem items1[] =
7640 { "Left-Right", progressbar_toggle_orientation },
7641 { "Right-Left", progressbar_toggle_orientation },
7642 { "Bottom-Top", progressbar_toggle_orientation },
7643 { "Top-Bottom", progressbar_toggle_orientation }
7646 static OptionMenuItem items2[] =
7648 { "Continuous", progressbar_toggle_bar_style },
7649 { "Discrete", progressbar_toggle_bar_style }
7653 pdata = g_new0 (ProgressData, 1);
7657 pdata->window = gtk_dialog_new ();
7659 gtk_window_set_policy (GTK_WINDOW (pdata->window), FALSE, FALSE, TRUE);
7661 gtk_signal_connect (GTK_OBJECT (pdata->window), "destroy",
7662 GTK_SIGNAL_FUNC (destroy_progress),
7667 gtk_window_set_title (GTK_WINDOW (pdata->window), "GtkProgressBar");
7668 gtk_container_set_border_width (GTK_CONTAINER (pdata->window), 0);
7670 vbox = gtk_vbox_new (FALSE, 5);
7671 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
7672 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (pdata->window)->vbox),
7673 vbox, FALSE, TRUE, 0);
7675 frame = gtk_frame_new ("Progress");
7676 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
7678 vbox2 = gtk_vbox_new (FALSE, 5);
7679 gtk_container_add (GTK_CONTAINER (frame), vbox2);
7681 align = gtk_alignment_new (0.5, 0.5, 0, 0);
7682 gtk_box_pack_start (GTK_BOX (vbox2), align, FALSE, FALSE, 5);
7684 adj = (GtkAdjustment *) gtk_adjustment_new (0, 1, 300, 0, 0, 0);
7685 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
7686 GTK_SIGNAL_FUNC (progress_value_changed), pdata);
7688 pdata->pbar = gtk_progress_bar_new_with_adjustment (adj);
7689 gtk_progress_set_format_string (GTK_PROGRESS (pdata->pbar),
7690 "%v from [%l,%u] (=%p%%)");
7691 gtk_container_add (GTK_CONTAINER (align), pdata->pbar);
7692 pdata->timer = gtk_timeout_add (100, progress_timeout, pdata->pbar);
7694 align = gtk_alignment_new (0.5, 0.5, 0, 0);
7695 gtk_box_pack_start (GTK_BOX (vbox2), align, FALSE, FALSE, 5);
7697 hbox = gtk_hbox_new (FALSE, 5);
7698 gtk_container_add (GTK_CONTAINER (align), hbox);
7699 label = gtk_label_new ("Label updated by user :");
7700 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
7701 pdata->label = gtk_label_new ("");
7702 gtk_box_pack_start (GTK_BOX (hbox), pdata->label, FALSE, TRUE, 0);
7704 frame = gtk_frame_new ("Options");
7705 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
7707 vbox2 = gtk_vbox_new (FALSE, 5);
7708 gtk_container_add (GTK_CONTAINER (frame), vbox2);
7710 tab = gtk_table_new (7, 2, FALSE);
7711 gtk_box_pack_start (GTK_BOX (vbox2), tab, FALSE, TRUE, 0);
7713 label = gtk_label_new ("Orientation :");
7714 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 0, 1,
7715 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7717 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
7719 pdata->omenu1 = build_option_menu (items1, 4, 0, pdata);
7720 hbox = gtk_hbox_new (FALSE, 0);
7721 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 0, 1,
7722 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7724 gtk_box_pack_start (GTK_BOX (hbox), pdata->omenu1, TRUE, TRUE, 0);
7726 check = gtk_check_button_new_with_label ("Show text");
7727 gtk_signal_connect (GTK_OBJECT (check), "clicked",
7728 GTK_SIGNAL_FUNC (toggle_show_text),
7730 gtk_table_attach (GTK_TABLE (tab), check, 0, 1, 1, 2,
7731 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7734 hbox = gtk_hbox_new (FALSE, 0);
7735 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 1, 2,
7736 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7739 label = gtk_label_new ("Format : ");
7740 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
7742 pdata->entry = gtk_entry_new ();
7743 gtk_signal_connect (GTK_OBJECT (pdata->entry), "changed",
7744 GTK_SIGNAL_FUNC (entry_changed),
7746 gtk_box_pack_start (GTK_BOX (hbox), pdata->entry, TRUE, TRUE, 0);
7747 gtk_entry_set_text (GTK_ENTRY (pdata->entry), "%v from [%l,%u] (=%p%%)");
7748 gtk_widget_set_usize (pdata->entry, 100, -1);
7749 gtk_widget_set_sensitive (pdata->entry, FALSE);
7751 label = gtk_label_new ("Text align :");
7752 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 2, 3,
7753 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7755 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
7757 hbox = gtk_hbox_new (FALSE, 0);
7758 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 2, 3,
7759 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7762 label = gtk_label_new ("x :");
7763 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 5);
7765 adj = (GtkAdjustment *) gtk_adjustment_new (0.5, 0, 1, 0.1, 0.1, 0);
7766 pdata->x_align_spin = gtk_spin_button_new (adj, 0, 1);
7767 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
7768 GTK_SIGNAL_FUNC (adjust_align), pdata);
7769 gtk_box_pack_start (GTK_BOX (hbox), pdata->x_align_spin, FALSE, TRUE, 0);
7770 gtk_widget_set_sensitive (pdata->x_align_spin, FALSE);
7772 label = gtk_label_new ("y :");
7773 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 5);
7775 adj = (GtkAdjustment *) gtk_adjustment_new (0.5, 0, 1, 0.1, 0.1, 0);
7776 pdata->y_align_spin = gtk_spin_button_new (adj, 0, 1);
7777 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
7778 GTK_SIGNAL_FUNC (adjust_align), pdata);
7779 gtk_box_pack_start (GTK_BOX (hbox), pdata->y_align_spin, FALSE, TRUE, 0);
7780 gtk_widget_set_sensitive (pdata->y_align_spin, FALSE);
7782 label = gtk_label_new ("Bar Style :");
7783 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 3, 4,
7784 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7786 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
7788 pdata->omenu2 = build_option_menu (items2, 2, 0, pdata);
7789 hbox = gtk_hbox_new (FALSE, 0);
7790 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 3, 4,
7791 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7793 gtk_box_pack_start (GTK_BOX (hbox), pdata->omenu2, TRUE, TRUE, 0);
7795 label = gtk_label_new ("Block count :");
7796 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 4, 5,
7797 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7799 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
7801 hbox = gtk_hbox_new (FALSE, 0);
7802 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 4, 5,
7803 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7805 adj = (GtkAdjustment *) gtk_adjustment_new (10, 2, 20, 1, 5, 0);
7806 pdata->block_spin = gtk_spin_button_new (adj, 0, 0);
7807 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
7808 GTK_SIGNAL_FUNC (adjust_blocks), pdata);
7809 gtk_box_pack_start (GTK_BOX (hbox), pdata->block_spin, FALSE, TRUE, 0);
7810 gtk_widget_set_sensitive (pdata->block_spin, FALSE);
7812 check = gtk_check_button_new_with_label ("Activity mode");
7813 gtk_signal_connect (GTK_OBJECT (check), "clicked",
7814 GTK_SIGNAL_FUNC (toggle_activity_mode),
7816 gtk_table_attach (GTK_TABLE (tab), check, 0, 1, 5, 6,
7817 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7820 hbox = gtk_hbox_new (FALSE, 0);
7821 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 5, 6,
7822 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7824 label = gtk_label_new ("Step size : ");
7825 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
7826 adj = (GtkAdjustment *) gtk_adjustment_new (3, 1, 20, 1, 5, 0);
7827 pdata->step_spin = gtk_spin_button_new (adj, 0, 0);
7828 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
7829 GTK_SIGNAL_FUNC (adjust_step), pdata);
7830 gtk_box_pack_start (GTK_BOX (hbox), pdata->step_spin, FALSE, TRUE, 0);
7831 gtk_widget_set_sensitive (pdata->step_spin, FALSE);
7833 hbox = gtk_hbox_new (FALSE, 0);
7834 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 6, 7,
7835 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7837 label = gtk_label_new ("Blocks : ");
7838 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
7839 adj = (GtkAdjustment *) gtk_adjustment_new (5, 2, 10, 1, 5, 0);
7840 pdata->act_blocks_spin = gtk_spin_button_new (adj, 0, 0);
7841 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
7842 GTK_SIGNAL_FUNC (adjust_act_blocks), pdata);
7843 gtk_box_pack_start (GTK_BOX (hbox), pdata->act_blocks_spin, FALSE, TRUE,
7845 gtk_widget_set_sensitive (pdata->act_blocks_spin, FALSE);
7847 button = gtk_button_new_with_label ("close");
7848 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7849 GTK_SIGNAL_FUNC (gtk_widget_destroy),
7850 GTK_OBJECT (pdata->window));
7851 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7852 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (pdata->window)->action_area),
7853 button, TRUE, TRUE, 0);
7854 gtk_widget_grab_default (button);
7857 if (!GTK_WIDGET_VISIBLE (pdata->window))
7858 gtk_widget_show_all (pdata->window);
7860 gtk_widget_destroy (pdata->window);
7867 static int color_idle = 0;
7870 color_idle_func (GtkWidget *preview)
7872 static int count = 1;
7876 for (i = 0; i < 256; i++)
7878 for (j = 0, k = 0; j < 256; j++)
7880 buf[k+0] = i + count;
7882 buf[k+2] = j + count;
7886 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
7891 gtk_widget_draw (preview, NULL);
7897 color_preview_destroy (GtkWidget *widget,
7900 gtk_idle_remove (color_idle);
7907 create_color_preview (void)
7909 static GtkWidget *window = NULL;
7916 gtk_widget_push_colormap (gdk_rgb_get_cmap ());
7917 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7918 gtk_widget_pop_colormap ();
7920 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7921 GTK_SIGNAL_FUNC(color_preview_destroy),
7924 gtk_window_set_title (GTK_WINDOW (window), "test");
7925 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
7927 preview = gtk_preview_new (GTK_PREVIEW_COLOR);
7928 gtk_preview_size (GTK_PREVIEW (preview), 256, 256);
7929 gtk_container_add (GTK_CONTAINER (window), preview);
7931 for (i = 0; i < 256; i++)
7933 for (j = 0, k = 0; j < 256; j++)
7941 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
7944 color_idle = gtk_idle_add ((GtkFunction) color_idle_func, preview);
7947 if (!GTK_WIDGET_VISIBLE (window))
7948 gtk_widget_show_all (window);
7950 gtk_widget_destroy (window);
7957 static int gray_idle = 0;
7960 gray_idle_func (GtkWidget *preview)
7962 static int count = 1;
7966 for (i = 0; i < 256; i++)
7968 for (j = 0; j < 256; j++)
7969 buf[j] = i + j + count;
7971 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
7976 gtk_widget_draw (preview, NULL);
7982 gray_preview_destroy (GtkWidget *widget,
7985 gtk_idle_remove (gray_idle);
7992 create_gray_preview (void)
7994 static GtkWidget *window = NULL;
8001 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
8003 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8004 GTK_SIGNAL_FUNC(gray_preview_destroy),
8007 gtk_window_set_title (GTK_WINDOW (window), "test");
8008 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
8010 preview = gtk_preview_new (GTK_PREVIEW_GRAYSCALE);
8011 gtk_preview_size (GTK_PREVIEW (preview), 256, 256);
8012 gtk_container_add (GTK_CONTAINER (window), preview);
8014 for (i = 0; i < 256; i++)
8016 for (j = 0; j < 256; j++)
8019 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
8022 gray_idle = gtk_idle_add ((GtkFunction) gray_idle_func, preview);
8025 if (!GTK_WIDGET_VISIBLE (window))
8026 gtk_widget_show_all (window);
8028 gtk_widget_destroy (window);
8037 selection_test_received (GtkWidget *list, GtkSelectionData *data)
8040 GtkWidget *list_item;
8044 if (data->length < 0)
8046 g_print ("Selection retrieval failed\n");
8049 if (data->type != GDK_SELECTION_TYPE_ATOM)
8051 g_print ("Selection \"TARGETS\" was not returned as atoms!\n");
8055 /* Clear out any current list items */
8057 gtk_list_clear_items (GTK_LIST(list), 0, -1);
8059 /* Add new items to list */
8061 atoms = (GdkAtom *)data->data;
8064 l = data->length / sizeof (GdkAtom);
8065 for (i = 0; i < l; i++)
8068 name = gdk_atom_name (atoms[i]);
8071 list_item = gtk_list_item_new_with_label (name);
8075 list_item = gtk_list_item_new_with_label ("(bad atom)");
8077 gtk_widget_show (list_item);
8078 item_list = g_list_append (item_list, list_item);
8081 gtk_list_append_items (GTK_LIST (list), item_list);
8087 selection_test_get_targets (GtkWidget *widget, GtkWidget *list)
8089 static GdkAtom targets_atom = GDK_NONE;
8091 if (targets_atom == GDK_NONE)
8092 targets_atom = gdk_atom_intern ("TARGETS", FALSE);
8094 gtk_selection_convert (list, GDK_SELECTION_PRIMARY, targets_atom,
8099 create_selection_test (void)
8101 static GtkWidget *window = NULL;
8104 GtkWidget *scrolled_win;
8110 window = gtk_dialog_new ();
8112 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8113 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
8116 gtk_window_set_title (GTK_WINDOW (window), "Selection Test");
8117 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
8119 /* Create the list */
8121 vbox = gtk_vbox_new (FALSE, 5);
8122 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
8123 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), vbox,
8126 label = gtk_label_new ("Gets available targets for current selection");
8127 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
8129 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
8130 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
8131 GTK_POLICY_AUTOMATIC,
8132 GTK_POLICY_AUTOMATIC);
8133 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
8134 gtk_widget_set_usize (scrolled_win, 100, 200);
8136 list = gtk_list_new ();
8137 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_win), list);
8139 gtk_signal_connect (GTK_OBJECT(list), "selection_received",
8140 GTK_SIGNAL_FUNC (selection_test_received), NULL);
8142 /* .. And create some buttons */
8143 button = gtk_button_new_with_label ("Get Targets");
8144 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8145 button, TRUE, TRUE, 0);
8147 gtk_signal_connect (GTK_OBJECT (button), "clicked",
8148 GTK_SIGNAL_FUNC (selection_test_get_targets), list);
8150 button = gtk_button_new_with_label ("Quit");
8151 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8152 button, TRUE, TRUE, 0);
8154 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
8155 GTK_SIGNAL_FUNC (gtk_widget_destroy),
8156 GTK_OBJECT (window));
8159 if (!GTK_WIDGET_VISIBLE (window))
8160 gtk_widget_show_all (window);
8162 gtk_widget_destroy (window);
8170 create_gamma_curve (void)
8172 static GtkWidget *window = NULL, *curve;
8173 static int count = 0;
8180 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
8181 gtk_window_set_title (GTK_WINDOW (window), "test");
8182 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
8184 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8185 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
8188 curve = gtk_gamma_curve_new ();
8189 gtk_container_add (GTK_CONTAINER (window), curve);
8190 gtk_widget_show (curve);
8193 max = 127 + (count % 2)*128;
8194 gtk_curve_set_range (GTK_CURVE (GTK_GAMMA_CURVE (curve)->curve),
8196 for (i = 0; i < max; ++i)
8197 vec[i] = (127 / sqrt (max)) * sqrt (i);
8198 gtk_curve_set_vector (GTK_CURVE (GTK_GAMMA_CURVE (curve)->curve),
8201 if (!GTK_WIDGET_VISIBLE (window))
8202 gtk_widget_show (window);
8203 else if (count % 4 == 3)
8205 gtk_widget_destroy (window);
8216 static int scroll_test_pos = 0.0;
8217 static GdkGC *scroll_test_gc = NULL;
8220 scroll_test_expose (GtkWidget *widget, GdkEventExpose *event,
8224 gint imin, imax, jmin, jmax;
8226 imin = (event->area.x) / 10;
8227 imax = (event->area.x + event->area.width + 9) / 10;
8229 jmin = ((int)adj->value + event->area.y) / 10;
8230 jmax = ((int)adj->value + event->area.y + event->area.height + 9) / 10;
8232 gdk_window_clear_area (widget->window,
8233 event->area.x, event->area.y,
8234 event->area.width, event->area.height);
8236 for (i=imin; i<imax; i++)
8237 for (j=jmin; j<jmax; j++)
8239 gdk_draw_rectangle (widget->window,
8240 widget->style->black_gc,
8242 10*i, 10*j - (int)adj->value, 1+i%10, 1+j%10);
8248 scroll_test_scroll (GtkWidget *widget, GdkEventScroll *event,
8251 gfloat new_value = adj->value + ((event->direction == GDK_SCROLL_UP) ?
8252 -adj->page_increment / 2:
8253 adj->page_increment / 2);
8254 new_value = CLAMP (new_value, adj->lower, adj->upper - adj->page_size);
8255 gtk_adjustment_set_value (adj, new_value);
8261 scroll_test_configure (GtkWidget *widget, GdkEventConfigure *event,
8264 adj->page_increment = 0.9 * widget->allocation.height;
8265 adj->page_size = widget->allocation.height;
8267 gtk_signal_emit_by_name (GTK_OBJECT (adj), "changed");
8271 scroll_test_adjustment_changed (GtkAdjustment *adj, GtkWidget *widget)
8273 gint source_min = (int)adj->value - scroll_test_pos;
8274 gint source_max = source_min + widget->allocation.height;
8276 gint dest_max = widget->allocation.height;
8280 scroll_test_pos = adj->value;
8282 if (!GTK_WIDGET_DRAWABLE (widget))
8289 rect.width = widget->allocation.width;
8290 rect.height = -source_min;
8291 if (rect.height > widget->allocation.height)
8292 rect.height = widget->allocation.height;
8295 dest_min = rect.height;
8300 rect.y = 2*widget->allocation.height - source_max;
8303 rect.width = widget->allocation.width;
8304 rect.height = widget->allocation.height - rect.y;
8306 source_max = widget->allocation.height;
8310 if (source_min != source_max)
8312 if (scroll_test_gc == NULL)
8314 scroll_test_gc = gdk_gc_new (widget->window);
8315 gdk_gc_set_exposures (scroll_test_gc, TRUE);
8318 gdk_draw_pixmap (widget->window,
8323 widget->allocation.width,
8324 source_max - source_min);
8326 /* Make sure graphics expose events are processed before scrolling
8329 while ((event = gdk_event_get_graphics_expose (widget->window)) != NULL)
8331 gtk_widget_event (widget, event);
8332 if (event->expose.count == 0)
8334 gdk_event_free (event);
8337 gdk_event_free (event);
8341 if (rect.height != 0)
8342 gtk_widget_draw (widget, &rect);
8347 create_scroll_test (void)
8349 static GtkWidget *window = NULL;
8351 GtkWidget *drawing_area;
8352 GtkWidget *scrollbar;
8355 GdkGeometry geometry;
8356 GdkWindowHints geometry_mask;
8360 window = gtk_dialog_new ();
8362 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8363 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
8366 gtk_window_set_title (GTK_WINDOW (window), "Scroll Test");
8367 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
8369 hbox = gtk_hbox_new (FALSE, 0);
8370 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), hbox,
8372 gtk_widget_show (hbox);
8374 drawing_area = gtk_drawing_area_new ();
8375 gtk_drawing_area_size (GTK_DRAWING_AREA (drawing_area), 200, 200);
8376 gtk_box_pack_start (GTK_BOX (hbox), drawing_area, TRUE, TRUE, 0);
8377 gtk_widget_show (drawing_area);
8379 gtk_widget_set_events (drawing_area, GDK_EXPOSURE_MASK | GDK_SCROLL_MASK);
8381 adj = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.0, 1000.0, 1.0, 180.0, 200.0));
8382 scroll_test_pos = 0.0;
8384 scrollbar = gtk_vscrollbar_new (adj);
8385 gtk_box_pack_start (GTK_BOX (hbox), scrollbar, FALSE, FALSE, 0);
8386 gtk_widget_show (scrollbar);
8388 gtk_signal_connect (GTK_OBJECT (drawing_area), "expose_event",
8389 GTK_SIGNAL_FUNC (scroll_test_expose), adj);
8390 gtk_signal_connect (GTK_OBJECT (drawing_area), "configure_event",
8391 GTK_SIGNAL_FUNC (scroll_test_configure), adj);
8392 gtk_signal_connect (GTK_OBJECT (drawing_area), "scroll_event",
8393 GTK_SIGNAL_FUNC (scroll_test_scroll), adj);
8395 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
8396 GTK_SIGNAL_FUNC (scroll_test_adjustment_changed),
8399 /* .. And create some buttons */
8401 button = gtk_button_new_with_label ("Quit");
8402 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8403 button, TRUE, TRUE, 0);
8405 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
8406 GTK_SIGNAL_FUNC (gtk_widget_destroy),
8407 GTK_OBJECT (window));
8408 gtk_widget_show (button);
8410 /* Set up gridded geometry */
8412 geometry_mask = GDK_HINT_MIN_SIZE |
8413 GDK_HINT_BASE_SIZE |
8414 GDK_HINT_RESIZE_INC;
8416 geometry.min_width = 20;
8417 geometry.min_height = 20;
8418 geometry.base_width = 0;
8419 geometry.base_height = 0;
8420 geometry.width_inc = 10;
8421 geometry.height_inc = 10;
8423 gtk_window_set_geometry_hints (GTK_WINDOW (window),
8424 drawing_area, &geometry, geometry_mask);
8427 if (!GTK_WIDGET_VISIBLE (window))
8428 gtk_widget_show (window);
8430 gtk_widget_destroy (window);
8437 static int timer = 0;
8440 timeout_test (GtkWidget *label)
8442 static int count = 0;
8443 static char buffer[32];
8445 sprintf (buffer, "count: %d", ++count);
8446 gtk_label_set_text (GTK_LABEL (label), buffer);
8452 start_timeout_test (GtkWidget *widget,
8457 timer = gtk_timeout_add (100, (GtkFunction) timeout_test, label);
8462 stop_timeout_test (GtkWidget *widget,
8467 gtk_timeout_remove (timer);
8473 destroy_timeout_test (GtkWidget *widget,
8476 stop_timeout_test (NULL, NULL);
8482 create_timeout_test (void)
8484 static GtkWidget *window = NULL;
8490 window = gtk_dialog_new ();
8492 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8493 GTK_SIGNAL_FUNC(destroy_timeout_test),
8496 gtk_window_set_title (GTK_WINDOW (window), "Timeout Test");
8497 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
8499 label = gtk_label_new ("count: 0");
8500 gtk_misc_set_padding (GTK_MISC (label), 10, 10);
8501 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
8502 label, TRUE, TRUE, 0);
8503 gtk_widget_show (label);
8505 button = gtk_button_new_with_label ("close");
8506 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
8507 GTK_SIGNAL_FUNC(gtk_widget_destroy),
8508 GTK_OBJECT (window));
8509 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8510 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8511 button, TRUE, TRUE, 0);
8512 gtk_widget_grab_default (button);
8513 gtk_widget_show (button);
8515 button = gtk_button_new_with_label ("start");
8516 gtk_signal_connect (GTK_OBJECT (button), "clicked",
8517 GTK_SIGNAL_FUNC(start_timeout_test),
8519 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8520 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8521 button, TRUE, TRUE, 0);
8522 gtk_widget_show (button);
8524 button = gtk_button_new_with_label ("stop");
8525 gtk_signal_connect (GTK_OBJECT (button), "clicked",
8526 GTK_SIGNAL_FUNC(stop_timeout_test),
8528 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8529 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8530 button, TRUE, TRUE, 0);
8531 gtk_widget_show (button);
8534 if (!GTK_WIDGET_VISIBLE (window))
8535 gtk_widget_show (window);
8537 gtk_widget_destroy (window);
8544 static int idle_id = 0;
8547 idle_test (GtkWidget *label)
8549 static int count = 0;
8550 static char buffer[32];
8552 sprintf (buffer, "count: %d", ++count);
8553 gtk_label_set_text (GTK_LABEL (label), buffer);
8559 start_idle_test (GtkWidget *widget,
8564 idle_id = gtk_idle_add ((GtkFunction) idle_test, label);
8569 stop_idle_test (GtkWidget *widget,
8574 gtk_idle_remove (idle_id);
8580 destroy_idle_test (GtkWidget *widget,
8583 stop_idle_test (NULL, NULL);
8589 toggle_idle_container (GtkObject *button,
8590 GtkContainer *container)
8592 gtk_container_set_resize_mode (container, GPOINTER_TO_INT (gtk_object_get_user_data (button)));
8596 create_idle_test (void)
8598 static GtkWidget *window = NULL;
8601 GtkWidget *container;
8608 window = gtk_dialog_new ();
8610 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8611 GTK_SIGNAL_FUNC(destroy_idle_test),
8614 gtk_window_set_title (GTK_WINDOW (window), "Idle Test");
8615 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
8617 label = gtk_label_new ("count: 0");
8618 gtk_misc_set_padding (GTK_MISC (label), 10, 10);
8619 gtk_widget_show (label);
8622 gtk_widget_new (GTK_TYPE_HBOX,
8623 "GtkWidget::visible", TRUE,
8624 /* "GtkContainer::child", gtk_widget_new (GTK_TYPE_HBOX,
8625 * "GtkWidget::visible", TRUE,
8627 "GtkContainer::child", label,
8630 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
8631 container, TRUE, TRUE, 0);
8634 gtk_widget_new (GTK_TYPE_FRAME,
8635 "GtkContainer::border_width", 5,
8636 "GtkFrame::label", "Label Container",
8637 "GtkWidget::visible", TRUE,
8638 "GtkWidget::parent", GTK_DIALOG (window)->vbox,
8641 gtk_widget_new (GTK_TYPE_VBOX,
8642 "GtkWidget::visible", TRUE,
8643 "GtkWidget::parent", frame,
8646 gtk_widget_new (GTK_TYPE_RADIO_BUTTON,
8647 "GtkButton::label", "Resize-Parent",
8648 "GtkObject::user_data", (void*)GTK_RESIZE_PARENT,
8649 "GtkObject::signal::clicked", toggle_idle_container, container,
8650 "GtkWidget::visible", TRUE,
8651 "GtkWidget::parent", box,
8654 gtk_widget_new (GTK_TYPE_RADIO_BUTTON,
8655 "GtkButton::label", "Resize-Queue",
8656 "GtkObject::user_data", (void*)GTK_RESIZE_QUEUE,
8657 "GtkObject::signal::clicked", toggle_idle_container, container,
8658 "GtkRadioButton::group", button,
8659 "GtkWidget::visible", TRUE,
8660 "GtkWidget::parent", box,
8663 gtk_widget_new (GTK_TYPE_RADIO_BUTTON,
8664 "GtkButton::label", "Resize-Immediate",
8665 "GtkObject::user_data", (void*)GTK_RESIZE_IMMEDIATE,
8666 "GtkObject::signal::clicked", toggle_idle_container, container,
8667 "GtkRadioButton::group", button,
8668 "GtkWidget::visible", TRUE,
8669 "GtkWidget::parent", box,
8673 button = gtk_button_new_with_label ("close");
8674 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
8675 GTK_SIGNAL_FUNC(gtk_widget_destroy),
8676 GTK_OBJECT (window));
8677 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8678 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8679 button, TRUE, TRUE, 0);
8680 gtk_widget_grab_default (button);
8681 gtk_widget_show (button);
8683 button = gtk_button_new_with_label ("start");
8684 gtk_signal_connect (GTK_OBJECT (button), "clicked",
8685 GTK_SIGNAL_FUNC(start_idle_test),
8687 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8688 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8689 button, TRUE, TRUE, 0);
8690 gtk_widget_show (button);
8692 button = gtk_button_new_with_label ("stop");
8693 gtk_signal_connect (GTK_OBJECT (button), "clicked",
8694 GTK_SIGNAL_FUNC(stop_idle_test),
8696 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8697 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8698 button, TRUE, TRUE, 0);
8699 gtk_widget_show (button);
8702 if (!GTK_WIDGET_VISIBLE (window))
8703 gtk_widget_show (window);
8705 gtk_widget_destroy (window);
8713 reload_rc_file (void)
8717 if (gtk_rc_reparse_all ())
8719 toplevels = gdk_window_get_toplevels();
8723 gdk_window_get_user_data (toplevels->data, (gpointer *)&widget);
8726 gtk_widget_reset_rc_styles (widget);
8728 toplevels = toplevels->next;
8730 g_list_free (toplevels);
8735 reload_all_rc_files (void)
8737 static GdkAtom atom_rcfiles = GDK_NONE;
8743 atom_rcfiles = gdk_atom_intern("_GTK_READ_RCFILES", FALSE);
8745 for(i = 0; i < 5; i++)
8747 sev.data_format = 32;
8748 sev.message_type = atom_rcfiles;
8749 gdk_event_send_clientmessage_toall ((GdkEvent *) &sev);
8753 create_rc_file (void)
8755 static GtkWidget *window = NULL;
8760 window = gtk_dialog_new ();
8762 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8763 GTK_SIGNAL_FUNC(destroy_idle_test),
8766 gtk_window_set_title (GTK_WINDOW (window), "Reload Rc file");
8767 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
8769 button = gtk_button_new_with_label ("Reload");
8770 gtk_signal_connect (GTK_OBJECT (button), "clicked",
8771 GTK_SIGNAL_FUNC(reload_rc_file), NULL);
8772 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8773 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8774 button, TRUE, TRUE, 0);
8775 gtk_widget_grab_default (button);
8776 gtk_widget_show (button);
8778 button = gtk_button_new_with_label ("Reload All");
8779 gtk_signal_connect (GTK_OBJECT (button), "clicked",
8780 GTK_SIGNAL_FUNC(reload_all_rc_files), NULL);
8781 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8782 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8783 button, TRUE, TRUE, 0);
8784 gtk_widget_show (button);
8786 button = gtk_button_new_with_label ("Close");
8787 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
8788 GTK_SIGNAL_FUNC(gtk_widget_destroy),
8789 GTK_OBJECT (window));
8790 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8791 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8792 button, TRUE, TRUE, 0);
8793 gtk_widget_show (button);
8797 if (!GTK_WIDGET_VISIBLE (window))
8798 gtk_widget_show (window);
8800 gtk_widget_destroy (window);
8804 * Test of recursive mainloop
8808 mainloop_destroyed (GtkWidget *w, GtkWidget **window)
8815 create_mainloop (void)
8817 static GtkWidget *window = NULL;
8823 window = gtk_dialog_new ();
8825 gtk_window_set_title (GTK_WINDOW (window), "Test Main Loop");
8827 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8828 GTK_SIGNAL_FUNC(mainloop_destroyed),
8831 label = gtk_label_new ("In recursive main loop...");
8832 gtk_misc_set_padding (GTK_MISC(label), 20, 20);
8834 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), label,
8836 gtk_widget_show (label);
8838 button = gtk_button_new_with_label ("Leave");
8839 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area), button,
8842 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
8843 GTK_SIGNAL_FUNC (gtk_widget_destroy),
8844 GTK_OBJECT (window));
8846 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8847 gtk_widget_grab_default (button);
8849 gtk_widget_show (button);
8852 if (!GTK_WIDGET_VISIBLE (window))
8854 gtk_widget_show (window);
8856 g_print ("create_mainloop: start\n");
8858 g_print ("create_mainloop: done\n");
8861 gtk_widget_destroy (window);
8865 layout_expose_handler (GtkWidget *widget, GdkEventExpose *event)
8870 gint imin, imax, jmin, jmax;
8872 layout = GTK_LAYOUT (widget);
8874 imin = (layout->xoffset + event->area.x) / 10;
8875 imax = (layout->xoffset + event->area.x + event->area.width + 9) / 10;
8877 jmin = (layout->yoffset + event->area.y) / 10;
8878 jmax = (layout->yoffset + event->area.y + event->area.height + 9) / 10;
8880 gdk_window_clear_area (widget->window,
8881 event->area.x, event->area.y,
8882 event->area.width, event->area.height);
8884 for (i=imin; i<imax; i++)
8885 for (j=jmin; j<jmax; j++)
8887 gdk_draw_rectangle (layout->bin_window,
8888 widget->style->black_gc,
8890 10*i - layout->xoffset, 10*j - layout->yoffset,
8896 void create_layout (void)
8898 static GtkWidget *window = NULL;
8900 GtkWidget *scrolledwindow;
8909 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
8910 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8911 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
8914 gtk_window_set_title (GTK_WINDOW (window), "Layout");
8915 gtk_widget_set_usize (window, 200, 200);
8917 scrolledwindow = gtk_scrolled_window_new (NULL, NULL);
8918 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow),
8920 gtk_scrolled_window_set_placement (GTK_SCROLLED_WINDOW (scrolledwindow),
8921 GTK_CORNER_TOP_RIGHT);
8923 gtk_container_add (GTK_CONTAINER (window), scrolledwindow);
8925 layout = gtk_layout_new (NULL, NULL);
8926 gtk_container_add (GTK_CONTAINER (scrolledwindow), layout);
8928 /* We set step sizes here since GtkLayout does not set
8931 GTK_LAYOUT (layout)->hadjustment->step_increment = 10.0;
8932 GTK_LAYOUT (layout)->vadjustment->step_increment = 10.0;
8934 gtk_widget_set_events (layout, GDK_EXPOSURE_MASK);
8935 gtk_signal_connect (GTK_OBJECT (layout), "expose_event",
8936 GTK_SIGNAL_FUNC (layout_expose_handler), NULL);
8938 gtk_layout_set_size (GTK_LAYOUT (layout), 1600, 128000);
8940 for (i=0 ; i < 16 ; i++)
8941 for (j=0 ; j < 16 ; j++)
8943 sprintf(buf, "Button %d, %d", i, j);
8945 button = gtk_button_new_with_label (buf);
8947 button = gtk_label_new (buf);
8949 gtk_layout_put (GTK_LAYOUT (layout), button,
8953 for (i=16; i < 1280; i++)
8955 sprintf(buf, "Button %d, %d", i, 0);
8957 button = gtk_button_new_with_label (buf);
8959 button = gtk_label_new (buf);
8961 gtk_layout_put (GTK_LAYOUT (layout), button,
8966 if (!GTK_WIDGET_VISIBLE (window))
8967 gtk_widget_show_all (window);
8969 gtk_widget_destroy (window);
8973 create_styles (void)
8975 static GtkWidget *window = NULL;
8980 static GdkColor red = { 0, 0xffff, 0, 0 };
8981 static GdkColor green = { 0, 0, 0xffff, 0 };
8982 static GdkColor blue = { 0, 0, 0, 0xffff };
8983 static GdkColor yellow = { 0, 0xffff, 0xffff, 0 };
8984 static GdkColor cyan = { 0, 0 , 0xffff, 0xffff };
8985 PangoFontDescription *font_desc;
8987 GtkRcStyle *rc_style;
8991 window = gtk_dialog_new ();
8992 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8993 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
8997 button = gtk_button_new_with_label ("Close");
8998 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
8999 GTK_SIGNAL_FUNC(gtk_widget_destroy),
9000 GTK_OBJECT (window));
9001 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
9002 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
9003 button, TRUE, TRUE, 0);
9004 gtk_widget_show (button);
9006 vbox = gtk_vbox_new (FALSE, 5);
9007 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
9008 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), vbox, FALSE, FALSE, 0);
9010 label = gtk_label_new ("Font:");
9011 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
9012 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9014 font_desc = pango_font_description_from_string ("Helvetica,Sans Oblique 18");
9016 button = gtk_button_new_with_label ("Some Text");
9017 gtk_widget_modify_font (GTK_BIN (button)->child, font_desc);
9018 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
9020 label = gtk_label_new ("Foreground:");
9021 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
9022 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9024 button = gtk_button_new_with_label ("Some Text");
9025 gtk_widget_modify_fg (GTK_BIN (button)->child, GTK_STATE_NORMAL, &red);
9026 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
9028 label = gtk_label_new ("Background:");
9029 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
9030 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9032 button = gtk_button_new_with_label ("Some Text");
9033 gtk_widget_modify_bg (button, GTK_STATE_NORMAL, &green);
9034 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
9036 label = gtk_label_new ("Text:");
9037 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
9038 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9040 entry = gtk_entry_new ();
9041 gtk_entry_set_text (GTK_ENTRY (entry), "Some Text");
9042 gtk_widget_modify_text (entry, GTK_STATE_NORMAL, &blue);
9043 gtk_box_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 0);
9045 label = gtk_label_new ("Base:");
9046 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
9047 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9049 entry = gtk_entry_new ();
9050 gtk_entry_set_text (GTK_ENTRY (entry), "Some Text");
9051 gtk_widget_modify_base (entry, GTK_STATE_NORMAL, &yellow);
9052 gtk_box_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 0);
9054 label = gtk_label_new ("Multiple:");
9055 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
9056 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9058 button = gtk_button_new_with_label ("Some Text");
9060 rc_style = gtk_rc_style_new ();
9062 rc_style->font_desc = font_desc;
9063 rc_style->color_flags[GTK_STATE_NORMAL] = GTK_RC_FG | GTK_RC_BG;
9064 rc_style->color_flags[GTK_STATE_PRELIGHT] = GTK_RC_FG | GTK_RC_BG;
9065 rc_style->color_flags[GTK_STATE_ACTIVE] = GTK_RC_FG | GTK_RC_BG;
9066 rc_style->fg[GTK_STATE_NORMAL] = yellow;
9067 rc_style->bg[GTK_STATE_NORMAL] = blue;
9068 rc_style->fg[GTK_STATE_PRELIGHT] = blue;
9069 rc_style->bg[GTK_STATE_PRELIGHT] = yellow;
9070 rc_style->fg[GTK_STATE_ACTIVE] = red;
9071 rc_style->bg[GTK_STATE_ACTIVE] = cyan;
9072 rc_style->xthickness = 5;
9073 rc_style->ythickness = 5;
9075 gtk_widget_modify_style (button, rc_style);
9076 gtk_widget_modify_style (GTK_BIN (button)->child, rc_style);
9078 g_object_unref (G_OBJECT (rc_style));
9080 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
9083 if (!GTK_WIDGET_VISIBLE (window))
9084 gtk_widget_show_all (window);
9086 gtk_widget_destroy (window);
9090 * Main Window and Exit
9094 do_exit (GtkWidget *widget, GtkWidget *window)
9096 gtk_widget_destroy (window);
9101 create_main_window (void)
9108 { "button box", create_button_box },
9109 { "buttons", create_buttons },
9110 { "check buttons", create_check_buttons },
9111 { "clist", create_clist},
9112 { "color selection", create_color_selection },
9113 { "ctree", create_ctree },
9114 { "cursors", create_cursors },
9115 { "dialog", create_dialog },
9116 /* { "dnd", create_dnd }, */
9117 { "entry", create_entry },
9118 { "event watcher", create_event_watcher },
9119 { "file selection", create_file_selection },
9120 { "flipping", create_flipping },
9121 { "font selection", create_font_selection },
9122 { "gamma curve", create_gamma_curve },
9123 { "handle box", create_handle_box },
9124 { "image from drawable", create_get_image },
9125 { "image", create_image },
9126 { "item factory", create_item_factory },
9127 { "labels", create_labels },
9128 { "layout", create_layout },
9129 { "list", create_list },
9130 { "menus", create_menus },
9131 { "message dialog", create_message_dialog },
9132 { "modal window", create_modal_window },
9133 { "notebook", create_notebook },
9134 { "panes", create_panes },
9135 { "pixmap", create_pixmap },
9136 { "preview color", create_color_preview },
9137 { "preview gray", create_gray_preview },
9138 { "progress bar", create_progress_bar },
9139 { "radio buttons", create_radio_buttons },
9140 { "range controls", create_range_controls },
9141 { "rc file", create_rc_file },
9142 { "reparent", create_reparent },
9143 { "rulers", create_rulers },
9144 { "saved position", create_saved_position },
9145 { "scrolled windows", create_scrolled_windows },
9146 { "shapes", create_shapes },
9147 { "spinbutton", create_spins },
9148 { "statusbar", create_statusbar },
9149 { "styles", create_styles },
9150 { "test idle", create_idle_test },
9151 { "test mainloop", create_mainloop },
9152 { "test scrolling", create_scroll_test },
9153 { "test selection", create_selection_test },
9154 { "test timeout", create_timeout_test },
9155 { "text", create_text },
9156 { "toggle buttons", create_toggle_buttons },
9157 { "toolbar", create_toolbar },
9158 { "tooltips", create_tooltips },
9159 { "tree", create_tree_mode_window},
9160 { "WM hints", create_wmhints },
9162 int nbuttons = sizeof (buttons) / sizeof (buttons[0]);
9166 GtkWidget *scrolled_window;
9170 GtkWidget *separator;
9171 GdkGeometry geometry;
9174 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
9175 gtk_widget_set_name (window, "main window");
9176 gtk_widget_set_uposition (window, 20, 20);
9177 gtk_window_set_default_size (GTK_WINDOW (window), -1, 400);
9179 geometry.min_width = -1;
9180 geometry.min_height = -1;
9181 geometry.max_width = -1;
9182 geometry.max_height = G_MAXSHORT;
9183 gtk_window_set_geometry_hints (GTK_WINDOW (window), NULL,
9185 GDK_HINT_MIN_SIZE | GDK_HINT_MAX_SIZE);
9187 gtk_signal_connect (GTK_OBJECT (window), "destroy",
9188 GTK_SIGNAL_FUNC(gtk_main_quit),
9190 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
9191 GTK_SIGNAL_FUNC (gtk_false),
9194 box1 = gtk_vbox_new (FALSE, 0);
9195 gtk_container_add (GTK_CONTAINER (window), box1);
9197 if (gtk_micro_version > 0)
9209 label = gtk_label_new (buffer);
9210 gtk_box_pack_start (GTK_BOX (box1), label, FALSE, FALSE, 0);
9212 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
9213 gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10);
9214 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
9216 GTK_POLICY_AUTOMATIC);
9217 gtk_box_pack_start (GTK_BOX (box1), scrolled_window, TRUE, TRUE, 0);
9219 box2 = gtk_vbox_new (FALSE, 0);
9220 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
9221 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), box2);
9222 gtk_container_set_focus_vadjustment (GTK_CONTAINER (box2),
9223 gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
9224 gtk_widget_show (box2);
9226 for (i = 0; i < nbuttons; i++)
9228 button = gtk_button_new_with_label (buttons[i].label);
9229 if (buttons[i].func)
9230 gtk_signal_connect (GTK_OBJECT (button),
9232 GTK_SIGNAL_FUNC(buttons[i].func),
9235 gtk_widget_set_sensitive (button, FALSE);
9236 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
9239 separator = gtk_hseparator_new ();
9240 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
9242 box2 = gtk_vbox_new (FALSE, 10);
9243 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
9244 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
9246 button = gtk_button_new_with_label ("close");
9247 gtk_signal_connect (GTK_OBJECT (button), "clicked",
9248 GTK_SIGNAL_FUNC (do_exit),
9250 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
9251 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
9252 gtk_widget_grab_default (button);
9254 gtk_widget_show_all (window);
9260 if (file_exists ("../gdk-pixbuf/.libs/libpixbufloader-pnm.so"))
9262 putenv ("GDK_PIXBUF_MODULEDIR=../gdk-pixbuf/.libs");
9263 putenv ("GTK_IM_MODULE_FILE=./gtk.immodules");
9268 main (int argc, char *argv[])
9270 GtkBindingSet *binding_set;
9272 srand (time (NULL));
9277 /* Check to see if we are being run from the correct
9280 if (file_exists ("testgtkrc"))
9281 gtk_rc_add_default_file ("testgtkrc");
9283 gtk_init (&argc, &argv);
9287 binding_set = gtk_binding_set_by_class (gtk_type_class (GTK_TYPE_WIDGET));
9288 gtk_binding_entry_add_signal (binding_set,
9289 '9', GDK_CONTROL_MASK | GDK_RELEASE_MASK,
9292 GTK_TYPE_STRING, "GtkWidgetClass <ctrl><release>9 test");
9294 create_main_window ();
9301 while (g_main_pending ())
9302 g_main_iteration (FALSE);
9304 while (g_main_pending ())
9305 g_main_iteration (FALSE);