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_append (GTK_MENU (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;
2005 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2006 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2007 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2010 gtk_window_set_title (GTK_WINDOW (window), "Label");
2011 vbox = gtk_vbox_new (FALSE, 5);
2012 hbox = gtk_hbox_new (FALSE, 5);
2013 gtk_container_add (GTK_CONTAINER (window), hbox);
2014 gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);
2015 gtk_container_set_border_width (GTK_CONTAINER (window), 5);
2017 frame = gtk_frame_new ("Normal Label");
2018 label = gtk_label_new ("This is a Normal label");
2019 gtk_container_add (GTK_CONTAINER (frame), label);
2020 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2022 frame = gtk_frame_new ("Multi-line Label");
2023 label = gtk_label_new ("This is a Multi-line label.\nSecond line\nThird line");
2024 gtk_container_add (GTK_CONTAINER (frame), label);
2025 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2027 frame = gtk_frame_new ("Left Justified Label");
2028 label = gtk_label_new ("This is a Left-Justified\nMulti-line label.\nThird line");
2029 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2030 gtk_container_add (GTK_CONTAINER (frame), label);
2031 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2033 frame = gtk_frame_new ("Right Justified Label");
2034 label = gtk_label_new ("This is a Right-Justified\nMulti-line label.\nFourth line, (j/k)");
2035 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_RIGHT);
2036 gtk_container_add (GTK_CONTAINER (frame), label);
2037 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2039 frame = gtk_frame_new ("Internationalized Label");
2040 label = gtk_label_new ("French (Français) Bonjour, Salut\n"
2041 "Korean (한글) 안녕하세요, 안녕하십니까\n"
2042 "Russian (Русский) Здравствуйте!");
2043 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2044 gtk_container_add (GTK_CONTAINER (frame), label);
2045 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2047 frame = gtk_frame_new ("Bidirection Label");
2048 label = gtk_label_new ("Arabic السلام عليكم\n"
2050 gtk_widget_set_direction (label, GTK_TEXT_DIR_RTL);
2051 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_RIGHT);
2052 gtk_container_add (GTK_CONTAINER (frame), label);
2053 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2055 vbox = gtk_vbox_new (FALSE, 5);
2056 gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);
2057 frame = gtk_frame_new ("Line wrapped label");
2058 label = gtk_label_new ("This is an example of a line-wrapped label. It should not be taking "\
2059 "up the entire "/* big space to test spacing */\
2060 "width allocated to it, but automatically wraps the words to fit. "\
2061 "The time has come, for all good men, to come to the aid of their party. "\
2062 "The sixth sheik's six sheep's sick.\n"\
2063 " It supports multiple paragraphs correctly, and correctly adds "\
2064 "many extra spaces. ");
2066 gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
2067 gtk_container_add (GTK_CONTAINER (frame), label);
2068 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2070 frame = gtk_frame_new ("Filled, wrapped label");
2071 label = gtk_label_new ("This is an example of a line-wrapped, filled label. It should be taking "\
2072 "up the entire width allocated to it. Here is a seneance to prove "\
2073 "my point. Here is another sentence. "\
2074 "Here comes the sun, do de do de do.\n"\
2075 " This is a new paragraph.\n"\
2076 " This is another newer, longer, better paragraph. It is coming to an end, "\
2078 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_FILL);
2079 gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
2080 gtk_container_add (GTK_CONTAINER (frame), label);
2081 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2083 frame = gtk_frame_new ("Underlined label");
2084 label = gtk_label_new ("This label is underlined!\n"
2085 "This one is underlined (こんにちは) in quite a funky fashion");
2086 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2087 gtk_label_set_pattern (GTK_LABEL (label), "_________________________ _ _________ _ _____ _ __ __ ___ ____ _____");
2088 gtk_container_add (GTK_CONTAINER (frame), label);
2089 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2091 frame = gtk_frame_new ("Markup label");
2092 label = gtk_label_new (NULL);
2094 gtk_label_set_markup (GTK_LABEL (label),
2095 "This <span foreground=\"blue\" background=\"orange\">label</span> has "
2096 "<b>markup</b> such as "
2097 "<big><i>Big Italics</i></big>\n"
2098 "<tt>Monospace font</tt>\n"
2099 "<u>Underline!</u>\n"
2101 "<span foreground=\"green\" background=\"red\">Ugly colors</span>\n"
2102 "and nothing on this line,\n"
2105 "or even on this one\n"
2106 "la <big>la <big>la <big>la <big>la</big></big></big></big>\n"
2107 "but this word is <span foreground=\"purple\"><big>purple</big></span>\n"
2108 "We like <sup>superscript</sup> and <sub>subscript</sub> too");
2109 gtk_container_add (GTK_CONTAINER (frame), label);
2110 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2113 if (!GTK_WIDGET_VISIBLE (window))
2114 gtk_widget_show_all (window);
2116 gtk_widget_destroy (window);
2124 reparent_label (GtkWidget *widget,
2125 GtkWidget *new_parent)
2129 label = gtk_object_get_user_data (GTK_OBJECT (widget));
2131 gtk_widget_reparent (label, new_parent);
2135 set_parent_signal (GtkWidget *child,
2136 GtkWidget *old_parent,
2139 g_print ("set_parent for \"%s\": new parent: \"%s\", old parent: \"%s\", data: %d\n",
2140 gtk_type_name (GTK_OBJECT_TYPE (child)),
2141 child->parent ? gtk_type_name (GTK_OBJECT_TYPE (child->parent)) : "NULL",
2142 old_parent ? gtk_type_name (GTK_OBJECT_TYPE (old_parent)) : "NULL",
2143 GPOINTER_TO_INT (func_data));
2147 create_reparent (void)
2149 static GtkWidget *window = NULL;
2156 GtkWidget *separator;
2160 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2162 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2163 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2166 gtk_window_set_title (GTK_WINDOW (window), "reparent");
2167 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
2169 box1 = gtk_vbox_new (FALSE, 0);
2170 gtk_container_add (GTK_CONTAINER (window), box1);
2172 box2 = gtk_hbox_new (FALSE, 5);
2173 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2174 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2176 label = gtk_label_new ("Hello World");
2178 frame = gtk_frame_new ("Frame 1");
2179 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
2181 box3 = gtk_vbox_new (FALSE, 5);
2182 gtk_container_set_border_width (GTK_CONTAINER (box3), 5);
2183 gtk_container_add (GTK_CONTAINER (frame), box3);
2185 button = gtk_button_new_with_label ("switch");
2186 gtk_signal_connect (GTK_OBJECT (button), "clicked",
2187 GTK_SIGNAL_FUNC(reparent_label),
2189 gtk_object_set_user_data (GTK_OBJECT (button), label);
2190 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
2192 gtk_box_pack_start (GTK_BOX (box3), label, FALSE, TRUE, 0);
2193 gtk_signal_connect (GTK_OBJECT (label),
2195 GTK_SIGNAL_FUNC (set_parent_signal),
2196 GINT_TO_POINTER (42));
2198 frame = gtk_frame_new ("Frame 2");
2199 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
2201 box3 = gtk_vbox_new (FALSE, 5);
2202 gtk_container_set_border_width (GTK_CONTAINER (box3), 5);
2203 gtk_container_add (GTK_CONTAINER (frame), box3);
2205 button = gtk_button_new_with_label ("switch");
2206 gtk_signal_connect (GTK_OBJECT (button), "clicked",
2207 GTK_SIGNAL_FUNC(reparent_label),
2209 gtk_object_set_user_data (GTK_OBJECT (button), label);
2210 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
2212 separator = gtk_hseparator_new ();
2213 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2215 box2 = gtk_vbox_new (FALSE, 10);
2216 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2217 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2219 button = gtk_button_new_with_label ("close");
2220 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2221 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2222 GTK_OBJECT (window));
2223 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2224 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2225 gtk_widget_grab_default (button);
2228 if (!GTK_WIDGET_VISIBLE (window))
2229 gtk_widget_show_all (window);
2231 gtk_widget_destroy (window);
2237 gint upositionx = 0;
2238 gint upositiony = 0;
2241 uposition_configure (GtkWidget *window)
2247 lx = gtk_object_get_data (GTK_OBJECT (window), "x");
2248 ly = gtk_object_get_data (GTK_OBJECT (window), "y");
2250 gdk_window_get_root_origin (window->window, &upositionx, &upositiony);
2251 sprintf (buffer, "%d", upositionx);
2252 gtk_label_set_text (lx, buffer);
2253 sprintf (buffer, "%d", upositiony);
2254 gtk_label_set_text (ly, buffer);
2260 create_saved_position (void)
2262 static GtkWidget *window = NULL;
2267 GtkWidget *main_vbox;
2275 window = gtk_widget_new (GTK_TYPE_WINDOW,
2276 "type", GTK_WINDOW_TOPLEVEL,
2277 "signal::configure_event", uposition_configure, NULL,
2280 "title", "Saved Position",
2283 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2284 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
2287 main_vbox = gtk_vbox_new (FALSE, 5);
2288 gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 0);
2289 gtk_container_add (GTK_CONTAINER (window), main_vbox);
2292 gtk_widget_new (gtk_vbox_get_type (),
2293 "GtkBox::homogeneous", FALSE,
2294 "GtkBox::spacing", 5,
2295 "GtkContainer::border_width", 10,
2296 "GtkWidget::parent", main_vbox,
2297 "GtkWidget::visible", TRUE,
2300 hbox = gtk_hbox_new (FALSE, 0);
2301 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
2302 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
2304 label = gtk_label_new ("X Origin : ");
2305 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
2306 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
2308 x_label = gtk_label_new ("");
2309 gtk_box_pack_start (GTK_BOX (hbox), x_label, TRUE, TRUE, 0);
2310 gtk_object_set_data (GTK_OBJECT (window), "x", x_label);
2312 hbox = gtk_hbox_new (FALSE, 0);
2313 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
2314 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
2316 label = gtk_label_new ("Y Origin : ");
2317 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
2318 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
2320 y_label = gtk_label_new ("");
2321 gtk_box_pack_start (GTK_BOX (hbox), y_label, TRUE, TRUE, 0);
2322 gtk_object_set_data (GTK_OBJECT (window), "y", y_label);
2325 gtk_widget_new (gtk_hseparator_get_type (),
2326 "GtkWidget::visible", TRUE,
2328 gtk_box_pack_start (GTK_BOX (main_vbox), any, FALSE, TRUE, 0);
2330 hbox = gtk_hbox_new (FALSE, 0);
2331 gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
2332 gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
2334 button = gtk_button_new_with_label ("Close");
2335 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2336 GTK_SIGNAL_FUNC (gtk_widget_destroy),
2337 GTK_OBJECT (window));
2338 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
2339 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2340 gtk_widget_grab_default (button);
2342 gtk_widget_show_all (window);
2345 gtk_widget_destroy (window);
2353 create_pixmap (void)
2355 static GtkWidget *window = NULL;
2361 GtkWidget *separator;
2362 GtkWidget *pixmapwid;
2366 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2368 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2369 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2372 gtk_window_set_title (GTK_WINDOW (window), "GtkPixmap");
2373 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
2374 gtk_widget_realize(window);
2376 box1 = gtk_vbox_new (FALSE, 0);
2377 gtk_container_add (GTK_CONTAINER (window), box1);
2379 box2 = gtk_vbox_new (FALSE, 10);
2380 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2381 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2383 button = gtk_button_new ();
2384 gtk_box_pack_start (GTK_BOX (box2), button, FALSE, FALSE, 0);
2386 pixmapwid = new_pixmap ("test.xpm", window->window, NULL);
2388 label = gtk_label_new ("Pixmap\ntest");
2389 box3 = gtk_hbox_new (FALSE, 0);
2390 gtk_container_set_border_width (GTK_CONTAINER (box3), 2);
2391 gtk_container_add (GTK_CONTAINER (box3), pixmapwid);
2392 gtk_container_add (GTK_CONTAINER (box3), label);
2393 gtk_container_add (GTK_CONTAINER (button), box3);
2395 separator = gtk_hseparator_new ();
2396 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2398 box2 = gtk_vbox_new (FALSE, 10);
2399 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2400 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2402 button = gtk_button_new_with_label ("close");
2403 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2404 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2405 GTK_OBJECT (window));
2406 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2407 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2408 gtk_widget_grab_default (button);
2411 if (!GTK_WIDGET_VISIBLE (window))
2412 gtk_widget_show_all (window);
2414 gtk_widget_destroy (window);
2418 tips_query_widget_entered (GtkTipsQuery *tips_query,
2420 const gchar *tip_text,
2421 const gchar *tip_private,
2424 if (GTK_TOGGLE_BUTTON (toggle)->active)
2426 gtk_label_set_text (GTK_LABEL (tips_query), tip_text ? "There is a Tip!" : "There is no Tip!");
2427 /* don't let GtkTipsQuery reset its label */
2428 gtk_signal_emit_stop_by_name (GTK_OBJECT (tips_query), "widget_entered");
2433 tips_query_widget_selected (GtkWidget *tips_query,
2435 const gchar *tip_text,
2436 const gchar *tip_private,
2437 GdkEventButton *event,
2441 g_print ("Help \"%s\" requested for <%s>\n",
2442 tip_private ? tip_private : "None",
2443 gtk_type_name (GTK_OBJECT_TYPE (widget)));
2448 create_tooltips (void)
2450 static GtkWidget *window = NULL;
2457 GtkWidget *tips_query;
2458 GtkWidget *separator;
2459 GtkTooltips *tooltips;
2464 gtk_widget_new (gtk_window_get_type (),
2465 "GtkWindow::type", GTK_WINDOW_TOPLEVEL,
2466 "GtkContainer::border_width", 0,
2467 "GtkWindow::title", "Tooltips",
2468 "GtkWindow::allow_shrink", TRUE,
2469 "GtkWindow::allow_grow", FALSE,
2470 "GtkWindow::auto_shrink", TRUE,
2471 "GtkWidget::width", 200,
2474 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2475 GTK_SIGNAL_FUNC (destroy_tooltips),
2478 tooltips=gtk_tooltips_new();
2479 gtk_object_set_data (GTK_OBJECT (window), "tooltips", tooltips);
2481 box1 = gtk_vbox_new (FALSE, 0);
2482 gtk_container_add (GTK_CONTAINER (window), box1);
2484 box2 = gtk_vbox_new (FALSE, 10);
2485 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2486 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2488 button = gtk_toggle_button_new_with_label ("button1");
2489 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2491 gtk_tooltips_set_tip (tooltips,button,"This is button 1", "ContextHelp/buttons/1");
2493 button = gtk_toggle_button_new_with_label ("button2");
2494 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2496 gtk_tooltips_set_tip (tooltips,
2498 "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.",
2499 "ContextHelp/buttons/2_long");
2501 toggle = gtk_toggle_button_new_with_label ("Override TipsQuery Label");
2502 gtk_box_pack_start (GTK_BOX (box2), toggle, TRUE, TRUE, 0);
2504 gtk_tooltips_set_tip (tooltips, toggle, "Toggle TipsQuery view.", "Hi msw! ;)");
2507 gtk_widget_new (gtk_vbox_get_type (),
2508 "GtkBox::homogeneous", FALSE,
2509 "GtkBox::spacing", 5,
2510 "GtkContainer::border_width", 5,
2511 "GtkWidget::visible", TRUE,
2514 tips_query = gtk_tips_query_new ();
2517 gtk_widget_new (gtk_button_get_type (),
2518 "GtkButton::label", "[?]",
2519 "GtkWidget::visible", TRUE,
2520 "GtkWidget::parent", box3,
2521 "GtkObject::object_signal::clicked", gtk_tips_query_start_query, tips_query,
2523 gtk_box_set_child_packing (GTK_BOX (box3), button, FALSE, FALSE, 0, GTK_PACK_START);
2524 gtk_tooltips_set_tip (tooltips,
2526 "Start the Tooltips Inspector",
2527 "ContextHelp/buttons/?");
2530 gtk_widget_set (tips_query,
2531 "GtkWidget::visible", TRUE,
2532 "GtkWidget::parent", box3,
2533 "GtkTipsQuery::caller", button,
2534 "GtkObject::signal::widget_entered", tips_query_widget_entered, toggle,
2535 "GtkObject::signal::widget_selected", tips_query_widget_selected, NULL,
2539 gtk_widget_new (gtk_frame_get_type (),
2540 "GtkFrame::label", "ToolTips Inspector",
2541 "GtkFrame::label_xalign", (double) 0.5,
2542 "GtkContainer::border_width", 0,
2543 "GtkWidget::visible", TRUE,
2544 "GtkWidget::parent", box2,
2545 "GtkContainer::child", box3,
2547 gtk_box_set_child_packing (GTK_BOX (box2), frame, TRUE, TRUE, 10, GTK_PACK_START);
2549 separator = gtk_hseparator_new ();
2550 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2552 box2 = gtk_vbox_new (FALSE, 10);
2553 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2554 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2556 button = gtk_button_new_with_label ("close");
2557 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2558 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2559 GTK_OBJECT (window));
2560 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2561 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2562 gtk_widget_grab_default (button);
2564 gtk_tooltips_set_tip (tooltips, button, "Push this button to close window", "ContextHelp/buttons/Close");
2567 if (!GTK_WIDGET_VISIBLE (window))
2568 gtk_widget_show_all (window);
2570 gtk_widget_destroy (window);
2578 pack_image (GtkWidget *box,
2582 gtk_box_pack_start (GTK_BOX (box),
2583 gtk_label_new (text),
2586 gtk_box_pack_start (GTK_BOX (box),
2594 static GtkWidget *window = NULL;
2602 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2604 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2605 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2608 vbox = gtk_vbox_new (FALSE, 5);
2610 gtk_container_add (GTK_CONTAINER (window), vbox);
2612 pack_image (vbox, "Stock Warning Dialog",
2613 gtk_image_new_from_stock (GTK_STOCK_DIALOG_WARNING,
2614 GTK_ICON_SIZE_DIALOG));
2616 pixmap = gdk_pixmap_colormap_create_from_xpm_d (NULL,
2617 gtk_widget_get_colormap (window),
2622 pack_image (vbox, "Pixmap",
2623 gtk_image_new_from_pixmap (pixmap, mask));
2626 if (!GTK_WIDGET_VISIBLE (window))
2627 gtk_widget_show_all (window);
2629 gtk_widget_destroy (window);
2637 create_menu (gint depth, gboolean tearoff)
2640 GtkWidget *menuitem;
2648 menu = gtk_menu_new ();
2653 menuitem = gtk_tearoff_menu_item_new ();
2654 gtk_menu_append (GTK_MENU (menu), menuitem);
2655 gtk_widget_show (menuitem);
2658 for (i = 0, j = 1; i < 5; i++, j++)
2660 sprintf (buf, "item %2d - %d", depth, j);
2661 menuitem = gtk_radio_menu_item_new_with_label (group, buf);
2662 group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menuitem));
2664 gtk_check_menu_item_set_show_toggle (GTK_CHECK_MENU_ITEM (menuitem), TRUE);
2665 gtk_menu_append (GTK_MENU (menu), menuitem);
2666 gtk_widget_show (menuitem);
2668 gtk_widget_set_sensitive (menuitem, FALSE);
2670 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (depth - 1, TRUE));
2679 static GtkWidget *window = NULL;
2683 GtkWidget *optionmenu;
2684 GtkWidget *separator;
2690 GtkWidget *menuitem;
2691 GtkAccelGroup *accel_group;
2693 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2695 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2696 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2698 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
2699 GTK_SIGNAL_FUNC (gtk_true),
2702 accel_group = gtk_accel_group_new ();
2703 gtk_accel_group_attach (accel_group, GTK_OBJECT (window));
2705 gtk_window_set_title (GTK_WINDOW (window), "menus");
2706 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
2709 box1 = gtk_vbox_new (FALSE, 0);
2710 gtk_container_add (GTK_CONTAINER (window), box1);
2711 gtk_widget_show (box1);
2713 menubar = gtk_menu_bar_new ();
2714 gtk_box_pack_start (GTK_BOX (box1), menubar, FALSE, TRUE, 0);
2715 gtk_widget_show (menubar);
2717 menu = create_menu (2, TRUE);
2719 menuitem = gtk_menu_item_new_with_label ("test\nline2");
2720 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), menu);
2721 gtk_menu_bar_append (GTK_MENU_BAR (menubar), menuitem);
2722 gtk_widget_show (menuitem);
2724 menuitem = gtk_menu_item_new_with_label ("foo");
2725 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (3, TRUE));
2726 gtk_menu_bar_append (GTK_MENU_BAR (menubar), menuitem);
2727 gtk_widget_show (menuitem);
2729 menuitem = gtk_menu_item_new_with_label ("bar");
2730 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (4, TRUE));
2731 gtk_menu_item_right_justify (GTK_MENU_ITEM (menuitem));
2732 gtk_menu_bar_append (GTK_MENU_BAR (menubar), menuitem);
2733 gtk_widget_show (menuitem);
2735 box2 = gtk_vbox_new (FALSE, 10);
2736 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2737 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2738 gtk_widget_show (box2);
2740 menu = create_menu (1, FALSE);
2741 gtk_menu_set_accel_group (GTK_MENU (menu), accel_group);
2743 menuitem = gtk_check_menu_item_new_with_label ("Accelerate Me");
2744 gtk_menu_append (GTK_MENU (menu), menuitem);
2745 gtk_widget_show (menuitem);
2746 gtk_widget_add_accelerator (menuitem,
2751 GTK_ACCEL_VISIBLE | GTK_ACCEL_SIGNAL_VISIBLE);
2752 menuitem = gtk_check_menu_item_new_with_label ("Accelerator Locked");
2753 gtk_menu_append (GTK_MENU (menu), menuitem);
2754 gtk_widget_show (menuitem);
2755 gtk_widget_add_accelerator (menuitem,
2760 GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
2761 menuitem = gtk_check_menu_item_new_with_label ("Accelerators Frozen");
2762 gtk_menu_append (GTK_MENU (menu), menuitem);
2763 gtk_widget_show (menuitem);
2764 gtk_widget_add_accelerator (menuitem,
2770 gtk_widget_add_accelerator (menuitem,
2776 gtk_widget_lock_accelerators (menuitem);
2778 optionmenu = gtk_option_menu_new ();
2779 gtk_option_menu_set_menu (GTK_OPTION_MENU (optionmenu), menu);
2780 gtk_option_menu_set_history (GTK_OPTION_MENU (optionmenu), 3);
2781 gtk_box_pack_start (GTK_BOX (box2), optionmenu, TRUE, TRUE, 0);
2782 gtk_widget_show (optionmenu);
2784 separator = gtk_hseparator_new ();
2785 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2786 gtk_widget_show (separator);
2788 box2 = gtk_vbox_new (FALSE, 10);
2789 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2790 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2791 gtk_widget_show (box2);
2793 button = gtk_button_new_with_label ("close");
2794 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2795 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2796 GTK_OBJECT (window));
2797 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2798 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2799 gtk_widget_grab_default (button);
2800 gtk_widget_show (button);
2803 if (!GTK_WIDGET_VISIBLE (window))
2804 gtk_widget_show (window);
2806 gtk_widget_destroy (window);
2810 gtk_ifactory_cb (gpointer callback_data,
2811 guint callback_action,
2814 g_message ("ItemFactory: activated \"%s\"", gtk_item_factory_path_from_widget (widget));
2817 static GtkItemFactoryEntry menu_items[] =
2819 { "/_File", NULL, 0, 0, "<Branch>" },
2820 { "/File/tearoff1", NULL, gtk_ifactory_cb, 0, "<Tearoff>" },
2821 { "/File/_New", "<control>N", gtk_ifactory_cb, 0 },
2822 { "/File/_Open", "<control>O", gtk_ifactory_cb, 0 },
2823 { "/File/_Save", "<control>S", gtk_ifactory_cb, 0 },
2824 { "/File/Save _As...", NULL, gtk_ifactory_cb, 0 },
2825 { "/File/sep1", NULL, gtk_ifactory_cb, 0, "<Separator>" },
2826 { "/File/_Quit", "<control>Q", gtk_ifactory_cb, 0 },
2828 { "/_Preferences", NULL, 0, 0, "<Branch>" },
2829 { "/_Preferences/_Color", NULL, 0, 0, "<Branch>" },
2830 { "/_Preferences/Color/_Red", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
2831 { "/_Preferences/Color/_Green", NULL, gtk_ifactory_cb, 0, "/Preferences/Color/Red" },
2832 { "/_Preferences/Color/_Blue", NULL, gtk_ifactory_cb, 0, "/Preferences/Color/Red" },
2833 { "/_Preferences/_Shape", NULL, 0, 0, "<Branch>" },
2834 { "/_Preferences/Shape/_Square", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
2835 { "/_Preferences/Shape/_Rectangle", NULL, gtk_ifactory_cb, 0, "/Preferences/Shape/Square" },
2836 { "/_Preferences/Shape/_Oval", NULL, gtk_ifactory_cb, 0, "/Preferences/Shape/Rectangle" },
2838 { "/_Help", NULL, 0, 0, "<LastBranch>" },
2839 { "/Help/_About", NULL, gtk_ifactory_cb, 0 },
2842 static int nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]);
2845 create_item_factory (void)
2847 static GtkWidget *window = NULL;
2853 GtkWidget *separator;
2856 GtkAccelGroup *accel_group;
2857 GtkItemFactory *item_factory;
2859 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2861 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2862 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2864 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
2865 GTK_SIGNAL_FUNC (gtk_true),
2868 accel_group = gtk_accel_group_new ();
2869 item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>", accel_group);
2870 gtk_object_set_data_full (GTK_OBJECT (window),
2873 (GtkDestroyNotify) gtk_object_unref);
2874 gtk_accel_group_attach (accel_group, GTK_OBJECT (window));
2875 gtk_window_set_title (GTK_WINDOW (window), "Item Factory");
2876 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
2877 gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL);
2879 /* preselect /Preferences/Shape/Oval over the other radios
2881 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (gtk_item_factory_get_item (item_factory,
2882 "/Preferences/Shape/Oval")),
2885 box1 = gtk_vbox_new (FALSE, 0);
2886 gtk_container_add (GTK_CONTAINER (window), box1);
2888 gtk_box_pack_start (GTK_BOX (box1),
2889 gtk_item_factory_get_widget (item_factory, "<main>"),
2892 label = gtk_label_new ("Type\n<alt>\nto start");
2893 gtk_widget_set_usize (label, 200, 200);
2894 gtk_misc_set_alignment (GTK_MISC (label), 0.5, 0.5);
2895 gtk_box_pack_start (GTK_BOX (box1), label, TRUE, TRUE, 0);
2898 separator = gtk_hseparator_new ();
2899 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2902 box2 = gtk_vbox_new (FALSE, 10);
2903 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2904 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2906 button = gtk_button_new_with_label ("close");
2907 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2908 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2909 GTK_OBJECT (window));
2910 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2911 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2912 gtk_widget_grab_default (button);
2914 gtk_widget_show_all (window);
2917 gtk_widget_destroy (window);
2925 cmw_destroy_cb(GtkWidget *widget)
2927 /* This is needed to get out of gtk_main */
2934 cmw_color (GtkWidget *widget, GtkWidget *parent)
2938 csd=gtk_color_selection_dialog_new ("This is a modal color selection dialog");
2941 gtk_window_set_modal (GTK_WINDOW(csd),TRUE);
2943 /* And mark it as a transient dialog */
2944 gtk_window_set_transient_for (GTK_WINDOW (csd), GTK_WINDOW (parent));
2946 gtk_signal_connect (GTK_OBJECT(csd), "destroy",
2947 GTK_SIGNAL_FUNC(cmw_destroy_cb),NULL);
2949 gtk_signal_connect_object (GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(csd)->ok_button),
2950 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
2952 gtk_signal_connect_object (GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(csd)->cancel_button),
2953 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
2956 /* wait until destroy calls gtk_main_quit */
2957 gtk_widget_show (csd);
2962 cmw_file (GtkWidget *widget, GtkWidget *parent)
2966 fs = gtk_file_selection_new("This is a modal file selection dialog");
2969 gtk_window_set_modal (GTK_WINDOW(fs),TRUE);
2971 /* And mark it as a transient dialog */
2972 gtk_window_set_transient_for (GTK_WINDOW (fs), GTK_WINDOW (parent));
2974 gtk_signal_connect (GTK_OBJECT(fs), "destroy",
2975 GTK_SIGNAL_FUNC(cmw_destroy_cb),NULL);
2977 gtk_signal_connect_object (GTK_OBJECT(GTK_FILE_SELECTION(fs)->ok_button),
2978 "clicked",GTK_SIGNAL_FUNC(gtk_widget_destroy),
2980 gtk_signal_connect_object (GTK_OBJECT(GTK_FILE_SELECTION(fs)->cancel_button),
2981 "clicked",GTK_SIGNAL_FUNC(gtk_widget_destroy),
2984 /* wait until destroy calls gtk_main_quit */
2985 gtk_widget_show (fs);
2992 create_modal_window (void)
2994 GtkWidget *window = NULL;
2995 GtkWidget *box1,*box2;
2997 GtkWidget *btnColor,*btnFile,*btnClose;
2999 /* Create modal window (Here you can use any window descendent )*/
3000 window=gtk_window_new (GTK_WINDOW_TOPLEVEL);
3001 gtk_window_set_title (GTK_WINDOW(window),"This window is modal");
3003 /* Set window as modal */
3004 gtk_window_set_modal (GTK_WINDOW(window),TRUE);
3006 /* Create widgets */
3007 box1 = gtk_vbox_new (FALSE,5);
3008 frame1 = gtk_frame_new ("Standard dialogs in modal form");
3009 box2 = gtk_vbox_new (TRUE,5);
3010 btnColor = gtk_button_new_with_label ("Color");
3011 btnFile = gtk_button_new_with_label ("File Selection");
3012 btnClose = gtk_button_new_with_label ("Close");
3015 gtk_container_set_border_width (GTK_CONTAINER(box1),3);
3016 gtk_container_set_border_width (GTK_CONTAINER(box2),3);
3019 gtk_container_add (GTK_CONTAINER (window), box1);
3020 gtk_box_pack_start (GTK_BOX (box1), frame1, TRUE, TRUE, 4);
3021 gtk_container_add (GTK_CONTAINER (frame1), box2);
3022 gtk_box_pack_start (GTK_BOX (box2), btnColor, FALSE, FALSE, 4);
3023 gtk_box_pack_start (GTK_BOX (box2), btnFile, FALSE, FALSE, 4);
3024 gtk_box_pack_start (GTK_BOX (box1), gtk_hseparator_new (), FALSE, FALSE, 4);
3025 gtk_box_pack_start (GTK_BOX (box1), btnClose, FALSE, FALSE, 4);
3027 /* connect signals */
3028 gtk_signal_connect_object (GTK_OBJECT (btnClose), "clicked",
3029 GTK_SIGNAL_FUNC (gtk_widget_destroy),
3030 GTK_OBJECT (window));
3032 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3033 GTK_SIGNAL_FUNC (cmw_destroy_cb),NULL);
3035 gtk_signal_connect (GTK_OBJECT (btnColor), "clicked",
3036 GTK_SIGNAL_FUNC (cmw_color),window);
3037 gtk_signal_connect (GTK_OBJECT (btnFile), "clicked",
3038 GTK_SIGNAL_FUNC (cmw_file),window);
3041 gtk_widget_show_all (window);
3043 /* wait until dialog get destroyed */
3052 make_message_dialog (GtkWidget **dialog,
3053 GtkMessageType type,
3054 GtkButtonsType buttons)
3058 gtk_widget_destroy (*dialog);
3063 *dialog = gtk_message_dialog_new (NULL, 0, type, buttons,
3064 "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.)");
3066 gtk_signal_connect_object (GTK_OBJECT (*dialog),
3068 GTK_SIGNAL_FUNC (gtk_widget_destroy),
3069 GTK_OBJECT (*dialog));
3071 gtk_signal_connect (GTK_OBJECT (*dialog),
3073 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
3076 gtk_widget_show (*dialog);
3080 create_message_dialog (void)
3082 static GtkWidget *info = NULL;
3083 static GtkWidget *warning = NULL;
3084 static GtkWidget *error = NULL;
3085 static GtkWidget *question = NULL;
3087 make_message_dialog (&info, GTK_MESSAGE_INFO, GTK_BUTTONS_OK);
3088 make_message_dialog (&warning, GTK_MESSAGE_WARNING, GTK_BUTTONS_CLOSE);
3089 make_message_dialog (&error, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK_CANCEL);
3090 make_message_dialog (&question, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO);
3097 static GtkWidget *sw_parent = NULL;
3098 static GtkWidget *sw_float_parent;
3099 static guint sw_destroyed_handler = 0;
3102 scrolled_windows_delete_cb (GtkWidget *widget, GdkEventAny *event, GtkWidget *scrollwin)
3104 gtk_widget_reparent (scrollwin, sw_parent);
3106 gtk_signal_disconnect (GTK_OBJECT (sw_parent), sw_destroyed_handler);
3107 sw_float_parent = NULL;
3109 sw_destroyed_handler = 0;
3115 scrolled_windows_destroy_cb (GtkWidget *widget, GtkWidget *scrollwin)
3117 gtk_widget_destroy (sw_float_parent);
3119 sw_float_parent = NULL;
3121 sw_destroyed_handler = 0;
3125 scrolled_windows_remove (GtkWidget *widget, GtkWidget *scrollwin)
3129 gtk_widget_reparent (scrollwin, sw_parent);
3130 gtk_widget_destroy (sw_float_parent);
3132 gtk_signal_disconnect (GTK_OBJECT (sw_parent), sw_destroyed_handler);
3133 sw_float_parent = NULL;
3135 sw_destroyed_handler = 0;
3139 sw_parent = scrollwin->parent;
3140 sw_float_parent = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3141 gtk_window_set_default_size (GTK_WINDOW (sw_float_parent), 200, 200);
3143 gtk_widget_reparent (scrollwin, sw_float_parent);
3144 gtk_widget_show (sw_float_parent);
3146 sw_destroyed_handler =
3147 gtk_signal_connect (GTK_OBJECT (sw_parent), "destroy",
3148 GTK_SIGNAL_FUNC (scrolled_windows_destroy_cb), scrollwin);
3149 gtk_signal_connect (GTK_OBJECT (sw_float_parent), "delete_event",
3150 GTK_SIGNAL_FUNC (scrolled_windows_delete_cb), scrollwin);
3155 create_scrolled_windows (void)
3157 static GtkWidget *window;
3158 GtkWidget *scrolled_window;
3166 window = gtk_dialog_new ();
3168 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3169 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
3172 gtk_window_set_title (GTK_WINDOW (window), "dialog");
3173 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
3176 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
3177 gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10);
3178 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
3179 GTK_POLICY_AUTOMATIC,
3180 GTK_POLICY_AUTOMATIC);
3181 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
3182 scrolled_window, TRUE, TRUE, 0);
3183 gtk_widget_show (scrolled_window);
3185 table = gtk_table_new (20, 20, FALSE);
3186 gtk_table_set_row_spacings (GTK_TABLE (table), 10);
3187 gtk_table_set_col_spacings (GTK_TABLE (table), 10);
3188 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), table);
3189 gtk_container_set_focus_hadjustment (GTK_CONTAINER (table),
3190 gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
3191 gtk_container_set_focus_vadjustment (GTK_CONTAINER (table),
3192 gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
3193 gtk_widget_show (table);
3195 for (i = 0; i < 20; i++)
3196 for (j = 0; j < 20; j++)
3198 sprintf (buffer, "button (%d,%d)\n", i, j);
3199 button = gtk_toggle_button_new_with_label (buffer);
3200 gtk_table_attach_defaults (GTK_TABLE (table), button,
3202 gtk_widget_show (button);
3206 button = gtk_button_new_with_label ("Close");
3207 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
3208 GTK_SIGNAL_FUNC(gtk_widget_destroy),
3209 GTK_OBJECT (window));
3210 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
3211 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
3212 button, TRUE, TRUE, 0);
3213 gtk_widget_grab_default (button);
3214 gtk_widget_show (button);
3216 button = gtk_button_new_with_label ("Reparent Out");
3217 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3218 GTK_SIGNAL_FUNC(scrolled_windows_remove),
3220 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
3221 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
3222 button, TRUE, TRUE, 0);
3223 gtk_widget_grab_default (button);
3224 gtk_widget_show (button);
3226 gtk_window_set_default_size (GTK_WINDOW (window), 300, 300);
3229 if (!GTK_WIDGET_VISIBLE (window))
3230 gtk_widget_show (window);
3232 gtk_widget_destroy (window);
3240 entry_toggle_editable (GtkWidget *checkbutton,
3243 gtk_entry_set_editable(GTK_ENTRY(entry),
3244 GTK_TOGGLE_BUTTON(checkbutton)->active);
3248 entry_toggle_sensitive (GtkWidget *checkbutton,
3251 gtk_widget_set_sensitive (entry, GTK_TOGGLE_BUTTON(checkbutton)->active);
3255 entry_toggle_visibility (GtkWidget *checkbutton,
3258 gtk_entry_set_visibility(GTK_ENTRY(entry),
3259 GTK_TOGGLE_BUTTON(checkbutton)->active);
3265 static GtkWidget *window = NULL;
3268 GtkWidget *editable_check;
3269 GtkWidget *sensitive_check;
3270 GtkWidget *entry, *cb;
3272 GtkWidget *separator;
3273 GList *cbitems = NULL;
3277 cbitems = g_list_append(cbitems, "item0");
3278 cbitems = g_list_append(cbitems, "item1 item1");
3279 cbitems = g_list_append(cbitems, "item2 item2 item2");
3280 cbitems = g_list_append(cbitems, "item3 item3 item3 item3");
3281 cbitems = g_list_append(cbitems, "item4 item4 item4 item4 item4");
3282 cbitems = g_list_append(cbitems, "item5 item5 item5 item5 item5 item5");
3283 cbitems = g_list_append(cbitems, "item6 item6 item6 item6 item6");
3284 cbitems = g_list_append(cbitems, "item7 item7 item7 item7");
3285 cbitems = g_list_append(cbitems, "item8 item8 item8");
3286 cbitems = g_list_append(cbitems, "item9 item9");
3288 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3290 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3291 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
3294 gtk_window_set_title (GTK_WINDOW (window), "entry");
3295 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
3298 box1 = gtk_vbox_new (FALSE, 0);
3299 gtk_container_add (GTK_CONTAINER (window), box1);
3300 gtk_widget_show (box1);
3303 box2 = gtk_vbox_new (FALSE, 10);
3304 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
3305 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
3306 gtk_widget_show (box2);
3308 entry = gtk_entry_new ();
3309 gtk_entry_set_text (GTK_ENTRY (entry), "hello world السلام عليكم");
3310 gtk_editable_select_region (GTK_EDITABLE (entry), 0, 5);
3311 gtk_box_pack_start (GTK_BOX (box2), entry, TRUE, TRUE, 0);
3312 gtk_widget_show (entry);
3314 cb = gtk_combo_new ();
3315 gtk_combo_set_popdown_strings (GTK_COMBO (cb), cbitems);
3316 gtk_entry_set_text (GTK_ENTRY (GTK_COMBO(cb)->entry), "hello world");
3317 gtk_editable_select_region (GTK_EDITABLE (GTK_COMBO(cb)->entry),
3319 gtk_box_pack_start (GTK_BOX (box2), cb, TRUE, TRUE, 0);
3320 gtk_widget_show (cb);
3322 editable_check = gtk_check_button_new_with_label("Editable");
3323 gtk_box_pack_start (GTK_BOX (box2), editable_check, FALSE, TRUE, 0);
3324 gtk_signal_connect (GTK_OBJECT(editable_check), "toggled",
3325 GTK_SIGNAL_FUNC(entry_toggle_editable), entry);
3326 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(editable_check), TRUE);
3327 gtk_widget_show (editable_check);
3329 editable_check = gtk_check_button_new_with_label("Visible");
3330 gtk_box_pack_start (GTK_BOX (box2), editable_check, FALSE, TRUE, 0);
3331 gtk_signal_connect (GTK_OBJECT(editable_check), "toggled",
3332 GTK_SIGNAL_FUNC(entry_toggle_visibility), entry);
3333 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(editable_check), TRUE);
3334 gtk_widget_show (editable_check);
3336 sensitive_check = gtk_check_button_new_with_label("Sensitive");
3337 gtk_box_pack_start (GTK_BOX (box2), sensitive_check, FALSE, TRUE, 0);
3338 gtk_signal_connect (GTK_OBJECT(sensitive_check), "toggled",
3339 GTK_SIGNAL_FUNC(entry_toggle_sensitive), entry);
3340 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(sensitive_check), TRUE);
3341 gtk_widget_show (sensitive_check);
3343 separator = gtk_hseparator_new ();
3344 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
3345 gtk_widget_show (separator);
3348 box2 = gtk_vbox_new (FALSE, 10);
3349 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
3350 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
3351 gtk_widget_show (box2);
3354 button = gtk_button_new_with_label ("close");
3355 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
3356 GTK_SIGNAL_FUNC(gtk_widget_destroy),
3357 GTK_OBJECT (window));
3358 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
3359 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
3360 gtk_widget_grab_default (button);
3361 gtk_widget_show (button);
3364 if (!GTK_WIDGET_VISIBLE (window))
3365 gtk_widget_show (window);
3367 gtk_widget_destroy (window);
3374 static GtkWidget *spinner1;
3377 toggle_snap (GtkWidget *widget, GtkSpinButton *spin)
3379 gtk_spin_button_set_snap_to_ticks (spin, GTK_TOGGLE_BUTTON (widget)->active);
3383 toggle_numeric (GtkWidget *widget, GtkSpinButton *spin)
3385 gtk_spin_button_set_numeric (spin, GTK_TOGGLE_BUTTON (widget)->active);
3389 change_digits (GtkWidget *widget, GtkSpinButton *spin)
3391 gtk_spin_button_set_digits (GTK_SPIN_BUTTON (spinner1),
3392 gtk_spin_button_get_value_as_int (spin));
3396 get_value (GtkWidget *widget, gpointer data)
3400 GtkSpinButton *spin;
3402 spin = GTK_SPIN_BUTTON (spinner1);
3403 label = GTK_LABEL (gtk_object_get_user_data (GTK_OBJECT (widget)));
3404 if (GPOINTER_TO_INT (data) == 1)
3405 sprintf (buf, "%d", gtk_spin_button_get_value_as_int (spin));
3407 sprintf (buf, "%0.*f", spin->digits,
3408 gtk_spin_button_get_value_as_float (spin));
3409 gtk_label_set_text (label, buf);
3413 spin_button_time_output_func (GtkSpinButton *spin_button)
3415 static gchar buf[6];
3419 hours = spin_button->adjustment->value / 60.0;
3420 minutes = (fabs(floor (hours) - hours) < 1e-5) ? 0.0 : 30;
3421 sprintf (buf, "%02.0f:%02.0f", floor (hours), minutes);
3422 if (strcmp (buf, gtk_entry_get_text (GTK_ENTRY (spin_button))))
3423 gtk_entry_set_text (GTK_ENTRY (spin_button), buf);
3428 spin_button_month_input_func (GtkSpinButton *spin_button,
3432 static gchar *month[12] = { "January", "February", "March", "April",
3433 "May", "June", "July", "August",
3434 "September", "October", "November", "December" };
3436 gboolean found = FALSE;
3438 for (i = 1; i <= 12; i++)
3440 tmp1 = g_strdup (month[i-1]);
3442 tmp2 = g_strdup (gtk_entry_get_text (GTK_ENTRY (spin_button)));
3444 if (strstr (tmp1, tmp2) == tmp1)
3454 return GTK_INPUT_ERROR;
3456 *new_val = (gfloat) i;
3461 spin_button_month_output_func (GtkSpinButton *spin_button)
3464 static gchar *month[12] = { "January", "February", "March", "April",
3465 "May", "June", "July", "August", "September",
3466 "October", "November", "December" };
3468 for (i = 1; i <= 12; i++)
3469 if (fabs (spin_button->adjustment->value - (double)i) < 1e-5)
3471 if (strcmp (month[i-1], gtk_entry_get_text (GTK_ENTRY (spin_button))))
3472 gtk_entry_set_text (GTK_ENTRY (spin_button), month[i-1]);
3478 spin_button_hex_input_func (GtkSpinButton *spin_button,
3485 buf = gtk_entry_get_text (GTK_ENTRY (spin_button));
3486 res = (gfloat)(strtol(buf, &err, 16));
3489 return GTK_INPUT_ERROR;
3495 spin_button_hex_output_func (GtkSpinButton *spin_button)
3497 static gchar buf[7];
3500 val = (gint) spin_button->adjustment->value;
3501 if (fabs (val) < 1e-5)
3502 sprintf (buf, "0x00");
3504 sprintf (buf, "0x%.2X", val);
3505 if (strcmp (buf, gtk_entry_get_text (GTK_ENTRY (spin_button))))
3506 gtk_entry_set_text (GTK_ENTRY (spin_button), buf);
3513 static GtkWidget *window = NULL;
3516 GtkWidget *main_vbox;
3519 GtkWidget *spinner2;
3523 GtkWidget *val_label;
3528 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3530 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3531 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
3534 gtk_window_set_title (GTK_WINDOW (window), "GtkSpinButton");
3536 main_vbox = gtk_vbox_new (FALSE, 5);
3537 gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 10);
3538 gtk_container_add (GTK_CONTAINER (window), main_vbox);
3540 frame = gtk_frame_new ("Not accelerated");
3541 gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0);
3543 vbox = gtk_vbox_new (FALSE, 0);
3544 gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
3545 gtk_container_add (GTK_CONTAINER (frame), vbox);
3547 /* Time, month, hex spinners */
3549 hbox = gtk_hbox_new (FALSE, 0);
3550 gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 5);
3552 vbox2 = gtk_vbox_new (FALSE, 0);
3553 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
3555 label = gtk_label_new ("Time :");
3556 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
3557 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
3559 adj = (GtkAdjustment *) gtk_adjustment_new (0, 0, 1410, 30, 60, 0);
3560 spinner = gtk_spin_button_new (adj, 0, 0);
3561 gtk_editable_set_editable (GTK_EDITABLE (spinner), FALSE);
3562 gtk_signal_connect (GTK_OBJECT (spinner),
3564 GTK_SIGNAL_FUNC (spin_button_time_output_func),
3566 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
3567 gtk_widget_set_usize (spinner, 55, -1);
3568 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
3570 vbox2 = gtk_vbox_new (FALSE, 0);
3571 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
3573 label = gtk_label_new ("Month :");
3574 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
3575 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
3577 adj = (GtkAdjustment *) gtk_adjustment_new (1.0, 1.0, 12.0, 1.0,
3579 spinner = gtk_spin_button_new (adj, 0, 0);
3580 gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (spinner),
3581 GTK_UPDATE_IF_VALID);
3582 gtk_signal_connect (GTK_OBJECT (spinner),
3584 GTK_SIGNAL_FUNC (spin_button_month_input_func),
3586 gtk_signal_connect (GTK_OBJECT (spinner),
3588 GTK_SIGNAL_FUNC (spin_button_month_output_func),
3590 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
3591 gtk_widget_set_usize (spinner, 85, -1);
3592 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
3594 vbox2 = gtk_vbox_new (FALSE, 0);
3595 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
3597 label = gtk_label_new ("Hex :");
3598 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
3599 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
3601 adj = (GtkAdjustment *) gtk_adjustment_new (0, 0, 255, 1, 16, 0);
3602 spinner = gtk_spin_button_new (adj, 0, 0);
3603 gtk_editable_set_editable (GTK_EDITABLE (spinner), TRUE);
3604 gtk_signal_connect (GTK_OBJECT (spinner),
3606 GTK_SIGNAL_FUNC (spin_button_hex_input_func),
3608 gtk_signal_connect (GTK_OBJECT (spinner),
3610 GTK_SIGNAL_FUNC (spin_button_hex_output_func),
3612 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
3613 gtk_widget_set_usize (spinner, 55, 0);
3614 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
3616 frame = gtk_frame_new ("Accelerated");
3617 gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0);
3619 vbox = gtk_vbox_new (FALSE, 0);
3620 gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
3621 gtk_container_add (GTK_CONTAINER (frame), vbox);
3623 hbox = gtk_hbox_new (FALSE, 0);
3624 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
3626 vbox2 = gtk_vbox_new (FALSE, 0);
3627 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
3629 label = gtk_label_new ("Value :");
3630 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
3631 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
3633 adj = (GtkAdjustment *) gtk_adjustment_new (0.0, -10000.0, 10000.0,
3635 spinner1 = gtk_spin_button_new (adj, 1.0, 2);
3636 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner1), TRUE);
3637 gtk_widget_set_usize (spinner1, 100, 0);
3638 gtk_box_pack_start (GTK_BOX (vbox2), spinner1, FALSE, TRUE, 0);
3640 vbox2 = gtk_vbox_new (FALSE, 0);
3641 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
3643 label = gtk_label_new ("Digits :");
3644 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
3645 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
3647 adj = (GtkAdjustment *) gtk_adjustment_new (2, 1, 5, 1, 1, 0);
3648 spinner2 = gtk_spin_button_new (adj, 0.0, 0);
3649 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
3650 GTK_SIGNAL_FUNC (change_digits),
3651 (gpointer) spinner2);
3652 gtk_box_pack_start (GTK_BOX (vbox2), spinner2, FALSE, TRUE, 0);
3654 hbox = gtk_hbox_new (FALSE, 0);
3655 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
3657 button = gtk_check_button_new_with_label ("Snap to 0.5-ticks");
3658 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3659 GTK_SIGNAL_FUNC (toggle_snap),
3661 gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
3662 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
3664 button = gtk_check_button_new_with_label ("Numeric only input mode");
3665 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3666 GTK_SIGNAL_FUNC (toggle_numeric),
3668 gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
3669 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
3671 val_label = gtk_label_new ("");
3673 hbox = gtk_hbox_new (FALSE, 0);
3674 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
3676 button = gtk_button_new_with_label ("Value as Int");
3677 gtk_object_set_user_data (GTK_OBJECT (button), val_label);
3678 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3679 GTK_SIGNAL_FUNC (get_value),
3680 GINT_TO_POINTER (1));
3681 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
3683 button = gtk_button_new_with_label ("Value as Float");
3684 gtk_object_set_user_data (GTK_OBJECT (button), val_label);
3685 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3686 GTK_SIGNAL_FUNC (get_value),
3687 GINT_TO_POINTER (2));
3688 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
3690 gtk_box_pack_start (GTK_BOX (vbox), val_label, TRUE, TRUE, 0);
3691 gtk_label_set_text (GTK_LABEL (val_label), "0");
3693 hbox = gtk_hbox_new (FALSE, 0);
3694 gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
3696 button = gtk_button_new_with_label ("Close");
3697 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
3698 GTK_SIGNAL_FUNC (gtk_widget_destroy),
3699 GTK_OBJECT (window));
3700 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
3703 if (!GTK_WIDGET_VISIBLE (window))
3704 gtk_widget_show_all (window);
3706 gtk_widget_destroy (window);
3715 cursor_expose_event (GtkWidget *widget,
3719 GtkDrawingArea *darea;
3720 GdkDrawable *drawable;
3727 g_return_val_if_fail (widget != NULL, TRUE);
3728 g_return_val_if_fail (GTK_IS_DRAWING_AREA (widget), TRUE);
3730 darea = GTK_DRAWING_AREA (widget);
3731 drawable = widget->window;
3732 white_gc = widget->style->white_gc;
3733 gray_gc = widget->style->bg_gc[GTK_STATE_NORMAL];
3734 black_gc = widget->style->black_gc;
3735 max_width = widget->allocation.width;
3736 max_height = widget->allocation.height;
3738 gdk_draw_rectangle (drawable, white_gc,
3745 gdk_draw_rectangle (drawable, black_gc,
3752 gdk_draw_rectangle (drawable, gray_gc,
3763 set_cursor (GtkWidget *spinner,
3771 c = CLAMP (gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spinner)), 0, 152);
3774 label = gtk_object_get_user_data (GTK_OBJECT (spinner));
3775 vals = gtk_type_enum_get_values (GTK_TYPE_GDK_CURSOR_TYPE);
3776 while (vals && vals->value != c)
3779 gtk_label_set_text (GTK_LABEL (label), vals->value_nick);
3781 gtk_label_set_text (GTK_LABEL (label), "<unknown>");
3783 cursor = gdk_cursor_new (c);
3784 gdk_window_set_cursor (widget->window, cursor);
3785 gdk_cursor_unref (cursor);
3789 cursor_event (GtkWidget *widget,
3791 GtkSpinButton *spinner)
3793 if ((event->type == GDK_BUTTON_PRESS) &&
3794 ((event->button.button == 1) ||
3795 (event->button.button == 3)))
3797 gtk_spin_button_spin (spinner, event->button.button == 1 ?
3798 GTK_SPIN_STEP_FORWARD : GTK_SPIN_STEP_BACKWARD, 0);
3806 create_cursors (void)
3808 static GtkWidget *window = NULL;
3811 GtkWidget *main_vbox;
3822 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3824 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3825 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
3828 gtk_window_set_title (GTK_WINDOW (window), "Cursors");
3830 main_vbox = gtk_vbox_new (FALSE, 5);
3831 gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 0);
3832 gtk_container_add (GTK_CONTAINER (window), main_vbox);
3835 gtk_widget_new (gtk_vbox_get_type (),
3836 "GtkBox::homogeneous", FALSE,
3837 "GtkBox::spacing", 5,
3838 "GtkContainer::border_width", 10,
3839 "GtkWidget::parent", main_vbox,
3840 "GtkWidget::visible", TRUE,
3843 hbox = gtk_hbox_new (FALSE, 0);
3844 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
3845 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
3847 label = gtk_label_new ("Cursor Value : ");
3848 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
3849 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
3851 adj = (GtkAdjustment *) gtk_adjustment_new (0,
3855 spinner = gtk_spin_button_new (adj, 0, 0);
3856 gtk_box_pack_start (GTK_BOX (hbox), spinner, TRUE, TRUE, 0);
3859 gtk_widget_new (gtk_frame_get_type (),
3860 "GtkFrame::shadow", GTK_SHADOW_ETCHED_IN,
3861 "GtkFrame::label_xalign", 0.5,
3862 "GtkFrame::label", "Cursor Area",
3863 "GtkContainer::border_width", 10,
3864 "GtkWidget::parent", vbox,
3865 "GtkWidget::visible", TRUE,
3868 darea = gtk_drawing_area_new ();
3869 gtk_widget_set_usize (darea, 80, 80);
3870 gtk_container_add (GTK_CONTAINER (frame), darea);
3871 gtk_signal_connect (GTK_OBJECT (darea),
3873 GTK_SIGNAL_FUNC (cursor_expose_event),
3875 gtk_widget_set_events (darea, GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK);
3876 gtk_signal_connect (GTK_OBJECT (darea),
3877 "button_press_event",
3878 GTK_SIGNAL_FUNC (cursor_event),
3880 gtk_widget_show (darea);
3882 gtk_signal_connect (GTK_OBJECT (spinner), "changed",
3883 GTK_SIGNAL_FUNC (set_cursor),
3886 label = gtk_widget_new (GTK_TYPE_LABEL,
3891 gtk_container_child_set (GTK_CONTAINER (vbox), label,
3894 gtk_object_set_user_data (GTK_OBJECT (spinner), label);
3897 gtk_widget_new (gtk_hseparator_get_type (),
3898 "GtkWidget::visible", TRUE,
3900 gtk_box_pack_start (GTK_BOX (main_vbox), any, FALSE, TRUE, 0);
3902 hbox = gtk_hbox_new (FALSE, 0);
3903 gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
3904 gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
3906 button = gtk_button_new_with_label ("Close");
3907 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
3908 GTK_SIGNAL_FUNC (gtk_widget_destroy),
3909 GTK_OBJECT (window));
3910 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
3912 gtk_widget_show_all (window);
3914 set_cursor (spinner, darea);
3917 gtk_widget_destroy (window);
3925 list_add (GtkWidget *widget,
3930 GtkWidget *list_item;
3931 GtkContainer *container;
3933 container = GTK_CONTAINER (list);
3935 sprintf (buffer, "added item %d", i++);
3936 list_item = gtk_list_item_new_with_label (buffer);
3937 gtk_widget_show (list_item);
3939 gtk_container_add (container, list_item);
3943 list_remove (GtkWidget *widget,
3946 GList *clear_list = NULL;
3947 GList *sel_row = NULL;
3950 if (list->selection_mode == GTK_SELECTION_EXTENDED)
3954 item = GTK_CONTAINER (list)->focus_child;
3955 if (!item && list->selection)
3956 item = list->selection->data;
3960 work = g_list_find (list->children, item);
3961 for (sel_row = work; sel_row; sel_row = sel_row->next)
3962 if (GTK_WIDGET (sel_row->data)->state != GTK_STATE_SELECTED)
3967 for (sel_row = work; sel_row; sel_row = sel_row->prev)
3968 if (GTK_WIDGET (sel_row->data)->state != GTK_STATE_SELECTED)
3974 for (work = list->selection; work; work = work->next)
3975 clear_list = g_list_prepend (clear_list, work->data);
3977 clear_list = g_list_reverse (clear_list);
3978 gtk_list_remove_items (GTK_LIST (list), clear_list);
3979 g_list_free (clear_list);
3981 if (list->selection_mode == GTK_SELECTION_EXTENDED && sel_row)
3982 gtk_list_select_child (list, GTK_WIDGET(sel_row->data));
3986 list_clear (GtkWidget *widget,
3989 gtk_list_clear_items (GTK_LIST (list), 0, -1);
3992 #define RADIOMENUTOGGLED(_rmi_, __i) { \
3995 __g = gtk_radio_menu_item_group(_rmi_); \
3996 while( __g && !((GtkCheckMenuItem *)(__g->data))->active) { \
4002 static GtkWidget *list_omenu;
4005 list_toggle_sel_mode (GtkWidget *widget, GtkList *list)
4009 if (!GTK_WIDGET_MAPPED (widget))
4012 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
4013 (((GtkOptionMenu *)list_omenu)->menu_item), i);
4015 gtk_list_set_selection_mode (list, (GtkSelectionMode) (3-i));
4021 static GtkWidget *window = NULL;
4023 static OptionMenuItem items[] =
4025 { "Single", list_toggle_sel_mode },
4026 { "Browse", list_toggle_sel_mode },
4027 { "Multiple", list_toggle_sel_mode },
4028 { "Extended", list_toggle_sel_mode }
4037 GtkWidget *scrolled_win;
4040 GtkWidget *separator;
4043 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
4045 gtk_signal_connect (GTK_OBJECT (window), "destroy",
4046 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
4049 gtk_window_set_title (GTK_WINDOW (window), "list");
4050 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
4052 vbox = gtk_vbox_new (FALSE, 0);
4053 gtk_container_add (GTK_CONTAINER (window), vbox);
4055 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
4056 gtk_container_set_border_width (GTK_CONTAINER (scrolled_win), 5);
4057 gtk_widget_set_usize (scrolled_win, -1, 300);
4058 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
4059 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
4060 GTK_POLICY_AUTOMATIC,
4061 GTK_POLICY_AUTOMATIC);
4063 list = gtk_list_new ();
4064 gtk_list_set_selection_mode (GTK_LIST (list), GTK_SELECTION_EXTENDED);
4065 gtk_scrolled_window_add_with_viewport
4066 (GTK_SCROLLED_WINDOW (scrolled_win), list);
4067 gtk_container_set_focus_vadjustment
4068 (GTK_CONTAINER (list),
4069 gtk_scrolled_window_get_vadjustment
4070 (GTK_SCROLLED_WINDOW (scrolled_win)));
4071 gtk_container_set_focus_hadjustment
4072 (GTK_CONTAINER (list),
4073 gtk_scrolled_window_get_hadjustment
4074 (GTK_SCROLLED_WINDOW (scrolled_win)));
4076 if ((infile = fopen("gtkenums.h", "r")))
4082 while (fgets (buffer, 256, infile))
4084 if ((pos = strchr (buffer, '\n')))
4086 item = gtk_list_item_new_with_label (buffer);
4087 gtk_container_add (GTK_CONTAINER (list), item);
4094 hbox = gtk_hbox_new (TRUE, 5);
4095 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4096 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
4098 button = gtk_button_new_with_label ("Insert Row");
4099 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4100 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4101 GTK_SIGNAL_FUNC (list_add),
4104 button = gtk_button_new_with_label ("Clear List");
4105 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4106 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4107 GTK_SIGNAL_FUNC (list_clear),
4110 button = gtk_button_new_with_label ("Remove Selection");
4111 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4112 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4113 GTK_SIGNAL_FUNC (list_remove),
4116 cbox = gtk_hbox_new (FALSE, 0);
4117 gtk_box_pack_start (GTK_BOX (vbox), cbox, FALSE, TRUE, 0);
4119 hbox = gtk_hbox_new (FALSE, 5);
4120 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4121 gtk_box_pack_start (GTK_BOX (cbox), hbox, TRUE, FALSE, 0);
4123 label = gtk_label_new ("Selection Mode :");
4124 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
4126 list_omenu = build_option_menu (items, 4, 3, list);
4127 gtk_box_pack_start (GTK_BOX (hbox), list_omenu, FALSE, TRUE, 0);
4129 separator = gtk_hseparator_new ();
4130 gtk_box_pack_start (GTK_BOX (vbox), separator, FALSE, TRUE, 0);
4132 cbox = gtk_hbox_new (FALSE, 0);
4133 gtk_box_pack_start (GTK_BOX (vbox), cbox, FALSE, TRUE, 0);
4135 button = gtk_button_new_with_label ("close");
4136 gtk_container_set_border_width (GTK_CONTAINER (button), 10);
4137 gtk_box_pack_start (GTK_BOX (cbox), button, TRUE, TRUE, 0);
4138 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
4139 GTK_SIGNAL_FUNC(gtk_widget_destroy),
4140 GTK_OBJECT (window));
4142 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
4143 gtk_widget_grab_default (button);
4146 if (!GTK_WIDGET_VISIBLE (window))
4147 gtk_widget_show_all (window);
4149 gtk_widget_destroy (window);
4156 static char * book_open_xpm[] = {
4179 static char * book_closed_xpm[] = {
4204 static char * mini_page_xpm[] = {
4227 static char * gtk_mini_xpm[] = {
4267 #define TESTGTK_CLIST_COLUMNS 12
4268 static gint clist_rows = 0;
4269 static GtkWidget *clist_omenu;
4272 add1000_clist (GtkWidget *widget, gpointer data)
4275 char text[TESTGTK_CLIST_COLUMNS][50];
4276 char *texts[TESTGTK_CLIST_COLUMNS];
4281 clist = GTK_CLIST (data);
4283 pixmap = gdk_pixmap_create_from_xpm_d (clist->clist_window,
4285 >K_WIDGET (data)->style->white,
4288 for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++)
4291 sprintf (text[i], "Column %d", i);
4295 sprintf (text[1], "Right");
4296 sprintf (text[2], "Center");
4298 gtk_clist_freeze (GTK_CLIST (data));
4299 for (i = 0; i < 1000; i++)
4301 sprintf (text[0], "CListRow %d", rand() % 10000);
4302 row = gtk_clist_append (clist, texts);
4303 gtk_clist_set_pixtext (clist, row, 3, "gtk+", 5, pixmap, mask);
4306 gtk_clist_thaw (GTK_CLIST (data));
4308 gdk_pixmap_unref (pixmap);
4309 gdk_bitmap_unref (mask);
4313 add10000_clist (GtkWidget *widget, gpointer data)
4316 char text[TESTGTK_CLIST_COLUMNS][50];
4317 char *texts[TESTGTK_CLIST_COLUMNS];
4319 for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++)
4322 sprintf (text[i], "Column %d", i);
4325 sprintf (text[1], "Right");
4326 sprintf (text[2], "Center");
4328 gtk_clist_freeze (GTK_CLIST (data));
4329 for (i = 0; i < 10000; i++)
4331 sprintf (text[0], "CListRow %d", rand() % 10000);
4332 gtk_clist_append (GTK_CLIST (data), texts);
4334 gtk_clist_thaw (GTK_CLIST (data));
4338 clear_clist (GtkWidget *widget, gpointer data)
4340 gtk_clist_clear (GTK_CLIST (data));
4344 void clist_remove_selection (GtkWidget *widget, GtkCList *clist)
4346 gtk_clist_freeze (clist);
4348 while (clist->selection)
4353 row = GPOINTER_TO_INT (clist->selection->data);
4355 gtk_clist_remove (clist, row);
4357 if (clist->selection_mode == GTK_SELECTION_BROWSE)
4361 if (clist->selection_mode == GTK_SELECTION_EXTENDED && !clist->selection &&
4362 clist->focus_row >= 0)
4363 gtk_clist_select_row (clist, clist->focus_row, -1);
4365 gtk_clist_thaw (clist);
4368 void toggle_title_buttons (GtkWidget *widget, GtkCList *clist)
4370 if (GTK_TOGGLE_BUTTON (widget)->active)
4371 gtk_clist_column_titles_show (clist);
4373 gtk_clist_column_titles_hide (clist);
4376 void toggle_reorderable (GtkWidget *widget, GtkCList *clist)
4378 gtk_clist_set_reorderable (clist, GTK_TOGGLE_BUTTON (widget)->active);
4382 insert_row_clist (GtkWidget *widget, gpointer data)
4384 static char *text[] =
4386 "This", "is an", "inserted", "row.",
4387 "This", "is an", "inserted", "row.",
4388 "This", "is an", "inserted", "row."
4391 static GtkStyle *style1 = NULL;
4392 static GtkStyle *style2 = NULL;
4393 static GtkStyle *style3 = NULL;
4396 if (GTK_CLIST (data)->focus_row >= 0)
4397 row = gtk_clist_insert (GTK_CLIST (data), GTK_CLIST (data)->focus_row,
4400 row = gtk_clist_prepend (GTK_CLIST (data), text);
4414 style1 = gtk_style_copy (GTK_WIDGET (data)->style);
4415 style1->base[GTK_STATE_NORMAL] = col1;
4416 style1->base[GTK_STATE_SELECTED] = col2;
4418 style2 = gtk_style_copy (GTK_WIDGET (data)->style);
4419 style2->fg[GTK_STATE_NORMAL] = col1;
4420 style2->fg[GTK_STATE_SELECTED] = col2;
4422 style3 = gtk_style_copy (GTK_WIDGET (data)->style);
4423 style3->fg[GTK_STATE_NORMAL] = col1;
4424 style3->base[GTK_STATE_NORMAL] = col2;
4425 pango_font_description_free (style3->font_desc);
4426 style3->font_desc = pango_font_description_from_string ("courier 12");
4429 gtk_clist_set_cell_style (GTK_CLIST (data), row, 3, style1);
4430 gtk_clist_set_cell_style (GTK_CLIST (data), row, 4, style2);
4431 gtk_clist_set_cell_style (GTK_CLIST (data), row, 0, style3);
4437 clist_warning_test (GtkWidget *button,
4441 static gboolean add_remove = FALSE;
4443 add_remove = !add_remove;
4445 child = gtk_label_new ("Test");
4446 gtk_widget_ref (child);
4447 gtk_object_sink (GTK_OBJECT (child));
4450 gtk_container_add (GTK_CONTAINER (clist), child);
4453 child->parent = clist;
4454 gtk_container_remove (GTK_CONTAINER (clist), child);
4455 child->parent = NULL;
4458 gtk_widget_destroy (child);
4459 gtk_widget_unref (child);
4463 undo_selection (GtkWidget *button, GtkCList *clist)
4465 gtk_clist_undo_selection (clist);
4469 clist_toggle_sel_mode (GtkWidget *widget, GtkCList *clist)
4473 if (!GTK_WIDGET_MAPPED (widget))
4476 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
4477 (((GtkOptionMenu *)clist_omenu)->menu_item), i);
4479 gtk_clist_set_selection_mode (clist, (GtkSelectionMode) (3-i));
4483 clist_click_column (GtkCList *clist, gint column, gpointer data)
4486 gtk_clist_set_column_visibility (clist, column, FALSE);
4487 else if (column == clist->sort_column)
4489 if (clist->sort_type == GTK_SORT_ASCENDING)
4490 clist->sort_type = GTK_SORT_DESCENDING;
4492 clist->sort_type = GTK_SORT_ASCENDING;
4495 gtk_clist_set_sort_column (clist, column);
4497 gtk_clist_sort (clist);
4504 static GtkWidget *window = NULL;
4506 static char *titles[] =
4508 "auto resize", "not resizeable", "max width 100", "min width 50",
4509 "hide column", "Title 5", "Title 6", "Title 7",
4510 "Title 8", "Title 9", "Title 10", "Title 11"
4513 static OptionMenuItem items[] =
4515 { "Single", clist_toggle_sel_mode },
4516 { "Browse", clist_toggle_sel_mode },
4517 { "Multiple", clist_toggle_sel_mode },
4518 { "Extended", clist_toggle_sel_mode }
4521 char text[TESTGTK_CLIST_COLUMNS][50];
4522 char *texts[TESTGTK_CLIST_COLUMNS];
4528 GtkWidget *separator;
4529 GtkWidget *scrolled_win;
4532 GtkWidget *undo_button;
4542 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
4544 gtk_signal_connect (GTK_OBJECT (window), "destroy",
4545 GTK_SIGNAL_FUNC (gtk_widget_destroyed), &window);
4547 gtk_window_set_title (GTK_WINDOW (window), "clist");
4548 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
4550 vbox = gtk_vbox_new (FALSE, 0);
4551 gtk_container_add (GTK_CONTAINER (window), vbox);
4553 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
4554 gtk_container_set_border_width (GTK_CONTAINER (scrolled_win), 5);
4555 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
4556 GTK_POLICY_AUTOMATIC,
4557 GTK_POLICY_AUTOMATIC);
4559 /* create GtkCList here so we have a pointer to throw at the
4560 * button callbacks -- more is done with it later */
4561 clist = gtk_clist_new_with_titles (TESTGTK_CLIST_COLUMNS, titles);
4562 gtk_container_add (GTK_CONTAINER (scrolled_win), clist);
4563 gtk_signal_connect (GTK_OBJECT (clist), "click_column",
4564 (GtkSignalFunc) clist_click_column, NULL);
4566 /* control buttons */
4567 hbox = gtk_hbox_new (FALSE, 5);
4568 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4569 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
4571 button = gtk_button_new_with_label ("Insert Row");
4572 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4573 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4574 (GtkSignalFunc) insert_row_clist, (gpointer) clist);
4576 button = gtk_button_new_with_label ("Add 1,000 Rows With Pixmaps");
4577 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4578 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4579 (GtkSignalFunc) add1000_clist, (gpointer) clist);
4581 button = gtk_button_new_with_label ("Add 10,000 Rows");
4582 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4583 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4584 (GtkSignalFunc) add10000_clist, (gpointer) clist);
4586 /* second layer of buttons */
4587 hbox = gtk_hbox_new (FALSE, 5);
4588 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4589 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
4591 button = gtk_button_new_with_label ("Clear List");
4592 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4593 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4594 (GtkSignalFunc) clear_clist, (gpointer) clist);
4596 button = gtk_button_new_with_label ("Remove Selection");
4597 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4598 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4599 (GtkSignalFunc) clist_remove_selection,
4602 undo_button = gtk_button_new_with_label ("Undo Selection");
4603 gtk_box_pack_start (GTK_BOX (hbox), undo_button, TRUE, TRUE, 0);
4604 gtk_signal_connect (GTK_OBJECT (undo_button), "clicked",
4605 (GtkSignalFunc) undo_selection, (gpointer) clist);
4607 button = gtk_button_new_with_label ("Warning Test");
4608 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4609 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4610 (GtkSignalFunc) clist_warning_test,(gpointer) clist);
4612 /* third layer of buttons */
4613 hbox = gtk_hbox_new (FALSE, 5);
4614 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4615 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
4617 check = gtk_check_button_new_with_label ("Show Title Buttons");
4618 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
4619 gtk_signal_connect (GTK_OBJECT (check), "clicked",
4620 GTK_SIGNAL_FUNC (toggle_title_buttons), clist);
4621 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE);
4623 check = gtk_check_button_new_with_label ("Reorderable");
4624 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
4625 gtk_signal_connect (GTK_OBJECT (check), "clicked",
4626 GTK_SIGNAL_FUNC (toggle_reorderable), clist);
4627 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE);
4629 label = gtk_label_new ("Selection Mode :");
4630 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
4632 clist_omenu = build_option_menu (items, 4, 3, clist);
4633 gtk_box_pack_start (GTK_BOX (hbox), clist_omenu, FALSE, TRUE, 0);
4636 * the rest of the clist configuration
4639 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
4640 gtk_clist_set_row_height (GTK_CLIST (clist), 18);
4641 gtk_widget_set_usize (clist, -1, 300);
4643 for (i = 1; i < TESTGTK_CLIST_COLUMNS; i++)
4644 gtk_clist_set_column_width (GTK_CLIST (clist), i, 80);
4646 gtk_clist_set_column_auto_resize (GTK_CLIST (clist), 0, TRUE);
4647 gtk_clist_set_column_resizeable (GTK_CLIST (clist), 1, FALSE);
4648 gtk_clist_set_column_max_width (GTK_CLIST (clist), 2, 100);
4649 gtk_clist_set_column_min_width (GTK_CLIST (clist), 3, 50);
4650 gtk_clist_set_selection_mode (GTK_CLIST (clist), GTK_SELECTION_EXTENDED);
4651 gtk_clist_set_column_justification (GTK_CLIST (clist), 1,
4653 gtk_clist_set_column_justification (GTK_CLIST (clist), 2,
4654 GTK_JUSTIFY_CENTER);
4656 for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++)
4659 sprintf (text[i], "Column %d", i);
4662 sprintf (text[1], "Right");
4663 sprintf (text[2], "Center");
4672 style = gtk_style_new ();
4673 style->fg[GTK_STATE_NORMAL] = col1;
4674 style->base[GTK_STATE_NORMAL] = col2;
4676 style->font_desc->size = 14 * PANGO_SCALE;
4677 style->font_desc->weight = PANGO_WEIGHT_BOLD;
4679 for (i = 0; i < 10; i++)
4681 sprintf (text[0], "CListRow %d", clist_rows++);
4682 gtk_clist_append (GTK_CLIST (clist), texts);
4687 gtk_clist_set_row_style (GTK_CLIST (clist), i, style);
4690 gtk_clist_set_cell_style (GTK_CLIST (clist), i, i % 4, style);
4695 separator = gtk_hseparator_new ();
4696 gtk_box_pack_start (GTK_BOX (vbox), separator, FALSE, TRUE, 0);
4698 hbox = gtk_hbox_new (FALSE, 0);
4699 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
4701 button = gtk_button_new_with_label ("close");
4702 gtk_container_set_border_width (GTK_CONTAINER (button), 10);
4703 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4704 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
4705 GTK_SIGNAL_FUNC(gtk_widget_destroy),
4706 GTK_OBJECT (window));
4708 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
4709 gtk_widget_grab_default (button);
4712 if (!GTK_WIDGET_VISIBLE (window))
4713 gtk_widget_show_all (window);
4717 gtk_widget_destroy (window);
4732 static gint books = 0;
4733 static gint pages = 0;
4735 static GtkWidget *book_label;
4736 static GtkWidget *page_label;
4737 static GtkWidget *sel_label;
4738 static GtkWidget *vis_label;
4739 static GtkWidget *omenu1;
4740 static GtkWidget *omenu2;
4741 static GtkWidget *omenu3;
4742 static GtkWidget *omenu4;
4743 static GtkWidget *spin1;
4744 static GtkWidget *spin2;
4745 static GtkWidget *spin3;
4746 static gint line_style;
4748 void after_press (GtkCTree *ctree, gpointer data)
4752 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->selection));
4753 gtk_label_set_text (GTK_LABEL (sel_label), buf);
4755 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->row_list));
4756 gtk_label_set_text (GTK_LABEL (vis_label), buf);
4758 sprintf (buf, "%d", books);
4759 gtk_label_set_text (GTK_LABEL (book_label), buf);
4761 sprintf (buf, "%d", pages);
4762 gtk_label_set_text (GTK_LABEL (page_label), buf);
4765 void after_move (GtkCTree *ctree, GtkCTreeNode *child, GtkCTreeNode *parent,
4766 GtkCTreeNode *sibling, gpointer data)
4772 gtk_ctree_get_node_info (ctree, child, &source,
4773 NULL, NULL, NULL, NULL, NULL, NULL, NULL);
4775 gtk_ctree_get_node_info (ctree, parent, &target1,
4776 NULL, NULL, NULL, NULL, NULL, NULL, NULL);
4778 gtk_ctree_get_node_info (ctree, sibling, &target2,
4779 NULL, NULL, NULL, NULL, NULL, NULL, NULL);
4781 g_print ("Moving \"%s\" to \"%s\" with sibling \"%s\".\n", source,
4782 (parent) ? target1 : "nil", (sibling) ? target2 : "nil");
4785 void count_items (GtkCTree *ctree, GtkCTreeNode *list)
4787 if (GTK_CTREE_ROW (list)->is_leaf)
4793 void expand_all (GtkWidget *widget, GtkCTree *ctree)
4795 gtk_ctree_expand_recursive (ctree, NULL);
4796 after_press (ctree, NULL);
4799 void collapse_all (GtkWidget *widget, GtkCTree *ctree)
4801 gtk_ctree_collapse_recursive (ctree, NULL);
4802 after_press (ctree, NULL);
4805 void select_all (GtkWidget *widget, GtkCTree *ctree)
4807 gtk_ctree_select_recursive (ctree, NULL);
4808 after_press (ctree, NULL);
4811 void change_style (GtkWidget *widget, GtkCTree *ctree)
4813 static GtkStyle *style1 = NULL;
4814 static GtkStyle *style2 = NULL;
4820 if (GTK_CLIST (ctree)->focus_row >= 0)
4821 node = GTK_CTREE_NODE
4822 (g_list_nth (GTK_CLIST (ctree)->row_list,GTK_CLIST (ctree)->focus_row));
4824 node = GTK_CTREE_NODE (GTK_CLIST (ctree)->row_list);
4838 style1 = gtk_style_new ();
4839 style1->base[GTK_STATE_NORMAL] = col1;
4840 style1->fg[GTK_STATE_SELECTED] = col2;
4842 style2 = gtk_style_new ();
4843 style2->base[GTK_STATE_SELECTED] = col2;
4844 style2->fg[GTK_STATE_NORMAL] = col1;
4845 style2->base[GTK_STATE_NORMAL] = col2;
4846 pango_font_description_free (style2->font_desc);
4847 style2->font_desc = pango_font_description_from_string ("courier 30");
4850 gtk_ctree_node_set_cell_style (ctree, node, 1, style1);
4851 gtk_ctree_node_set_cell_style (ctree, node, 0, style2);
4853 if (GTK_CTREE_ROW (node)->children)
4854 gtk_ctree_node_set_row_style (ctree, GTK_CTREE_ROW (node)->children,
4858 void unselect_all (GtkWidget *widget, GtkCTree *ctree)
4860 gtk_ctree_unselect_recursive (ctree, NULL);
4861 after_press (ctree, NULL);
4864 void remove_selection (GtkWidget *widget, GtkCTree *ctree)
4869 clist = GTK_CLIST (ctree);
4871 gtk_clist_freeze (clist);
4873 while (clist->selection)
4875 node = clist->selection->data;
4877 if (GTK_CTREE_ROW (node)->is_leaf)
4880 gtk_ctree_post_recursive (ctree, node,
4881 (GtkCTreeFunc) count_items, NULL);
4883 gtk_ctree_remove_node (ctree, node);
4885 if (clist->selection_mode == GTK_SELECTION_BROWSE)
4889 if (clist->selection_mode == GTK_SELECTION_EXTENDED && !clist->selection &&
4890 clist->focus_row >= 0)
4892 node = gtk_ctree_node_nth (ctree, clist->focus_row);
4895 gtk_ctree_select (ctree, node);
4898 gtk_clist_thaw (clist);
4899 after_press (ctree, NULL);
4902 struct _ExportStruct {
4908 typedef struct _ExportStruct ExportStruct;
4911 gnode2ctree (GtkCTree *ctree,
4914 GtkCTreeNode *cnode,
4918 GdkPixmap *pixmap_closed;
4919 GdkBitmap *mask_closed;
4920 GdkPixmap *pixmap_opened;
4921 GdkBitmap *mask_opened;
4923 if (!cnode || !gnode || (!(es = gnode->data)))
4928 pixmap_closed = pixmap3;
4929 mask_closed = mask3;
4930 pixmap_opened = NULL;
4935 pixmap_closed = pixmap1;
4936 mask_closed = mask1;
4937 pixmap_opened = pixmap2;
4938 mask_opened = mask2;
4941 gtk_ctree_set_node_info (ctree, cnode, es->tree, 2, pixmap_closed,
4942 mask_closed, pixmap_opened, mask_opened,
4943 es->is_leaf, (depth < 3));
4944 gtk_ctree_node_set_text (ctree, cnode, 1, es->info);
4952 ctree2gnode (GtkCTree *ctree,
4955 GtkCTreeNode *cnode,
4960 if (!cnode || !gnode)
4963 es = g_new (ExportStruct, 1);
4965 es->is_leaf = GTK_CTREE_ROW (cnode)->is_leaf;
4966 es->tree = GTK_CELL_PIXTEXT (GTK_CTREE_ROW (cnode)->row.cell[0])->text;
4967 es->info = GTK_CELL_PIXTEXT (GTK_CTREE_ROW (cnode)->row.cell[1])->text;
4971 void export_ctree (GtkWidget *widget, GtkCTree *ctree)
4973 char *title[] = { "Tree" , "Info" };
4974 static GtkWidget *export_window = NULL;
4975 static GtkCTree *export_ctree;
4977 GtkWidget *scrolled_win;
4985 export_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
4987 gtk_signal_connect (GTK_OBJECT (export_window), "destroy",
4988 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
4991 gtk_window_set_title (GTK_WINDOW (export_window), "exported ctree");
4992 gtk_container_set_border_width (GTK_CONTAINER (export_window), 5);
4994 vbox = gtk_vbox_new (FALSE, 0);
4995 gtk_container_add (GTK_CONTAINER (export_window), vbox);
4997 button = gtk_button_new_with_label ("Close");
4998 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, TRUE, 0);
5000 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5001 (GtkSignalFunc) gtk_widget_destroy,
5002 GTK_OBJECT(export_window));
5004 sep = gtk_hseparator_new ();
5005 gtk_box_pack_end (GTK_BOX (vbox), sep, FALSE, TRUE, 10);
5007 export_ctree = GTK_CTREE (gtk_ctree_new_with_titles (2, 0, title));
5008 gtk_ctree_set_line_style (export_ctree, GTK_CTREE_LINES_DOTTED);
5010 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
5011 gtk_container_add (GTK_CONTAINER (scrolled_win),
5012 GTK_WIDGET (export_ctree));
5013 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
5014 GTK_POLICY_AUTOMATIC,
5015 GTK_POLICY_AUTOMATIC);
5016 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
5017 gtk_clist_set_selection_mode (GTK_CLIST (export_ctree),
5018 GTK_SELECTION_EXTENDED);
5019 gtk_clist_set_column_width (GTK_CLIST (export_ctree), 0, 200);
5020 gtk_clist_set_column_width (GTK_CLIST (export_ctree), 1, 200);
5021 gtk_widget_set_usize (GTK_WIDGET (export_ctree), 300, 200);
5024 if (!GTK_WIDGET_VISIBLE (export_window))
5025 gtk_widget_show_all (export_window);
5027 gtk_clist_clear (GTK_CLIST (export_ctree));
5029 node = GTK_CTREE_NODE (g_list_nth (GTK_CLIST (ctree)->row_list,
5030 GTK_CLIST (ctree)->focus_row));
5034 gnode = gtk_ctree_export_to_gnode (ctree, NULL, NULL, node,
5038 gtk_ctree_insert_gnode (export_ctree, NULL, NULL, gnode,
5040 g_node_destroy (gnode);
5044 void change_indent (GtkWidget *widget, GtkCTree *ctree)
5046 gtk_ctree_set_indent (ctree, GTK_ADJUSTMENT (widget)->value);
5049 void change_spacing (GtkWidget *widget, GtkCTree *ctree)
5051 gtk_ctree_set_spacing (ctree, GTK_ADJUSTMENT (widget)->value);
5054 void change_row_height (GtkWidget *widget, GtkCList *clist)
5056 gtk_clist_set_row_height (clist, GTK_ADJUSTMENT (widget)->value);
5059 void set_background (GtkCTree *ctree, GtkCTreeNode *node, gpointer data)
5061 GtkStyle *style = NULL;
5066 if (ctree->line_style != GTK_CTREE_LINES_TABBED)
5068 if (!GTK_CTREE_ROW (node)->is_leaf)
5069 style = GTK_CTREE_ROW (node)->row.data;
5070 else if (GTK_CTREE_ROW (node)->parent)
5071 style = GTK_CTREE_ROW (GTK_CTREE_ROW (node)->parent)->row.data;
5074 gtk_ctree_node_set_row_style (ctree, node, style);
5077 void ctree_toggle_line_style (GtkWidget *widget, GtkCTree *ctree)
5081 if (!GTK_WIDGET_MAPPED (widget))
5084 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
5085 (((GtkOptionMenu *)omenu1)->menu_item), i);
5087 if ((ctree->line_style == GTK_CTREE_LINES_TABBED &&
5088 ((GtkCTreeLineStyle) (3 - i)) != GTK_CTREE_LINES_TABBED) ||
5089 (ctree->line_style != GTK_CTREE_LINES_TABBED &&
5090 ((GtkCTreeLineStyle) (3 - i)) == GTK_CTREE_LINES_TABBED))
5091 gtk_ctree_pre_recursive (ctree, NULL, set_background, NULL);
5092 gtk_ctree_set_line_style (ctree, 3 - i);
5096 void ctree_toggle_expander_style (GtkWidget *widget, GtkCTree *ctree)
5100 if (!GTK_WIDGET_MAPPED (widget))
5103 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
5104 (((GtkOptionMenu *)omenu2)->menu_item), i);
5106 gtk_ctree_set_expander_style (ctree, (GtkCTreeExpanderStyle) (3 - i));
5109 void ctree_toggle_justify (GtkWidget *widget, GtkCTree *ctree)
5113 if (!GTK_WIDGET_MAPPED (widget))
5116 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
5117 (((GtkOptionMenu *)omenu3)->menu_item), i);
5119 gtk_clist_set_column_justification (GTK_CLIST (ctree), ctree->tree_column,
5120 (GtkJustification) (1 - i));
5123 void ctree_toggle_sel_mode (GtkWidget *widget, GtkCTree *ctree)
5127 if (!GTK_WIDGET_MAPPED (widget))
5130 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
5131 (((GtkOptionMenu *)omenu4)->menu_item), i);
5133 gtk_clist_set_selection_mode (GTK_CLIST (ctree), (GtkSelectionMode) (3 - i));
5134 after_press (ctree, NULL);
5137 void build_recursive (GtkCTree *ctree, gint cur_depth, gint depth,
5138 gint num_books, gint num_pages, GtkCTreeNode *parent)
5143 GtkCTreeNode *sibling;
5150 for (i = num_pages + num_books; i > num_books; i--)
5153 sprintf (buf1, "Page %02d", (gint) rand() % 100);
5154 sprintf (buf2, "Item %d-%d", cur_depth, i);
5155 sibling = gtk_ctree_insert_node (ctree, parent, sibling, text, 5,
5156 pixmap3, mask3, NULL, NULL,
5159 if (parent && ctree->line_style == GTK_CTREE_LINES_TABBED)
5160 gtk_ctree_node_set_row_style (ctree, sibling,
5161 GTK_CTREE_ROW (parent)->row.style);
5164 if (cur_depth == depth)
5167 for (i = num_books; i > 0; i--)
5172 sprintf (buf1, "Book %02d", (gint) rand() % 100);
5173 sprintf (buf2, "Item %d-%d", cur_depth, i);
5174 sibling = gtk_ctree_insert_node (ctree, parent, sibling, text, 5,
5175 pixmap1, mask1, pixmap2, mask2,
5178 style = gtk_style_new ();
5179 switch (cur_depth % 3)
5182 style->base[GTK_STATE_NORMAL].red = 10000 * (cur_depth % 6);
5183 style->base[GTK_STATE_NORMAL].green = 0;
5184 style->base[GTK_STATE_NORMAL].blue = 65535 - ((i * 10000) % 65535);
5187 style->base[GTK_STATE_NORMAL].red = 10000 * (cur_depth % 6);
5188 style->base[GTK_STATE_NORMAL].green = 65535 - ((i * 10000) % 65535);
5189 style->base[GTK_STATE_NORMAL].blue = 0;
5192 style->base[GTK_STATE_NORMAL].red = 65535 - ((i * 10000) % 65535);
5193 style->base[GTK_STATE_NORMAL].green = 0;
5194 style->base[GTK_STATE_NORMAL].blue = 10000 * (cur_depth % 6);
5197 gtk_ctree_node_set_row_data_full (ctree, sibling, style,
5198 (GtkDestroyNotify) gtk_style_unref);
5200 if (ctree->line_style == GTK_CTREE_LINES_TABBED)
5201 gtk_ctree_node_set_row_style (ctree, sibling, style);
5203 build_recursive (ctree, cur_depth + 1, depth, num_books, num_pages,
5208 void rebuild_tree (GtkWidget *widget, GtkCTree *ctree)
5211 gchar label1[] = "Root";
5212 gchar label2[] = "";
5213 GtkCTreeNode *parent;
5220 d = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin1));
5221 b = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin2));
5222 p = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin3));
5224 n = ((pow (b, d) - 1) / (b - 1)) * (p + 1);
5228 g_print ("%d total items? Try less\n",n);
5232 gtk_clist_freeze (GTK_CLIST (ctree));
5233 gtk_clist_clear (GTK_CLIST (ctree));
5238 parent = gtk_ctree_insert_node (ctree, NULL, NULL, text, 5, pixmap1,
5239 mask1, pixmap2, mask2, FALSE, TRUE);
5241 style = gtk_style_new ();
5242 style->base[GTK_STATE_NORMAL].red = 0;
5243 style->base[GTK_STATE_NORMAL].green = 45000;
5244 style->base[GTK_STATE_NORMAL].blue = 55000;
5245 gtk_ctree_node_set_row_data_full (ctree, parent, style,
5246 (GtkDestroyNotify) gtk_style_unref);
5248 if (ctree->line_style == GTK_CTREE_LINES_TABBED)
5249 gtk_ctree_node_set_row_style (ctree, parent, style);
5251 build_recursive (ctree, 1, d, b, p, parent);
5252 gtk_clist_thaw (GTK_CLIST (ctree));
5253 after_press (ctree, NULL);
5257 ctree_click_column (GtkCTree *ctree, gint column, gpointer data)
5261 clist = GTK_CLIST (ctree);
5263 if (column == clist->sort_column)
5265 if (clist->sort_type == GTK_SORT_ASCENDING)
5266 clist->sort_type = GTK_SORT_DESCENDING;
5268 clist->sort_type = GTK_SORT_ASCENDING;
5271 gtk_clist_set_sort_column (clist, column);
5273 gtk_ctree_sort_recursive (ctree, NULL);
5276 void create_ctree (void)
5278 static GtkWidget *window = NULL;
5279 GtkTooltips *tooltips;
5281 GtkWidget *scrolled_win;
5293 GdkColor transparent = { 0 };
5295 char *title[] = { "Tree" , "Info" };
5298 static OptionMenuItem items1[] =
5300 { "No lines", ctree_toggle_line_style },
5301 { "Solid", ctree_toggle_line_style },
5302 { "Dotted", ctree_toggle_line_style },
5303 { "Tabbed", ctree_toggle_line_style }
5306 static OptionMenuItem items2[] =
5308 { "None", ctree_toggle_expander_style },
5309 { "Square", ctree_toggle_expander_style },
5310 { "Triangle", ctree_toggle_expander_style },
5311 { "Circular", ctree_toggle_expander_style }
5314 static OptionMenuItem items3[] =
5316 { "Left", ctree_toggle_justify },
5317 { "Right", ctree_toggle_justify }
5320 static OptionMenuItem items4[] =
5322 { "Single", ctree_toggle_sel_mode },
5323 { "Browse", ctree_toggle_sel_mode },
5324 { "Multiple", ctree_toggle_sel_mode },
5325 { "Extended", ctree_toggle_sel_mode }
5330 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5332 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5333 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
5336 gtk_window_set_title (GTK_WINDOW (window), "GtkCTree");
5337 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
5339 tooltips = gtk_tooltips_new ();
5340 gtk_object_ref (GTK_OBJECT (tooltips));
5341 gtk_object_sink (GTK_OBJECT (tooltips));
5343 gtk_object_set_data_full (GTK_OBJECT (window), "tooltips", tooltips,
5344 (GtkDestroyNotify) gtk_object_unref);
5346 vbox = gtk_vbox_new (FALSE, 0);
5347 gtk_container_add (GTK_CONTAINER (window), vbox);
5349 hbox = gtk_hbox_new (FALSE, 5);
5350 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
5351 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
5353 label = gtk_label_new ("Depth :");
5354 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
5356 adj = (GtkAdjustment *) gtk_adjustment_new (4, 1, 10, 1, 5, 0);
5357 spin1 = gtk_spin_button_new (adj, 0, 0);
5358 gtk_box_pack_start (GTK_BOX (hbox), spin1, FALSE, TRUE, 5);
5360 label = gtk_label_new ("Books :");
5361 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
5363 adj = (GtkAdjustment *) gtk_adjustment_new (3, 1, 20, 1, 5, 0);
5364 spin2 = gtk_spin_button_new (adj, 0, 0);
5365 gtk_box_pack_start (GTK_BOX (hbox), spin2, FALSE, TRUE, 5);
5367 label = gtk_label_new ("Pages :");
5368 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
5370 adj = (GtkAdjustment *) gtk_adjustment_new (5, 1, 20, 1, 5, 0);
5371 spin3 = gtk_spin_button_new (adj, 0, 0);
5372 gtk_box_pack_start (GTK_BOX (hbox), spin3, FALSE, TRUE, 5);
5374 button = gtk_button_new_with_label ("Close");
5375 gtk_box_pack_end (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5377 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5378 (GtkSignalFunc) gtk_widget_destroy,
5379 GTK_OBJECT(window));
5381 button = gtk_button_new_with_label ("Rebuild Tree");
5382 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5384 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
5385 gtk_container_set_border_width (GTK_CONTAINER (scrolled_win), 5);
5386 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
5387 GTK_POLICY_AUTOMATIC,
5389 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
5391 ctree = GTK_CTREE (gtk_ctree_new_with_titles (2, 0, title));
5392 gtk_container_add (GTK_CONTAINER (scrolled_win), GTK_WIDGET (ctree));
5394 gtk_clist_set_column_auto_resize (GTK_CLIST (ctree), 0, TRUE);
5395 gtk_clist_set_column_width (GTK_CLIST (ctree), 1, 200);
5396 gtk_clist_set_selection_mode (GTK_CLIST (ctree), GTK_SELECTION_EXTENDED);
5397 gtk_ctree_set_line_style (ctree, GTK_CTREE_LINES_DOTTED);
5398 line_style = GTK_CTREE_LINES_DOTTED;
5400 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5401 GTK_SIGNAL_FUNC (rebuild_tree), ctree);
5402 gtk_signal_connect (GTK_OBJECT (ctree), "click_column",
5403 (GtkSignalFunc) ctree_click_column, NULL);
5405 gtk_signal_connect_after (GTK_OBJECT (ctree), "button_press_event",
5406 GTK_SIGNAL_FUNC (after_press), NULL);
5407 gtk_signal_connect_after (GTK_OBJECT (ctree), "button_release_event",
5408 GTK_SIGNAL_FUNC (after_press), NULL);
5409 gtk_signal_connect_after (GTK_OBJECT (ctree), "tree_move",
5410 GTK_SIGNAL_FUNC (after_move), NULL);
5411 gtk_signal_connect_after (GTK_OBJECT (ctree), "end_selection",
5412 GTK_SIGNAL_FUNC (after_press), NULL);
5413 gtk_signal_connect_after (GTK_OBJECT (ctree), "toggle_focus_row",
5414 GTK_SIGNAL_FUNC (after_press), NULL);
5415 gtk_signal_connect_after (GTK_OBJECT (ctree), "select_all",
5416 GTK_SIGNAL_FUNC (after_press), NULL);
5417 gtk_signal_connect_after (GTK_OBJECT (ctree), "unselect_all",
5418 GTK_SIGNAL_FUNC (after_press), NULL);
5419 gtk_signal_connect_after (GTK_OBJECT (ctree), "scroll_vertical",
5420 GTK_SIGNAL_FUNC (after_press), NULL);
5422 bbox = gtk_hbox_new (FALSE, 5);
5423 gtk_container_set_border_width (GTK_CONTAINER (bbox), 5);
5424 gtk_box_pack_start (GTK_BOX (vbox), bbox, FALSE, TRUE, 0);
5426 mbox = gtk_vbox_new (TRUE, 5);
5427 gtk_box_pack_start (GTK_BOX (bbox), mbox, FALSE, TRUE, 0);
5429 label = gtk_label_new ("Row Height :");
5430 gtk_box_pack_start (GTK_BOX (mbox), label, FALSE, FALSE, 0);
5432 label = gtk_label_new ("Indent :");
5433 gtk_box_pack_start (GTK_BOX (mbox), label, FALSE, FALSE, 0);
5435 label = gtk_label_new ("Spacing :");
5436 gtk_box_pack_start (GTK_BOX (mbox), label, FALSE, FALSE, 0);
5438 mbox = gtk_vbox_new (TRUE, 5);
5439 gtk_box_pack_start (GTK_BOX (bbox), mbox, FALSE, TRUE, 0);
5441 adj = (GtkAdjustment *) gtk_adjustment_new (20, 12, 100, 1, 10, 0);
5442 spinner = gtk_spin_button_new (adj, 0, 0);
5443 gtk_box_pack_start (GTK_BOX (mbox), spinner, FALSE, FALSE, 5);
5444 gtk_tooltips_set_tip (tooltips, spinner,
5445 "Row height of list items", NULL);
5446 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
5447 GTK_SIGNAL_FUNC (change_row_height), ctree);
5448 gtk_clist_set_row_height ( GTK_CLIST (ctree), adj->value);
5450 adj = (GtkAdjustment *) gtk_adjustment_new (20, 0, 60, 1, 10, 0);
5451 spinner = gtk_spin_button_new (adj, 0, 0);
5452 gtk_box_pack_start (GTK_BOX (mbox), spinner, FALSE, FALSE, 5);
5453 gtk_tooltips_set_tip (tooltips, spinner, "Tree Indentation.", NULL);
5454 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
5455 GTK_SIGNAL_FUNC (change_indent), ctree);
5457 adj = (GtkAdjustment *) gtk_adjustment_new (5, 0, 60, 1, 10, 0);
5458 spinner = gtk_spin_button_new (adj, 0, 0);
5459 gtk_box_pack_start (GTK_BOX (mbox), spinner, FALSE, FALSE, 5);
5460 gtk_tooltips_set_tip (tooltips, spinner, "Tree Spacing.", NULL);
5461 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
5462 GTK_SIGNAL_FUNC (change_spacing), ctree);
5464 mbox = gtk_vbox_new (TRUE, 5);
5465 gtk_box_pack_start (GTK_BOX (bbox), mbox, FALSE, TRUE, 0);
5467 hbox = gtk_hbox_new (FALSE, 5);
5468 gtk_box_pack_start (GTK_BOX (mbox), hbox, FALSE, FALSE, 0);
5470 button = gtk_button_new_with_label ("Expand All");
5471 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5472 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5473 GTK_SIGNAL_FUNC (expand_all), ctree);
5475 button = gtk_button_new_with_label ("Collapse All");
5476 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5477 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5478 GTK_SIGNAL_FUNC (collapse_all), ctree);
5480 button = gtk_button_new_with_label ("Change Style");
5481 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5482 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5483 GTK_SIGNAL_FUNC (change_style), ctree);
5485 button = gtk_button_new_with_label ("Export Tree");
5486 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5487 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5488 GTK_SIGNAL_FUNC (export_ctree), ctree);
5490 hbox = gtk_hbox_new (FALSE, 5);
5491 gtk_box_pack_start (GTK_BOX (mbox), hbox, FALSE, FALSE, 0);
5493 button = gtk_button_new_with_label ("Select All");
5494 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5495 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5496 GTK_SIGNAL_FUNC (select_all), ctree);
5498 button = gtk_button_new_with_label ("Unselect All");
5499 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5500 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5501 GTK_SIGNAL_FUNC (unselect_all), ctree);
5503 button = gtk_button_new_with_label ("Remove Selection");
5504 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5505 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5506 GTK_SIGNAL_FUNC (remove_selection), ctree);
5508 check = gtk_check_button_new_with_label ("Reorderable");
5509 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
5510 gtk_tooltips_set_tip (tooltips, check,
5511 "Tree items can be reordered by dragging.", NULL);
5512 gtk_signal_connect (GTK_OBJECT (check), "clicked",
5513 GTK_SIGNAL_FUNC (toggle_reorderable), ctree);
5514 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE);
5516 hbox = gtk_hbox_new (TRUE, 5);
5517 gtk_box_pack_start (GTK_BOX (mbox), hbox, FALSE, FALSE, 0);
5519 omenu1 = build_option_menu (items1, 4, 2, ctree);
5520 gtk_box_pack_start (GTK_BOX (hbox), omenu1, FALSE, TRUE, 0);
5521 gtk_tooltips_set_tip (tooltips, omenu1, "The tree's line style.", NULL);
5523 omenu2 = build_option_menu (items2, 4, 1, ctree);
5524 gtk_box_pack_start (GTK_BOX (hbox), omenu2, FALSE, TRUE, 0);
5525 gtk_tooltips_set_tip (tooltips, omenu2, "The tree's expander style.",
5528 omenu3 = build_option_menu (items3, 2, 0, ctree);
5529 gtk_box_pack_start (GTK_BOX (hbox), omenu3, FALSE, TRUE, 0);
5530 gtk_tooltips_set_tip (tooltips, omenu3, "The tree's justification.",
5533 omenu4 = build_option_menu (items4, 4, 3, ctree);
5534 gtk_box_pack_start (GTK_BOX (hbox), omenu4, FALSE, TRUE, 0);
5535 gtk_tooltips_set_tip (tooltips, omenu4, "The list's selection mode.",
5538 gtk_widget_realize (window);
5541 pixmap1 = gdk_pixmap_create_from_xpm_d (window->window, &mask1,
5542 &transparent, book_closed_xpm);
5544 pixmap2 = gdk_pixmap_create_from_xpm_d (window->window, &mask2,
5545 &transparent, book_open_xpm);
5547 pixmap3 = gdk_pixmap_create_from_xpm_d (window->window, &mask3,
5548 &transparent, mini_page_xpm);
5550 gtk_widget_set_usize (GTK_WIDGET (ctree), 0, 300);
5552 frame = gtk_frame_new (NULL);
5553 gtk_container_set_border_width (GTK_CONTAINER (frame), 0);
5554 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_OUT);
5555 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
5557 hbox = gtk_hbox_new (TRUE, 2);
5558 gtk_container_set_border_width (GTK_CONTAINER (hbox), 2);
5559 gtk_container_add (GTK_CONTAINER (frame), hbox);
5561 frame = gtk_frame_new (NULL);
5562 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
5563 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
5565 hbox2 = gtk_hbox_new (FALSE, 0);
5566 gtk_container_set_border_width (GTK_CONTAINER (hbox2), 2);
5567 gtk_container_add (GTK_CONTAINER (frame), hbox2);
5569 label = gtk_label_new ("Books :");
5570 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
5572 sprintf (buf, "%d", books);
5573 book_label = gtk_label_new (buf);
5574 gtk_box_pack_end (GTK_BOX (hbox2), book_label, FALSE, TRUE, 5);
5576 frame = gtk_frame_new (NULL);
5577 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
5578 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
5580 hbox2 = gtk_hbox_new (FALSE, 0);
5581 gtk_container_set_border_width (GTK_CONTAINER (hbox2), 2);
5582 gtk_container_add (GTK_CONTAINER (frame), hbox2);
5584 label = gtk_label_new ("Pages :");
5585 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
5587 sprintf (buf, "%d", pages);
5588 page_label = gtk_label_new (buf);
5589 gtk_box_pack_end (GTK_BOX (hbox2), page_label, FALSE, TRUE, 5);
5591 frame = gtk_frame_new (NULL);
5592 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
5593 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
5595 hbox2 = gtk_hbox_new (FALSE, 0);
5596 gtk_container_set_border_width (GTK_CONTAINER (hbox2), 2);
5597 gtk_container_add (GTK_CONTAINER (frame), hbox2);
5599 label = gtk_label_new ("Selected :");
5600 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
5602 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->selection));
5603 sel_label = gtk_label_new (buf);
5604 gtk_box_pack_end (GTK_BOX (hbox2), sel_label, FALSE, TRUE, 5);
5606 frame = gtk_frame_new (NULL);
5607 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
5608 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
5610 hbox2 = gtk_hbox_new (FALSE, 0);
5611 gtk_container_set_border_width (GTK_CONTAINER (hbox2), 2);
5612 gtk_container_add (GTK_CONTAINER (frame), hbox2);
5614 label = gtk_label_new ("Visible :");
5615 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
5617 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->row_list));
5618 vis_label = gtk_label_new (buf);
5619 gtk_box_pack_end (GTK_BOX (hbox2), vis_label, FALSE, TRUE, 5);
5621 rebuild_tree (NULL, ctree);
5624 if (!GTK_WIDGET_VISIBLE (window))
5625 gtk_widget_show_all (window);
5627 gtk_widget_destroy (window);
5635 color_selection_ok (GtkWidget *w,
5636 GtkColorSelectionDialog *cs)
5638 GtkColorSelection *colorsel;
5641 colorsel=GTK_COLOR_SELECTION(cs->colorsel);
5643 gtk_color_selection_get_color(colorsel,color);
5644 gtk_color_selection_set_color(colorsel,color);
5648 color_selection_changed (GtkWidget *w,
5649 GtkColorSelectionDialog *cs)
5651 GtkColorSelection *colorsel;
5654 colorsel=GTK_COLOR_SELECTION(cs->colorsel);
5655 gtk_color_selection_get_color(colorsel,color);
5659 opacity_toggled_cb (GtkWidget *w,
5660 GtkColorSelectionDialog *cs)
5662 GtkColorSelection *colorsel;
5664 colorsel = GTK_COLOR_SELECTION (cs->colorsel);
5665 gtk_color_selection_set_use_opacity (colorsel,
5666 gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w)));
5670 palette_toggled_cb (GtkWidget *w,
5671 GtkColorSelectionDialog *cs)
5673 GtkColorSelection *colorsel;
5675 colorsel = GTK_COLOR_SELECTION (cs->colorsel);
5676 gtk_color_selection_set_use_palette (colorsel,
5677 gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w)));
5681 create_color_selection (void)
5683 static GtkWidget *window = NULL;
5687 GtkWidget *options_hbox;
5688 GtkWidget *check_button;
5690 window = gtk_color_selection_dialog_new ("color selection dialog");
5692 gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
5694 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5695 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5698 options_hbox = gtk_hbox_new (FALSE, 0);
5699 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), options_hbox, FALSE, FALSE, 0);
5700 gtk_container_set_border_width (GTK_CONTAINER (options_hbox), 10);
5702 check_button = gtk_check_button_new_with_label ("Show Opacity");
5703 gtk_box_pack_start (GTK_BOX (options_hbox), check_button, FALSE, FALSE, 0);
5704 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
5705 GTK_SIGNAL_FUNC (opacity_toggled_cb), window);
5707 check_button = gtk_check_button_new_with_label ("Show Palette");
5708 gtk_box_pack_end (GTK_BOX (options_hbox), check_button, FALSE, FALSE, 0);
5709 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
5710 GTK_SIGNAL_FUNC (palette_toggled_cb), window);
5712 gtk_widget_show_all (options_hbox);
5714 gtk_signal_connect (
5715 GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (window)->colorsel),
5717 GTK_SIGNAL_FUNC(color_selection_changed),
5720 gtk_signal_connect (
5721 GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (window)->ok_button),
5723 GTK_SIGNAL_FUNC(color_selection_ok),
5726 gtk_signal_connect_object (
5727 GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (window)->cancel_button),
5729 GTK_SIGNAL_FUNC(gtk_widget_destroy),
5730 GTK_OBJECT (window));
5733 if (!GTK_WIDGET_VISIBLE (window))
5734 gtk_widget_show (window);
5736 gtk_widget_destroy (window);
5744 file_selection_hide_fileops (GtkWidget *widget,
5745 GtkFileSelection *fs)
5747 gtk_file_selection_hide_fileop_buttons (fs);
5751 file_selection_ok (GtkWidget *w,
5752 GtkFileSelection *fs)
5754 g_print ("%s\n", gtk_file_selection_get_filename (fs));
5755 gtk_widget_destroy (GTK_WIDGET (fs));
5759 create_file_selection (void)
5761 static GtkWidget *window = NULL;
5766 window = gtk_file_selection_new ("file selection dialog");
5768 gtk_file_selection_hide_fileop_buttons (GTK_FILE_SELECTION (window));
5770 gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
5772 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5773 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5776 gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (window)->ok_button),
5777 "clicked", GTK_SIGNAL_FUNC(file_selection_ok),
5779 gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION (window)->cancel_button),
5780 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
5781 GTK_OBJECT (window));
5783 button = gtk_button_new_with_label ("Hide Fileops");
5784 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5785 (GtkSignalFunc) file_selection_hide_fileops,
5787 gtk_box_pack_start (GTK_BOX (GTK_FILE_SELECTION (window)->action_area),
5788 button, FALSE, FALSE, 0);
5789 gtk_widget_show (button);
5791 button = gtk_button_new_with_label ("Show Fileops");
5792 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5793 (GtkSignalFunc) gtk_file_selection_show_fileop_buttons,
5795 gtk_box_pack_start (GTK_BOX (GTK_FILE_SELECTION (window)->action_area),
5796 button, FALSE, FALSE, 0);
5797 gtk_widget_show (button);
5800 if (!GTK_WIDGET_VISIBLE (window))
5801 gtk_widget_show (window);
5803 gtk_widget_destroy (window);
5807 flipping_toggled_cb (GtkWidget *widget, gpointer data)
5809 int state = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
5810 int new_direction = state ? GTK_TEXT_DIR_RTL : GTK_TEXT_DIR_LTR;
5812 gtk_widget_set_default_direction (new_direction);
5816 create_flipping (void)
5818 static GtkWidget *window = NULL;
5819 GtkWidget *check_button, *button;
5823 window = gtk_dialog_new ();
5825 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5826 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5829 gtk_window_set_title (GTK_WINDOW (window), "Bidirectional Flipping");
5831 check_button = gtk_check_button_new_with_label ("Right-to-left global direction");
5832 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
5833 check_button, TRUE, TRUE, 0);
5835 if (gtk_widget_get_default_direction () == GTK_TEXT_DIR_RTL)
5836 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button), TRUE);
5838 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
5839 flipping_toggled_cb, FALSE);
5841 gtk_container_set_border_width (GTK_CONTAINER (check_button), 10);
5843 button = gtk_button_new_with_label ("Close");
5844 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5845 GTK_SIGNAL_FUNC (gtk_widget_destroy), GTK_OBJECT (window));
5846 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
5847 button, TRUE, TRUE, 0);
5850 if (!GTK_WIDGET_VISIBLE (window))
5851 gtk_widget_show_all (window);
5853 gtk_widget_destroy (window);
5861 font_selection_ok (GtkWidget *w,
5862 GtkFontSelectionDialog *fs)
5864 gchar *s = gtk_font_selection_dialog_get_font_name (fs);
5866 g_print ("%s\n", s);
5868 gtk_widget_destroy (GTK_WIDGET (fs));
5872 create_font_selection (void)
5874 static GtkWidget *window = NULL;
5878 window = gtk_font_selection_dialog_new ("Font Selection Dialog");
5880 gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
5882 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5883 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5886 gtk_signal_connect (GTK_OBJECT (GTK_FONT_SELECTION_DIALOG (window)->ok_button),
5887 "clicked", GTK_SIGNAL_FUNC(font_selection_ok),
5888 GTK_FONT_SELECTION_DIALOG (window));
5889 gtk_signal_connect_object (GTK_OBJECT (GTK_FONT_SELECTION_DIALOG (window)->cancel_button),
5890 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
5891 GTK_OBJECT (window));
5894 if (!GTK_WIDGET_VISIBLE (window))
5895 gtk_widget_show (window);
5897 gtk_widget_destroy (window);
5904 static GtkWidget *dialog_window = NULL;
5907 label_toggle (GtkWidget *widget,
5912 *label = gtk_label_new ("Dialog Test");
5913 gtk_signal_connect (GTK_OBJECT (*label),
5915 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
5917 gtk_misc_set_padding (GTK_MISC (*label), 10, 10);
5918 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->vbox),
5919 *label, TRUE, TRUE, 0);
5920 gtk_widget_show (*label);
5923 gtk_widget_destroy (*label);
5927 create_dialog (void)
5929 static GtkWidget *label;
5934 dialog_window = gtk_dialog_new ();
5936 gtk_signal_connect (GTK_OBJECT (dialog_window), "destroy",
5937 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5940 gtk_window_set_title (GTK_WINDOW (dialog_window), "GtkDialog");
5941 gtk_container_set_border_width (GTK_CONTAINER (dialog_window), 0);
5942 gtk_widget_set_usize (dialog_window, 200, 110);
5944 button = gtk_button_new_with_label ("OK");
5945 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5946 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->action_area),
5947 button, TRUE, TRUE, 0);
5948 gtk_widget_grab_default (button);
5949 gtk_widget_show (button);
5951 button = gtk_button_new_with_label ("Toggle");
5952 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5953 GTK_SIGNAL_FUNC (label_toggle),
5955 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
5956 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->action_area),
5957 button, TRUE, TRUE, 0);
5958 gtk_widget_show (button);
5963 if (!GTK_WIDGET_VISIBLE (dialog_window))
5964 gtk_widget_show (dialog_window);
5966 gtk_widget_destroy (dialog_window);
5971 static gboolean event_watcher_enter_id = 0;
5972 static gboolean event_watcher_leave_id = 0;
5975 event_watcher (GtkObject *object,
5981 g_print ("Watch: \"%s\" emitted for %s\n",
5982 gtk_signal_name (signal_id),
5983 gtk_type_name (GTK_OBJECT_TYPE (object)));
5989 event_watcher_down (void)
5991 if (event_watcher_enter_id)
5995 signal_id = gtk_signal_lookup ("enter_notify_event", GTK_TYPE_WIDGET);
5996 gtk_signal_remove_emission_hook (signal_id, event_watcher_enter_id);
5997 event_watcher_enter_id = 0;
5998 signal_id = gtk_signal_lookup ("leave_notify_event", GTK_TYPE_WIDGET);
5999 gtk_signal_remove_emission_hook (signal_id, event_watcher_leave_id);
6000 event_watcher_leave_id = 0;
6005 event_watcher_toggle (void)
6007 if (event_watcher_enter_id)
6008 event_watcher_down ();
6013 signal_id = gtk_signal_lookup ("enter_notify_event", GTK_TYPE_WIDGET);
6014 event_watcher_enter_id = gtk_signal_add_emission_hook (signal_id, event_watcher, NULL);
6015 signal_id = gtk_signal_lookup ("leave_notify_event", GTK_TYPE_WIDGET);
6016 event_watcher_leave_id = gtk_signal_add_emission_hook (signal_id, event_watcher, NULL);
6021 create_event_watcher (void)
6027 dialog_window = gtk_dialog_new ();
6029 gtk_signal_connect (GTK_OBJECT (dialog_window), "destroy",
6030 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
6032 gtk_signal_connect (GTK_OBJECT (dialog_window),
6034 GTK_SIGNAL_FUNC (event_watcher_down),
6037 gtk_window_set_title (GTK_WINDOW (dialog_window), "Event Watcher");
6038 gtk_container_set_border_width (GTK_CONTAINER (dialog_window), 0);
6039 gtk_widget_set_usize (dialog_window, 200, 110);
6041 button = gtk_toggle_button_new_with_label ("Activate Watch");
6042 gtk_signal_connect (GTK_OBJECT (button), "clicked",
6043 GTK_SIGNAL_FUNC (event_watcher_toggle),
6045 gtk_container_set_border_width (GTK_CONTAINER (button), 10);
6046 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->vbox),
6047 button, TRUE, TRUE, 0);
6048 gtk_widget_show (button);
6050 button = gtk_button_new_with_label ("Close");
6051 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6052 GTK_SIGNAL_FUNC (gtk_widget_destroy),
6053 (GtkObject*) dialog_window);
6054 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6055 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->action_area),
6056 button, TRUE, TRUE, 0);
6057 gtk_widget_grab_default (button);
6058 gtk_widget_show (button);
6061 if (!GTK_WIDGET_VISIBLE (dialog_window))
6062 gtk_widget_show (dialog_window);
6064 gtk_widget_destroy (dialog_window);
6072 create_range_controls (void)
6074 static GtkWidget *window = NULL;
6078 GtkWidget *scrollbar;
6080 GtkWidget *separator;
6081 GtkObject *adjustment;
6085 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6087 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6088 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6091 gtk_window_set_title (GTK_WINDOW (window), "range controls");
6092 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6095 box1 = gtk_vbox_new (FALSE, 0);
6096 gtk_container_add (GTK_CONTAINER (window), box1);
6097 gtk_widget_show (box1);
6100 box2 = gtk_vbox_new (FALSE, 10);
6101 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6102 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
6103 gtk_widget_show (box2);
6106 adjustment = gtk_adjustment_new (0.0, 0.0, 101.0, 0.1, 1.0, 1.0);
6108 scale = gtk_hscale_new (GTK_ADJUSTMENT (adjustment));
6109 gtk_widget_set_usize (GTK_WIDGET (scale), 150, 30);
6110 gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED);
6111 gtk_scale_set_digits (GTK_SCALE (scale), 1);
6112 gtk_scale_set_draw_value (GTK_SCALE (scale), TRUE);
6113 gtk_box_pack_start (GTK_BOX (box2), scale, TRUE, TRUE, 0);
6114 gtk_widget_show (scale);
6116 scrollbar = gtk_hscrollbar_new (GTK_ADJUSTMENT (adjustment));
6117 gtk_range_set_update_policy (GTK_RANGE (scrollbar),
6118 GTK_UPDATE_CONTINUOUS);
6119 gtk_box_pack_start (GTK_BOX (box2), scrollbar, TRUE, TRUE, 0);
6120 gtk_widget_show (scrollbar);
6123 separator = gtk_hseparator_new ();
6124 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
6125 gtk_widget_show (separator);
6128 box2 = gtk_vbox_new (FALSE, 10);
6129 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6130 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6131 gtk_widget_show (box2);
6134 button = gtk_button_new_with_label ("close");
6135 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6136 GTK_SIGNAL_FUNC(gtk_widget_destroy),
6137 GTK_OBJECT (window));
6138 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6139 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6140 gtk_widget_grab_default (button);
6141 gtk_widget_show (button);
6144 if (!GTK_WIDGET_VISIBLE (window))
6145 gtk_widget_show (window);
6147 gtk_widget_destroy (window);
6155 create_rulers (void)
6157 static GtkWidget *window = NULL;
6163 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6164 gtk_window_set_policy (GTK_WINDOW (window), TRUE, TRUE, FALSE);
6166 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6167 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6170 gtk_window_set_title (GTK_WINDOW (window), "rulers");
6171 gtk_widget_set_usize (window, 300, 300);
6172 gtk_widget_set_events (window,
6173 GDK_POINTER_MOTION_MASK
6174 | GDK_POINTER_MOTION_HINT_MASK);
6175 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6177 table = gtk_table_new (2, 2, FALSE);
6178 gtk_container_add (GTK_CONTAINER (window), table);
6179 gtk_widget_show (table);
6181 ruler = gtk_hruler_new ();
6182 gtk_ruler_set_metric (GTK_RULER (ruler), GTK_CENTIMETERS);
6183 gtk_ruler_set_range (GTK_RULER (ruler), 100, 0, 0, 20);
6185 gtk_signal_connect_object (GTK_OBJECT (window),
6186 "motion_notify_event",
6187 GTK_SIGNAL_FUNC (GTK_WIDGET_GET_CLASS (ruler)->motion_notify_event),
6188 GTK_OBJECT (ruler));
6190 gtk_table_attach (GTK_TABLE (table), ruler, 1, 2, 0, 1,
6191 GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
6192 gtk_widget_show (ruler);
6195 ruler = gtk_vruler_new ();
6196 gtk_ruler_set_range (GTK_RULER (ruler), 5, 15, 0, 20);
6198 gtk_signal_connect_object (GTK_OBJECT (window),
6199 "motion_notify_event",
6200 GTK_SIGNAL_FUNC (GTK_WIDGET_GET_CLASS (ruler)->motion_notify_event),
6201 GTK_OBJECT (ruler));
6203 gtk_table_attach (GTK_TABLE (table), ruler, 0, 1, 1, 2,
6204 GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
6205 gtk_widget_show (ruler);
6208 if (!GTK_WIDGET_VISIBLE (window))
6209 gtk_widget_show (window);
6211 gtk_widget_destroy (window);
6215 text_toggle_editable (GtkWidget *checkbutton,
6218 gtk_text_set_editable(GTK_TEXT(text),
6219 GTK_TOGGLE_BUTTON(checkbutton)->active);
6223 text_toggle_word_wrap (GtkWidget *checkbutton,
6226 gtk_text_set_word_wrap(GTK_TEXT(text),
6227 GTK_TOGGLE_BUTTON(checkbutton)->active);
6234 { { 0, 0x0000, 0x0000, 0x0000 }, "black" },
6235 { { 0, 0xFFFF, 0xFFFF, 0xFFFF }, "white" },
6236 { { 0, 0xFFFF, 0x0000, 0x0000 }, "red" },
6237 { { 0, 0x0000, 0xFFFF, 0x0000 }, "green" },
6238 { { 0, 0x0000, 0x0000, 0xFFFF }, "blue" },
6239 { { 0, 0x0000, 0xFFFF, 0xFFFF }, "cyan" },
6240 { { 0, 0xFFFF, 0x0000, 0xFFFF }, "magenta" },
6241 { { 0, 0xFFFF, 0xFFFF, 0x0000 }, "yellow" }
6244 int ntext_colors = sizeof(text_colors) / sizeof(text_colors[0]);
6250 text_insert_random (GtkWidget *w, GtkText *text)
6254 for (i=0; i<10; i++)
6256 c = 'A' + rand() % ('Z' - 'A');
6257 gtk_text_set_point (text, rand() % gtk_text_get_length (text));
6258 gtk_text_insert (text, NULL, NULL, NULL, &c, 1);
6267 static GtkWidget *window = NULL;
6273 GtkWidget *separator;
6274 GtkWidget *scrolled_window;
6281 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6282 gtk_widget_set_name (window, "text window");
6283 gtk_widget_set_usize (window, 500, 500);
6284 gtk_window_set_policy (GTK_WINDOW(window), TRUE, TRUE, FALSE);
6286 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6287 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6290 gtk_window_set_title (GTK_WINDOW (window), "test");
6291 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6294 box1 = gtk_vbox_new (FALSE, 0);
6295 gtk_container_add (GTK_CONTAINER (window), box1);
6296 gtk_widget_show (box1);
6299 box2 = gtk_vbox_new (FALSE, 10);
6300 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6301 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
6302 gtk_widget_show (box2);
6305 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
6306 gtk_box_pack_start (GTK_BOX (box2), scrolled_window, TRUE, TRUE, 0);
6307 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
6310 gtk_widget_show (scrolled_window);
6312 text = gtk_text_new (NULL, NULL);
6313 gtk_text_set_editable (GTK_TEXT (text), TRUE);
6314 gtk_container_add (GTK_CONTAINER (scrolled_window), text);
6315 gtk_widget_grab_focus (text);
6316 gtk_widget_show (text);
6319 gtk_text_freeze (GTK_TEXT (text));
6321 for (i=0; i<ntext_colors; i++)
6323 gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL,
6324 text_colors[i].name, -1);
6325 gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL, "\t", -1);
6327 for (j=0; j<ntext_colors; j++)
6329 gtk_text_insert (GTK_TEXT (text), NULL,
6330 &text_colors[j].color, &text_colors[i].color,
6333 gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL, "\n", -1);
6336 infile = fopen("testgtk.c", "r");
6341 int nbytes_read, nbytes_alloc;
6344 nbytes_alloc = 1024;
6345 buffer = g_new (char, nbytes_alloc);
6349 if (nbytes_alloc < nbytes_read + 1024)
6352 buffer = g_realloc (buffer, nbytes_alloc);
6354 len = fread (buffer + nbytes_read, 1, 1024, infile);
6360 gtk_text_insert (GTK_TEXT (text), NULL, NULL,
6361 NULL, buffer, nbytes_read);
6366 gtk_text_thaw (GTK_TEXT (text));
6368 hbox = gtk_hbutton_box_new ();
6369 gtk_box_pack_start (GTK_BOX (box2), hbox, FALSE, FALSE, 0);
6370 gtk_widget_show (hbox);
6372 check = gtk_check_button_new_with_label("Editable");
6373 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, FALSE, 0);
6374 gtk_signal_connect (GTK_OBJECT(check), "toggled",
6375 GTK_SIGNAL_FUNC(text_toggle_editable), text);
6376 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), TRUE);
6377 gtk_widget_show (check);
6379 check = gtk_check_button_new_with_label("Wrap Words");
6380 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
6381 gtk_signal_connect (GTK_OBJECT(check), "toggled",
6382 GTK_SIGNAL_FUNC(text_toggle_word_wrap), text);
6383 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), FALSE);
6384 gtk_widget_show (check);
6386 separator = gtk_hseparator_new ();
6387 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
6388 gtk_widget_show (separator);
6391 box2 = gtk_vbox_new (FALSE, 10);
6392 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6393 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6394 gtk_widget_show (box2);
6397 button = gtk_button_new_with_label ("insert random");
6398 gtk_signal_connect (GTK_OBJECT (button), "clicked",
6399 GTK_SIGNAL_FUNC(text_insert_random),
6401 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6402 gtk_widget_show (button);
6404 button = gtk_button_new_with_label ("close");
6405 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6406 GTK_SIGNAL_FUNC(gtk_widget_destroy),
6407 GTK_OBJECT (window));
6408 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6409 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6410 gtk_widget_grab_default (button);
6411 gtk_widget_show (button);
6414 if (!GTK_WIDGET_VISIBLE (window))
6415 gtk_widget_show (window);
6417 gtk_widget_destroy (window);
6424 GdkPixmap *book_open;
6425 GdkPixmap *book_closed;
6426 GdkBitmap *book_open_mask;
6427 GdkBitmap *book_closed_mask;
6428 GtkWidget *sample_notebook;
6431 page_switch (GtkWidget *widget, GtkNotebookPage *page, gint page_num)
6433 GtkNotebookPage *oldpage;
6436 oldpage = GTK_NOTEBOOK (widget)->cur_page;
6438 if (page == oldpage)
6440 pixwid = ((GtkBoxChild*)
6441 (GTK_BOX (page->tab_label)->children->data))->widget;
6442 gtk_pixmap_set (GTK_PIXMAP (pixwid), book_open, book_open_mask);
6443 pixwid = ((GtkBoxChild*)
6444 (GTK_BOX (page->menu_label)->children->data))->widget;
6445 gtk_pixmap_set (GTK_PIXMAP (pixwid), book_open, book_open_mask);
6449 pixwid = ((GtkBoxChild*)
6450 (GTK_BOX (oldpage->tab_label)->children->data))->widget;
6451 gtk_pixmap_set (GTK_PIXMAP (pixwid), book_closed, book_closed_mask);
6452 pixwid = ((GtkBoxChild*)
6453 (GTK_BOX (oldpage->menu_label)->children->data))->widget;
6454 gtk_pixmap_set (GTK_PIXMAP (pixwid), book_closed, book_closed_mask);
6459 tab_fill (GtkToggleButton *button, GtkWidget *child)
6462 GtkPackType pack_type;
6464 gtk_notebook_query_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
6465 &expand, NULL, &pack_type);
6466 gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
6467 expand, button->active, pack_type);
6471 tab_expand (GtkToggleButton *button, GtkWidget *child)
6474 GtkPackType pack_type;
6476 gtk_notebook_query_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
6477 NULL, &fill, &pack_type);
6478 gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
6479 button->active, fill, pack_type);
6483 tab_pack (GtkToggleButton *button, GtkWidget *child)
6489 gtk_notebook_query_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
6490 &expand, &fill, NULL);
6491 gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
6492 expand, fill, button->active);
6496 create_pages (GtkNotebook *notebook, gint start, gint end)
6498 GtkWidget *child = NULL;
6503 GtkWidget *label_box;
6504 GtkWidget *menu_box;
6509 for (i = start; i <= end; i++)
6511 sprintf (buffer, "Page %d", i);
6513 child = gtk_frame_new (buffer);
6514 gtk_container_set_border_width (GTK_CONTAINER (child), 10);
6516 vbox = gtk_vbox_new (TRUE,0);
6517 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
6518 gtk_container_add (GTK_CONTAINER (child), vbox);
6520 hbox = gtk_hbox_new (TRUE,0);
6521 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
6523 button = gtk_check_button_new_with_label ("Fill Tab");
6524 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
6525 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
6526 gtk_signal_connect (GTK_OBJECT (button), "toggled",
6527 GTK_SIGNAL_FUNC (tab_fill), child);
6529 button = gtk_check_button_new_with_label ("Expand Tab");
6530 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
6531 gtk_signal_connect (GTK_OBJECT (button), "toggled",
6532 GTK_SIGNAL_FUNC (tab_expand), child);
6534 button = gtk_check_button_new_with_label ("Pack end");
6535 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
6536 gtk_signal_connect (GTK_OBJECT (button), "toggled",
6537 GTK_SIGNAL_FUNC (tab_pack), child);
6539 button = gtk_button_new_with_label ("Hide Page");
6540 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 5);
6541 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6542 GTK_SIGNAL_FUNC (gtk_widget_hide),
6543 GTK_OBJECT (child));
6545 gtk_widget_show_all (child);
6547 label_box = gtk_hbox_new (FALSE, 0);
6548 pixwid = gtk_pixmap_new (book_closed, book_closed_mask);
6549 gtk_box_pack_start (GTK_BOX (label_box), pixwid, FALSE, TRUE, 0);
6550 gtk_misc_set_padding (GTK_MISC (pixwid), 3, 1);
6551 label = gtk_label_new (buffer);
6552 gtk_box_pack_start (GTK_BOX (label_box), label, FALSE, TRUE, 0);
6553 gtk_widget_show_all (label_box);
6555 menu_box = gtk_hbox_new (FALSE, 0);
6556 pixwid = gtk_pixmap_new (book_closed, book_closed_mask);
6557 gtk_box_pack_start (GTK_BOX (menu_box), pixwid, FALSE, TRUE, 0);
6558 gtk_misc_set_padding (GTK_MISC (pixwid), 3, 1);
6559 label = gtk_label_new (buffer);
6560 gtk_box_pack_start (GTK_BOX (menu_box), label, FALSE, TRUE, 0);
6561 gtk_widget_show_all (menu_box);
6562 gtk_notebook_append_page_menu (notebook, child, label_box, menu_box);
6567 rotate_notebook (GtkButton *button,
6568 GtkNotebook *notebook)
6570 gtk_notebook_set_tab_pos (notebook, (notebook->tab_pos + 1) % 4);
6574 show_all_pages (GtkButton *button,
6575 GtkNotebook *notebook)
6577 gtk_container_foreach (GTK_CONTAINER (notebook),
6578 (GtkCallback) gtk_widget_show, NULL);
6582 standard_notebook (GtkButton *button,
6583 GtkNotebook *notebook)
6587 gtk_notebook_set_show_tabs (notebook, TRUE);
6588 gtk_notebook_set_scrollable (notebook, FALSE);
6589 if (g_list_length (notebook->children) == 15)
6590 for (i = 0; i < 10; i++)
6591 gtk_notebook_remove_page (notebook, 5);
6595 notabs_notebook (GtkButton *button,
6596 GtkNotebook *notebook)
6600 gtk_notebook_set_show_tabs (notebook, FALSE);
6601 if (g_list_length (notebook->children) == 15)
6602 for (i = 0; i < 10; i++)
6603 gtk_notebook_remove_page (notebook, 5);
6607 scrollable_notebook (GtkButton *button,
6608 GtkNotebook *notebook)
6610 gtk_notebook_set_show_tabs (notebook, TRUE);
6611 gtk_notebook_set_scrollable (notebook, TRUE);
6612 if (g_list_length (notebook->children) == 5)
6613 create_pages (notebook, 6, 15);
6617 notebook_popup (GtkToggleButton *button,
6618 GtkNotebook *notebook)
6621 gtk_notebook_popup_enable (notebook);
6623 gtk_notebook_popup_disable (notebook);
6627 notebook_homogeneous (GtkToggleButton *button,
6628 GtkNotebook *notebook)
6630 gtk_notebook_set_homogeneous_tabs (notebook, button->active);
6634 create_notebook (void)
6636 static GtkWidget *window = NULL;
6640 GtkWidget *separator;
6642 GdkColor *transparent = NULL;
6645 static OptionMenuItem items[] =
6647 { "Standard", standard_notebook },
6648 { "No tabs", notabs_notebook },
6649 { "Scrollable", scrollable_notebook }
6654 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6656 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6657 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6660 gtk_window_set_title (GTK_WINDOW (window), "notebook");
6661 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6663 box1 = gtk_vbox_new (FALSE, 0);
6664 gtk_container_add (GTK_CONTAINER (window), box1);
6666 sample_notebook = gtk_notebook_new ();
6667 gtk_signal_connect (GTK_OBJECT (sample_notebook), "switch_page",
6668 GTK_SIGNAL_FUNC (page_switch), NULL);
6669 gtk_notebook_set_tab_pos (GTK_NOTEBOOK (sample_notebook), GTK_POS_TOP);
6670 gtk_box_pack_start (GTK_BOX (box1), sample_notebook, TRUE, TRUE, 0);
6671 gtk_container_set_border_width (GTK_CONTAINER (sample_notebook), 10);
6673 gtk_widget_realize (sample_notebook);
6675 book_open = gdk_pixmap_create_from_xpm_d (sample_notebook->window,
6680 book_closed = gdk_pixmap_create_from_xpm_d (sample_notebook->window,
6685 create_pages (GTK_NOTEBOOK (sample_notebook), 1, 5);
6687 separator = gtk_hseparator_new ();
6688 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 10);
6690 box2 = gtk_hbox_new (FALSE, 5);
6691 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6692 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6694 button = gtk_check_button_new_with_label ("popup menu");
6695 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, FALSE, 0);
6696 gtk_signal_connect (GTK_OBJECT(button), "clicked",
6697 GTK_SIGNAL_FUNC (notebook_popup),
6698 GTK_OBJECT (sample_notebook));
6700 button = gtk_check_button_new_with_label ("homogeneous tabs");
6701 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, FALSE, 0);
6702 gtk_signal_connect (GTK_OBJECT(button), "clicked",
6703 GTK_SIGNAL_FUNC (notebook_homogeneous),
6704 GTK_OBJECT (sample_notebook));
6706 box2 = gtk_hbox_new (FALSE, 5);
6707 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6708 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6710 label = gtk_label_new ("Notebook Style :");
6711 gtk_box_pack_start (GTK_BOX (box2), label, FALSE, TRUE, 0);
6713 omenu = build_option_menu (items, 3, 0, sample_notebook);
6714 gtk_box_pack_start (GTK_BOX (box2), omenu, FALSE, TRUE, 0);
6716 button = gtk_button_new_with_label ("Show all Pages");
6717 gtk_box_pack_start (GTK_BOX (box2), button, FALSE, TRUE, 0);
6718 gtk_signal_connect (GTK_OBJECT (button), "clicked",
6719 GTK_SIGNAL_FUNC (show_all_pages), sample_notebook);
6721 box2 = gtk_hbox_new (TRUE, 10);
6722 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6723 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6725 button = gtk_button_new_with_label ("prev");
6726 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6727 GTK_SIGNAL_FUNC (gtk_notebook_prev_page),
6728 GTK_OBJECT (sample_notebook));
6729 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6731 button = gtk_button_new_with_label ("next");
6732 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6733 GTK_SIGNAL_FUNC (gtk_notebook_next_page),
6734 GTK_OBJECT (sample_notebook));
6735 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6737 button = gtk_button_new_with_label ("rotate");
6738 gtk_signal_connect (GTK_OBJECT (button), "clicked",
6739 GTK_SIGNAL_FUNC (rotate_notebook), sample_notebook);
6740 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6742 separator = gtk_hseparator_new ();
6743 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 5);
6745 button = gtk_button_new_with_label ("close");
6746 gtk_container_set_border_width (GTK_CONTAINER (button), 5);
6747 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6748 GTK_SIGNAL_FUNC (gtk_widget_destroy),
6749 GTK_OBJECT (window));
6750 gtk_box_pack_start (GTK_BOX (box1), button, FALSE, FALSE, 0);
6751 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6752 gtk_widget_grab_default (button);
6755 if (!GTK_WIDGET_VISIBLE (window))
6756 gtk_widget_show_all (window);
6758 gtk_widget_destroy (window);
6766 toggle_resize (GtkWidget *widget, GtkWidget *child)
6768 GtkPaned *paned = GTK_PANED (child->parent);
6769 gboolean is_child1 = (child == paned->child1);
6770 gboolean resize, shrink;
6772 resize = is_child1 ? paned->child1_resize : paned->child2_resize;
6773 shrink = is_child1 ? paned->child1_shrink : paned->child2_shrink;
6775 gtk_widget_ref (child);
6776 gtk_container_remove (GTK_CONTAINER (child->parent), child);
6778 gtk_paned_pack1 (paned, child, !resize, shrink);
6780 gtk_paned_pack2 (paned, child, !resize, shrink);
6781 gtk_widget_unref (child);
6785 toggle_shrink (GtkWidget *widget, GtkWidget *child)
6787 GtkPaned *paned = GTK_PANED (child->parent);
6788 gboolean is_child1 = (child == paned->child1);
6789 gboolean resize, shrink;
6791 resize = is_child1 ? paned->child1_resize : paned->child2_resize;
6792 shrink = is_child1 ? paned->child1_shrink : paned->child2_shrink;
6794 gtk_widget_ref (child);
6795 gtk_container_remove (GTK_CONTAINER (child->parent), child);
6797 gtk_paned_pack1 (paned, child, resize, !shrink);
6799 gtk_paned_pack2 (paned, child, resize, !shrink);
6800 gtk_widget_unref (child);
6804 create_pane_options (GtkPaned *paned,
6805 const gchar *frame_label,
6806 const gchar *label1,
6807 const gchar *label2)
6812 GtkWidget *check_button;
6814 frame = gtk_frame_new (frame_label);
6815 gtk_container_set_border_width (GTK_CONTAINER (frame), 4);
6817 table = gtk_table_new (3, 2, 4);
6818 gtk_container_add (GTK_CONTAINER (frame), table);
6820 label = gtk_label_new (label1);
6821 gtk_table_attach_defaults (GTK_TABLE (table), label,
6824 check_button = gtk_check_button_new_with_label ("Resize");
6825 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
6827 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
6828 GTK_SIGNAL_FUNC (toggle_resize),
6831 check_button = gtk_check_button_new_with_label ("Shrink");
6832 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
6834 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
6836 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
6837 GTK_SIGNAL_FUNC (toggle_shrink),
6840 label = gtk_label_new (label2);
6841 gtk_table_attach_defaults (GTK_TABLE (table), label,
6844 check_button = gtk_check_button_new_with_label ("Resize");
6845 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
6847 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
6849 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
6850 GTK_SIGNAL_FUNC (toggle_resize),
6853 check_button = gtk_check_button_new_with_label ("Shrink");
6854 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
6856 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
6858 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
6859 GTK_SIGNAL_FUNC (toggle_shrink),
6868 static GtkWidget *window = NULL;
6877 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6879 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6880 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6883 gtk_window_set_title (GTK_WINDOW (window), "Panes");
6884 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6886 vbox = gtk_vbox_new (FALSE, 0);
6887 gtk_container_add (GTK_CONTAINER (window), vbox);
6889 vpaned = gtk_vpaned_new ();
6890 gtk_box_pack_start (GTK_BOX (vbox), vpaned, TRUE, TRUE, 0);
6891 gtk_container_set_border_width (GTK_CONTAINER(vpaned), 5);
6893 hpaned = gtk_hpaned_new ();
6894 gtk_paned_add1 (GTK_PANED (vpaned), hpaned);
6896 frame = gtk_frame_new (NULL);
6897 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
6898 gtk_widget_set_usize (frame, 60, 60);
6899 gtk_paned_add1 (GTK_PANED (hpaned), frame);
6901 button = gtk_button_new_with_label ("Hi there");
6902 gtk_container_add (GTK_CONTAINER(frame), button);
6904 frame = gtk_frame_new (NULL);
6905 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
6906 gtk_widget_set_usize (frame, 80, 60);
6907 gtk_paned_add2 (GTK_PANED (hpaned), frame);
6909 frame = gtk_frame_new (NULL);
6910 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
6911 gtk_widget_set_usize (frame, 60, 80);
6912 gtk_paned_add2 (GTK_PANED (vpaned), frame);
6914 /* Now create toggle buttons to control sizing */
6916 gtk_box_pack_start (GTK_BOX (vbox),
6917 create_pane_options (GTK_PANED (hpaned),
6923 gtk_box_pack_start (GTK_BOX (vbox),
6924 create_pane_options (GTK_PANED (vpaned),
6930 gtk_widget_show_all (vbox);
6933 if (!GTK_WIDGET_VISIBLE (window))
6934 gtk_widget_show (window);
6936 gtk_widget_destroy (window);
6945 dnd_drop_destroy_popup (GtkWidget *widget, GtkWindow **window)
6947 if(GTK_IS_BUTTON(widget)) /* I.e. they clicked the close button */
6948 gtk_widget_destroy(GTK_WIDGET(*window));
6950 gtk_grab_remove(GTK_WIDGET(*window));
6958 dnd_drop (GtkWidget *button, GdkEvent *event)
6960 static GtkWidget *window = NULL;
6961 GtkWidget *vbox, *lbl, *btn;
6964 /* DND doesn't obey gtk_grab's, so check if we're already displaying
6965 * drop modal dialog first
6970 window = gtk_window_new(GTK_WINDOW_DIALOG);
6971 gtk_container_set_border_width (GTK_CONTAINER(window), 10);
6973 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6974 GTK_SIGNAL_FUNC(dnd_drop_destroy_popup),
6976 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
6977 GTK_SIGNAL_FUNC(gtk_false),
6980 vbox = gtk_vbox_new(FALSE, 5);
6982 /* Display message that we got from drop source */
6983 msg = g_malloc(strlen(event->dropdataavailable.data)
6984 + strlen(event->dropdataavailable.data_type) + 100);
6985 sprintf(msg, "Drop data of type %s was:\n\n%s",
6986 event->dropdataavailable.data_type,
6987 (char *)event->dropdataavailable.data);
6988 lbl = gtk_label_new(msg);
6989 gtk_label_set_justify(GTK_LABEL(lbl), GTK_JUSTIFY_FILL);
6991 gtk_widget_show(lbl);
6992 gtk_box_pack_start_defaults(GTK_BOX(vbox), lbl);
6994 /* Provide an obvious way out of this heinousness */
6995 btn = gtk_button_new_with_label("Continue with life in\nspite of this oppression");
6996 gtk_signal_connect_object (GTK_OBJECT (btn), "clicked",
6997 GTK_SIGNAL_FUNC(gtk_widget_destroy),
6998 GTK_OBJECT (window));
6999 gtk_widget_show(btn);
7000 gtk_box_pack_start_defaults(GTK_BOX(vbox), btn);
7002 gtk_container_add(GTK_CONTAINER(window), vbox);
7004 gtk_widget_show(vbox);
7005 gtk_grab_add(window);
7006 gtk_widget_show(window);
7010 dnd_drag_request (GtkWidget *button, GdkEvent *event)
7012 #define DND_STRING "Bill Gates demands royalties for\nyour use of his innovation."
7013 gtk_widget_dnd_data_set (button, event, DND_STRING, strlen(DND_STRING) + 1);
7019 static GtkWidget *window = NULL;
7025 GtkWidget *separator;
7027 /* For clarity... */
7028 char *possible_drag_types[] = {"text/plain"};
7029 char *accepted_drop_types[] = {"text/plain"};
7031 static GtkWidget *drag_icon = NULL;
7032 static GtkWidget *drop_icon = NULL;
7036 GdkPoint hotspot = {5,5};
7040 drag_icon = shape_create_icon ("Modeller.xpm",
7041 440, 140, 0,0, GTK_WINDOW_POPUP);
7043 gtk_signal_connect (GTK_OBJECT (drag_icon), "destroy",
7044 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7047 gtk_widget_hide (drag_icon);
7052 drop_icon = shape_create_icon ("3DRings.xpm",
7053 440, 140, 0,0, GTK_WINDOW_POPUP);
7055 gtk_signal_connect (GTK_OBJECT (drop_icon), "destroy",
7056 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7059 gtk_widget_hide (drop_icon);
7062 gdk_dnd_set_drag_shape(drag_icon->window,
7067 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7069 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7070 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7073 gtk_window_set_title (GTK_WINDOW (window), "Drag -N- Drop");
7074 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
7076 box1 = gtk_vbox_new (FALSE, 0);
7077 gtk_container_add (GTK_CONTAINER (window), box1);
7078 gtk_widget_show (box1);
7080 box2 = gtk_hbox_new (FALSE, 5);
7081 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
7082 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
7083 gtk_widget_show (box2);
7085 frame = gtk_frame_new ("Drag");
7086 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
7087 gtk_widget_show (frame);
7089 box3 = gtk_vbox_new (FALSE, 5);
7090 gtk_container_set_border_width (GTK_CONTAINER (box3), 5);
7091 gtk_container_add (GTK_CONTAINER (frame), box3);
7092 gtk_widget_show (box3);
7097 button = gtk_button_new_with_label ("Drag me!");
7098 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
7099 gtk_widget_show (button);
7102 * currently, the widget has to be realized to
7103 * set dnd on it, this needs to change
7105 gtk_widget_realize (button);
7106 gtk_signal_connect (GTK_OBJECT (button),
7107 "drag_request_event",
7108 GTK_SIGNAL_FUNC(dnd_drag_request),
7111 gtk_widget_dnd_drag_set (button, TRUE, possible_drag_types, 1);
7114 frame = gtk_frame_new ("Drop");
7115 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
7116 gtk_widget_show (frame);
7118 box3 = gtk_vbox_new (FALSE, 5);
7119 gtk_container_set_border_width (GTK_CONTAINER (box3), 5);
7120 gtk_container_add (GTK_CONTAINER (frame), box3);
7121 gtk_widget_show (box3);
7127 button = gtk_button_new_with_label ("To");
7128 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
7129 gtk_widget_show (button);
7131 gtk_widget_realize (button);
7132 gtk_signal_connect (GTK_OBJECT (button),
7133 "drop_data_available_event",
7134 GTK_SIGNAL_FUNC(dnd_drop),
7137 gtk_widget_dnd_drop_set (button, TRUE, accepted_drop_types, 1, FALSE);
7140 separator = gtk_hseparator_new ();
7141 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
7142 gtk_widget_show (separator);
7145 box2 = gtk_vbox_new (FALSE, 10);
7146 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
7147 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
7148 gtk_widget_show (box2);
7151 button = gtk_button_new_with_label ("close");
7153 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7154 GTK_SIGNAL_FUNC(gtk_widget_destroy),
7155 GTK_OBJECT (window));
7157 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
7158 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7159 gtk_widget_grab_default (button);
7160 gtk_widget_show (button);
7163 if (!GTK_WIDGET_VISIBLE (window))
7164 gtk_widget_show (window);
7166 gtk_widget_destroy (window);
7174 typedef struct _cursoroffset {gint x,y;} CursorOffset;
7177 shape_pressed (GtkWidget *widget, GdkEventButton *event)
7181 /* ignore double and triple click */
7182 if (event->type != GDK_BUTTON_PRESS)
7185 p = gtk_object_get_user_data (GTK_OBJECT(widget));
7186 p->x = (int) event->x;
7187 p->y = (int) event->y;
7189 gtk_grab_add (widget);
7190 gdk_pointer_grab (widget->window, TRUE,
7191 GDK_BUTTON_RELEASE_MASK |
7192 GDK_BUTTON_MOTION_MASK |
7193 GDK_POINTER_MOTION_HINT_MASK,
7198 shape_released (GtkWidget *widget)
7200 gtk_grab_remove (widget);
7201 gdk_pointer_ungrab (0);
7205 shape_motion (GtkWidget *widget,
7206 GdkEventMotion *event)
7210 GdkModifierType mask;
7212 p = gtk_object_get_user_data (GTK_OBJECT (widget));
7215 * Can't use event->x / event->y here
7216 * because I need absolute coordinates.
7218 gdk_window_get_pointer (NULL, &xp, &yp, &mask);
7219 gtk_widget_set_uposition (widget, xp - p->x, yp - p->y);
7223 shape_create_icon (char *xpm_file,
7233 CursorOffset* icon_pos;
7235 GdkBitmap *gdk_pixmap_mask;
7236 GdkPixmap *gdk_pixmap;
7239 style = gtk_widget_get_default_style ();
7240 gc = style->black_gc;
7243 * GDK_WINDOW_TOPLEVEL works also, giving you a title border
7245 window = gtk_window_new (window_type);
7247 fixed = gtk_fixed_new ();
7248 gtk_widget_set_usize (fixed, 100,100);
7249 gtk_container_add (GTK_CONTAINER (window), fixed);
7250 gtk_widget_show (fixed);
7252 gtk_widget_set_events (window,
7253 gtk_widget_get_events (window) |
7254 GDK_BUTTON_MOTION_MASK |
7255 GDK_POINTER_MOTION_HINT_MASK |
7256 GDK_BUTTON_PRESS_MASK);
7258 gtk_widget_realize (window);
7259 gdk_pixmap = gdk_pixmap_create_from_xpm (window->window, &gdk_pixmap_mask,
7260 &style->bg[GTK_STATE_NORMAL],
7263 pixmap = gtk_pixmap_new (gdk_pixmap, gdk_pixmap_mask);
7264 gtk_fixed_put (GTK_FIXED (fixed), pixmap, px,py);
7265 gtk_widget_show (pixmap);
7267 gtk_widget_shape_combine_mask (window, gdk_pixmap_mask, px, py);
7269 gdk_drawable_unref (gdk_pixmap_mask);
7270 gdk_drawable_unref (gdk_pixmap);
7272 gtk_signal_connect (GTK_OBJECT (window), "button_press_event",
7273 GTK_SIGNAL_FUNC (shape_pressed),NULL);
7274 gtk_signal_connect (GTK_OBJECT (window), "button_release_event",
7275 GTK_SIGNAL_FUNC (shape_released),NULL);
7276 gtk_signal_connect (GTK_OBJECT (window), "motion_notify_event",
7277 GTK_SIGNAL_FUNC (shape_motion),NULL);
7279 icon_pos = g_new (CursorOffset, 1);
7280 gtk_object_set_user_data(GTK_OBJECT(window), icon_pos);
7282 gtk_widget_set_uposition (window, x, y);
7283 gtk_widget_show (window);
7289 create_shapes (void)
7291 /* Variables used by the Drag/Drop and Shape Window demos */
7292 static GtkWidget *modeller = NULL;
7293 static GtkWidget *sheets = NULL;
7294 static GtkWidget *rings = NULL;
7296 if (!(file_exists ("Modeller.xpm") &&
7297 file_exists ("FilesQueue.xpm") &&
7298 file_exists ("3DRings.xpm")))
7304 modeller = shape_create_icon ("Modeller.xpm",
7305 440, 140, 0,0, GTK_WINDOW_POPUP);
7307 gtk_signal_connect (GTK_OBJECT (modeller), "destroy",
7308 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7312 gtk_widget_destroy (modeller);
7316 sheets = shape_create_icon ("FilesQueue.xpm",
7317 580, 170, 0,0, GTK_WINDOW_POPUP);
7319 gtk_signal_connect (GTK_OBJECT (sheets), "destroy",
7320 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7325 gtk_widget_destroy (sheets);
7329 rings = shape_create_icon ("3DRings.xpm",
7330 460, 270, 25,25, GTK_WINDOW_TOPLEVEL);
7332 gtk_signal_connect (GTK_OBJECT (rings), "destroy",
7333 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7337 gtk_widget_destroy (rings);
7345 create_wmhints (void)
7347 static GtkWidget *window = NULL;
7349 GtkWidget *separator;
7358 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7360 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7361 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7364 gtk_window_set_title (GTK_WINDOW (window), "WM Hints");
7365 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
7367 gtk_widget_realize (window);
7369 circles = gdk_bitmap_create_from_data (window->window,
7373 gdk_window_set_icon (window->window, NULL,
7376 gdk_window_set_icon_name (window->window, "WMHints Test Icon");
7378 gdk_window_set_decorations (window->window, GDK_DECOR_ALL | GDK_DECOR_MENU);
7379 gdk_window_set_functions (window->window, GDK_FUNC_ALL | GDK_FUNC_RESIZE);
7381 box1 = gtk_vbox_new (FALSE, 0);
7382 gtk_container_add (GTK_CONTAINER (window), box1);
7383 gtk_widget_show (box1);
7385 label = gtk_label_new ("Try iconizing me!");
7386 gtk_widget_set_usize (label, 150, 50);
7387 gtk_box_pack_start (GTK_BOX (box1), label, TRUE, TRUE, 0);
7388 gtk_widget_show (label);
7391 separator = gtk_hseparator_new ();
7392 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
7393 gtk_widget_show (separator);
7396 box2 = gtk_vbox_new (FALSE, 10);
7397 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
7398 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
7399 gtk_widget_show (box2);
7402 button = gtk_button_new_with_label ("close");
7404 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7405 GTK_SIGNAL_FUNC(gtk_widget_destroy),
7406 GTK_OBJECT (window));
7408 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
7409 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7410 gtk_widget_grab_default (button);
7411 gtk_widget_show (button);
7414 if (!GTK_WIDGET_VISIBLE (window))
7415 gtk_widget_show (window);
7417 gtk_widget_destroy (window);
7424 typedef struct _ProgressData {
7427 GtkWidget *block_spin;
7428 GtkWidget *x_align_spin;
7429 GtkWidget *y_align_spin;
7430 GtkWidget *step_spin;
7431 GtkWidget *act_blocks_spin;
7440 progress_timeout (gpointer data)
7445 adj = GTK_PROGRESS (data)->adjustment;
7447 new_val = adj->value + 1;
7448 if (new_val > adj->upper)
7449 new_val = adj->lower;
7451 gtk_progress_set_value (GTK_PROGRESS (data), new_val);
7457 destroy_progress (GtkWidget *widget,
7458 ProgressData **pdata)
7460 gtk_timeout_remove ((*pdata)->timer);
7461 (*pdata)->timer = 0;
7462 (*pdata)->window = NULL;
7468 progressbar_toggle_orientation (GtkWidget *widget, ProgressData *pdata)
7472 if (!GTK_WIDGET_MAPPED (widget))
7475 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
7476 (((GtkOptionMenu *)(pdata->omenu1))->menu_item), i);
7478 gtk_progress_bar_set_orientation (GTK_PROGRESS_BAR (pdata->pbar),
7479 (GtkProgressBarOrientation) (3-i));
7483 toggle_show_text (GtkWidget *widget, ProgressData *pdata)
7485 gtk_progress_set_show_text (GTK_PROGRESS (pdata->pbar),
7486 GTK_TOGGLE_BUTTON (widget)->active);
7487 gtk_widget_set_sensitive (pdata->entry, GTK_TOGGLE_BUTTON (widget)->active);
7488 gtk_widget_set_sensitive (pdata->x_align_spin,
7489 GTK_TOGGLE_BUTTON (widget)->active);
7490 gtk_widget_set_sensitive (pdata->y_align_spin,
7491 GTK_TOGGLE_BUTTON (widget)->active);
7495 progressbar_toggle_bar_style (GtkWidget *widget, ProgressData *pdata)
7499 if (!GTK_WIDGET_MAPPED (widget))
7502 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
7503 (((GtkOptionMenu *)(pdata->omenu2))->menu_item), i);
7508 gtk_widget_set_sensitive (pdata->block_spin, TRUE);
7510 gtk_widget_set_sensitive (pdata->block_spin, FALSE);
7512 gtk_progress_bar_set_bar_style (GTK_PROGRESS_BAR (pdata->pbar),
7513 (GtkProgressBarStyle) i);
7517 progress_value_changed (GtkAdjustment *adj, ProgressData *pdata)
7521 if (GTK_PROGRESS (pdata->pbar)->activity_mode)
7522 sprintf (buf, "???");
7524 sprintf (buf, "%.0f%%", 100 *
7525 gtk_progress_get_current_percentage (GTK_PROGRESS (pdata->pbar)));
7526 gtk_label_set_text (GTK_LABEL (pdata->label), buf);
7530 adjust_blocks (GtkAdjustment *adj, ProgressData *pdata)
7532 gtk_progress_set_percentage (GTK_PROGRESS (pdata->pbar), 0);
7533 gtk_progress_bar_set_discrete_blocks (GTK_PROGRESS_BAR (pdata->pbar),
7534 gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (pdata->block_spin)));
7538 adjust_step (GtkAdjustment *adj, ProgressData *pdata)
7540 gtk_progress_bar_set_activity_step (GTK_PROGRESS_BAR (pdata->pbar),
7541 gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (pdata->step_spin)));
7545 adjust_act_blocks (GtkAdjustment *adj, ProgressData *pdata)
7547 gtk_progress_bar_set_activity_blocks (GTK_PROGRESS_BAR (pdata->pbar),
7548 gtk_spin_button_get_value_as_int
7549 (GTK_SPIN_BUTTON (pdata->act_blocks_spin)));
7553 adjust_align (GtkAdjustment *adj, ProgressData *pdata)
7555 gtk_progress_set_text_alignment (GTK_PROGRESS (pdata->pbar),
7556 gtk_spin_button_get_value_as_float
7557 (GTK_SPIN_BUTTON (pdata->x_align_spin)),
7558 gtk_spin_button_get_value_as_float
7559 (GTK_SPIN_BUTTON (pdata->y_align_spin)));
7563 toggle_activity_mode (GtkWidget *widget, ProgressData *pdata)
7565 gtk_progress_set_activity_mode (GTK_PROGRESS (pdata->pbar),
7566 GTK_TOGGLE_BUTTON (widget)->active);
7567 gtk_widget_set_sensitive (pdata->step_spin,
7568 GTK_TOGGLE_BUTTON (widget)->active);
7569 gtk_widget_set_sensitive (pdata->act_blocks_spin,
7570 GTK_TOGGLE_BUTTON (widget)->active);
7574 entry_changed (GtkWidget *widget, ProgressData *pdata)
7576 gtk_progress_set_format_string (GTK_PROGRESS (pdata->pbar),
7577 gtk_entry_get_text (GTK_ENTRY (pdata->entry)));
7581 create_progress_bar (void)
7593 static ProgressData *pdata = NULL;
7595 static OptionMenuItem items1[] =
7597 { "Left-Right", progressbar_toggle_orientation },
7598 { "Right-Left", progressbar_toggle_orientation },
7599 { "Bottom-Top", progressbar_toggle_orientation },
7600 { "Top-Bottom", progressbar_toggle_orientation }
7603 static OptionMenuItem items2[] =
7605 { "Continuous", progressbar_toggle_bar_style },
7606 { "Discrete", progressbar_toggle_bar_style }
7610 pdata = g_new0 (ProgressData, 1);
7614 pdata->window = gtk_dialog_new ();
7616 gtk_window_set_policy (GTK_WINDOW (pdata->window), FALSE, FALSE, TRUE);
7618 gtk_signal_connect (GTK_OBJECT (pdata->window), "destroy",
7619 GTK_SIGNAL_FUNC (destroy_progress),
7624 gtk_window_set_title (GTK_WINDOW (pdata->window), "GtkProgressBar");
7625 gtk_container_set_border_width (GTK_CONTAINER (pdata->window), 0);
7627 vbox = gtk_vbox_new (FALSE, 5);
7628 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
7629 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (pdata->window)->vbox),
7630 vbox, FALSE, TRUE, 0);
7632 frame = gtk_frame_new ("Progress");
7633 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
7635 vbox2 = gtk_vbox_new (FALSE, 5);
7636 gtk_container_add (GTK_CONTAINER (frame), vbox2);
7638 align = gtk_alignment_new (0.5, 0.5, 0, 0);
7639 gtk_box_pack_start (GTK_BOX (vbox2), align, FALSE, FALSE, 5);
7641 adj = (GtkAdjustment *) gtk_adjustment_new (0, 1, 300, 0, 0, 0);
7642 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
7643 GTK_SIGNAL_FUNC (progress_value_changed), pdata);
7645 pdata->pbar = gtk_progress_bar_new_with_adjustment (adj);
7646 gtk_progress_set_format_string (GTK_PROGRESS (pdata->pbar),
7647 "%v from [%l,%u] (=%p%%)");
7648 gtk_container_add (GTK_CONTAINER (align), pdata->pbar);
7649 pdata->timer = gtk_timeout_add (100, progress_timeout, pdata->pbar);
7651 align = gtk_alignment_new (0.5, 0.5, 0, 0);
7652 gtk_box_pack_start (GTK_BOX (vbox2), align, FALSE, FALSE, 5);
7654 hbox = gtk_hbox_new (FALSE, 5);
7655 gtk_container_add (GTK_CONTAINER (align), hbox);
7656 label = gtk_label_new ("Label updated by user :");
7657 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
7658 pdata->label = gtk_label_new ("");
7659 gtk_box_pack_start (GTK_BOX (hbox), pdata->label, FALSE, TRUE, 0);
7661 frame = gtk_frame_new ("Options");
7662 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
7664 vbox2 = gtk_vbox_new (FALSE, 5);
7665 gtk_container_add (GTK_CONTAINER (frame), vbox2);
7667 tab = gtk_table_new (7, 2, FALSE);
7668 gtk_box_pack_start (GTK_BOX (vbox2), tab, FALSE, TRUE, 0);
7670 label = gtk_label_new ("Orientation :");
7671 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 0, 1,
7672 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7674 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
7676 pdata->omenu1 = build_option_menu (items1, 4, 0, pdata);
7677 hbox = gtk_hbox_new (FALSE, 0);
7678 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 0, 1,
7679 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7681 gtk_box_pack_start (GTK_BOX (hbox), pdata->omenu1, TRUE, TRUE, 0);
7683 check = gtk_check_button_new_with_label ("Show text");
7684 gtk_signal_connect (GTK_OBJECT (check), "clicked",
7685 GTK_SIGNAL_FUNC (toggle_show_text),
7687 gtk_table_attach (GTK_TABLE (tab), check, 0, 1, 1, 2,
7688 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7691 hbox = gtk_hbox_new (FALSE, 0);
7692 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 1, 2,
7693 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7696 label = gtk_label_new ("Format : ");
7697 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
7699 pdata->entry = gtk_entry_new ();
7700 gtk_signal_connect (GTK_OBJECT (pdata->entry), "changed",
7701 GTK_SIGNAL_FUNC (entry_changed),
7703 gtk_box_pack_start (GTK_BOX (hbox), pdata->entry, TRUE, TRUE, 0);
7704 gtk_entry_set_text (GTK_ENTRY (pdata->entry), "%v from [%l,%u] (=%p%%)");
7705 gtk_widget_set_usize (pdata->entry, 100, -1);
7706 gtk_widget_set_sensitive (pdata->entry, FALSE);
7708 label = gtk_label_new ("Text align :");
7709 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 2, 3,
7710 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7712 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
7714 hbox = gtk_hbox_new (FALSE, 0);
7715 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 2, 3,
7716 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7719 label = gtk_label_new ("x :");
7720 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 5);
7722 adj = (GtkAdjustment *) gtk_adjustment_new (0.5, 0, 1, 0.1, 0.1, 0);
7723 pdata->x_align_spin = gtk_spin_button_new (adj, 0, 1);
7724 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
7725 GTK_SIGNAL_FUNC (adjust_align), pdata);
7726 gtk_box_pack_start (GTK_BOX (hbox), pdata->x_align_spin, FALSE, TRUE, 0);
7727 gtk_widget_set_sensitive (pdata->x_align_spin, FALSE);
7729 label = gtk_label_new ("y :");
7730 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 5);
7732 adj = (GtkAdjustment *) gtk_adjustment_new (0.5, 0, 1, 0.1, 0.1, 0);
7733 pdata->y_align_spin = gtk_spin_button_new (adj, 0, 1);
7734 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
7735 GTK_SIGNAL_FUNC (adjust_align), pdata);
7736 gtk_box_pack_start (GTK_BOX (hbox), pdata->y_align_spin, FALSE, TRUE, 0);
7737 gtk_widget_set_sensitive (pdata->y_align_spin, FALSE);
7739 label = gtk_label_new ("Bar Style :");
7740 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 3, 4,
7741 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7743 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
7745 pdata->omenu2 = build_option_menu (items2, 2, 0, pdata);
7746 hbox = gtk_hbox_new (FALSE, 0);
7747 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 3, 4,
7748 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7750 gtk_box_pack_start (GTK_BOX (hbox), pdata->omenu2, TRUE, TRUE, 0);
7752 label = gtk_label_new ("Block count :");
7753 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 4, 5,
7754 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7756 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
7758 hbox = gtk_hbox_new (FALSE, 0);
7759 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 4, 5,
7760 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7762 adj = (GtkAdjustment *) gtk_adjustment_new (10, 2, 20, 1, 5, 0);
7763 pdata->block_spin = gtk_spin_button_new (adj, 0, 0);
7764 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
7765 GTK_SIGNAL_FUNC (adjust_blocks), pdata);
7766 gtk_box_pack_start (GTK_BOX (hbox), pdata->block_spin, FALSE, TRUE, 0);
7767 gtk_widget_set_sensitive (pdata->block_spin, FALSE);
7769 check = gtk_check_button_new_with_label ("Activity mode");
7770 gtk_signal_connect (GTK_OBJECT (check), "clicked",
7771 GTK_SIGNAL_FUNC (toggle_activity_mode),
7773 gtk_table_attach (GTK_TABLE (tab), check, 0, 1, 5, 6,
7774 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7777 hbox = gtk_hbox_new (FALSE, 0);
7778 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 5, 6,
7779 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7781 label = gtk_label_new ("Step size : ");
7782 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
7783 adj = (GtkAdjustment *) gtk_adjustment_new (3, 1, 20, 1, 5, 0);
7784 pdata->step_spin = gtk_spin_button_new (adj, 0, 0);
7785 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
7786 GTK_SIGNAL_FUNC (adjust_step), pdata);
7787 gtk_box_pack_start (GTK_BOX (hbox), pdata->step_spin, FALSE, TRUE, 0);
7788 gtk_widget_set_sensitive (pdata->step_spin, FALSE);
7790 hbox = gtk_hbox_new (FALSE, 0);
7791 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 6, 7,
7792 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
7794 label = gtk_label_new ("Blocks : ");
7795 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
7796 adj = (GtkAdjustment *) gtk_adjustment_new (5, 2, 10, 1, 5, 0);
7797 pdata->act_blocks_spin = gtk_spin_button_new (adj, 0, 0);
7798 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
7799 GTK_SIGNAL_FUNC (adjust_act_blocks), pdata);
7800 gtk_box_pack_start (GTK_BOX (hbox), pdata->act_blocks_spin, FALSE, TRUE,
7802 gtk_widget_set_sensitive (pdata->act_blocks_spin, FALSE);
7804 button = gtk_button_new_with_label ("close");
7805 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7806 GTK_SIGNAL_FUNC (gtk_widget_destroy),
7807 GTK_OBJECT (pdata->window));
7808 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7809 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (pdata->window)->action_area),
7810 button, TRUE, TRUE, 0);
7811 gtk_widget_grab_default (button);
7814 if (!GTK_WIDGET_VISIBLE (pdata->window))
7815 gtk_widget_show_all (pdata->window);
7817 gtk_widget_destroy (pdata->window);
7824 static int color_idle = 0;
7827 color_idle_func (GtkWidget *preview)
7829 static int count = 1;
7833 for (i = 0; i < 256; i++)
7835 for (j = 0, k = 0; j < 256; j++)
7837 buf[k+0] = i + count;
7839 buf[k+2] = j + count;
7843 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
7848 gtk_widget_draw (preview, NULL);
7854 color_preview_destroy (GtkWidget *widget,
7857 gtk_idle_remove (color_idle);
7864 create_color_preview (void)
7866 static GtkWidget *window = NULL;
7873 gtk_widget_push_colormap (gdk_rgb_get_cmap ());
7874 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7875 gtk_widget_pop_colormap ();
7877 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7878 GTK_SIGNAL_FUNC(color_preview_destroy),
7881 gtk_window_set_title (GTK_WINDOW (window), "test");
7882 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
7884 preview = gtk_preview_new (GTK_PREVIEW_COLOR);
7885 gtk_preview_size (GTK_PREVIEW (preview), 256, 256);
7886 gtk_container_add (GTK_CONTAINER (window), preview);
7888 for (i = 0; i < 256; i++)
7890 for (j = 0, k = 0; j < 256; j++)
7898 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
7901 color_idle = gtk_idle_add ((GtkFunction) color_idle_func, preview);
7904 if (!GTK_WIDGET_VISIBLE (window))
7905 gtk_widget_show_all (window);
7907 gtk_widget_destroy (window);
7914 static int gray_idle = 0;
7917 gray_idle_func (GtkWidget *preview)
7919 static int count = 1;
7923 for (i = 0; i < 256; i++)
7925 for (j = 0; j < 256; j++)
7926 buf[j] = i + j + count;
7928 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
7933 gtk_widget_draw (preview, NULL);
7939 gray_preview_destroy (GtkWidget *widget,
7942 gtk_idle_remove (gray_idle);
7949 create_gray_preview (void)
7951 static GtkWidget *window = NULL;
7958 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7960 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7961 GTK_SIGNAL_FUNC(gray_preview_destroy),
7964 gtk_window_set_title (GTK_WINDOW (window), "test");
7965 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
7967 preview = gtk_preview_new (GTK_PREVIEW_GRAYSCALE);
7968 gtk_preview_size (GTK_PREVIEW (preview), 256, 256);
7969 gtk_container_add (GTK_CONTAINER (window), preview);
7971 for (i = 0; i < 256; i++)
7973 for (j = 0; j < 256; j++)
7976 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
7979 gray_idle = gtk_idle_add ((GtkFunction) gray_idle_func, preview);
7982 if (!GTK_WIDGET_VISIBLE (window))
7983 gtk_widget_show_all (window);
7985 gtk_widget_destroy (window);
7994 selection_test_received (GtkWidget *list, GtkSelectionData *data)
7997 GtkWidget *list_item;
8001 if (data->length < 0)
8003 g_print ("Selection retrieval failed\n");
8006 if (data->type != GDK_SELECTION_TYPE_ATOM)
8008 g_print ("Selection \"TARGETS\" was not returned as atoms!\n");
8012 /* Clear out any current list items */
8014 gtk_list_clear_items (GTK_LIST(list), 0, -1);
8016 /* Add new items to list */
8018 atoms = (GdkAtom *)data->data;
8021 l = data->length / sizeof (GdkAtom);
8022 for (i = 0; i < l; i++)
8025 name = gdk_atom_name (atoms[i]);
8028 list_item = gtk_list_item_new_with_label (name);
8032 list_item = gtk_list_item_new_with_label ("(bad atom)");
8034 gtk_widget_show (list_item);
8035 item_list = g_list_append (item_list, list_item);
8038 gtk_list_append_items (GTK_LIST (list), item_list);
8044 selection_test_get_targets (GtkWidget *widget, GtkWidget *list)
8046 static GdkAtom targets_atom = GDK_NONE;
8048 if (targets_atom == GDK_NONE)
8049 targets_atom = gdk_atom_intern ("TARGETS", FALSE);
8051 gtk_selection_convert (list, GDK_SELECTION_PRIMARY, targets_atom,
8056 create_selection_test (void)
8058 static GtkWidget *window = NULL;
8061 GtkWidget *scrolled_win;
8067 window = gtk_dialog_new ();
8069 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8070 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
8073 gtk_window_set_title (GTK_WINDOW (window), "Selection Test");
8074 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
8076 /* Create the list */
8078 vbox = gtk_vbox_new (FALSE, 5);
8079 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
8080 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), vbox,
8083 label = gtk_label_new ("Gets available targets for current selection");
8084 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
8086 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
8087 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
8088 GTK_POLICY_AUTOMATIC,
8089 GTK_POLICY_AUTOMATIC);
8090 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
8091 gtk_widget_set_usize (scrolled_win, 100, 200);
8093 list = gtk_list_new ();
8094 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_win), list);
8096 gtk_signal_connect (GTK_OBJECT(list), "selection_received",
8097 GTK_SIGNAL_FUNC (selection_test_received), NULL);
8099 /* .. And create some buttons */
8100 button = gtk_button_new_with_label ("Get Targets");
8101 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8102 button, TRUE, TRUE, 0);
8104 gtk_signal_connect (GTK_OBJECT (button), "clicked",
8105 GTK_SIGNAL_FUNC (selection_test_get_targets), list);
8107 button = gtk_button_new_with_label ("Quit");
8108 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8109 button, TRUE, TRUE, 0);
8111 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
8112 GTK_SIGNAL_FUNC (gtk_widget_destroy),
8113 GTK_OBJECT (window));
8116 if (!GTK_WIDGET_VISIBLE (window))
8117 gtk_widget_show_all (window);
8119 gtk_widget_destroy (window);
8127 create_gamma_curve (void)
8129 static GtkWidget *window = NULL, *curve;
8130 static int count = 0;
8137 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
8138 gtk_window_set_title (GTK_WINDOW (window), "test");
8139 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
8141 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8142 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
8145 curve = gtk_gamma_curve_new ();
8146 gtk_container_add (GTK_CONTAINER (window), curve);
8147 gtk_widget_show (curve);
8150 max = 127 + (count % 2)*128;
8151 gtk_curve_set_range (GTK_CURVE (GTK_GAMMA_CURVE (curve)->curve),
8153 for (i = 0; i < max; ++i)
8154 vec[i] = (127 / sqrt (max)) * sqrt (i);
8155 gtk_curve_set_vector (GTK_CURVE (GTK_GAMMA_CURVE (curve)->curve),
8158 if (!GTK_WIDGET_VISIBLE (window))
8159 gtk_widget_show (window);
8160 else if (count % 4 == 3)
8162 gtk_widget_destroy (window);
8173 static int scroll_test_pos = 0.0;
8174 static GdkGC *scroll_test_gc = NULL;
8177 scroll_test_expose (GtkWidget *widget, GdkEventExpose *event,
8181 gint imin, imax, jmin, jmax;
8183 imin = (event->area.x) / 10;
8184 imax = (event->area.x + event->area.width + 9) / 10;
8186 jmin = ((int)adj->value + event->area.y) / 10;
8187 jmax = ((int)adj->value + event->area.y + event->area.height + 9) / 10;
8189 gdk_window_clear_area (widget->window,
8190 event->area.x, event->area.y,
8191 event->area.width, event->area.height);
8193 for (i=imin; i<imax; i++)
8194 for (j=jmin; j<jmax; j++)
8196 gdk_draw_rectangle (widget->window,
8197 widget->style->black_gc,
8199 10*i, 10*j - (int)adj->value, 1+i%10, 1+j%10);
8205 scroll_test_scroll (GtkWidget *widget, GdkEventScroll *event,
8208 gfloat new_value = adj->value + ((event->direction == GDK_SCROLL_UP) ?
8209 -adj->page_increment / 2:
8210 adj->page_increment / 2);
8211 new_value = CLAMP (new_value, adj->lower, adj->upper - adj->page_size);
8212 gtk_adjustment_set_value (adj, new_value);
8218 scroll_test_configure (GtkWidget *widget, GdkEventConfigure *event,
8221 adj->page_increment = 0.9 * widget->allocation.height;
8222 adj->page_size = widget->allocation.height;
8224 gtk_signal_emit_by_name (GTK_OBJECT (adj), "changed");
8228 scroll_test_adjustment_changed (GtkAdjustment *adj, GtkWidget *widget)
8230 gint source_min = (int)adj->value - scroll_test_pos;
8231 gint source_max = source_min + widget->allocation.height;
8233 gint dest_max = widget->allocation.height;
8237 scroll_test_pos = adj->value;
8239 if (!GTK_WIDGET_DRAWABLE (widget))
8246 rect.width = widget->allocation.width;
8247 rect.height = -source_min;
8248 if (rect.height > widget->allocation.height)
8249 rect.height = widget->allocation.height;
8252 dest_min = rect.height;
8257 rect.y = 2*widget->allocation.height - source_max;
8260 rect.width = widget->allocation.width;
8261 rect.height = widget->allocation.height - rect.y;
8263 source_max = widget->allocation.height;
8267 if (source_min != source_max)
8269 if (scroll_test_gc == NULL)
8271 scroll_test_gc = gdk_gc_new (widget->window);
8272 gdk_gc_set_exposures (scroll_test_gc, TRUE);
8275 gdk_draw_pixmap (widget->window,
8280 widget->allocation.width,
8281 source_max - source_min);
8283 /* Make sure graphics expose events are processed before scrolling
8286 while ((event = gdk_event_get_graphics_expose (widget->window)) != NULL)
8288 gtk_widget_event (widget, event);
8289 if (event->expose.count == 0)
8291 gdk_event_free (event);
8294 gdk_event_free (event);
8298 if (rect.height != 0)
8299 gtk_widget_draw (widget, &rect);
8304 create_scroll_test (void)
8306 static GtkWidget *window = NULL;
8308 GtkWidget *drawing_area;
8309 GtkWidget *scrollbar;
8312 GdkGeometry geometry;
8313 GdkWindowHints geometry_mask;
8317 window = gtk_dialog_new ();
8319 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8320 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
8323 gtk_window_set_title (GTK_WINDOW (window), "Scroll Test");
8324 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
8326 hbox = gtk_hbox_new (FALSE, 0);
8327 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), hbox,
8329 gtk_widget_show (hbox);
8331 drawing_area = gtk_drawing_area_new ();
8332 gtk_drawing_area_size (GTK_DRAWING_AREA (drawing_area), 200, 200);
8333 gtk_box_pack_start (GTK_BOX (hbox), drawing_area, TRUE, TRUE, 0);
8334 gtk_widget_show (drawing_area);
8336 gtk_widget_set_events (drawing_area, GDK_EXPOSURE_MASK | GDK_SCROLL_MASK);
8338 adj = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.0, 1000.0, 1.0, 180.0, 200.0));
8339 scroll_test_pos = 0.0;
8341 scrollbar = gtk_vscrollbar_new (adj);
8342 gtk_box_pack_start (GTK_BOX (hbox), scrollbar, FALSE, FALSE, 0);
8343 gtk_widget_show (scrollbar);
8345 gtk_signal_connect (GTK_OBJECT (drawing_area), "expose_event",
8346 GTK_SIGNAL_FUNC (scroll_test_expose), adj);
8347 gtk_signal_connect (GTK_OBJECT (drawing_area), "configure_event",
8348 GTK_SIGNAL_FUNC (scroll_test_configure), adj);
8349 gtk_signal_connect (GTK_OBJECT (drawing_area), "scroll_event",
8350 GTK_SIGNAL_FUNC (scroll_test_scroll), adj);
8352 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
8353 GTK_SIGNAL_FUNC (scroll_test_adjustment_changed),
8356 /* .. And create some buttons */
8358 button = gtk_button_new_with_label ("Quit");
8359 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8360 button, TRUE, TRUE, 0);
8362 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
8363 GTK_SIGNAL_FUNC (gtk_widget_destroy),
8364 GTK_OBJECT (window));
8365 gtk_widget_show (button);
8367 /* Set up gridded geometry */
8369 geometry_mask = GDK_HINT_MIN_SIZE |
8370 GDK_HINT_BASE_SIZE |
8371 GDK_HINT_RESIZE_INC;
8373 geometry.min_width = 20;
8374 geometry.min_height = 20;
8375 geometry.base_width = 0;
8376 geometry.base_height = 0;
8377 geometry.width_inc = 10;
8378 geometry.height_inc = 10;
8380 gtk_window_set_geometry_hints (GTK_WINDOW (window),
8381 drawing_area, &geometry, geometry_mask);
8384 if (!GTK_WIDGET_VISIBLE (window))
8385 gtk_widget_show (window);
8387 gtk_widget_destroy (window);
8394 static int timer = 0;
8397 timeout_test (GtkWidget *label)
8399 static int count = 0;
8400 static char buffer[32];
8402 sprintf (buffer, "count: %d", ++count);
8403 gtk_label_set_text (GTK_LABEL (label), buffer);
8409 start_timeout_test (GtkWidget *widget,
8414 timer = gtk_timeout_add (100, (GtkFunction) timeout_test, label);
8419 stop_timeout_test (GtkWidget *widget,
8424 gtk_timeout_remove (timer);
8430 destroy_timeout_test (GtkWidget *widget,
8433 stop_timeout_test (NULL, NULL);
8439 create_timeout_test (void)
8441 static GtkWidget *window = NULL;
8447 window = gtk_dialog_new ();
8449 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8450 GTK_SIGNAL_FUNC(destroy_timeout_test),
8453 gtk_window_set_title (GTK_WINDOW (window), "Timeout Test");
8454 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
8456 label = gtk_label_new ("count: 0");
8457 gtk_misc_set_padding (GTK_MISC (label), 10, 10);
8458 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
8459 label, TRUE, TRUE, 0);
8460 gtk_widget_show (label);
8462 button = gtk_button_new_with_label ("close");
8463 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
8464 GTK_SIGNAL_FUNC(gtk_widget_destroy),
8465 GTK_OBJECT (window));
8466 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8467 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8468 button, TRUE, TRUE, 0);
8469 gtk_widget_grab_default (button);
8470 gtk_widget_show (button);
8472 button = gtk_button_new_with_label ("start");
8473 gtk_signal_connect (GTK_OBJECT (button), "clicked",
8474 GTK_SIGNAL_FUNC(start_timeout_test),
8476 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8477 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8478 button, TRUE, TRUE, 0);
8479 gtk_widget_show (button);
8481 button = gtk_button_new_with_label ("stop");
8482 gtk_signal_connect (GTK_OBJECT (button), "clicked",
8483 GTK_SIGNAL_FUNC(stop_timeout_test),
8485 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8486 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8487 button, TRUE, TRUE, 0);
8488 gtk_widget_show (button);
8491 if (!GTK_WIDGET_VISIBLE (window))
8492 gtk_widget_show (window);
8494 gtk_widget_destroy (window);
8501 static int idle_id = 0;
8504 idle_test (GtkWidget *label)
8506 static int count = 0;
8507 static char buffer[32];
8509 sprintf (buffer, "count: %d", ++count);
8510 gtk_label_set_text (GTK_LABEL (label), buffer);
8516 start_idle_test (GtkWidget *widget,
8521 idle_id = gtk_idle_add ((GtkFunction) idle_test, label);
8526 stop_idle_test (GtkWidget *widget,
8531 gtk_idle_remove (idle_id);
8537 destroy_idle_test (GtkWidget *widget,
8540 stop_idle_test (NULL, NULL);
8546 toggle_idle_container (GtkObject *button,
8547 GtkContainer *container)
8549 gtk_container_set_resize_mode (container, GPOINTER_TO_INT (gtk_object_get_user_data (button)));
8553 create_idle_test (void)
8555 static GtkWidget *window = NULL;
8558 GtkWidget *container;
8565 window = gtk_dialog_new ();
8567 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8568 GTK_SIGNAL_FUNC(destroy_idle_test),
8571 gtk_window_set_title (GTK_WINDOW (window), "Idle Test");
8572 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
8574 label = gtk_label_new ("count: 0");
8575 gtk_misc_set_padding (GTK_MISC (label), 10, 10);
8576 gtk_widget_show (label);
8579 gtk_widget_new (GTK_TYPE_HBOX,
8580 "GtkWidget::visible", TRUE,
8581 /* "GtkContainer::child", gtk_widget_new (GTK_TYPE_HBOX,
8582 * "GtkWidget::visible", TRUE,
8584 "GtkContainer::child", label,
8587 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
8588 container, TRUE, TRUE, 0);
8591 gtk_widget_new (GTK_TYPE_FRAME,
8592 "GtkContainer::border_width", 5,
8593 "GtkFrame::label", "Label Container",
8594 "GtkWidget::visible", TRUE,
8595 "GtkWidget::parent", GTK_DIALOG (window)->vbox,
8598 gtk_widget_new (GTK_TYPE_VBOX,
8599 "GtkWidget::visible", TRUE,
8600 "GtkWidget::parent", frame,
8603 gtk_widget_new (GTK_TYPE_RADIO_BUTTON,
8604 "GtkButton::label", "Resize-Parent",
8605 "GtkObject::user_data", (void*)GTK_RESIZE_PARENT,
8606 "GtkObject::signal::clicked", toggle_idle_container, container,
8607 "GtkWidget::visible", TRUE,
8608 "GtkWidget::parent", box,
8611 gtk_widget_new (GTK_TYPE_RADIO_BUTTON,
8612 "GtkButton::label", "Resize-Queue",
8613 "GtkObject::user_data", (void*)GTK_RESIZE_QUEUE,
8614 "GtkObject::signal::clicked", toggle_idle_container, container,
8615 "GtkRadioButton::group", button,
8616 "GtkWidget::visible", TRUE,
8617 "GtkWidget::parent", box,
8620 gtk_widget_new (GTK_TYPE_RADIO_BUTTON,
8621 "GtkButton::label", "Resize-Immediate",
8622 "GtkObject::user_data", (void*)GTK_RESIZE_IMMEDIATE,
8623 "GtkObject::signal::clicked", toggle_idle_container, container,
8624 "GtkRadioButton::group", button,
8625 "GtkWidget::visible", TRUE,
8626 "GtkWidget::parent", box,
8630 button = gtk_button_new_with_label ("close");
8631 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
8632 GTK_SIGNAL_FUNC(gtk_widget_destroy),
8633 GTK_OBJECT (window));
8634 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8635 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8636 button, TRUE, TRUE, 0);
8637 gtk_widget_grab_default (button);
8638 gtk_widget_show (button);
8640 button = gtk_button_new_with_label ("start");
8641 gtk_signal_connect (GTK_OBJECT (button), "clicked",
8642 GTK_SIGNAL_FUNC(start_idle_test),
8644 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8645 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8646 button, TRUE, TRUE, 0);
8647 gtk_widget_show (button);
8649 button = gtk_button_new_with_label ("stop");
8650 gtk_signal_connect (GTK_OBJECT (button), "clicked",
8651 GTK_SIGNAL_FUNC(stop_idle_test),
8653 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8654 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8655 button, TRUE, TRUE, 0);
8656 gtk_widget_show (button);
8659 if (!GTK_WIDGET_VISIBLE (window))
8660 gtk_widget_show (window);
8662 gtk_widget_destroy (window);
8670 reload_rc_file (void)
8674 if (gtk_rc_reparse_all ())
8676 toplevels = gdk_window_get_toplevels();
8680 gdk_window_get_user_data (toplevels->data, (gpointer *)&widget);
8683 gtk_widget_reset_rc_styles (widget);
8685 toplevels = toplevels->next;
8687 g_list_free (toplevels);
8692 reload_all_rc_files (void)
8694 static GdkAtom atom_rcfiles = GDK_NONE;
8700 atom_rcfiles = gdk_atom_intern("_GTK_READ_RCFILES", FALSE);
8702 for(i = 0; i < 5; i++)
8704 sev.data_format = 32;
8705 sev.message_type = atom_rcfiles;
8706 gdk_event_send_clientmessage_toall ((GdkEvent *) &sev);
8710 create_rc_file (void)
8712 static GtkWidget *window = NULL;
8717 window = gtk_dialog_new ();
8719 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8720 GTK_SIGNAL_FUNC(destroy_idle_test),
8723 gtk_window_set_title (GTK_WINDOW (window), "Reload Rc file");
8724 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
8726 button = gtk_button_new_with_label ("Reload");
8727 gtk_signal_connect (GTK_OBJECT (button), "clicked",
8728 GTK_SIGNAL_FUNC(reload_rc_file), NULL);
8729 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8730 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8731 button, TRUE, TRUE, 0);
8732 gtk_widget_grab_default (button);
8733 gtk_widget_show (button);
8735 button = gtk_button_new_with_label ("Reload All");
8736 gtk_signal_connect (GTK_OBJECT (button), "clicked",
8737 GTK_SIGNAL_FUNC(reload_all_rc_files), NULL);
8738 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8739 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8740 button, TRUE, TRUE, 0);
8741 gtk_widget_show (button);
8743 button = gtk_button_new_with_label ("Close");
8744 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
8745 GTK_SIGNAL_FUNC(gtk_widget_destroy),
8746 GTK_OBJECT (window));
8747 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8748 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8749 button, TRUE, TRUE, 0);
8750 gtk_widget_show (button);
8754 if (!GTK_WIDGET_VISIBLE (window))
8755 gtk_widget_show (window);
8757 gtk_widget_destroy (window);
8761 * Test of recursive mainloop
8765 mainloop_destroyed (GtkWidget *w, GtkWidget **window)
8772 create_mainloop (void)
8774 static GtkWidget *window = NULL;
8780 window = gtk_dialog_new ();
8782 gtk_window_set_title (GTK_WINDOW (window), "Test Main Loop");
8784 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8785 GTK_SIGNAL_FUNC(mainloop_destroyed),
8788 label = gtk_label_new ("In recursive main loop...");
8789 gtk_misc_set_padding (GTK_MISC(label), 20, 20);
8791 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), label,
8793 gtk_widget_show (label);
8795 button = gtk_button_new_with_label ("Leave");
8796 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area), button,
8799 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
8800 GTK_SIGNAL_FUNC (gtk_widget_destroy),
8801 GTK_OBJECT (window));
8803 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8804 gtk_widget_grab_default (button);
8806 gtk_widget_show (button);
8809 if (!GTK_WIDGET_VISIBLE (window))
8811 gtk_widget_show (window);
8813 g_print ("create_mainloop: start\n");
8815 g_print ("create_mainloop: done\n");
8818 gtk_widget_destroy (window);
8822 layout_expose_handler (GtkWidget *widget, GdkEventExpose *event)
8827 gint imin, imax, jmin, jmax;
8829 layout = GTK_LAYOUT (widget);
8831 imin = (layout->xoffset + event->area.x) / 10;
8832 imax = (layout->xoffset + event->area.x + event->area.width + 9) / 10;
8834 jmin = (layout->yoffset + event->area.y) / 10;
8835 jmax = (layout->yoffset + event->area.y + event->area.height + 9) / 10;
8837 gdk_window_clear_area (widget->window,
8838 event->area.x, event->area.y,
8839 event->area.width, event->area.height);
8841 for (i=imin; i<imax; i++)
8842 for (j=jmin; j<jmax; j++)
8844 gdk_draw_rectangle (layout->bin_window,
8845 widget->style->black_gc,
8847 10*i - layout->xoffset, 10*j - layout->yoffset,
8853 void create_layout (void)
8855 static GtkWidget *window = NULL;
8857 GtkWidget *scrolledwindow;
8866 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
8867 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8868 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
8871 gtk_window_set_title (GTK_WINDOW (window), "Layout");
8872 gtk_widget_set_usize (window, 200, 200);
8874 scrolledwindow = gtk_scrolled_window_new (NULL, NULL);
8875 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow),
8877 gtk_scrolled_window_set_placement (GTK_SCROLLED_WINDOW (scrolledwindow),
8878 GTK_CORNER_TOP_RIGHT);
8880 gtk_container_add (GTK_CONTAINER (window), scrolledwindow);
8882 layout = gtk_layout_new (NULL, NULL);
8883 gtk_container_add (GTK_CONTAINER (scrolledwindow), layout);
8885 /* We set step sizes here since GtkLayout does not set
8888 GTK_LAYOUT (layout)->hadjustment->step_increment = 10.0;
8889 GTK_LAYOUT (layout)->vadjustment->step_increment = 10.0;
8891 gtk_widget_set_events (layout, GDK_EXPOSURE_MASK);
8892 gtk_signal_connect (GTK_OBJECT (layout), "expose_event",
8893 GTK_SIGNAL_FUNC (layout_expose_handler), NULL);
8895 gtk_layout_set_size (GTK_LAYOUT (layout), 1600, 128000);
8897 for (i=0 ; i < 16 ; i++)
8898 for (j=0 ; j < 16 ; j++)
8900 sprintf(buf, "Button %d, %d", i, j);
8902 button = gtk_button_new_with_label (buf);
8904 button = gtk_label_new (buf);
8906 gtk_layout_put (GTK_LAYOUT (layout), button,
8910 for (i=16; i < 1280; i++)
8912 sprintf(buf, "Button %d, %d", i, 0);
8914 button = gtk_button_new_with_label (buf);
8916 button = gtk_label_new (buf);
8918 gtk_layout_put (GTK_LAYOUT (layout), button,
8923 if (!GTK_WIDGET_VISIBLE (window))
8924 gtk_widget_show_all (window);
8926 gtk_widget_destroy (window);
8930 create_styles (void)
8932 static GtkWidget *window = NULL;
8937 static GdkColor red = { 0, 0xffff, 0, 0 };
8938 static GdkColor green = { 0, 0, 0xffff, 0 };
8939 static GdkColor blue = { 0, 0, 0, 0xffff };
8940 static GdkColor yellow = { 0, 0xffff, 0xffff, 0 };
8941 static GdkColor cyan = { 0, 0 , 0xffff, 0xffff };
8942 PangoFontDescription *font_desc;
8944 GtkRcStyle *rc_style;
8948 window = gtk_dialog_new ();
8949 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8950 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
8954 button = gtk_button_new_with_label ("Close");
8955 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
8956 GTK_SIGNAL_FUNC(gtk_widget_destroy),
8957 GTK_OBJECT (window));
8958 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8959 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8960 button, TRUE, TRUE, 0);
8961 gtk_widget_show (button);
8963 vbox = gtk_vbox_new (FALSE, 5);
8964 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
8965 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), vbox, FALSE, FALSE, 0);
8967 label = gtk_label_new ("Font:");
8968 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
8969 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
8971 font_desc = pango_font_description_from_string ("Helvetica,Sans Oblique 18");
8973 button = gtk_button_new_with_label ("Some Text");
8974 gtk_widget_modify_font (GTK_BIN (button)->child, font_desc);
8975 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8977 label = gtk_label_new ("Foreground:");
8978 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
8979 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
8981 button = gtk_button_new_with_label ("Some Text");
8982 gtk_widget_modify_fg (GTK_BIN (button)->child, GTK_STATE_NORMAL, &red);
8983 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8985 label = gtk_label_new ("Background:");
8986 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
8987 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
8989 button = gtk_button_new_with_label ("Some Text");
8990 gtk_widget_modify_bg (button, GTK_STATE_NORMAL, &green);
8991 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
8993 label = gtk_label_new ("Text:");
8994 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
8995 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
8997 entry = gtk_entry_new ();
8998 gtk_entry_set_text (GTK_ENTRY (entry), "Some Text");
8999 gtk_widget_modify_text (entry, GTK_STATE_NORMAL, &blue);
9000 gtk_box_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 0);
9002 label = gtk_label_new ("Base:");
9003 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
9004 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9006 entry = gtk_entry_new ();
9007 gtk_entry_set_text (GTK_ENTRY (entry), "Some Text");
9008 gtk_widget_modify_base (entry, GTK_STATE_NORMAL, &yellow);
9009 gtk_box_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 0);
9011 label = gtk_label_new ("Multiple:");
9012 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
9013 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9015 button = gtk_button_new_with_label ("Some Text");
9017 rc_style = gtk_rc_style_new ();
9019 rc_style->font_desc = font_desc;
9020 rc_style->color_flags[GTK_STATE_NORMAL] = GTK_RC_FG | GTK_RC_BG;
9021 rc_style->color_flags[GTK_STATE_PRELIGHT] = GTK_RC_FG | GTK_RC_BG;
9022 rc_style->color_flags[GTK_STATE_ACTIVE] = GTK_RC_FG | GTK_RC_BG;
9023 rc_style->fg[GTK_STATE_NORMAL] = yellow;
9024 rc_style->bg[GTK_STATE_NORMAL] = blue;
9025 rc_style->fg[GTK_STATE_PRELIGHT] = blue;
9026 rc_style->bg[GTK_STATE_PRELIGHT] = yellow;
9027 rc_style->fg[GTK_STATE_ACTIVE] = red;
9028 rc_style->bg[GTK_STATE_ACTIVE] = cyan;
9029 rc_style->xthickness = 5;
9030 rc_style->ythickness = 5;
9032 gtk_widget_modify_style (button, rc_style);
9033 gtk_widget_modify_style (GTK_BIN (button)->child, rc_style);
9035 g_object_unref (G_OBJECT (rc_style));
9037 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
9040 if (!GTK_WIDGET_VISIBLE (window))
9041 gtk_widget_show_all (window);
9043 gtk_widget_destroy (window);
9047 * Main Window and Exit
9051 do_exit (GtkWidget *widget, GtkWidget *window)
9053 gtk_widget_destroy (window);
9058 create_main_window (void)
9065 { "button box", create_button_box },
9066 { "buttons", create_buttons },
9067 { "check buttons", create_check_buttons },
9068 { "clist", create_clist},
9069 { "color selection", create_color_selection },
9070 { "ctree", create_ctree },
9071 { "cursors", create_cursors },
9072 { "dialog", create_dialog },
9073 /* { "dnd", create_dnd }, */
9074 { "entry", create_entry },
9075 { "event watcher", create_event_watcher },
9076 { "file selection", create_file_selection },
9077 { "flipping", create_flipping },
9078 { "font selection", create_font_selection },
9079 { "gamma curve", create_gamma_curve },
9080 { "handle box", create_handle_box },
9081 { "image from drawable", create_get_image },
9082 { "image", create_image },
9083 { "item factory", create_item_factory },
9084 { "labels", create_labels },
9085 { "layout", create_layout },
9086 { "list", create_list },
9087 { "menus", create_menus },
9088 { "message dialog", create_message_dialog },
9089 { "modal window", create_modal_window },
9090 { "notebook", create_notebook },
9091 { "panes", create_panes },
9092 { "pixmap", create_pixmap },
9093 { "preview color", create_color_preview },
9094 { "preview gray", create_gray_preview },
9095 { "progress bar", create_progress_bar },
9096 { "radio buttons", create_radio_buttons },
9097 { "range controls", create_range_controls },
9098 { "rc file", create_rc_file },
9099 { "reparent", create_reparent },
9100 { "rulers", create_rulers },
9101 { "saved position", create_saved_position },
9102 { "scrolled windows", create_scrolled_windows },
9103 { "shapes", create_shapes },
9104 { "spinbutton", create_spins },
9105 { "statusbar", create_statusbar },
9106 { "styles", create_styles },
9107 { "test idle", create_idle_test },
9108 { "test mainloop", create_mainloop },
9109 { "test scrolling", create_scroll_test },
9110 { "test selection", create_selection_test },
9111 { "test timeout", create_timeout_test },
9112 { "text", create_text },
9113 { "toggle buttons", create_toggle_buttons },
9114 { "toolbar", create_toolbar },
9115 { "tooltips", create_tooltips },
9116 { "tree", create_tree_mode_window},
9117 { "WM hints", create_wmhints },
9119 int nbuttons = sizeof (buttons) / sizeof (buttons[0]);
9123 GtkWidget *scrolled_window;
9127 GtkWidget *separator;
9130 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
9131 gtk_window_set_policy (GTK_WINDOW (window), FALSE, FALSE, FALSE);
9132 gtk_widget_set_name (window, "main window");
9133 gtk_widget_set_usize (window, 200, 400);
9134 gtk_widget_set_uposition (window, 20, 20);
9136 gtk_signal_connect (GTK_OBJECT (window), "destroy",
9137 GTK_SIGNAL_FUNC(gtk_main_quit),
9139 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
9140 GTK_SIGNAL_FUNC (gtk_false),
9143 box1 = gtk_vbox_new (FALSE, 0);
9144 gtk_container_add (GTK_CONTAINER (window), box1);
9146 if (gtk_micro_version > 0)
9158 label = gtk_label_new (buffer);
9159 gtk_box_pack_start (GTK_BOX (box1), label, FALSE, FALSE, 0);
9161 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
9162 gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10);
9163 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
9164 GTK_POLICY_AUTOMATIC,
9165 GTK_POLICY_AUTOMATIC);
9166 gtk_box_pack_start (GTK_BOX (box1), scrolled_window, TRUE, TRUE, 0);
9168 box2 = gtk_vbox_new (FALSE, 0);
9169 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
9170 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), box2);
9171 gtk_container_set_focus_vadjustment (GTK_CONTAINER (box2),
9172 gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
9173 gtk_widget_show (box2);
9175 for (i = 0; i < nbuttons; i++)
9177 button = gtk_button_new_with_label (buttons[i].label);
9178 if (buttons[i].func)
9179 gtk_signal_connect (GTK_OBJECT (button),
9181 GTK_SIGNAL_FUNC(buttons[i].func),
9184 gtk_widget_set_sensitive (button, FALSE);
9185 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
9188 separator = gtk_hseparator_new ();
9189 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
9191 box2 = gtk_vbox_new (FALSE, 10);
9192 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
9193 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
9195 button = gtk_button_new_with_label ("close");
9196 gtk_signal_connect (GTK_OBJECT (button), "clicked",
9197 GTK_SIGNAL_FUNC (do_exit),
9199 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
9200 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
9201 gtk_widget_grab_default (button);
9203 gtk_widget_show_all (window);
9209 if (file_exists ("../gdk-pixbuf/.libs/libpixbufloader-pnm.so"))
9210 putenv ("GDK_PIXBUF_MODULEDIR=../gdk-pixbuf/.libs");
9214 main (int argc, char *argv[])
9216 GtkBindingSet *binding_set;
9218 srand (time (NULL));
9223 /* Check to see if we are being run from the correct
9226 if (file_exists ("testgtkrc"))
9227 gtk_rc_add_default_file ("testgtkrc");
9229 gtk_init (&argc, &argv);
9233 binding_set = gtk_binding_set_by_class (gtk_type_class (GTK_TYPE_WIDGET));
9234 gtk_binding_entry_add_signal (binding_set,
9235 '9', GDK_CONTROL_MASK | GDK_RELEASE_MASK,
9238 GTK_TYPE_STRING, "GtkWidgetClass <ctrl><release>9 test");
9240 create_main_window ();
9247 while (g_main_pending ())
9248 g_main_iteration (FALSE);
9250 while (g_main_pending ())
9251 g_main_iteration (FALSE);