1 /* GTK - The GIMP Toolkit
2 * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the
16 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17 * Boston, MA 02111-1307, USA.
21 * Modified by the GTK+ Team and others 1997-2000. See the AUTHORS
22 * file for a list of people on the GTK+ Team. See the ChangeLog
23 * files for a list of changes. These files are distributed with
24 * GTK+ at ftp://ftp.gtk.org/pub/gtk/.
41 #define GTK_ENABLE_BROKEN
44 #include "gdk/gdkkeysyms.h"
47 #define sleep(n) _sleep(n)
50 #include "circles.xbm"
53 typedef struct _OptionMenuItem
60 file_exists (const char *filename)
64 return stat (filename, &statbuf) == 0;
68 shape_create_icon (char *xpm_file,
76 build_option_menu (OptionMenuItem items[],
81 /* macro, structure and variables used by tree window demos */
82 #define DEFAULT_NUMBER_OF_ITEM 3
83 #define DEFAULT_RECURSION_LEVEL 3
86 GSList* selection_mode_group;
87 GtkWidget* single_button;
88 GtkWidget* browse_button;
89 GtkWidget* multiple_button;
90 GtkWidget* draw_line_button;
91 GtkWidget* view_line_button;
92 GtkWidget* no_root_item_button;
93 GtkWidget* nb_item_spinner;
94 GtkWidget* recursion_spinner;
95 } sTreeSampleSelection;
97 typedef struct sTreeButtons {
99 GtkWidget* add_button;
100 GtkWidget* remove_button;
101 GtkWidget* subtree_button;
103 /* end of tree section */
106 build_option_menu (OptionMenuItem items[],
113 GtkWidget *menu_item;
116 omenu = gtk_option_menu_new ();
118 menu = gtk_menu_new ();
120 for (i = 0; i < num_items; i++)
122 menu_item = gtk_menu_item_new_with_label (items[i].name);
123 gtk_signal_connect (GTK_OBJECT (menu_item), "activate",
124 (GtkSignalFunc) items[i].func, data);
125 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
126 gtk_widget_show (menu_item);
129 gtk_option_menu_set_menu (GTK_OPTION_MENU (omenu), menu);
130 gtk_option_menu_set_history (GTK_OPTION_MENU (omenu), history);
136 destroy_tooltips (GtkWidget *widget, GtkWindow **window)
138 GtkTooltips *tt = gtk_object_get_data (GTK_OBJECT (*window), "tooltips");
139 gtk_object_unref (GTK_OBJECT (tt));
148 button_window (GtkWidget *widget,
151 if (!GTK_WIDGET_VISIBLE (button))
152 gtk_widget_show (button);
154 gtk_widget_hide (button);
158 create_buttons (void)
160 static GtkWidget *window = NULL;
164 GtkWidget *button[10];
165 GtkWidget *separator;
169 GtkAccelGroup *accel_group;
171 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
173 accel_group = gtk_window_get_default_accel_group (GTK_WINDOW (window));
175 gtk_signal_connect (GTK_OBJECT (window), "destroy",
176 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
179 gtk_window_set_title (GTK_WINDOW (window), "GtkButton");
180 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
182 box1 = gtk_vbox_new (FALSE, 0);
183 gtk_container_add (GTK_CONTAINER (window), box1);
185 table = gtk_table_new (3, 3, FALSE);
186 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
187 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
188 gtk_container_set_border_width (GTK_CONTAINER (table), 10);
189 gtk_box_pack_start (GTK_BOX (box1), table, TRUE, TRUE, 0);
191 button[0] = gtk_button_new_with_label ("button1");
192 button[1] = gtk_button_new_accel ("_button2", accel_group);
193 button[2] = gtk_button_new_with_label ("button3");
194 button[3] = gtk_button_new_stock (GTK_STOCK_BUTTON_OK, NULL);
195 button[4] = gtk_button_new_with_label ("button5");
196 button[5] = gtk_button_new_with_label ("button6");
197 button[6] = gtk_button_new_with_label ("button7");
198 button[7] = gtk_button_new_stock (GTK_STOCK_BUTTON_CLOSE, accel_group);
199 button[8] = gtk_button_new_with_label ("button9");
201 gtk_signal_connect (GTK_OBJECT (button[0]), "clicked",
202 GTK_SIGNAL_FUNC(button_window),
205 gtk_table_attach (GTK_TABLE (table), button[0], 0, 1, 0, 1,
206 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
208 gtk_signal_connect (GTK_OBJECT (button[1]), "clicked",
209 GTK_SIGNAL_FUNC(button_window),
212 gtk_table_attach (GTK_TABLE (table), button[1], 1, 2, 1, 2,
213 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
215 gtk_signal_connect (GTK_OBJECT (button[2]), "clicked",
216 GTK_SIGNAL_FUNC(button_window),
218 gtk_table_attach (GTK_TABLE (table), button[2], 2, 3, 2, 3,
219 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
221 gtk_signal_connect (GTK_OBJECT (button[3]), "clicked",
222 GTK_SIGNAL_FUNC(button_window),
224 gtk_table_attach (GTK_TABLE (table), button[3], 0, 1, 2, 3,
225 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
227 gtk_signal_connect (GTK_OBJECT (button[4]), "clicked",
228 GTK_SIGNAL_FUNC(button_window),
230 gtk_table_attach (GTK_TABLE (table), button[4], 2, 3, 0, 1,
231 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
233 gtk_signal_connect (GTK_OBJECT (button[5]), "clicked",
234 GTK_SIGNAL_FUNC(button_window),
236 gtk_table_attach (GTK_TABLE (table), button[5], 1, 2, 2, 3,
237 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
239 gtk_signal_connect (GTK_OBJECT (button[6]), "clicked",
240 GTK_SIGNAL_FUNC(button_window),
242 gtk_table_attach (GTK_TABLE (table), button[6], 1, 2, 0, 1,
243 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
245 gtk_signal_connect (GTK_OBJECT (button[7]), "clicked",
246 GTK_SIGNAL_FUNC(button_window),
248 gtk_table_attach (GTK_TABLE (table), button[7], 2, 3, 1, 2,
249 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
251 gtk_signal_connect (GTK_OBJECT (button[8]), "clicked",
252 GTK_SIGNAL_FUNC(button_window),
254 gtk_table_attach (GTK_TABLE (table), button[8], 0, 1, 1, 2,
255 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
257 separator = gtk_hseparator_new ();
258 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
260 box2 = gtk_vbox_new (FALSE, 10);
261 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
262 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
264 button[9] = gtk_button_new_with_label ("close");
265 gtk_signal_connect_object (GTK_OBJECT (button[9]), "clicked",
266 GTK_SIGNAL_FUNC(gtk_widget_destroy),
267 GTK_OBJECT (window));
268 gtk_box_pack_start (GTK_BOX (box2), button[9], TRUE, TRUE, 0);
269 GTK_WIDGET_SET_FLAGS (button[9], GTK_CAN_DEFAULT);
270 gtk_widget_grab_default (button[9]);
273 if (!GTK_WIDGET_VISIBLE (window))
274 gtk_widget_show_all (window);
276 gtk_widget_hide (window);
284 create_toggle_buttons (void)
286 static GtkWidget *window = NULL;
290 GtkWidget *separator;
294 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
296 gtk_signal_connect (GTK_OBJECT (window), "destroy",
297 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
300 gtk_window_set_title (GTK_WINDOW (window), "GtkToggleButton");
301 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
303 box1 = gtk_vbox_new (FALSE, 0);
304 gtk_container_add (GTK_CONTAINER (window), box1);
306 box2 = gtk_vbox_new (FALSE, 10);
307 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
308 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
310 button = gtk_toggle_button_new_with_label ("button1");
311 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
313 button = gtk_toggle_button_new_with_label ("button2");
314 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
316 button = gtk_toggle_button_new_with_label ("button3");
317 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
319 button = gtk_toggle_button_new_with_label ("inconsistent");
320 gtk_toggle_button_set_inconsistent (GTK_TOGGLE_BUTTON (button), TRUE);
321 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
323 separator = gtk_hseparator_new ();
324 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
326 box2 = gtk_vbox_new (FALSE, 10);
327 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
328 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
330 button = gtk_button_new_with_label ("close");
331 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
332 GTK_SIGNAL_FUNC(gtk_widget_destroy),
333 GTK_OBJECT (window));
334 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
335 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
336 gtk_widget_grab_default (button);
339 if (!GTK_WIDGET_VISIBLE (window))
340 gtk_widget_show_all (window);
342 gtk_widget_destroy (window);
350 create_check_buttons (void)
352 static GtkWidget *window = NULL;
356 GtkWidget *separator;
360 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
362 gtk_signal_connect (GTK_OBJECT (window), "destroy",
363 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
366 gtk_window_set_title (GTK_WINDOW (window), "GtkCheckButton");
367 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
369 box1 = gtk_vbox_new (FALSE, 0);
370 gtk_container_add (GTK_CONTAINER (window), box1);
372 box2 = gtk_vbox_new (FALSE, 10);
373 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
374 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
376 button = gtk_check_button_new_with_label ("button1");
377 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
379 button = gtk_check_button_new_with_label ("button2");
380 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
382 button = gtk_check_button_new_with_label ("button3");
383 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
385 button = gtk_check_button_new_with_label ("inconsistent");
386 gtk_toggle_button_set_inconsistent (GTK_TOGGLE_BUTTON (button), TRUE);
387 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
389 separator = gtk_hseparator_new ();
390 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
392 box2 = gtk_vbox_new (FALSE, 10);
393 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
394 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
396 button = gtk_button_new_with_label ("close");
397 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
398 GTK_SIGNAL_FUNC(gtk_widget_destroy),
399 GTK_OBJECT (window));
400 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
401 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
402 gtk_widget_grab_default (button);
405 if (!GTK_WIDGET_VISIBLE (window))
406 gtk_widget_show_all (window);
408 gtk_widget_destroy (window);
416 create_radio_buttons (void)
418 static GtkWidget *window = NULL;
422 GtkWidget *separator;
426 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
428 gtk_signal_connect (GTK_OBJECT (window), "destroy",
429 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
432 gtk_window_set_title (GTK_WINDOW (window), "radio buttons");
433 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
435 box1 = gtk_vbox_new (FALSE, 0);
436 gtk_container_add (GTK_CONTAINER (window), box1);
438 box2 = gtk_vbox_new (FALSE, 10);
439 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
440 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
442 button = gtk_radio_button_new_with_label (NULL, "button1");
443 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
445 button = gtk_radio_button_new_with_label (
446 gtk_radio_button_group (GTK_RADIO_BUTTON (button)),
448 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
449 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
451 button = gtk_radio_button_new_with_label (
452 gtk_radio_button_group (GTK_RADIO_BUTTON (button)),
454 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
456 button = gtk_radio_button_new_with_label (
457 gtk_radio_button_group (GTK_RADIO_BUTTON (button)),
459 gtk_toggle_button_set_inconsistent (GTK_TOGGLE_BUTTON (button), TRUE);
460 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
462 separator = gtk_hseparator_new ();
463 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
465 box2 = gtk_vbox_new (FALSE, 10);
466 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
467 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
469 button = gtk_button_new_with_label ("close");
470 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
471 GTK_SIGNAL_FUNC(gtk_widget_destroy),
472 GTK_OBJECT (window));
473 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
474 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
475 gtk_widget_grab_default (button);
478 if (!GTK_WIDGET_VISIBLE (window))
479 gtk_widget_show_all (window);
481 gtk_widget_destroy (window);
489 create_bbox (gint horizontal,
500 frame = gtk_frame_new (title);
503 bbox = gtk_hbutton_box_new ();
505 bbox = gtk_vbutton_box_new ();
507 gtk_container_set_border_width (GTK_CONTAINER (bbox), 5);
508 gtk_container_add (GTK_CONTAINER (frame), bbox);
510 gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), layout);
511 gtk_button_box_set_spacing (GTK_BUTTON_BOX (bbox), spacing);
512 gtk_button_box_set_child_size (GTK_BUTTON_BOX (bbox), child_w, child_h);
514 button = gtk_button_new_with_label ("OK");
515 gtk_container_add (GTK_CONTAINER (bbox), button);
517 button = gtk_button_new_with_label ("Cancel");
518 gtk_container_add (GTK_CONTAINER (bbox), button);
520 button = gtk_button_new_with_label ("Help");
521 gtk_container_add (GTK_CONTAINER (bbox), button);
527 create_button_box (void)
529 static GtkWidget* window = NULL;
530 GtkWidget *main_vbox;
533 GtkWidget *frame_horz;
534 GtkWidget *frame_vert;
538 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
539 gtk_window_set_title (GTK_WINDOW (window), "Button Boxes");
541 gtk_signal_connect (GTK_OBJECT (window), "destroy",
542 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
545 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
547 main_vbox = gtk_vbox_new (FALSE, 0);
548 gtk_container_add (GTK_CONTAINER (window), main_vbox);
550 frame_horz = gtk_frame_new ("Horizontal Button Boxes");
551 gtk_box_pack_start (GTK_BOX (main_vbox), frame_horz, TRUE, TRUE, 10);
553 vbox = gtk_vbox_new (FALSE, 0);
554 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
555 gtk_container_add (GTK_CONTAINER (frame_horz), vbox);
557 gtk_box_pack_start (GTK_BOX (vbox),
558 create_bbox (TRUE, "Spread", 40, 85, 20, GTK_BUTTONBOX_SPREAD),
561 gtk_box_pack_start (GTK_BOX (vbox),
562 create_bbox (TRUE, "Edge", 40, 85, 20, GTK_BUTTONBOX_EDGE),
565 gtk_box_pack_start (GTK_BOX (vbox),
566 create_bbox (TRUE, "Start", 40, 85, 20, GTK_BUTTONBOX_START),
569 gtk_box_pack_start (GTK_BOX (vbox),
570 create_bbox (TRUE, "End", 40, 85, 20, GTK_BUTTONBOX_END),
573 frame_vert = gtk_frame_new ("Vertical Button Boxes");
574 gtk_box_pack_start (GTK_BOX (main_vbox), frame_vert, TRUE, TRUE, 10);
576 hbox = gtk_hbox_new (FALSE, 0);
577 gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
578 gtk_container_add (GTK_CONTAINER (frame_vert), hbox);
580 gtk_box_pack_start (GTK_BOX (hbox),
581 create_bbox (FALSE, "Spread", 30, 85, 20, GTK_BUTTONBOX_SPREAD),
584 gtk_box_pack_start (GTK_BOX (hbox),
585 create_bbox (FALSE, "Edge", 30, 85, 20, GTK_BUTTONBOX_EDGE),
588 gtk_box_pack_start (GTK_BOX (hbox),
589 create_bbox (FALSE, "Start", 30, 85, 20, GTK_BUTTONBOX_START),
592 gtk_box_pack_start (GTK_BOX (hbox),
593 create_bbox (FALSE, "End", 30, 85, 20, GTK_BUTTONBOX_END),
597 if (!GTK_WIDGET_VISIBLE (window))
598 gtk_widget_show_all (window);
600 gtk_widget_destroy (window);
608 new_pixmap (char *filename,
610 GdkColor *background)
616 if (strcmp (filename, "test.xpm") == 0 ||
617 !file_exists (filename))
619 pixmap = gdk_pixmap_create_from_xpm_d (window, &mask,
624 pixmap = gdk_pixmap_create_from_xpm (window, &mask,
628 wpixmap = gtk_pixmap_new (pixmap, mask);
634 set_toolbar_horizontal (GtkWidget *widget,
637 gtk_toolbar_set_orientation (GTK_TOOLBAR (data), GTK_ORIENTATION_HORIZONTAL);
641 set_toolbar_vertical (GtkWidget *widget,
644 gtk_toolbar_set_orientation (GTK_TOOLBAR (data), GTK_ORIENTATION_VERTICAL);
648 set_toolbar_icons (GtkWidget *widget,
651 gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_ICONS);
655 set_toolbar_text (GtkWidget *widget,
658 gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_TEXT);
662 set_toolbar_both (GtkWidget *widget,
665 gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_BOTH);
669 set_toolbar_both_horiz (GtkWidget *widget,
672 gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_BOTH_HORIZ);
676 set_toolbar_small_space (GtkWidget *widget,
679 gtk_toolbar_set_space_size (GTK_TOOLBAR (data), 5);
683 set_toolbar_big_space (GtkWidget *widget,
686 gtk_toolbar_set_space_size (GTK_TOOLBAR (data), 10);
690 set_toolbar_enable (GtkWidget *widget,
693 gtk_toolbar_set_tooltips (GTK_TOOLBAR (data), TRUE);
697 set_toolbar_disable (GtkWidget *widget,
700 gtk_toolbar_set_tooltips (GTK_TOOLBAR (data), FALSE);
704 set_toolbar_borders (GtkWidget *widget,
707 gtk_toolbar_set_button_relief (GTK_TOOLBAR (data), GTK_RELIEF_NORMAL);
711 set_toolbar_borderless (GtkWidget *widget,
714 gtk_toolbar_set_button_relief (GTK_TOOLBAR (data), GTK_RELIEF_NONE);
718 set_toolbar_space_style_empty (GtkWidget *widget,
721 gtk_toolbar_set_space_style (GTK_TOOLBAR (data), GTK_TOOLBAR_SPACE_EMPTY);
725 set_toolbar_space_style_line (GtkWidget *widget,
728 gtk_toolbar_set_space_style (GTK_TOOLBAR (data), GTK_TOOLBAR_SPACE_LINE);
732 create_toolbar (void)
734 static GtkWidget *window = NULL;
740 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
741 gtk_window_set_title (GTK_WINDOW (window), "Toolbar test");
742 gtk_window_set_policy (GTK_WINDOW (window), FALSE, TRUE, TRUE);
744 gtk_signal_connect (GTK_OBJECT (window), "destroy",
745 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
748 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
749 gtk_widget_realize (window);
751 toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_BOTH);
752 gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NONE);
754 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
755 "Horizontal", "Horizontal toolbar layout", "Toolbar/Horizontal",
756 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
757 (GtkSignalFunc) set_toolbar_horizontal, toolbar);
758 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
759 "Vertical", "Vertical toolbar layout", "Toolbar/Vertical",
760 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
761 (GtkSignalFunc) set_toolbar_vertical, toolbar);
763 gtk_toolbar_append_space (GTK_TOOLBAR(toolbar));
765 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
766 "Icons", "Only show toolbar icons", "Toolbar/IconsOnly",
767 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
768 (GtkSignalFunc) set_toolbar_icons, toolbar);
769 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
770 "Text", "Only show toolbar text", "Toolbar/TextOnly",
771 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
772 (GtkSignalFunc) set_toolbar_text, toolbar);
773 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
774 "Both", "Show toolbar icons and text", "Toolbar/Both",
775 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
776 (GtkSignalFunc) set_toolbar_both, toolbar);
777 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
779 "Show toolbar icons and text in a horizontal fashion",
781 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
782 (GtkSignalFunc) set_toolbar_both_horiz, toolbar);
784 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
786 entry = gtk_entry_new ();
788 gtk_toolbar_append_widget (GTK_TOOLBAR (toolbar), entry, "This is an unusable GtkEntry ;)", "Hey don't click me!!!");
790 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
792 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
793 "Small", "Use small spaces", "Toolbar/Small",
794 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
795 (GtkSignalFunc) set_toolbar_small_space, toolbar);
796 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
797 "Big", "Use big spaces", "Toolbar/Big",
798 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
799 (GtkSignalFunc) set_toolbar_big_space, toolbar);
801 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
803 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
804 "Enable", "Enable tooltips", NULL,
805 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
806 (GtkSignalFunc) set_toolbar_enable, toolbar);
807 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
808 "Disable", "Disable tooltips", NULL,
809 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
810 (GtkSignalFunc) set_toolbar_disable, toolbar);
812 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
814 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
815 "Borders", "Show Borders", NULL,
816 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
817 (GtkSignalFunc) set_toolbar_borders, toolbar);
818 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
819 "Borderless", "Hide Borders", NULL,
820 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
821 (GtkSignalFunc) set_toolbar_borderless, toolbar);
823 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
825 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
826 "Empty", "Empty spaces", NULL,
827 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
828 (GtkSignalFunc) set_toolbar_space_style_empty, toolbar);
829 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
830 "Lines", "Lines in spaces", NULL,
831 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
832 (GtkSignalFunc) set_toolbar_space_style_line, toolbar);
834 gtk_container_add (GTK_CONTAINER (window), toolbar);
837 if (!GTK_WIDGET_VISIBLE (window))
838 gtk_widget_show_all (window);
840 gtk_widget_destroy (window);
844 make_toolbar (GtkWidget *window)
848 if (!GTK_WIDGET_REALIZED (window))
849 gtk_widget_realize (window);
851 toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_BOTH);
852 gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NONE);
854 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
855 "Horizontal", "Horizontal toolbar layout", NULL,
856 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
857 (GtkSignalFunc) set_toolbar_horizontal, toolbar);
858 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
859 "Vertical", "Vertical toolbar layout", NULL,
860 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
861 (GtkSignalFunc) set_toolbar_vertical, toolbar);
863 gtk_toolbar_append_space (GTK_TOOLBAR(toolbar));
865 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
866 "Icons", "Only show toolbar icons", NULL,
867 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
868 (GtkSignalFunc) set_toolbar_icons, toolbar);
869 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
870 "Text", "Only show toolbar text", NULL,
871 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
872 (GtkSignalFunc) set_toolbar_text, toolbar);
873 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
874 "Both", "Show toolbar icons and text", NULL,
875 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
876 (GtkSignalFunc) set_toolbar_both, toolbar);
878 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
880 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
881 "Small", "Use small spaces", NULL,
882 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
883 (GtkSignalFunc) set_toolbar_small_space, toolbar);
884 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
885 "Big", "Use big spaces", "Toolbar/Big",
886 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
887 (GtkSignalFunc) set_toolbar_big_space, toolbar);
889 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
891 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
892 "Enable", "Enable tooltips", NULL,
893 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
894 (GtkSignalFunc) set_toolbar_enable, toolbar);
895 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
896 "Disable", "Disable tooltips", NULL,
897 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
898 (GtkSignalFunc) set_toolbar_disable, toolbar);
900 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
902 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
903 "Borders", "Show Borders", NULL,
904 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
905 (GtkSignalFunc) set_toolbar_borders, toolbar);
906 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
907 "Borderless", "Hide Borders", NULL,
908 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
909 (GtkSignalFunc) set_toolbar_borderless, toolbar);
918 static guint statusbar_counter = 1;
921 statusbar_push (GtkWidget *button,
922 GtkStatusbar *statusbar)
926 sprintf (text, "something %d", statusbar_counter++);
928 gtk_statusbar_push (statusbar, 1, text);
932 statusbar_pop (GtkWidget *button,
933 GtkStatusbar *statusbar)
935 gtk_statusbar_pop (statusbar, 1);
939 statusbar_steal (GtkWidget *button,
940 GtkStatusbar *statusbar)
942 gtk_statusbar_remove (statusbar, 1, 4);
946 statusbar_popped (GtkStatusbar *statusbar,
950 if (!statusbar->messages)
951 statusbar_counter = 1;
955 statusbar_contexts (GtkStatusbar *statusbar)
959 string = "any context";
960 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
962 gtk_statusbar_get_context_id (statusbar, string));
964 string = "idle messages";
965 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
967 gtk_statusbar_get_context_id (statusbar, string));
969 string = "some text";
970 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
972 gtk_statusbar_get_context_id (statusbar, string));
974 string = "hit the mouse";
975 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
977 gtk_statusbar_get_context_id (statusbar, string));
979 string = "hit the mouse2";
980 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
982 gtk_statusbar_get_context_id (statusbar, string));
986 create_statusbar (void)
988 static GtkWidget *window = NULL;
992 GtkWidget *separator;
993 GtkWidget *statusbar;
997 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
999 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1000 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
1003 gtk_window_set_title (GTK_WINDOW (window), "statusbar");
1004 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
1006 box1 = gtk_vbox_new (FALSE, 0);
1007 gtk_container_add (GTK_CONTAINER (window), box1);
1009 box2 = gtk_vbox_new (FALSE, 10);
1010 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
1011 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
1013 statusbar = gtk_statusbar_new ();
1014 gtk_box_pack_end (GTK_BOX (box1), statusbar, TRUE, TRUE, 0);
1015 gtk_signal_connect (GTK_OBJECT (statusbar),
1017 GTK_SIGNAL_FUNC (statusbar_popped),
1020 button = gtk_widget_new (gtk_button_get_type (),
1021 "label", "push something",
1025 g_object_connect (G_OBJECT (button),
1026 "signal::clicked", statusbar_push, statusbar,
1029 button = g_object_connect (gtk_widget_new (gtk_button_get_type (),
1034 "signal_after::clicked", statusbar_pop, statusbar,
1037 button = g_object_connect (gtk_widget_new (gtk_button_get_type (),
1038 "label", "steal #4",
1042 "signal_after::clicked", statusbar_steal, statusbar,
1045 button = g_object_connect (gtk_widget_new (gtk_button_get_type (),
1046 "label", "test contexts",
1050 "swapped_signal_after::clicked", statusbar_contexts, statusbar,
1053 separator = gtk_hseparator_new ();
1054 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
1056 box2 = gtk_vbox_new (FALSE, 10);
1057 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
1058 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
1060 button = gtk_button_new_with_label ("close");
1061 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
1062 GTK_SIGNAL_FUNC(gtk_widget_destroy),
1063 GTK_OBJECT (window));
1064 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
1065 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
1066 gtk_widget_grab_default (button);
1069 if (!GTK_WIDGET_VISIBLE (window))
1070 gtk_widget_show_all (window);
1072 gtk_widget_destroy (window);
1080 cb_tree_destroy_event(GtkWidget* w)
1082 sTreeButtons* tree_buttons;
1084 /* free buttons structure associate at this tree */
1085 tree_buttons = gtk_object_get_user_data (GTK_OBJECT (w));
1086 g_free (tree_buttons);
1090 cb_add_new_item(GtkWidget* w, GtkTree* tree)
1092 sTreeButtons* tree_buttons;
1093 GList* selected_list;
1094 GtkWidget* selected_item;
1096 GtkWidget* item_new;
1099 tree_buttons = gtk_object_get_user_data(GTK_OBJECT(tree));
1101 selected_list = GTK_TREE_SELECTION_OLD(tree);
1103 if(selected_list == NULL)
1105 /* there is no item in tree */
1106 subtree = GTK_WIDGET(tree);
1110 /* list can have only one element */
1111 selected_item = GTK_WIDGET(selected_list->data);
1113 subtree = GTK_TREE_ITEM_SUBTREE(selected_item);
1117 /* current selected item have not subtree ... create it */
1118 subtree = gtk_tree_new();
1119 gtk_tree_item_set_subtree(GTK_TREE_ITEM(selected_item),
1124 /* at this point, we know which subtree will be used to add new item */
1125 /* create a new item */
1126 sprintf(buffer, "item add %d", tree_buttons->nb_item_add);
1127 item_new = gtk_tree_item_new_with_label(buffer);
1128 gtk_tree_append(GTK_TREE(subtree), item_new);
1129 gtk_widget_show(item_new);
1131 tree_buttons->nb_item_add++;
1135 cb_remove_item(GtkWidget*w, GtkTree* tree)
1137 GList* selected_list;
1140 selected_list = GTK_TREE_SELECTION_OLD(tree);
1144 while (selected_list)
1146 clear_list = g_list_prepend (clear_list, selected_list->data);
1147 selected_list = selected_list->next;
1150 clear_list = g_list_reverse (clear_list);
1151 gtk_tree_remove_items(tree, clear_list);
1153 g_list_free (clear_list);
1157 cb_remove_subtree(GtkWidget*w, GtkTree* tree)
1159 GList* selected_list;
1162 selected_list = GTK_TREE_SELECTION_OLD(tree);
1166 item = GTK_TREE_ITEM (selected_list->data);
1168 gtk_tree_item_remove_subtree (item);
1173 cb_tree_changed(GtkTree* tree)
1175 sTreeButtons* tree_buttons;
1176 GList* selected_list;
1179 tree_buttons = gtk_object_get_user_data(GTK_OBJECT(tree));
1181 selected_list = GTK_TREE_SELECTION_OLD(tree);
1182 nb_selected = g_list_length(selected_list);
1184 if(nb_selected == 0)
1186 if(tree->children == NULL)
1187 gtk_widget_set_sensitive(tree_buttons->add_button, TRUE);
1189 gtk_widget_set_sensitive(tree_buttons->add_button, FALSE);
1190 gtk_widget_set_sensitive(tree_buttons->remove_button, FALSE);
1191 gtk_widget_set_sensitive(tree_buttons->subtree_button, FALSE);
1195 gtk_widget_set_sensitive(tree_buttons->remove_button, TRUE);
1196 gtk_widget_set_sensitive(tree_buttons->add_button, (nb_selected == 1));
1197 gtk_widget_set_sensitive(tree_buttons->subtree_button, (nb_selected == 1));
1202 create_subtree(GtkWidget* item, guint level, guint nb_item_max, guint recursion_level_max)
1204 GtkWidget* item_subtree;
1205 GtkWidget* item_new;
1210 if(level == recursion_level_max) return;
1214 /* query with no root item */
1216 item_subtree = item;
1221 /* query with no root item */
1222 /* create subtree and associate it with current item */
1223 item_subtree = gtk_tree_new();
1227 for(nb_item = 0; nb_item < nb_item_max; nb_item++)
1229 sprintf(buffer, "item %d-%d", level, nb_item);
1230 item_new = gtk_tree_item_new_with_label(buffer);
1231 gtk_tree_append(GTK_TREE(item_subtree), item_new);
1232 create_subtree(item_new, level+1, nb_item_max, recursion_level_max);
1233 gtk_widget_show(item_new);
1237 gtk_tree_item_set_subtree(GTK_TREE_ITEM(item), item_subtree);
1241 create_tree_sample(guint selection_mode,
1242 guint draw_line, guint view_line, guint no_root_item,
1243 guint nb_item_max, guint recursion_level_max)
1248 GtkWidget* separator;
1250 GtkWidget* scrolled_win;
1251 GtkWidget* root_tree;
1252 GtkWidget* root_item;
1253 sTreeButtons* tree_buttons;
1255 /* create tree buttons struct */
1256 if ((tree_buttons = g_malloc (sizeof (sTreeButtons))) == NULL)
1258 g_error("can't allocate memory for tree structure !\n");
1261 tree_buttons->nb_item_add = 0;
1263 /* create top level window */
1264 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
1265 gtk_window_set_title(GTK_WINDOW(window), "Tree Sample");
1266 gtk_signal_connect(GTK_OBJECT(window), "destroy",
1267 (GtkSignalFunc) cb_tree_destroy_event, NULL);
1268 gtk_object_set_user_data(GTK_OBJECT(window), tree_buttons);
1270 box1 = gtk_vbox_new(FALSE, 0);
1271 gtk_container_add(GTK_CONTAINER(window), box1);
1272 gtk_widget_show(box1);
1274 /* create tree box */
1275 box2 = gtk_vbox_new(FALSE, 0);
1276 gtk_box_pack_start(GTK_BOX(box1), box2, TRUE, TRUE, 0);
1277 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1278 gtk_widget_show(box2);
1280 /* create scrolled window */
1281 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
1282 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
1283 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1284 gtk_box_pack_start (GTK_BOX (box2), scrolled_win, TRUE, TRUE, 0);
1285 gtk_widget_set_usize (scrolled_win, 200, 200);
1286 gtk_widget_show (scrolled_win);
1288 /* create root tree widget */
1289 root_tree = gtk_tree_new();
1290 gtk_signal_connect(GTK_OBJECT(root_tree), "selection_changed",
1291 (GtkSignalFunc)cb_tree_changed,
1293 gtk_object_set_user_data(GTK_OBJECT(root_tree), tree_buttons);
1294 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_win), root_tree);
1295 gtk_tree_set_selection_mode(GTK_TREE(root_tree), selection_mode);
1296 gtk_tree_set_view_lines(GTK_TREE(root_tree), draw_line);
1297 gtk_tree_set_view_mode(GTK_TREE(root_tree), !view_line);
1298 gtk_widget_show(root_tree);
1302 /* set root tree to subtree function with root item variable */
1303 root_item = GTK_WIDGET(root_tree);
1307 /* create root tree item widget */
1308 root_item = gtk_tree_item_new_with_label("root item");
1309 gtk_tree_append(GTK_TREE(root_tree), root_item);
1310 gtk_widget_show(root_item);
1312 create_subtree(root_item, -no_root_item, nb_item_max, recursion_level_max);
1314 box2 = gtk_vbox_new(FALSE, 0);
1315 gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, FALSE, 0);
1316 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1317 gtk_widget_show(box2);
1319 button = gtk_button_new_with_label("Add Item");
1320 gtk_widget_set_sensitive(button, FALSE);
1321 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1322 (GtkSignalFunc) cb_add_new_item,
1323 (gpointer)root_tree);
1324 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1325 gtk_widget_show(button);
1326 tree_buttons->add_button = button;
1328 button = gtk_button_new_with_label("Remove Item(s)");
1329 gtk_widget_set_sensitive(button, FALSE);
1330 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1331 (GtkSignalFunc) cb_remove_item,
1332 (gpointer)root_tree);
1333 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1334 gtk_widget_show(button);
1335 tree_buttons->remove_button = button;
1337 button = gtk_button_new_with_label("Remove Subtree");
1338 gtk_widget_set_sensitive(button, FALSE);
1339 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1340 (GtkSignalFunc) cb_remove_subtree,
1341 (gpointer)root_tree);
1342 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1343 gtk_widget_show(button);
1344 tree_buttons->subtree_button = button;
1346 /* create separator */
1347 separator = gtk_hseparator_new();
1348 gtk_box_pack_start(GTK_BOX(box1), separator, FALSE, FALSE, 0);
1349 gtk_widget_show(separator);
1351 /* create button box */
1352 box2 = gtk_vbox_new(FALSE, 0);
1353 gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, FALSE, 0);
1354 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1355 gtk_widget_show(box2);
1357 button = gtk_button_new_with_label("Close");
1358 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1359 gtk_signal_connect_object(GTK_OBJECT (button), "clicked",
1360 (GtkSignalFunc) gtk_widget_destroy,
1361 GTK_OBJECT(window));
1362 gtk_widget_show(button);
1364 gtk_widget_show(window);
1368 cb_create_tree(GtkWidget* w)
1370 guint selection_mode = GTK_SELECTION_SINGLE;
1375 guint recursion_level;
1377 /* get selection mode choice */
1378 if(GTK_TOGGLE_BUTTON(sTreeSampleSelection.single_button)->active)
1379 selection_mode = GTK_SELECTION_SINGLE;
1381 if(GTK_TOGGLE_BUTTON(sTreeSampleSelection.browse_button)->active)
1382 selection_mode = GTK_SELECTION_BROWSE;
1384 selection_mode = GTK_SELECTION_MULTIPLE;
1386 /* get options choice */
1387 draw_line = GTK_TOGGLE_BUTTON(sTreeSampleSelection.draw_line_button)->active;
1388 view_line = GTK_TOGGLE_BUTTON(sTreeSampleSelection.view_line_button)->active;
1389 no_root_item = GTK_TOGGLE_BUTTON(sTreeSampleSelection.no_root_item_button)->active;
1392 nb_item = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(sTreeSampleSelection.nb_item_spinner));
1393 recursion_level = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(sTreeSampleSelection.recursion_spinner));
1395 if (pow (nb_item, recursion_level) > 10000)
1397 g_print ("%g total items? That will take a very long time. Try less\n",
1398 pow (nb_item, recursion_level));
1402 create_tree_sample(selection_mode, draw_line, view_line, no_root_item, nb_item, recursion_level);
1406 create_tree_mode_window(void)
1408 static GtkWidget* window;
1416 GtkWidget* separator;
1423 /* create toplevel window */
1424 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
1425 gtk_window_set_title(GTK_WINDOW(window), "Set Tree Parameters");
1426 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1427 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
1429 box1 = gtk_vbox_new(FALSE, 0);
1430 gtk_container_add(GTK_CONTAINER(window), box1);
1432 /* create upper box - selection box */
1433 box2 = gtk_vbox_new(FALSE, 5);
1434 gtk_box_pack_start(GTK_BOX(box1), box2, TRUE, TRUE, 0);
1435 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1437 box3 = gtk_hbox_new(FALSE, 5);
1438 gtk_box_pack_start(GTK_BOX(box2), box3, TRUE, TRUE, 0);
1440 /* create selection mode frame */
1441 frame = gtk_frame_new("Selection Mode");
1442 gtk_box_pack_start(GTK_BOX(box3), frame, TRUE, TRUE, 0);
1444 box4 = gtk_vbox_new(FALSE, 0);
1445 gtk_container_add(GTK_CONTAINER(frame), box4);
1446 gtk_container_set_border_width(GTK_CONTAINER(box4), 5);
1448 /* create radio button */
1449 button = gtk_radio_button_new_with_label(NULL, "SINGLE");
1450 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1451 sTreeSampleSelection.single_button = button;
1453 button = gtk_radio_button_new_with_label(gtk_radio_button_group (GTK_RADIO_BUTTON (button)),
1455 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1456 sTreeSampleSelection.browse_button = button;
1458 button = gtk_radio_button_new_with_label(gtk_radio_button_group (GTK_RADIO_BUTTON (button)),
1460 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1461 sTreeSampleSelection.multiple_button = button;
1463 sTreeSampleSelection.selection_mode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (button));
1465 /* create option mode frame */
1466 frame = gtk_frame_new("Options");
1467 gtk_box_pack_start(GTK_BOX(box3), frame, TRUE, TRUE, 0);
1469 box4 = gtk_vbox_new(FALSE, 0);
1470 gtk_container_add(GTK_CONTAINER(frame), box4);
1471 gtk_container_set_border_width(GTK_CONTAINER(box4), 5);
1473 /* create check button */
1474 button = gtk_check_button_new_with_label("Draw line");
1475 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1476 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
1477 sTreeSampleSelection.draw_line_button = button;
1479 button = gtk_check_button_new_with_label("View Line mode");
1480 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1481 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
1482 sTreeSampleSelection.view_line_button = button;
1484 button = gtk_check_button_new_with_label("Without Root item");
1485 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1486 sTreeSampleSelection.no_root_item_button = button;
1488 /* create recursion parameter */
1489 frame = gtk_frame_new("Size Parameters");
1490 gtk_box_pack_start(GTK_BOX(box2), frame, TRUE, TRUE, 0);
1492 box4 = gtk_hbox_new(FALSE, 5);
1493 gtk_container_add(GTK_CONTAINER(frame), box4);
1494 gtk_container_set_border_width(GTK_CONTAINER(box4), 5);
1496 /* create number of item spin button */
1497 box5 = gtk_hbox_new(FALSE, 5);
1498 gtk_box_pack_start(GTK_BOX(box4), box5, FALSE, FALSE, 0);
1500 label = gtk_label_new("Number of items : ");
1501 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
1502 gtk_box_pack_start (GTK_BOX (box5), label, FALSE, TRUE, 0);
1504 adj = (GtkAdjustment *) gtk_adjustment_new ((gfloat)DEFAULT_NUMBER_OF_ITEM, 1.0, 255.0, 1.0,
1506 spinner = gtk_spin_button_new (adj, 0, 0);
1507 gtk_box_pack_start (GTK_BOX (box5), spinner, FALSE, TRUE, 0);
1508 sTreeSampleSelection.nb_item_spinner = spinner;
1510 /* create recursion level spin button */
1511 box5 = gtk_hbox_new(FALSE, 5);
1512 gtk_box_pack_start(GTK_BOX(box4), box5, FALSE, FALSE, 0);
1514 label = gtk_label_new("Depth : ");
1515 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
1516 gtk_box_pack_start (GTK_BOX (box5), label, FALSE, TRUE, 0);
1518 adj = (GtkAdjustment *) gtk_adjustment_new ((gfloat)DEFAULT_RECURSION_LEVEL, 0.0, 255.0, 1.0,
1520 spinner = gtk_spin_button_new (adj, 0, 0);
1521 gtk_box_pack_start (GTK_BOX (box5), spinner, FALSE, TRUE, 0);
1522 sTreeSampleSelection.recursion_spinner = spinner;
1524 /* create horizontal separator */
1525 separator = gtk_hseparator_new();
1526 gtk_box_pack_start(GTK_BOX(box1), separator, FALSE, FALSE, 0);
1528 /* create bottom button box */
1529 box2 = gtk_hbox_new(TRUE, 10);
1530 gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, FALSE, 0);
1531 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1533 button = gtk_button_new_with_label("Create Tree");
1534 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1535 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1536 (GtkSignalFunc) cb_create_tree, NULL);
1538 button = gtk_button_new_with_label("Close");
1539 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1540 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
1541 GTK_SIGNAL_FUNC(gtk_widget_destroy),
1542 GTK_OBJECT (window));
1544 if (!GTK_WIDGET_VISIBLE (window))
1545 gtk_widget_show_all (window);
1547 gtk_widget_destroy (window);
1555 handle_box_child_signal (GtkHandleBox *hb,
1557 const gchar *action)
1559 printf ("%s: child <%s> %sed\n",
1560 gtk_type_name (GTK_OBJECT_TYPE (hb)),
1561 gtk_type_name (GTK_OBJECT_TYPE (child)),
1566 create_handle_box (void)
1568 static GtkWidget* window = NULL;
1569 GtkWidget *handle_box;
1570 GtkWidget *handle_box2;
1575 GtkWidget *separator;
1579 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1580 gtk_window_set_title (GTK_WINDOW (window),
1582 gtk_window_set_policy (GTK_WINDOW (window),
1587 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1588 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
1591 gtk_container_set_border_width (GTK_CONTAINER (window), 20);
1593 vbox = gtk_vbox_new (FALSE, 0);
1594 gtk_container_add (GTK_CONTAINER (window), vbox);
1595 gtk_widget_show (vbox);
1597 label = gtk_label_new ("Above");
1598 gtk_container_add (GTK_CONTAINER (vbox), label);
1599 gtk_widget_show (label);
1601 separator = gtk_hseparator_new ();
1602 gtk_container_add (GTK_CONTAINER (vbox), separator);
1603 gtk_widget_show (separator);
1605 hbox = gtk_hbox_new (FALSE, 10);
1606 gtk_container_add (GTK_CONTAINER (vbox), hbox);
1607 gtk_widget_show (hbox);
1609 separator = gtk_hseparator_new ();
1610 gtk_container_add (GTK_CONTAINER (vbox), separator);
1611 gtk_widget_show (separator);
1613 label = gtk_label_new ("Below");
1614 gtk_container_add (GTK_CONTAINER (vbox), label);
1615 gtk_widget_show (label);
1617 handle_box = gtk_handle_box_new ();
1618 gtk_box_pack_start (GTK_BOX (hbox), handle_box, FALSE, FALSE, 0);
1619 gtk_signal_connect (GTK_OBJECT (handle_box),
1621 GTK_SIGNAL_FUNC (handle_box_child_signal),
1623 gtk_signal_connect (GTK_OBJECT (handle_box),
1625 GTK_SIGNAL_FUNC (handle_box_child_signal),
1627 gtk_widget_show (handle_box);
1629 toolbar = make_toolbar (window);
1630 gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NORMAL);
1631 gtk_container_add (GTK_CONTAINER (handle_box), toolbar);
1632 gtk_widget_show (toolbar);
1634 handle_box = gtk_handle_box_new ();
1635 gtk_box_pack_start (GTK_BOX (hbox), handle_box, FALSE, FALSE, 0);
1636 gtk_signal_connect (GTK_OBJECT (handle_box),
1638 GTK_SIGNAL_FUNC (handle_box_child_signal),
1640 gtk_signal_connect (GTK_OBJECT (handle_box),
1642 GTK_SIGNAL_FUNC (handle_box_child_signal),
1644 gtk_widget_show (handle_box);
1646 handle_box2 = gtk_handle_box_new ();
1647 gtk_container_add (GTK_CONTAINER (handle_box), handle_box2);
1648 gtk_signal_connect (GTK_OBJECT (handle_box2),
1650 GTK_SIGNAL_FUNC (handle_box_child_signal),
1652 gtk_signal_connect (GTK_OBJECT (handle_box2),
1654 GTK_SIGNAL_FUNC (handle_box_child_signal),
1656 gtk_widget_show (handle_box2);
1658 label = gtk_label_new ("Fooo!");
1659 gtk_container_add (GTK_CONTAINER (handle_box2), label);
1660 gtk_widget_show (label);
1663 if (!GTK_WIDGET_VISIBLE (window))
1664 gtk_widget_show (window);
1666 gtk_widget_destroy (window);
1670 * Test for getting an image from a drawable
1681 take_snapshot (GtkWidget *button,
1684 struct GetImageData *gid = data;
1685 GdkRectangle visible;
1687 int height_fraction;
1690 GdkColor color = { 0, 30000, 0, 0 };
1691 GdkRectangle target;
1694 /* Do some begin_paint_rect on some random rects, draw some
1695 * distinctive stuff into those rects, then take the snapshot.
1696 * figure out whether any rects were overlapped and report to
1700 visible = gid->sw->allocation;
1702 visible.x = gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (gid->sw))->value;
1703 visible.y = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (gid->sw))->value;
1705 width_fraction = visible.width / 4;
1706 height_fraction = visible.height / 4;
1708 gc = gdk_gc_new (gid->src->window);
1709 black_gc = gid->src->style->black_gc;
1711 gdk_gc_set_rgb_fg_color (gc, &color);
1714 target.x = visible.x + width_fraction;
1715 target.y = visible.y + height_fraction * 3;
1716 target.width = width_fraction;
1717 target.height = height_fraction / 2;
1719 gdk_window_begin_paint_rect (gid->src->window,
1722 gdk_draw_rectangle (gid->src->window,
1726 target.width, target.height);
1728 gdk_draw_rectangle (gid->src->window,
1731 target.x + 10, target.y + 10,
1732 target.width - 20, target.height - 20);
1734 target.x = visible.x + width_fraction;
1735 target.y = visible.y + height_fraction;
1736 target.width = width_fraction;
1737 target.height = height_fraction;
1739 gdk_window_begin_paint_rect (gid->src->window,
1742 gdk_draw_rectangle (gid->src->window,
1746 target.width, target.height);
1748 gdk_draw_rectangle (gid->src->window,
1751 target.x + 10, target.y + 10,
1752 target.width - 20, target.height - 20);
1754 target.x = visible.x + width_fraction * 3;
1755 target.y = visible.y + height_fraction;
1756 target.width = width_fraction / 2;
1757 target.height = height_fraction;
1759 gdk_window_begin_paint_rect (gid->src->window,
1762 gdk_draw_rectangle (gid->src->window,
1766 target.width, target.height);
1768 gdk_draw_rectangle (gid->src->window,
1771 target.x + 10, target.y + 10,
1772 target.width - 20, target.height - 20);
1774 target.x = visible.x + width_fraction * 2;
1775 target.y = visible.y + height_fraction * 2;
1776 target.width = width_fraction / 4;
1777 target.height = height_fraction / 4;
1779 gdk_window_begin_paint_rect (gid->src->window,
1782 gdk_draw_rectangle (gid->src->window,
1786 target.width, target.height);
1788 gdk_draw_rectangle (gid->src->window,
1791 target.x + 10, target.y + 10,
1792 target.width - 20, target.height - 20);
1794 target.x += target.width / 2;
1795 target.y += target.width / 2;
1797 gdk_window_begin_paint_rect (gid->src->window,
1800 gdk_draw_rectangle (gid->src->window,
1804 target.width, target.height);
1806 gdk_draw_rectangle (gid->src->window,
1809 target.x + 10, target.y + 10,
1810 target.width - 20, target.height - 20);
1812 /* Screen shot area */
1814 target.x = visible.x + width_fraction * 1.5;
1815 target.y = visible.y + height_fraction * 1.5;
1816 target.width = width_fraction * 2;
1817 target.height = height_fraction * 2;
1819 shot = gdk_drawable_get_image (gid->src->window,
1821 target.width, target.height);
1823 gtk_image_set_from_image (GTK_IMAGE (gid->snap),
1826 g_object_unref (G_OBJECT (shot));
1828 gdk_window_end_paint (gid->src->window);
1829 gdk_window_end_paint (gid->src->window);
1830 gdk_window_end_paint (gid->src->window);
1831 gdk_window_end_paint (gid->src->window);
1832 gdk_window_end_paint (gid->src->window);
1834 gdk_draw_rectangle (gid->src->window,
1835 gid->src->style->black_gc,
1838 target.width, target.height);
1840 g_object_unref (G_OBJECT (gc));
1844 image_source_expose (GtkWidget *da,
1845 GdkEventExpose *event,
1848 int x = event->area.x;
1849 GdkColor red = { 0, 65535, 0, 0 };
1850 GdkColor green = { 0, 0, 65535, 0 };
1851 GdkColor blue = { 0, 0, 0, 65535 };
1854 gc = gdk_gc_new (event->window);
1856 while (x < (event->area.x + event->area.width))
1863 gdk_gc_set_rgb_fg_color (gc, &red);
1869 gdk_gc_set_rgb_fg_color (gc, &green);
1875 gdk_gc_set_rgb_fg_color (gc, &blue);
1879 g_assert_not_reached ();
1883 gdk_draw_line (event->window,
1886 x, event->area.y + event->area.height);
1891 g_object_unref (G_OBJECT (gc));
1897 create_get_image (void)
1899 static GtkWidget *window = NULL;
1902 gtk_widget_destroy (window);
1911 struct GetImageData *gid;
1913 gid = g_new (struct GetImageData, 1);
1915 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1917 gtk_signal_connect (GTK_OBJECT (window),
1919 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
1922 gtk_object_set_data_full (GTK_OBJECT (window),
1923 "testgtk-get-image-data",
1927 vbox = gtk_vbox_new (FALSE, 0);
1929 gtk_container_add (GTK_CONTAINER (window), vbox);
1931 sw = gtk_scrolled_window_new (NULL, NULL);
1932 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
1933 GTK_POLICY_AUTOMATIC,
1934 GTK_POLICY_AUTOMATIC);
1938 gtk_widget_set_usize (sw, 400, 400);
1940 src = gtk_drawing_area_new ();
1941 gtk_widget_set_usize (src, 10000, 10000);
1943 gtk_signal_connect (GTK_OBJECT (src),
1945 GTK_SIGNAL_FUNC (image_source_expose),
1950 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (sw),
1953 gtk_box_pack_start (GTK_BOX (vbox),
1957 hbox = gtk_hbox_new (FALSE, 3);
1959 snap = gtk_widget_new (GTK_TYPE_IMAGE, NULL);
1963 sw = gtk_scrolled_window_new (NULL, NULL);
1964 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
1965 GTK_POLICY_AUTOMATIC,
1966 GTK_POLICY_AUTOMATIC);
1967 gtk_widget_set_usize (sw, 300, 300);
1969 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (sw), snap);
1971 gtk_box_pack_end (GTK_BOX (hbox), sw, FALSE, FALSE, 5);
1973 button = gtk_button_new_with_label ("Get image from drawable");
1975 gtk_signal_connect (GTK_OBJECT (button),
1977 GTK_SIGNAL_FUNC (take_snapshot),
1980 gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
1982 gtk_box_pack_end (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
1984 gtk_widget_show_all (window);
1992 sensitivity_toggled (GtkWidget *toggle,
1995 gtk_widget_set_sensitive (widget, GTK_TOGGLE_BUTTON (toggle)->active);
1999 create_sensitivity_control (GtkWidget *widget)
2003 button = gtk_toggle_button_new_with_label ("Sensitive");
2005 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button),
2006 GTK_WIDGET_IS_SENSITIVE (widget));
2008 gtk_signal_connect (GTK_OBJECT (button),
2010 GTK_SIGNAL_FUNC (sensitivity_toggled),
2013 gtk_widget_show_all (button);
2019 set_selectable_recursive (GtkWidget *widget,
2022 if (GTK_IS_CONTAINER (widget))
2027 children = gtk_container_children (GTK_CONTAINER (widget));
2031 set_selectable_recursive (tmp->data, setting);
2035 g_list_free (children);
2037 else if (GTK_IS_LABEL (widget))
2039 gtk_label_set_selectable (GTK_LABEL (widget), setting);
2044 selectable_toggled (GtkWidget *toggle,
2047 set_selectable_recursive (widget,
2048 GTK_TOGGLE_BUTTON (toggle)->active);
2052 create_selectable_control (GtkWidget *widget)
2056 button = gtk_toggle_button_new_with_label ("Selectable");
2058 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button),
2061 gtk_signal_connect (GTK_OBJECT (button),
2063 GTK_SIGNAL_FUNC (selectable_toggled),
2066 gtk_widget_show_all (button);
2071 void create_labels (void)
2073 static GtkWidget *window = NULL;
2084 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2085 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2086 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2089 gtk_window_set_title (GTK_WINDOW (window), "Label");
2091 vbox = gtk_vbox_new (FALSE, 5);
2093 hbox = gtk_hbox_new (FALSE, 5);
2094 gtk_container_add (GTK_CONTAINER (window), vbox);
2096 gtk_box_pack_end (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
2098 button = create_sensitivity_control (hbox);
2100 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
2102 button = create_selectable_control (hbox);
2104 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
2106 vbox = gtk_vbox_new (FALSE, 5);
2108 gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);
2109 gtk_container_set_border_width (GTK_CONTAINER (window), 5);
2111 frame = gtk_frame_new ("Normal Label");
2112 label = gtk_label_new ("This is a Normal label");
2113 gtk_container_add (GTK_CONTAINER (frame), label);
2114 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2116 frame = gtk_frame_new ("Multi-line Label");
2117 label = gtk_label_new ("This is a Multi-line label.\nSecond line\nThird line");
2118 gtk_container_add (GTK_CONTAINER (frame), label);
2119 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2121 frame = gtk_frame_new ("Left Justified Label");
2122 label = gtk_label_new ("This is a Left-Justified\nMulti-line label.\nThird line");
2123 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2124 gtk_container_add (GTK_CONTAINER (frame), label);
2125 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2127 frame = gtk_frame_new ("Right Justified Label");
2128 label = gtk_label_new ("This is a Right-Justified\nMulti-line label.\nFourth line, (j/k)");
2129 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_RIGHT);
2130 gtk_container_add (GTK_CONTAINER (frame), label);
2131 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2133 frame = gtk_frame_new ("Internationalized Label");
2134 label = gtk_label_new ("French (Français) Bonjour, Salut\n"
2135 "Korean (한글) 안녕하세요, 안녕하십니까\n"
2136 "Russian (Русский) Здравствуйте!");
2137 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2138 gtk_container_add (GTK_CONTAINER (frame), label);
2139 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2141 frame = gtk_frame_new ("Bidirection Label");
2142 label = gtk_label_new ("Arabic السلام عليكم\n"
2144 gtk_widget_set_direction (label, GTK_TEXT_DIR_RTL);
2145 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_RIGHT);
2146 gtk_container_add (GTK_CONTAINER (frame), label);
2147 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2149 vbox = gtk_vbox_new (FALSE, 5);
2150 gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);
2151 frame = gtk_frame_new ("Line wrapped label");
2152 label = gtk_label_new ("This is an example of a line-wrapped label. It should not be taking "\
2153 "up the entire "/* big space to test spacing */\
2154 "width allocated to it, but automatically wraps the words to fit. "\
2155 "The time has come, for all good men, to come to the aid of their party. "\
2156 "The sixth sheik's six sheep's sick.\n"\
2157 " It supports multiple paragraphs correctly, and correctly adds "\
2158 "many extra spaces. ");
2160 gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
2161 gtk_container_add (GTK_CONTAINER (frame), label);
2162 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2164 frame = gtk_frame_new ("Filled, wrapped label");
2165 label = gtk_label_new ("This is an example of a line-wrapped, filled label. It should be taking "\
2166 "up the entire width allocated to it. Here is a seneance to prove "\
2167 "my point. Here is another sentence. "\
2168 "Here comes the sun, do de do de do.\n"\
2169 " This is a new paragraph.\n"\
2170 " This is another newer, longer, better paragraph. It is coming to an end, "\
2172 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_FILL);
2173 gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
2174 gtk_container_add (GTK_CONTAINER (frame), label);
2175 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2177 frame = gtk_frame_new ("Underlined label");
2178 label = gtk_label_new ("This label is underlined!\n"
2179 "This one is underlined (こんにちは) in quite a funky fashion");
2180 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2181 gtk_label_set_pattern (GTK_LABEL (label), "_________________________ _ _________ _ _____ _ __ __ ___ ____ _____");
2182 gtk_container_add (GTK_CONTAINER (frame), label);
2183 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2185 frame = gtk_frame_new ("Markup label");
2186 label = gtk_label_new (NULL);
2188 /* There's also a gtk_label_set_markup() without accel if you
2189 * don't have an accelerator key
2192 gtk_label_set_markup_with_accel (GTK_LABEL (label),
2193 "This <span foreground=\"blue\" background=\"orange\">label</span> has "
2194 "<b>markup</b> _such as "
2195 "<big><i>Big Italics</i></big>\n"
2196 "<tt>Monospace font</tt>\n"
2197 "<u>Underline!</u>\n"
2199 "<span foreground=\"green\" background=\"red\">Ugly colors</span>\n"
2200 "and nothing on this line,\n"
2203 "or even on this one\n"
2204 "la <big>la <big>la <big>la <big>la</big></big></big></big>\n"
2205 "but this _word is <span foreground=\"purple\"><big>purple</big></span>\n"
2206 "<span underline=\"double\">We like <sup>superscript</sup> and <sub>subscript</sub> too</span>");
2208 g_return_if_fail (keyval == GDK_s);
2210 gtk_container_add (GTK_CONTAINER (frame), label);
2211 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2214 if (!GTK_WIDGET_VISIBLE (window))
2215 gtk_widget_show_all (window);
2217 gtk_widget_destroy (window);
2225 reparent_label (GtkWidget *widget,
2226 GtkWidget *new_parent)
2230 label = gtk_object_get_user_data (GTK_OBJECT (widget));
2232 gtk_widget_reparent (label, new_parent);
2236 set_parent_signal (GtkWidget *child,
2237 GtkWidget *old_parent,
2240 g_print ("set_parent for \"%s\": new parent: \"%s\", old parent: \"%s\", data: %d\n",
2241 gtk_type_name (GTK_OBJECT_TYPE (child)),
2242 child->parent ? gtk_type_name (GTK_OBJECT_TYPE (child->parent)) : "NULL",
2243 old_parent ? gtk_type_name (GTK_OBJECT_TYPE (old_parent)) : "NULL",
2244 GPOINTER_TO_INT (func_data));
2248 create_reparent (void)
2250 static GtkWidget *window = NULL;
2257 GtkWidget *separator;
2261 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2263 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2264 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2267 gtk_window_set_title (GTK_WINDOW (window), "reparent");
2268 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
2270 box1 = gtk_vbox_new (FALSE, 0);
2271 gtk_container_add (GTK_CONTAINER (window), box1);
2273 box2 = gtk_hbox_new (FALSE, 5);
2274 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2275 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2277 label = gtk_label_new ("Hello World");
2279 frame = gtk_frame_new ("Frame 1");
2280 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
2282 box3 = gtk_vbox_new (FALSE, 5);
2283 gtk_container_set_border_width (GTK_CONTAINER (box3), 5);
2284 gtk_container_add (GTK_CONTAINER (frame), box3);
2286 button = gtk_button_new_with_label ("switch");
2287 gtk_signal_connect (GTK_OBJECT (button), "clicked",
2288 GTK_SIGNAL_FUNC(reparent_label),
2290 gtk_object_set_user_data (GTK_OBJECT (button), label);
2291 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
2293 gtk_box_pack_start (GTK_BOX (box3), label, FALSE, TRUE, 0);
2294 gtk_signal_connect (GTK_OBJECT (label),
2296 GTK_SIGNAL_FUNC (set_parent_signal),
2297 GINT_TO_POINTER (42));
2299 frame = gtk_frame_new ("Frame 2");
2300 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
2302 box3 = gtk_vbox_new (FALSE, 5);
2303 gtk_container_set_border_width (GTK_CONTAINER (box3), 5);
2304 gtk_container_add (GTK_CONTAINER (frame), box3);
2306 button = gtk_button_new_with_label ("switch");
2307 gtk_signal_connect (GTK_OBJECT (button), "clicked",
2308 GTK_SIGNAL_FUNC(reparent_label),
2310 gtk_object_set_user_data (GTK_OBJECT (button), label);
2311 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
2313 separator = gtk_hseparator_new ();
2314 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2316 box2 = gtk_vbox_new (FALSE, 10);
2317 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2318 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2320 button = gtk_button_new_with_label ("close");
2321 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2322 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2323 GTK_OBJECT (window));
2324 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2325 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2326 gtk_widget_grab_default (button);
2329 if (!GTK_WIDGET_VISIBLE (window))
2330 gtk_widget_show_all (window);
2332 gtk_widget_destroy (window);
2338 gint upositionx = 0;
2339 gint upositiony = 0;
2342 uposition_configure (GtkWidget *window)
2348 lx = gtk_object_get_data (GTK_OBJECT (window), "x");
2349 ly = gtk_object_get_data (GTK_OBJECT (window), "y");
2351 gdk_window_get_root_origin (window->window, &upositionx, &upositiony);
2352 sprintf (buffer, "%d", upositionx);
2353 gtk_label_set_text (lx, buffer);
2354 sprintf (buffer, "%d", upositiony);
2355 gtk_label_set_text (ly, buffer);
2361 uposition_stop_configure (GtkToggleButton *toggle,
2365 gtk_signal_handler_block_by_func (window, uposition_configure, NULL);
2367 gtk_signal_handler_unblock_by_func (window, uposition_configure, NULL);
2371 create_saved_position (void)
2373 static GtkWidget *window = NULL;
2378 GtkWidget *main_vbox;
2386 window = g_object_connect (gtk_widget_new (GTK_TYPE_WINDOW,
2387 "type", GTK_WINDOW_TOPLEVEL,
2390 "title", "Saved Position",
2392 "signal::configure_event", uposition_configure, NULL,
2395 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2396 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
2399 main_vbox = gtk_vbox_new (FALSE, 5);
2400 gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 0);
2401 gtk_container_add (GTK_CONTAINER (window), main_vbox);
2404 gtk_widget_new (gtk_vbox_get_type (),
2405 "GtkBox::homogeneous", FALSE,
2406 "GtkBox::spacing", 5,
2407 "GtkContainer::border_width", 10,
2408 "GtkWidget::parent", main_vbox,
2409 "GtkWidget::visible", TRUE,
2410 "child", g_object_connect (gtk_widget_new (GTK_TYPE_TOGGLE_BUTTON,
2411 "label", "Stop Events",
2415 "signal::clicked", uposition_stop_configure, window,
2419 hbox = gtk_hbox_new (FALSE, 0);
2420 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
2421 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
2423 label = gtk_label_new ("X Origin : ");
2424 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
2425 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
2427 x_label = gtk_label_new ("");
2428 gtk_box_pack_start (GTK_BOX (hbox), x_label, TRUE, TRUE, 0);
2429 gtk_object_set_data (GTK_OBJECT (window), "x", x_label);
2431 hbox = gtk_hbox_new (FALSE, 0);
2432 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
2433 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
2435 label = gtk_label_new ("Y Origin : ");
2436 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
2437 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
2439 y_label = gtk_label_new ("");
2440 gtk_box_pack_start (GTK_BOX (hbox), y_label, TRUE, TRUE, 0);
2441 gtk_object_set_data (GTK_OBJECT (window), "y", y_label);
2444 gtk_widget_new (gtk_hseparator_get_type (),
2445 "GtkWidget::visible", TRUE,
2447 gtk_box_pack_start (GTK_BOX (main_vbox), any, FALSE, TRUE, 0);
2449 hbox = gtk_hbox_new (FALSE, 0);
2450 gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
2451 gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
2453 button = gtk_button_new_with_label ("Close");
2454 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2455 GTK_SIGNAL_FUNC (gtk_widget_destroy),
2456 GTK_OBJECT (window));
2457 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
2458 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2459 gtk_widget_grab_default (button);
2461 gtk_widget_show_all (window);
2464 gtk_widget_destroy (window);
2472 create_pixmap (void)
2474 static GtkWidget *window = NULL;
2480 GtkWidget *separator;
2481 GtkWidget *pixmapwid;
2485 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2487 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2488 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2491 gtk_window_set_title (GTK_WINDOW (window), "GtkPixmap");
2492 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
2493 gtk_widget_realize(window);
2495 box1 = gtk_vbox_new (FALSE, 0);
2496 gtk_container_add (GTK_CONTAINER (window), box1);
2498 box2 = gtk_vbox_new (FALSE, 10);
2499 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2500 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2502 button = gtk_button_new ();
2503 gtk_box_pack_start (GTK_BOX (box2), button, FALSE, FALSE, 0);
2505 pixmapwid = new_pixmap ("test.xpm", window->window, NULL);
2507 label = gtk_label_new ("Pixmap\ntest");
2508 box3 = gtk_hbox_new (FALSE, 0);
2509 gtk_container_set_border_width (GTK_CONTAINER (box3), 2);
2510 gtk_container_add (GTK_CONTAINER (box3), pixmapwid);
2511 gtk_container_add (GTK_CONTAINER (box3), label);
2512 gtk_container_add (GTK_CONTAINER (button), box3);
2514 button = gtk_button_new ();
2515 gtk_box_pack_start (GTK_BOX (box2), button, FALSE, FALSE, 0);
2517 pixmapwid = new_pixmap ("test.xpm", window->window, NULL);
2519 label = gtk_label_new ("Pixmap\ntest");
2520 box3 = gtk_hbox_new (FALSE, 0);
2521 gtk_container_set_border_width (GTK_CONTAINER (box3), 2);
2522 gtk_container_add (GTK_CONTAINER (box3), pixmapwid);
2523 gtk_container_add (GTK_CONTAINER (box3), label);
2524 gtk_container_add (GTK_CONTAINER (button), box3);
2526 gtk_widget_set_sensitive (button, FALSE);
2528 separator = gtk_hseparator_new ();
2529 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2531 box2 = gtk_vbox_new (FALSE, 10);
2532 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2533 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2535 button = gtk_button_new_with_label ("close");
2536 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2537 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2538 GTK_OBJECT (window));
2539 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2540 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2541 gtk_widget_grab_default (button);
2544 if (!GTK_WIDGET_VISIBLE (window))
2545 gtk_widget_show_all (window);
2547 gtk_widget_destroy (window);
2551 tips_query_widget_entered (GtkTipsQuery *tips_query,
2553 const gchar *tip_text,
2554 const gchar *tip_private,
2557 if (GTK_TOGGLE_BUTTON (toggle)->active)
2559 gtk_label_set_text (GTK_LABEL (tips_query), tip_text ? "There is a Tip!" : "There is no Tip!");
2560 /* don't let GtkTipsQuery reset its label */
2561 gtk_signal_emit_stop_by_name (GTK_OBJECT (tips_query), "widget_entered");
2566 tips_query_widget_selected (GtkWidget *tips_query,
2568 const gchar *tip_text,
2569 const gchar *tip_private,
2570 GdkEventButton *event,
2574 g_print ("Help \"%s\" requested for <%s>\n",
2575 tip_private ? tip_private : "None",
2576 gtk_type_name (GTK_OBJECT_TYPE (widget)));
2581 create_tooltips (void)
2583 static GtkWidget *window = NULL;
2590 GtkWidget *tips_query;
2591 GtkWidget *separator;
2592 GtkTooltips *tooltips;
2597 gtk_widget_new (gtk_window_get_type (),
2598 "GtkWindow::type", GTK_WINDOW_TOPLEVEL,
2599 "GtkContainer::border_width", 0,
2600 "GtkWindow::title", "Tooltips",
2601 "GtkWindow::allow_shrink", TRUE,
2602 "GtkWindow::allow_grow", FALSE,
2603 "GtkWindow::auto_shrink", TRUE,
2604 "GtkWidget::width", 200,
2607 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2608 GTK_SIGNAL_FUNC (destroy_tooltips),
2611 tooltips=gtk_tooltips_new();
2612 gtk_object_set_data (GTK_OBJECT (window), "tooltips", tooltips);
2614 box1 = gtk_vbox_new (FALSE, 0);
2615 gtk_container_add (GTK_CONTAINER (window), box1);
2617 box2 = gtk_vbox_new (FALSE, 10);
2618 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2619 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2621 button = gtk_toggle_button_new_with_label ("button1");
2622 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2624 gtk_tooltips_set_tip (tooltips,button,"This is button 1", "ContextHelp/buttons/1");
2626 button = gtk_toggle_button_new_with_label ("button2");
2627 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2629 gtk_tooltips_set_tip (tooltips,
2631 "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.",
2632 "ContextHelp/buttons/2_long");
2634 toggle = gtk_toggle_button_new_with_label ("Override TipsQuery Label");
2635 gtk_box_pack_start (GTK_BOX (box2), toggle, TRUE, TRUE, 0);
2637 gtk_tooltips_set_tip (tooltips, toggle, "Toggle TipsQuery view.", "Hi msw! ;)");
2640 gtk_widget_new (gtk_vbox_get_type (),
2641 "homogeneous", FALSE,
2647 tips_query = gtk_tips_query_new ();
2650 gtk_widget_new (gtk_button_get_type (),
2655 g_object_connect (G_OBJECT (button),
2656 "swapped_signal::clicked", gtk_tips_query_start_query, tips_query,
2658 gtk_box_set_child_packing (GTK_BOX (box3), button, FALSE, FALSE, 0, GTK_PACK_START);
2659 gtk_tooltips_set_tip (tooltips,
2661 "Start the Tooltips Inspector",
2662 "ContextHelp/buttons/?");
2665 gtk_widget_set (g_object_connect (tips_query,
2666 "signal::widget_entered", tips_query_widget_entered, toggle,
2667 "signal::widget_selected", tips_query_widget_selected, NULL,
2674 frame = gtk_widget_new (gtk_frame_get_type (),
2675 "label", "ToolTips Inspector",
2676 "label_xalign", (double) 0.5,
2682 gtk_box_set_child_packing (GTK_BOX (box2), frame, TRUE, TRUE, 10, GTK_PACK_START);
2684 separator = gtk_hseparator_new ();
2685 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2687 box2 = gtk_vbox_new (FALSE, 10);
2688 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2689 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2691 button = gtk_button_new_with_label ("close");
2692 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2693 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2694 GTK_OBJECT (window));
2695 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2696 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2697 gtk_widget_grab_default (button);
2699 gtk_tooltips_set_tip (tooltips, button, "Push this button to close window", "ContextHelp/buttons/Close");
2702 if (!GTK_WIDGET_VISIBLE (window))
2703 gtk_widget_show_all (window);
2705 gtk_widget_destroy (window);
2713 pack_image (GtkWidget *box,
2717 gtk_box_pack_start (GTK_BOX (box),
2718 gtk_label_new (text),
2721 gtk_box_pack_start (GTK_BOX (box),
2729 static GtkWidget *window = NULL;
2737 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2739 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2740 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2743 vbox = gtk_vbox_new (FALSE, 5);
2745 gtk_container_add (GTK_CONTAINER (window), vbox);
2747 pack_image (vbox, "Stock Warning Dialog",
2748 gtk_image_new_from_stock (GTK_STOCK_DIALOG_WARNING,
2749 GTK_ICON_SIZE_DIALOG));
2751 pixmap = gdk_pixmap_colormap_create_from_xpm_d (NULL,
2752 gtk_widget_get_colormap (window),
2757 pack_image (vbox, "Pixmap",
2758 gtk_image_new_from_pixmap (pixmap, mask));
2761 if (!GTK_WIDGET_VISIBLE (window))
2762 gtk_widget_show_all (window);
2764 gtk_widget_destroy (window);
2772 create_menu (gint depth, gint length, gboolean tearoff)
2775 GtkWidget *menuitem;
2784 menu = gtk_menu_new ();
2789 menuitem = gtk_tearoff_menu_item_new ();
2790 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
2791 gtk_widget_show (menuitem);
2794 image = gtk_image_new_from_stock (GTK_STOCK_OPEN,
2795 GTK_ICON_SIZE_MENU);
2796 gtk_widget_show (image);
2797 menuitem = gtk_image_menu_item_new (image, "Image item");
2798 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
2799 gtk_widget_show (menuitem);
2801 for (i = 0, j = 1; i < length; i++, j++)
2803 sprintf (buf, "item %2d - %d", depth, j);
2805 menuitem = gtk_radio_menu_item_new_with_label (group, buf);
2806 group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menuitem));
2809 gtk_check_menu_item_set_show_toggle (GTK_CHECK_MENU_ITEM (menuitem), TRUE);
2811 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
2812 gtk_widget_show (menuitem);
2814 gtk_widget_set_sensitive (menuitem, FALSE);
2817 gtk_check_menu_item_set_inconsistent (GTK_CHECK_MENU_ITEM (menuitem),
2821 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (depth - 1, 5, TRUE));
2830 static GtkWidget *window = NULL;
2834 GtkWidget *optionmenu;
2835 GtkWidget *separator;
2841 GtkWidget *menuitem;
2842 GtkAccelGroup *accel_group;
2845 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2847 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2848 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2850 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
2851 GTK_SIGNAL_FUNC (gtk_true),
2854 accel_group = gtk_accel_group_new ();
2855 gtk_accel_group_attach (accel_group, GTK_OBJECT (window));
2857 gtk_window_set_title (GTK_WINDOW (window), "menus");
2858 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
2861 box1 = gtk_vbox_new (FALSE, 0);
2862 gtk_container_add (GTK_CONTAINER (window), box1);
2863 gtk_widget_show (box1);
2865 menubar = gtk_menu_bar_new ();
2866 gtk_box_pack_start (GTK_BOX (box1), menubar, FALSE, TRUE, 0);
2867 gtk_widget_show (menubar);
2869 menu = create_menu (2, 50, TRUE);
2871 menuitem = gtk_menu_item_new_with_label ("test\nline2");
2872 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), menu);
2873 gtk_menu_bar_append (GTK_MENU_BAR (menubar), menuitem);
2874 gtk_widget_show (menuitem);
2876 menuitem = gtk_menu_item_new_with_label ("foo");
2877 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (3, 5, TRUE));
2878 gtk_menu_bar_append (GTK_MENU_BAR (menubar), menuitem);
2879 gtk_widget_show (menuitem);
2881 image = gtk_image_new_from_stock (GTK_STOCK_HELP,
2882 GTK_ICON_SIZE_MENU);
2883 gtk_widget_show (image);
2884 menuitem = gtk_image_menu_item_new (image, "Help");
2885 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (4, 5, TRUE));
2886 gtk_menu_item_right_justify (GTK_MENU_ITEM (menuitem));
2887 gtk_menu_bar_append (GTK_MENU_BAR (menubar), menuitem);
2888 gtk_widget_show (menuitem);
2890 box2 = gtk_vbox_new (FALSE, 10);
2891 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2892 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2893 gtk_widget_show (box2);
2895 menu = create_menu (1, 5, FALSE);
2896 gtk_menu_set_accel_group (GTK_MENU (menu), accel_group);
2898 menuitem = gtk_check_menu_item_new_with_label ("Accelerate Me");
2899 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
2900 gtk_widget_show (menuitem);
2901 gtk_widget_add_accelerator (menuitem,
2906 GTK_ACCEL_VISIBLE | GTK_ACCEL_SIGNAL_VISIBLE);
2907 menuitem = gtk_check_menu_item_new_with_label ("Accelerator Locked");
2908 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
2909 gtk_widget_show (menuitem);
2910 gtk_widget_add_accelerator (menuitem,
2915 GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
2916 menuitem = gtk_check_menu_item_new_with_label ("Accelerators Frozen");
2917 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
2918 gtk_widget_show (menuitem);
2919 gtk_widget_add_accelerator (menuitem,
2925 gtk_widget_add_accelerator (menuitem,
2931 gtk_widget_lock_accelerators (menuitem);
2933 optionmenu = gtk_option_menu_new ();
2934 gtk_option_menu_set_menu (GTK_OPTION_MENU (optionmenu), menu);
2935 gtk_option_menu_set_history (GTK_OPTION_MENU (optionmenu), 3);
2936 gtk_box_pack_start (GTK_BOX (box2), optionmenu, TRUE, TRUE, 0);
2937 gtk_widget_show (optionmenu);
2939 separator = gtk_hseparator_new ();
2940 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2941 gtk_widget_show (separator);
2943 box2 = gtk_vbox_new (FALSE, 10);
2944 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2945 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2946 gtk_widget_show (box2);
2948 button = gtk_button_new_with_label ("close");
2949 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2950 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2951 GTK_OBJECT (window));
2952 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2953 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2954 gtk_widget_grab_default (button);
2955 gtk_widget_show (button);
2958 if (!GTK_WIDGET_VISIBLE (window))
2959 gtk_widget_show (window);
2961 gtk_widget_destroy (window);
2965 gtk_ifactory_cb (gpointer callback_data,
2966 guint callback_action,
2969 g_message ("ItemFactory: activated \"%s\"", gtk_item_factory_path_from_widget (widget));
2972 static GtkItemFactoryEntry menu_items[] =
2974 { "/_File", NULL, 0, 0, "<Branch>" },
2975 { "/File/tearoff1", NULL, gtk_ifactory_cb, 0, "<Tearoff>" },
2976 { "/File/_New", "<control>N", gtk_ifactory_cb, 0 },
2977 { "/File/_Open", "<control>O", gtk_ifactory_cb, 0 },
2978 { "/File/_Save", "<control>S", gtk_ifactory_cb, 0 },
2979 { "/File/Save _As...", NULL, gtk_ifactory_cb, 0 },
2980 { "/File/sep1", NULL, gtk_ifactory_cb, 0, "<Separator>" },
2981 { "/File/_Quit", "<control>Q", gtk_ifactory_cb, 0 },
2983 { "/_Preferences", NULL, 0, 0, "<Branch>" },
2984 { "/_Preferences/_Color", NULL, 0, 0, "<Branch>" },
2985 { "/_Preferences/Color/_Red", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
2986 { "/_Preferences/Color/_Green", NULL, gtk_ifactory_cb, 0, "/Preferences/Color/Red" },
2987 { "/_Preferences/Color/_Blue", NULL, gtk_ifactory_cb, 0, "/Preferences/Color/Red" },
2988 { "/_Preferences/_Shape", NULL, 0, 0, "<Branch>" },
2989 { "/_Preferences/Shape/_Square", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
2990 { "/_Preferences/Shape/_Rectangle", NULL, gtk_ifactory_cb, 0, "/Preferences/Shape/Square" },
2991 { "/_Preferences/Shape/_Oval", NULL, gtk_ifactory_cb, 0, "/Preferences/Shape/Rectangle" },
2992 { "/_Preferences/Shape/_Rectangle", NULL, gtk_ifactory_cb, 0, "/Preferences/Shape/Square" },
2993 { "/_Preferences/Shape/_Oval", NULL, gtk_ifactory_cb, 0, "/Preferences/Shape/Rectangle" },
2995 /* For testing deletion of menus */
2996 { "/_Preferences/Should_NotAppear", NULL, 0, 0, "<Branch>" },
2997 { "/Preferences/ShouldNotAppear/SubItem1", NULL, gtk_ifactory_cb, 0 },
2998 { "/Preferences/ShouldNotAppear/SubItem2", NULL, gtk_ifactory_cb, 0 },
3000 { "/_Help", NULL, 0, 0, "<LastBranch>" },
3001 { "/Help/_About", NULL, gtk_ifactory_cb, 0 },
3005 static int nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]);
3008 create_item_factory (void)
3010 static GtkWidget *window = NULL;
3016 GtkWidget *separator;
3019 GtkAccelGroup *accel_group;
3020 GtkItemFactory *item_factory;
3022 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3024 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3025 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
3027 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
3028 GTK_SIGNAL_FUNC (gtk_true),
3031 accel_group = gtk_accel_group_new ();
3032 item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>", accel_group);
3033 gtk_object_set_data_full (GTK_OBJECT (window),
3036 (GtkDestroyNotify) gtk_object_unref);
3037 gtk_accel_group_attach (accel_group, GTK_OBJECT (window));
3038 gtk_window_set_title (GTK_WINDOW (window), "Item Factory");
3039 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
3040 gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL);
3042 /* preselect /Preferences/Shape/Oval over the other radios
3044 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (gtk_item_factory_get_item (item_factory,
3045 "/Preferences/Shape/Oval")),
3048 box1 = gtk_vbox_new (FALSE, 0);
3049 gtk_container_add (GTK_CONTAINER (window), box1);
3051 gtk_box_pack_start (GTK_BOX (box1),
3052 gtk_item_factory_get_widget (item_factory, "<main>"),
3055 label = gtk_label_new ("Type\n<alt>\nto start");
3056 gtk_widget_set_usize (label, 200, 200);
3057 gtk_misc_set_alignment (GTK_MISC (label), 0.5, 0.5);
3058 gtk_box_pack_start (GTK_BOX (box1), label, TRUE, TRUE, 0);
3061 separator = gtk_hseparator_new ();
3062 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
3065 box2 = gtk_vbox_new (FALSE, 10);
3066 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
3067 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
3069 button = gtk_button_new_with_label ("close");
3070 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
3071 GTK_SIGNAL_FUNC(gtk_widget_destroy),
3072 GTK_OBJECT (window));
3073 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
3074 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
3075 gtk_widget_grab_default (button);
3077 gtk_item_factory_delete_item (item_factory, "/Preferences/ShouldNotAppear");
3079 gtk_widget_show_all (window);
3082 gtk_widget_destroy (window);
3090 cmw_destroy_cb(GtkWidget *widget)
3092 /* This is needed to get out of gtk_main */
3099 cmw_color (GtkWidget *widget, GtkWidget *parent)
3103 csd=gtk_color_selection_dialog_new ("This is a modal color selection dialog");
3106 gtk_window_set_modal (GTK_WINDOW(csd),TRUE);
3108 /* And mark it as a transient dialog */
3109 gtk_window_set_transient_for (GTK_WINDOW (csd), GTK_WINDOW (parent));
3111 gtk_signal_connect (GTK_OBJECT(csd), "destroy",
3112 GTK_SIGNAL_FUNC(cmw_destroy_cb),NULL);
3114 gtk_signal_connect_object (GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(csd)->ok_button),
3115 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
3117 gtk_signal_connect_object (GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(csd)->cancel_button),
3118 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
3121 /* wait until destroy calls gtk_main_quit */
3122 gtk_widget_show (csd);
3127 cmw_file (GtkWidget *widget, GtkWidget *parent)
3131 fs = gtk_file_selection_new("This is a modal file selection dialog");
3134 gtk_window_set_modal (GTK_WINDOW(fs),TRUE);
3136 /* And mark it as a transient dialog */
3137 gtk_window_set_transient_for (GTK_WINDOW (fs), GTK_WINDOW (parent));
3139 gtk_signal_connect (GTK_OBJECT(fs), "destroy",
3140 GTK_SIGNAL_FUNC(cmw_destroy_cb),NULL);
3142 gtk_signal_connect_object (GTK_OBJECT(GTK_FILE_SELECTION(fs)->ok_button),
3143 "clicked",GTK_SIGNAL_FUNC(gtk_widget_destroy),
3145 gtk_signal_connect_object (GTK_OBJECT(GTK_FILE_SELECTION(fs)->cancel_button),
3146 "clicked",GTK_SIGNAL_FUNC(gtk_widget_destroy),
3149 /* wait until destroy calls gtk_main_quit */
3150 gtk_widget_show (fs);
3157 create_modal_window (void)
3159 GtkWidget *window = NULL;
3160 GtkWidget *box1,*box2;
3162 GtkWidget *btnColor,*btnFile,*btnClose;
3164 /* Create modal window (Here you can use any window descendent )*/
3165 window=gtk_window_new (GTK_WINDOW_TOPLEVEL);
3166 gtk_window_set_title (GTK_WINDOW(window),"This window is modal");
3168 /* Set window as modal */
3169 gtk_window_set_modal (GTK_WINDOW(window),TRUE);
3171 /* Create widgets */
3172 box1 = gtk_vbox_new (FALSE,5);
3173 frame1 = gtk_frame_new ("Standard dialogs in modal form");
3174 box2 = gtk_vbox_new (TRUE,5);
3175 btnColor = gtk_button_new_with_label ("Color");
3176 btnFile = gtk_button_new_with_label ("File Selection");
3177 btnClose = gtk_button_new_with_label ("Close");
3180 gtk_container_set_border_width (GTK_CONTAINER(box1),3);
3181 gtk_container_set_border_width (GTK_CONTAINER(box2),3);
3184 gtk_container_add (GTK_CONTAINER (window), box1);
3185 gtk_box_pack_start (GTK_BOX (box1), frame1, TRUE, TRUE, 4);
3186 gtk_container_add (GTK_CONTAINER (frame1), box2);
3187 gtk_box_pack_start (GTK_BOX (box2), btnColor, FALSE, FALSE, 4);
3188 gtk_box_pack_start (GTK_BOX (box2), btnFile, FALSE, FALSE, 4);
3189 gtk_box_pack_start (GTK_BOX (box1), gtk_hseparator_new (), FALSE, FALSE, 4);
3190 gtk_box_pack_start (GTK_BOX (box1), btnClose, FALSE, FALSE, 4);
3192 /* connect signals */
3193 gtk_signal_connect_object (GTK_OBJECT (btnClose), "clicked",
3194 GTK_SIGNAL_FUNC (gtk_widget_destroy),
3195 GTK_OBJECT (window));
3197 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3198 GTK_SIGNAL_FUNC (cmw_destroy_cb),NULL);
3200 gtk_signal_connect (GTK_OBJECT (btnColor), "clicked",
3201 GTK_SIGNAL_FUNC (cmw_color),window);
3202 gtk_signal_connect (GTK_OBJECT (btnFile), "clicked",
3203 GTK_SIGNAL_FUNC (cmw_file),window);
3206 gtk_widget_show_all (window);
3208 /* wait until dialog get destroyed */
3217 make_message_dialog (GtkWidget **dialog,
3218 GtkMessageType type,
3219 GtkButtonsType buttons)
3223 gtk_widget_destroy (*dialog);
3228 *dialog = gtk_message_dialog_new (NULL, 0, type, buttons,
3229 "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.)");
3231 gtk_signal_connect_object (GTK_OBJECT (*dialog),
3233 GTK_SIGNAL_FUNC (gtk_widget_destroy),
3234 GTK_OBJECT (*dialog));
3236 gtk_signal_connect (GTK_OBJECT (*dialog),
3238 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
3241 gtk_widget_show (*dialog);
3245 create_message_dialog (void)
3247 static GtkWidget *info = NULL;
3248 static GtkWidget *warning = NULL;
3249 static GtkWidget *error = NULL;
3250 static GtkWidget *question = NULL;
3252 make_message_dialog (&info, GTK_MESSAGE_INFO, GTK_BUTTONS_OK);
3253 make_message_dialog (&warning, GTK_MESSAGE_WARNING, GTK_BUTTONS_CLOSE);
3254 make_message_dialog (&error, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK_CANCEL);
3255 make_message_dialog (&question, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO);
3262 static GtkWidget *sw_parent = NULL;
3263 static GtkWidget *sw_float_parent;
3264 static guint sw_destroyed_handler = 0;
3267 scrolled_windows_delete_cb (GtkWidget *widget, GdkEventAny *event, GtkWidget *scrollwin)
3269 gtk_widget_reparent (scrollwin, sw_parent);
3271 gtk_signal_disconnect (GTK_OBJECT (sw_parent), sw_destroyed_handler);
3272 sw_float_parent = NULL;
3274 sw_destroyed_handler = 0;
3280 scrolled_windows_destroy_cb (GtkWidget *widget, GtkWidget *scrollwin)
3282 gtk_widget_destroy (sw_float_parent);
3284 sw_float_parent = NULL;
3286 sw_destroyed_handler = 0;
3290 scrolled_windows_remove (GtkWidget *widget, GtkWidget *scrollwin)
3294 gtk_widget_reparent (scrollwin, sw_parent);
3295 gtk_widget_destroy (sw_float_parent);
3297 gtk_signal_disconnect (GTK_OBJECT (sw_parent), sw_destroyed_handler);
3298 sw_float_parent = NULL;
3300 sw_destroyed_handler = 0;
3304 sw_parent = scrollwin->parent;
3305 sw_float_parent = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3306 gtk_window_set_default_size (GTK_WINDOW (sw_float_parent), 200, 200);
3308 gtk_widget_reparent (scrollwin, sw_float_parent);
3309 gtk_widget_show (sw_float_parent);
3311 sw_destroyed_handler =
3312 gtk_signal_connect (GTK_OBJECT (sw_parent), "destroy",
3313 GTK_SIGNAL_FUNC (scrolled_windows_destroy_cb), scrollwin);
3314 gtk_signal_connect (GTK_OBJECT (sw_float_parent), "delete_event",
3315 GTK_SIGNAL_FUNC (scrolled_windows_delete_cb), scrollwin);
3320 create_scrolled_windows (void)
3322 static GtkWidget *window;
3323 GtkWidget *scrolled_window;
3331 window = gtk_dialog_new ();
3333 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3334 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
3337 gtk_window_set_title (GTK_WINDOW (window), "dialog");
3338 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
3341 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
3342 gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10);
3343 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
3344 GTK_POLICY_AUTOMATIC,
3345 GTK_POLICY_AUTOMATIC);
3346 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
3347 scrolled_window, TRUE, TRUE, 0);
3348 gtk_widget_show (scrolled_window);
3350 table = gtk_table_new (20, 20, FALSE);
3351 gtk_table_set_row_spacings (GTK_TABLE (table), 10);
3352 gtk_table_set_col_spacings (GTK_TABLE (table), 10);
3353 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), table);
3354 gtk_container_set_focus_hadjustment (GTK_CONTAINER (table),
3355 gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
3356 gtk_container_set_focus_vadjustment (GTK_CONTAINER (table),
3357 gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
3358 gtk_widget_show (table);
3360 for (i = 0; i < 20; i++)
3361 for (j = 0; j < 20; j++)
3363 sprintf (buffer, "button (%d,%d)\n", i, j);
3364 button = gtk_toggle_button_new_with_label (buffer);
3365 gtk_table_attach_defaults (GTK_TABLE (table), button,
3367 gtk_widget_show (button);
3371 button = gtk_button_new_with_label ("Close");
3372 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
3373 GTK_SIGNAL_FUNC(gtk_widget_destroy),
3374 GTK_OBJECT (window));
3375 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
3376 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
3377 button, TRUE, TRUE, 0);
3378 gtk_widget_grab_default (button);
3379 gtk_widget_show (button);
3381 button = gtk_button_new_with_label ("Reparent Out");
3382 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3383 GTK_SIGNAL_FUNC(scrolled_windows_remove),
3385 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
3386 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
3387 button, TRUE, TRUE, 0);
3388 gtk_widget_grab_default (button);
3389 gtk_widget_show (button);
3391 gtk_window_set_default_size (GTK_WINDOW (window), 300, 300);
3394 if (!GTK_WIDGET_VISIBLE (window))
3395 gtk_widget_show (window);
3397 gtk_widget_destroy (window);
3405 entry_toggle_frame (GtkWidget *checkbutton,
3408 gtk_entry_set_has_frame (GTK_ENTRY(entry),
3409 GTK_TOGGLE_BUTTON(checkbutton)->active);
3413 entry_toggle_editable (GtkWidget *checkbutton,
3416 gtk_entry_set_editable(GTK_ENTRY(entry),
3417 GTK_TOGGLE_BUTTON(checkbutton)->active);
3421 entry_toggle_sensitive (GtkWidget *checkbutton,
3424 gtk_widget_set_sensitive (entry, GTK_TOGGLE_BUTTON(checkbutton)->active);
3428 entry_toggle_visibility (GtkWidget *checkbutton,
3431 gtk_entry_set_visibility (GTK_ENTRY (entry),
3432 GTK_TOGGLE_BUTTON (checkbutton)->active);
3436 entry_toggle_invisible_char (GtkWidget *checkbutton,
3439 if (GTK_TOGGLE_BUTTON (checkbutton)->active)
3440 gtk_entry_set_invisible_char (GTK_ENTRY (entry), 0);
3442 gtk_entry_set_invisible_char (GTK_ENTRY (entry), '*');
3447 entry_toggle_activate_default (GtkWidget *checkbutton,
3450 gtk_entry_set_activates_default (GTK_ENTRY (entry),
3451 GTK_TOGGLE_BUTTON (checkbutton)->active);
3457 static GtkWidget *window = NULL;
3460 GtkWidget *editable_check;
3461 GtkWidget *sensitive_check;
3462 GtkWidget *invisible_char_check;
3463 GtkWidget *activate_check;
3464 GtkWidget *entry, *cb;
3466 GtkWidget *separator;
3467 GList *cbitems = NULL;
3471 cbitems = g_list_append(cbitems, "item0");
3472 cbitems = g_list_append(cbitems, "item1 item1");
3473 cbitems = g_list_append(cbitems, "item2 item2 item2");
3474 cbitems = g_list_append(cbitems, "item3 item3 item3 item3");
3475 cbitems = g_list_append(cbitems, "item4 item4 item4 item4 item4");
3476 cbitems = g_list_append(cbitems, "item5 item5 item5 item5 item5 item5");
3477 cbitems = g_list_append(cbitems, "item6 item6 item6 item6 item6");
3478 cbitems = g_list_append(cbitems, "item7 item7 item7 item7");
3479 cbitems = g_list_append(cbitems, "item8 item8 item8");
3480 cbitems = g_list_append(cbitems, "item9 item9");
3482 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3484 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3485 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
3488 gtk_window_set_title (GTK_WINDOW (window), "entry");
3489 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
3492 box1 = gtk_vbox_new (FALSE, 0);
3493 gtk_container_add (GTK_CONTAINER (window), box1);
3494 gtk_widget_show (box1);
3497 box2 = gtk_vbox_new (FALSE, 10);
3498 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
3499 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
3500 gtk_widget_show (box2);
3502 entry = gtk_entry_new ();
3503 gtk_entry_set_text (GTK_ENTRY (entry), "hello world السلام عليكم");
3504 gtk_editable_select_region (GTK_EDITABLE (entry), 0, 5);
3505 gtk_box_pack_start (GTK_BOX (box2), entry, TRUE, TRUE, 0);
3506 gtk_widget_show (entry);
3508 cb = gtk_combo_new ();
3509 gtk_combo_set_popdown_strings (GTK_COMBO (cb), cbitems);
3510 gtk_entry_set_text (GTK_ENTRY (GTK_COMBO(cb)->entry), "hello world");
3511 gtk_editable_select_region (GTK_EDITABLE (GTK_COMBO(cb)->entry),
3513 gtk_box_pack_start (GTK_BOX (box2), cb, TRUE, TRUE, 0);
3514 gtk_widget_show (cb);
3516 editable_check = gtk_check_button_new_with_label("Editable");
3517 gtk_box_pack_start (GTK_BOX (box2), editable_check, FALSE, TRUE, 0);
3518 gtk_signal_connect (GTK_OBJECT(editable_check), "toggled",
3519 GTK_SIGNAL_FUNC(entry_toggle_editable), entry);
3520 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(editable_check), TRUE);
3521 gtk_widget_show (editable_check);
3523 editable_check = gtk_check_button_new_with_label("Visible");
3524 gtk_box_pack_start (GTK_BOX (box2), editable_check, FALSE, TRUE, 0);
3525 gtk_signal_connect (GTK_OBJECT(editable_check), "toggled",
3526 GTK_SIGNAL_FUNC(entry_toggle_visibility), entry);
3527 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(editable_check), TRUE);
3528 gtk_widget_show (editable_check);
3530 sensitive_check = gtk_check_button_new_with_label("Sensitive");
3531 gtk_box_pack_start (GTK_BOX (box2), sensitive_check, FALSE, TRUE, 0);
3532 gtk_signal_connect (GTK_OBJECT(sensitive_check), "toggled",
3533 GTK_SIGNAL_FUNC(entry_toggle_sensitive), entry);
3534 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(sensitive_check), TRUE);
3535 gtk_widget_show (sensitive_check);
3537 activate_check = gtk_check_button_new_with_label ("Activates default");
3538 gtk_box_pack_start (GTK_BOX (box2), activate_check, FALSE, TRUE, 0);
3539 gtk_signal_connect (GTK_OBJECT (activate_check), "toggled",
3540 GTK_SIGNAL_FUNC (entry_toggle_activate_default), entry);
3541 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (activate_check), FALSE);
3542 gtk_widget_show (activate_check);
3544 invisible_char_check = gtk_check_button_new_with_label("invisible_char = 0");
3545 gtk_box_pack_start (GTK_BOX (box2), invisible_char_check, FALSE, TRUE, 0);
3546 gtk_signal_connect (GTK_OBJECT(invisible_char_check), "toggled",
3547 GTK_SIGNAL_FUNC(entry_toggle_invisible_char), entry);
3548 gtk_widget_show (invisible_char_check);
3550 editable_check = gtk_check_button_new_with_label("Has Frame");
3551 gtk_box_pack_start (GTK_BOX (box2), editable_check, FALSE, TRUE, 0);
3552 gtk_signal_connect (GTK_OBJECT(editable_check), "toggled",
3553 GTK_SIGNAL_FUNC(entry_toggle_frame), entry);
3554 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(editable_check), TRUE);
3555 gtk_widget_show (editable_check);
3557 separator = gtk_hseparator_new ();
3558 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
3559 gtk_widget_show (separator);
3561 box2 = gtk_vbox_new (FALSE, 10);
3562 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
3563 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
3564 gtk_widget_show (box2);
3567 button = gtk_button_new_with_label ("close");
3568 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
3569 GTK_SIGNAL_FUNC(gtk_widget_destroy),
3570 GTK_OBJECT (window));
3571 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
3572 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
3573 gtk_widget_grab_default (button);
3574 gtk_widget_show (button);
3577 if (!GTK_WIDGET_VISIBLE (window))
3578 gtk_widget_show (window);
3580 gtk_widget_destroy (window);
3587 static GtkWidget *spinner1;
3590 toggle_snap (GtkWidget *widget, GtkSpinButton *spin)
3592 gtk_spin_button_set_snap_to_ticks (spin, GTK_TOGGLE_BUTTON (widget)->active);
3596 toggle_numeric (GtkWidget *widget, GtkSpinButton *spin)
3598 gtk_spin_button_set_numeric (spin, GTK_TOGGLE_BUTTON (widget)->active);
3602 change_digits (GtkWidget *widget, GtkSpinButton *spin)
3604 gtk_spin_button_set_digits (GTK_SPIN_BUTTON (spinner1),
3605 gtk_spin_button_get_value_as_int (spin));
3609 get_value (GtkWidget *widget, gpointer data)
3613 GtkSpinButton *spin;
3615 spin = GTK_SPIN_BUTTON (spinner1);
3616 label = GTK_LABEL (gtk_object_get_user_data (GTK_OBJECT (widget)));
3617 if (GPOINTER_TO_INT (data) == 1)
3618 sprintf (buf, "%d", gtk_spin_button_get_value_as_int (spin));
3620 sprintf (buf, "%0.*f", spin->digits,
3621 gtk_spin_button_get_value_as_float (spin));
3622 gtk_label_set_text (label, buf);
3626 spin_button_time_output_func (GtkSpinButton *spin_button)
3628 static gchar buf[6];
3632 hours = spin_button->adjustment->value / 60.0;
3633 minutes = (fabs(floor (hours) - hours) < 1e-5) ? 0.0 : 30;
3634 sprintf (buf, "%02.0f:%02.0f", floor (hours), minutes);
3635 if (strcmp (buf, gtk_entry_get_text (GTK_ENTRY (spin_button))))
3636 gtk_entry_set_text (GTK_ENTRY (spin_button), buf);
3641 spin_button_month_input_func (GtkSpinButton *spin_button,
3645 static gchar *month[12] = { "January", "February", "March", "April",
3646 "May", "June", "July", "August",
3647 "September", "October", "November", "December" };
3649 gboolean found = FALSE;
3651 for (i = 1; i <= 12; i++)
3653 tmp1 = g_strdup (month[i-1]);
3655 tmp2 = g_strdup (gtk_entry_get_text (GTK_ENTRY (spin_button)));
3657 if (strstr (tmp1, tmp2) == tmp1)
3667 return GTK_INPUT_ERROR;
3669 *new_val = (gfloat) i;
3674 spin_button_month_output_func (GtkSpinButton *spin_button)
3677 static gchar *month[12] = { "January", "February", "March", "April",
3678 "May", "June", "July", "August", "September",
3679 "October", "November", "December" };
3681 for (i = 1; i <= 12; i++)
3682 if (fabs (spin_button->adjustment->value - (double)i) < 1e-5)
3684 if (strcmp (month[i-1], gtk_entry_get_text (GTK_ENTRY (spin_button))))
3685 gtk_entry_set_text (GTK_ENTRY (spin_button), month[i-1]);
3691 spin_button_hex_input_func (GtkSpinButton *spin_button,
3698 buf = gtk_entry_get_text (GTK_ENTRY (spin_button));
3699 res = (gfloat)(strtol(buf, &err, 16));
3702 return GTK_INPUT_ERROR;
3708 spin_button_hex_output_func (GtkSpinButton *spin_button)
3710 static gchar buf[7];
3713 val = (gint) spin_button->adjustment->value;
3714 if (fabs (val) < 1e-5)
3715 sprintf (buf, "0x00");
3717 sprintf (buf, "0x%.2X", val);
3718 if (strcmp (buf, gtk_entry_get_text (GTK_ENTRY (spin_button))))
3719 gtk_entry_set_text (GTK_ENTRY (spin_button), buf);
3726 static GtkWidget *window = NULL;
3729 GtkWidget *main_vbox;
3732 GtkWidget *spinner2;
3736 GtkWidget *val_label;
3741 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3743 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3744 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
3747 gtk_window_set_title (GTK_WINDOW (window), "GtkSpinButton");
3749 main_vbox = gtk_vbox_new (FALSE, 5);
3750 gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 10);
3751 gtk_container_add (GTK_CONTAINER (window), main_vbox);
3753 frame = gtk_frame_new ("Not accelerated");
3754 gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0);
3756 vbox = gtk_vbox_new (FALSE, 0);
3757 gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
3758 gtk_container_add (GTK_CONTAINER (frame), vbox);
3760 /* Time, month, hex spinners */
3762 hbox = gtk_hbox_new (FALSE, 0);
3763 gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 5);
3765 vbox2 = gtk_vbox_new (FALSE, 0);
3766 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
3768 label = gtk_label_new ("Time :");
3769 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
3770 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
3772 adj = (GtkAdjustment *) gtk_adjustment_new (0, 0, 1410, 30, 60, 0);
3773 spinner = gtk_spin_button_new (adj, 0, 0);
3774 gtk_editable_set_editable (GTK_EDITABLE (spinner), FALSE);
3775 gtk_signal_connect (GTK_OBJECT (spinner),
3777 GTK_SIGNAL_FUNC (spin_button_time_output_func),
3779 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
3780 gtk_widget_set_usize (spinner, 55, -1);
3781 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
3783 vbox2 = gtk_vbox_new (FALSE, 0);
3784 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
3786 label = gtk_label_new ("Month :");
3787 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
3788 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
3790 adj = (GtkAdjustment *) gtk_adjustment_new (1.0, 1.0, 12.0, 1.0,
3792 spinner = gtk_spin_button_new (adj, 0, 0);
3793 gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (spinner),
3794 GTK_UPDATE_IF_VALID);
3795 gtk_signal_connect (GTK_OBJECT (spinner),
3797 GTK_SIGNAL_FUNC (spin_button_month_input_func),
3799 gtk_signal_connect (GTK_OBJECT (spinner),
3801 GTK_SIGNAL_FUNC (spin_button_month_output_func),
3803 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
3804 gtk_widget_set_usize (spinner, 85, -1);
3805 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
3807 vbox2 = gtk_vbox_new (FALSE, 0);
3808 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
3810 label = gtk_label_new ("Hex :");
3811 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
3812 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
3814 adj = (GtkAdjustment *) gtk_adjustment_new (0, 0, 255, 1, 16, 0);
3815 spinner = gtk_spin_button_new (adj, 0, 0);
3816 gtk_editable_set_editable (GTK_EDITABLE (spinner), TRUE);
3817 gtk_signal_connect (GTK_OBJECT (spinner),
3819 GTK_SIGNAL_FUNC (spin_button_hex_input_func),
3821 gtk_signal_connect (GTK_OBJECT (spinner),
3823 GTK_SIGNAL_FUNC (spin_button_hex_output_func),
3825 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
3826 gtk_widget_set_usize (spinner, 55, 0);
3827 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
3829 frame = gtk_frame_new ("Accelerated");
3830 gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0);
3832 vbox = gtk_vbox_new (FALSE, 0);
3833 gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
3834 gtk_container_add (GTK_CONTAINER (frame), vbox);
3836 hbox = gtk_hbox_new (FALSE, 0);
3837 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
3839 vbox2 = gtk_vbox_new (FALSE, 0);
3840 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
3842 label = gtk_label_new ("Value :");
3843 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
3844 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
3846 adj = (GtkAdjustment *) gtk_adjustment_new (0.0, -10000.0, 10000.0,
3848 spinner1 = gtk_spin_button_new (adj, 1.0, 2);
3849 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner1), TRUE);
3850 gtk_widget_set_usize (spinner1, 100, 0);
3851 gtk_box_pack_start (GTK_BOX (vbox2), spinner1, FALSE, TRUE, 0);
3853 vbox2 = gtk_vbox_new (FALSE, 0);
3854 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
3856 label = gtk_label_new ("Digits :");
3857 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
3858 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
3860 adj = (GtkAdjustment *) gtk_adjustment_new (2, 1, 5, 1, 1, 0);
3861 spinner2 = gtk_spin_button_new (adj, 0.0, 0);
3862 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
3863 GTK_SIGNAL_FUNC (change_digits),
3864 (gpointer) spinner2);
3865 gtk_box_pack_start (GTK_BOX (vbox2), spinner2, FALSE, TRUE, 0);
3867 hbox = gtk_hbox_new (FALSE, 0);
3868 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
3870 button = gtk_check_button_new_with_label ("Snap to 0.5-ticks");
3871 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3872 GTK_SIGNAL_FUNC (toggle_snap),
3874 gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
3875 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
3877 button = gtk_check_button_new_with_label ("Numeric only input mode");
3878 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3879 GTK_SIGNAL_FUNC (toggle_numeric),
3881 gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
3882 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
3884 val_label = gtk_label_new ("");
3886 hbox = gtk_hbox_new (FALSE, 0);
3887 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
3889 button = gtk_button_new_with_label ("Value as Int");
3890 gtk_object_set_user_data (GTK_OBJECT (button), val_label);
3891 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3892 GTK_SIGNAL_FUNC (get_value),
3893 GINT_TO_POINTER (1));
3894 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
3896 button = gtk_button_new_with_label ("Value as Float");
3897 gtk_object_set_user_data (GTK_OBJECT (button), val_label);
3898 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3899 GTK_SIGNAL_FUNC (get_value),
3900 GINT_TO_POINTER (2));
3901 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
3903 gtk_box_pack_start (GTK_BOX (vbox), val_label, TRUE, TRUE, 0);
3904 gtk_label_set_text (GTK_LABEL (val_label), "0");
3906 hbox = gtk_hbox_new (FALSE, 0);
3907 gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
3909 button = gtk_button_new_with_label ("Close");
3910 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
3911 GTK_SIGNAL_FUNC (gtk_widget_destroy),
3912 GTK_OBJECT (window));
3913 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
3916 if (!GTK_WIDGET_VISIBLE (window))
3917 gtk_widget_show_all (window);
3919 gtk_widget_destroy (window);
3928 cursor_expose_event (GtkWidget *widget,
3932 GtkDrawingArea *darea;
3933 GdkDrawable *drawable;
3940 g_return_val_if_fail (widget != NULL, TRUE);
3941 g_return_val_if_fail (GTK_IS_DRAWING_AREA (widget), TRUE);
3943 darea = GTK_DRAWING_AREA (widget);
3944 drawable = widget->window;
3945 white_gc = widget->style->white_gc;
3946 gray_gc = widget->style->bg_gc[GTK_STATE_NORMAL];
3947 black_gc = widget->style->black_gc;
3948 max_width = widget->allocation.width;
3949 max_height = widget->allocation.height;
3951 gdk_draw_rectangle (drawable, white_gc,
3958 gdk_draw_rectangle (drawable, black_gc,
3965 gdk_draw_rectangle (drawable, gray_gc,
3976 set_cursor (GtkWidget *spinner,
3984 c = CLAMP (gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spinner)), 0, 152);
3987 label = gtk_object_get_user_data (GTK_OBJECT (spinner));
3988 vals = gtk_type_enum_get_values (GTK_TYPE_GDK_CURSOR_TYPE);
3989 while (vals && vals->value != c)
3992 gtk_label_set_text (GTK_LABEL (label), vals->value_nick);
3994 gtk_label_set_text (GTK_LABEL (label), "<unknown>");
3996 cursor = gdk_cursor_new (c);
3997 gdk_window_set_cursor (widget->window, cursor);
3998 gdk_cursor_unref (cursor);
4002 cursor_event (GtkWidget *widget,
4004 GtkSpinButton *spinner)
4006 if ((event->type == GDK_BUTTON_PRESS) &&
4007 ((event->button.button == 1) ||
4008 (event->button.button == 3)))
4010 gtk_spin_button_spin (spinner, event->button.button == 1 ?
4011 GTK_SPIN_STEP_FORWARD : GTK_SPIN_STEP_BACKWARD, 0);
4019 create_cursors (void)
4021 static GtkWidget *window = NULL;
4024 GtkWidget *main_vbox;
4035 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
4037 gtk_signal_connect (GTK_OBJECT (window), "destroy",
4038 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
4041 gtk_window_set_title (GTK_WINDOW (window), "Cursors");
4043 main_vbox = gtk_vbox_new (FALSE, 5);
4044 gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 0);
4045 gtk_container_add (GTK_CONTAINER (window), main_vbox);
4048 gtk_widget_new (gtk_vbox_get_type (),
4049 "GtkBox::homogeneous", FALSE,
4050 "GtkBox::spacing", 5,
4051 "GtkContainer::border_width", 10,
4052 "GtkWidget::parent", main_vbox,
4053 "GtkWidget::visible", TRUE,
4056 hbox = gtk_hbox_new (FALSE, 0);
4057 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4058 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
4060 label = gtk_label_new ("Cursor Value : ");
4061 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
4062 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
4064 adj = (GtkAdjustment *) gtk_adjustment_new (0,
4068 spinner = gtk_spin_button_new (adj, 0, 0);
4069 gtk_box_pack_start (GTK_BOX (hbox), spinner, TRUE, TRUE, 0);
4072 gtk_widget_new (gtk_frame_get_type (),
4073 "GtkFrame::shadow", GTK_SHADOW_ETCHED_IN,
4074 "GtkFrame::label_xalign", 0.5,
4075 "GtkFrame::label", "Cursor Area",
4076 "GtkContainer::border_width", 10,
4077 "GtkWidget::parent", vbox,
4078 "GtkWidget::visible", TRUE,
4081 darea = gtk_drawing_area_new ();
4082 gtk_widget_set_usize (darea, 80, 80);
4083 gtk_container_add (GTK_CONTAINER (frame), darea);
4084 gtk_signal_connect (GTK_OBJECT (darea),
4086 GTK_SIGNAL_FUNC (cursor_expose_event),
4088 gtk_widget_set_events (darea, GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK);
4089 gtk_signal_connect (GTK_OBJECT (darea),
4090 "button_press_event",
4091 GTK_SIGNAL_FUNC (cursor_event),
4093 gtk_widget_show (darea);
4095 gtk_signal_connect (GTK_OBJECT (spinner), "changed",
4096 GTK_SIGNAL_FUNC (set_cursor),
4099 label = gtk_widget_new (GTK_TYPE_LABEL,
4104 gtk_container_child_set (GTK_CONTAINER (vbox), label,
4107 gtk_object_set_user_data (GTK_OBJECT (spinner), label);
4110 gtk_widget_new (gtk_hseparator_get_type (),
4111 "GtkWidget::visible", TRUE,
4113 gtk_box_pack_start (GTK_BOX (main_vbox), any, FALSE, TRUE, 0);
4115 hbox = gtk_hbox_new (FALSE, 0);
4116 gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
4117 gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
4119 button = gtk_button_new_with_label ("Close");
4120 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
4121 GTK_SIGNAL_FUNC (gtk_widget_destroy),
4122 GTK_OBJECT (window));
4123 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
4125 gtk_widget_show_all (window);
4127 set_cursor (spinner, darea);
4130 gtk_widget_destroy (window);
4138 list_add (GtkWidget *widget,
4143 GtkWidget *list_item;
4144 GtkContainer *container;
4146 container = GTK_CONTAINER (list);
4148 sprintf (buffer, "added item %d", i++);
4149 list_item = gtk_list_item_new_with_label (buffer);
4150 gtk_widget_show (list_item);
4152 gtk_container_add (container, list_item);
4156 list_remove (GtkWidget *widget,
4159 GList *clear_list = NULL;
4160 GList *sel_row = NULL;
4163 if (list->selection_mode == GTK_SELECTION_EXTENDED)
4167 item = GTK_CONTAINER (list)->focus_child;
4168 if (!item && list->selection)
4169 item = list->selection->data;
4173 work = g_list_find (list->children, item);
4174 for (sel_row = work; sel_row; sel_row = sel_row->next)
4175 if (GTK_WIDGET (sel_row->data)->state != GTK_STATE_SELECTED)
4180 for (sel_row = work; sel_row; sel_row = sel_row->prev)
4181 if (GTK_WIDGET (sel_row->data)->state != GTK_STATE_SELECTED)
4187 for (work = list->selection; work; work = work->next)
4188 clear_list = g_list_prepend (clear_list, work->data);
4190 clear_list = g_list_reverse (clear_list);
4191 gtk_list_remove_items (GTK_LIST (list), clear_list);
4192 g_list_free (clear_list);
4194 if (list->selection_mode == GTK_SELECTION_EXTENDED && sel_row)
4195 gtk_list_select_child (list, GTK_WIDGET(sel_row->data));
4199 list_clear (GtkWidget *widget,
4202 gtk_list_clear_items (GTK_LIST (list), 0, -1);
4205 #define RADIOMENUTOGGLED(_rmi_, __i) { \
4208 __g = gtk_radio_menu_item_group(_rmi_); \
4209 while( __g && !((GtkCheckMenuItem *)(__g->data))->active) { \
4215 static GtkWidget *list_omenu;
4218 list_toggle_sel_mode (GtkWidget *widget, GtkList *list)
4222 if (!GTK_WIDGET_MAPPED (widget))
4225 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
4226 (((GtkOptionMenu *)list_omenu)->menu_item), i);
4228 gtk_list_set_selection_mode (list, (GtkSelectionMode) (3-i));
4234 static GtkWidget *window = NULL;
4236 static OptionMenuItem items[] =
4238 { "Single", list_toggle_sel_mode },
4239 { "Browse", list_toggle_sel_mode },
4240 { "Multiple", list_toggle_sel_mode },
4241 { "Extended", list_toggle_sel_mode }
4250 GtkWidget *scrolled_win;
4253 GtkWidget *separator;
4256 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
4258 gtk_signal_connect (GTK_OBJECT (window), "destroy",
4259 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
4262 gtk_window_set_title (GTK_WINDOW (window), "list");
4263 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
4265 vbox = gtk_vbox_new (FALSE, 0);
4266 gtk_container_add (GTK_CONTAINER (window), vbox);
4268 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
4269 gtk_container_set_border_width (GTK_CONTAINER (scrolled_win), 5);
4270 gtk_widget_set_usize (scrolled_win, -1, 300);
4271 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
4272 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
4273 GTK_POLICY_AUTOMATIC,
4274 GTK_POLICY_AUTOMATIC);
4276 list = gtk_list_new ();
4277 gtk_list_set_selection_mode (GTK_LIST (list), GTK_SELECTION_EXTENDED);
4278 gtk_scrolled_window_add_with_viewport
4279 (GTK_SCROLLED_WINDOW (scrolled_win), list);
4280 gtk_container_set_focus_vadjustment
4281 (GTK_CONTAINER (list),
4282 gtk_scrolled_window_get_vadjustment
4283 (GTK_SCROLLED_WINDOW (scrolled_win)));
4284 gtk_container_set_focus_hadjustment
4285 (GTK_CONTAINER (list),
4286 gtk_scrolled_window_get_hadjustment
4287 (GTK_SCROLLED_WINDOW (scrolled_win)));
4289 if ((infile = fopen("gtkenums.h", "r")))
4295 while (fgets (buffer, 256, infile))
4297 if ((pos = strchr (buffer, '\n')))
4299 item = gtk_list_item_new_with_label (buffer);
4300 gtk_container_add (GTK_CONTAINER (list), item);
4307 hbox = gtk_hbox_new (TRUE, 5);
4308 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4309 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
4311 button = gtk_button_new_with_label ("Insert Row");
4312 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4313 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4314 GTK_SIGNAL_FUNC (list_add),
4317 button = gtk_button_new_with_label ("Clear List");
4318 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4319 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4320 GTK_SIGNAL_FUNC (list_clear),
4323 button = gtk_button_new_with_label ("Remove Selection");
4324 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4325 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4326 GTK_SIGNAL_FUNC (list_remove),
4329 cbox = gtk_hbox_new (FALSE, 0);
4330 gtk_box_pack_start (GTK_BOX (vbox), cbox, FALSE, TRUE, 0);
4332 hbox = gtk_hbox_new (FALSE, 5);
4333 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4334 gtk_box_pack_start (GTK_BOX (cbox), hbox, TRUE, FALSE, 0);
4336 label = gtk_label_new ("Selection Mode :");
4337 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
4339 list_omenu = build_option_menu (items, 4, 3, list);
4340 gtk_box_pack_start (GTK_BOX (hbox), list_omenu, FALSE, TRUE, 0);
4342 separator = gtk_hseparator_new ();
4343 gtk_box_pack_start (GTK_BOX (vbox), separator, FALSE, TRUE, 0);
4345 cbox = gtk_hbox_new (FALSE, 0);
4346 gtk_box_pack_start (GTK_BOX (vbox), cbox, FALSE, TRUE, 0);
4348 button = gtk_button_new_with_label ("close");
4349 gtk_container_set_border_width (GTK_CONTAINER (button), 10);
4350 gtk_box_pack_start (GTK_BOX (cbox), button, TRUE, TRUE, 0);
4351 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
4352 GTK_SIGNAL_FUNC(gtk_widget_destroy),
4353 GTK_OBJECT (window));
4355 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
4356 gtk_widget_grab_default (button);
4359 if (!GTK_WIDGET_VISIBLE (window))
4360 gtk_widget_show_all (window);
4362 gtk_widget_destroy (window);
4369 static char * book_open_xpm[] = {
4392 static char * book_closed_xpm[] = {
4417 static char * mini_page_xpm[] = {
4440 static char * gtk_mini_xpm[] = {
4480 #define TESTGTK_CLIST_COLUMNS 12
4481 static gint clist_rows = 0;
4482 static GtkWidget *clist_omenu;
4485 add1000_clist (GtkWidget *widget, gpointer data)
4488 char text[TESTGTK_CLIST_COLUMNS][50];
4489 char *texts[TESTGTK_CLIST_COLUMNS];
4494 clist = GTK_CLIST (data);
4496 pixmap = gdk_pixmap_create_from_xpm_d (clist->clist_window,
4498 >K_WIDGET (data)->style->white,
4501 for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++)
4504 sprintf (text[i], "Column %d", i);
4508 sprintf (text[1], "Right");
4509 sprintf (text[2], "Center");
4511 gtk_clist_freeze (GTK_CLIST (data));
4512 for (i = 0; i < 1000; i++)
4514 sprintf (text[0], "CListRow %d", rand() % 10000);
4515 row = gtk_clist_append (clist, texts);
4516 gtk_clist_set_pixtext (clist, row, 3, "gtk+", 5, pixmap, mask);
4519 gtk_clist_thaw (GTK_CLIST (data));
4521 gdk_pixmap_unref (pixmap);
4522 gdk_bitmap_unref (mask);
4526 add10000_clist (GtkWidget *widget, gpointer data)
4529 char text[TESTGTK_CLIST_COLUMNS][50];
4530 char *texts[TESTGTK_CLIST_COLUMNS];
4532 for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++)
4535 sprintf (text[i], "Column %d", i);
4538 sprintf (text[1], "Right");
4539 sprintf (text[2], "Center");
4541 gtk_clist_freeze (GTK_CLIST (data));
4542 for (i = 0; i < 10000; i++)
4544 sprintf (text[0], "CListRow %d", rand() % 10000);
4545 gtk_clist_append (GTK_CLIST (data), texts);
4547 gtk_clist_thaw (GTK_CLIST (data));
4551 clear_clist (GtkWidget *widget, gpointer data)
4553 gtk_clist_clear (GTK_CLIST (data));
4557 void clist_remove_selection (GtkWidget *widget, GtkCList *clist)
4559 gtk_clist_freeze (clist);
4561 while (clist->selection)
4566 row = GPOINTER_TO_INT (clist->selection->data);
4568 gtk_clist_remove (clist, row);
4570 if (clist->selection_mode == GTK_SELECTION_BROWSE)
4574 if (clist->selection_mode == GTK_SELECTION_EXTENDED && !clist->selection &&
4575 clist->focus_row >= 0)
4576 gtk_clist_select_row (clist, clist->focus_row, -1);
4578 gtk_clist_thaw (clist);
4581 void toggle_title_buttons (GtkWidget *widget, GtkCList *clist)
4583 if (GTK_TOGGLE_BUTTON (widget)->active)
4584 gtk_clist_column_titles_show (clist);
4586 gtk_clist_column_titles_hide (clist);
4589 void toggle_reorderable (GtkWidget *widget, GtkCList *clist)
4591 gtk_clist_set_reorderable (clist, GTK_TOGGLE_BUTTON (widget)->active);
4595 insert_row_clist (GtkWidget *widget, gpointer data)
4597 static char *text[] =
4599 "This", "is an", "inserted", "row.",
4600 "This", "is an", "inserted", "row.",
4601 "This", "is an", "inserted", "row."
4604 static GtkStyle *style1 = NULL;
4605 static GtkStyle *style2 = NULL;
4606 static GtkStyle *style3 = NULL;
4609 if (GTK_CLIST (data)->focus_row >= 0)
4610 row = gtk_clist_insert (GTK_CLIST (data), GTK_CLIST (data)->focus_row,
4613 row = gtk_clist_prepend (GTK_CLIST (data), text);
4627 style1 = gtk_style_copy (GTK_WIDGET (data)->style);
4628 style1->base[GTK_STATE_NORMAL] = col1;
4629 style1->base[GTK_STATE_SELECTED] = col2;
4631 style2 = gtk_style_copy (GTK_WIDGET (data)->style);
4632 style2->fg[GTK_STATE_NORMAL] = col1;
4633 style2->fg[GTK_STATE_SELECTED] = col2;
4635 style3 = gtk_style_copy (GTK_WIDGET (data)->style);
4636 style3->fg[GTK_STATE_NORMAL] = col1;
4637 style3->base[GTK_STATE_NORMAL] = col2;
4638 pango_font_description_free (style3->font_desc);
4639 style3->font_desc = pango_font_description_from_string ("courier 12");
4642 gtk_clist_set_cell_style (GTK_CLIST (data), row, 3, style1);
4643 gtk_clist_set_cell_style (GTK_CLIST (data), row, 4, style2);
4644 gtk_clist_set_cell_style (GTK_CLIST (data), row, 0, style3);
4650 clist_warning_test (GtkWidget *button,
4654 static gboolean add_remove = FALSE;
4656 add_remove = !add_remove;
4658 child = gtk_label_new ("Test");
4659 gtk_widget_ref (child);
4660 gtk_object_sink (GTK_OBJECT (child));
4663 gtk_container_add (GTK_CONTAINER (clist), child);
4666 child->parent = clist;
4667 gtk_container_remove (GTK_CONTAINER (clist), child);
4668 child->parent = NULL;
4671 gtk_widget_destroy (child);
4672 gtk_widget_unref (child);
4676 undo_selection (GtkWidget *button, GtkCList *clist)
4678 gtk_clist_undo_selection (clist);
4682 clist_toggle_sel_mode (GtkWidget *widget, GtkCList *clist)
4686 if (!GTK_WIDGET_MAPPED (widget))
4689 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
4690 (((GtkOptionMenu *)clist_omenu)->menu_item), i);
4692 gtk_clist_set_selection_mode (clist, (GtkSelectionMode) (3-i));
4696 clist_click_column (GtkCList *clist, gint column, gpointer data)
4699 gtk_clist_set_column_visibility (clist, column, FALSE);
4700 else if (column == clist->sort_column)
4702 if (clist->sort_type == GTK_SORT_ASCENDING)
4703 clist->sort_type = GTK_SORT_DESCENDING;
4705 clist->sort_type = GTK_SORT_ASCENDING;
4708 gtk_clist_set_sort_column (clist, column);
4710 gtk_clist_sort (clist);
4717 static GtkWidget *window = NULL;
4719 static char *titles[] =
4721 "auto resize", "not resizeable", "max width 100", "min width 50",
4722 "hide column", "Title 5", "Title 6", "Title 7",
4723 "Title 8", "Title 9", "Title 10", "Title 11"
4726 static OptionMenuItem items[] =
4728 { "Single", clist_toggle_sel_mode },
4729 { "Browse", clist_toggle_sel_mode },
4730 { "Multiple", clist_toggle_sel_mode },
4731 { "Extended", clist_toggle_sel_mode }
4734 char text[TESTGTK_CLIST_COLUMNS][50];
4735 char *texts[TESTGTK_CLIST_COLUMNS];
4741 GtkWidget *separator;
4742 GtkWidget *scrolled_win;
4745 GtkWidget *undo_button;
4755 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
4757 gtk_signal_connect (GTK_OBJECT (window), "destroy",
4758 GTK_SIGNAL_FUNC (gtk_widget_destroyed), &window);
4760 gtk_window_set_title (GTK_WINDOW (window), "clist");
4761 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
4763 vbox = gtk_vbox_new (FALSE, 0);
4764 gtk_container_add (GTK_CONTAINER (window), vbox);
4766 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
4767 gtk_container_set_border_width (GTK_CONTAINER (scrolled_win), 5);
4768 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
4769 GTK_POLICY_AUTOMATIC,
4770 GTK_POLICY_AUTOMATIC);
4772 /* create GtkCList here so we have a pointer to throw at the
4773 * button callbacks -- more is done with it later */
4774 clist = gtk_clist_new_with_titles (TESTGTK_CLIST_COLUMNS, titles);
4775 gtk_container_add (GTK_CONTAINER (scrolled_win), clist);
4776 gtk_signal_connect (GTK_OBJECT (clist), "click_column",
4777 (GtkSignalFunc) clist_click_column, NULL);
4779 /* control buttons */
4780 hbox = gtk_hbox_new (FALSE, 5);
4781 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4782 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
4784 button = gtk_button_new_with_label ("Insert Row");
4785 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4786 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4787 (GtkSignalFunc) insert_row_clist, (gpointer) clist);
4789 button = gtk_button_new_with_label ("Add 1,000 Rows With Pixmaps");
4790 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4791 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4792 (GtkSignalFunc) add1000_clist, (gpointer) clist);
4794 button = gtk_button_new_with_label ("Add 10,000 Rows");
4795 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4796 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4797 (GtkSignalFunc) add10000_clist, (gpointer) clist);
4799 /* second layer of buttons */
4800 hbox = gtk_hbox_new (FALSE, 5);
4801 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4802 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
4804 button = gtk_button_new_with_label ("Clear List");
4805 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4806 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4807 (GtkSignalFunc) clear_clist, (gpointer) clist);
4809 button = gtk_button_new_with_label ("Remove Selection");
4810 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4811 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4812 (GtkSignalFunc) clist_remove_selection,
4815 undo_button = gtk_button_new_with_label ("Undo Selection");
4816 gtk_box_pack_start (GTK_BOX (hbox), undo_button, TRUE, TRUE, 0);
4817 gtk_signal_connect (GTK_OBJECT (undo_button), "clicked",
4818 (GtkSignalFunc) undo_selection, (gpointer) clist);
4820 button = gtk_button_new_with_label ("Warning Test");
4821 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4822 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4823 (GtkSignalFunc) clist_warning_test,(gpointer) clist);
4825 /* third layer of buttons */
4826 hbox = gtk_hbox_new (FALSE, 5);
4827 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4828 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
4830 check = gtk_check_button_new_with_label ("Show Title Buttons");
4831 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
4832 gtk_signal_connect (GTK_OBJECT (check), "clicked",
4833 GTK_SIGNAL_FUNC (toggle_title_buttons), clist);
4834 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE);
4836 check = gtk_check_button_new_with_label ("Reorderable");
4837 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
4838 gtk_signal_connect (GTK_OBJECT (check), "clicked",
4839 GTK_SIGNAL_FUNC (toggle_reorderable), clist);
4840 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE);
4842 label = gtk_label_new ("Selection Mode :");
4843 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
4845 clist_omenu = build_option_menu (items, 4, 3, clist);
4846 gtk_box_pack_start (GTK_BOX (hbox), clist_omenu, FALSE, TRUE, 0);
4849 * the rest of the clist configuration
4852 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
4853 gtk_clist_set_row_height (GTK_CLIST (clist), 18);
4854 gtk_widget_set_usize (clist, -1, 300);
4856 for (i = 1; i < TESTGTK_CLIST_COLUMNS; i++)
4857 gtk_clist_set_column_width (GTK_CLIST (clist), i, 80);
4859 gtk_clist_set_column_auto_resize (GTK_CLIST (clist), 0, TRUE);
4860 gtk_clist_set_column_resizeable (GTK_CLIST (clist), 1, FALSE);
4861 gtk_clist_set_column_max_width (GTK_CLIST (clist), 2, 100);
4862 gtk_clist_set_column_min_width (GTK_CLIST (clist), 3, 50);
4863 gtk_clist_set_selection_mode (GTK_CLIST (clist), GTK_SELECTION_EXTENDED);
4864 gtk_clist_set_column_justification (GTK_CLIST (clist), 1,
4866 gtk_clist_set_column_justification (GTK_CLIST (clist), 2,
4867 GTK_JUSTIFY_CENTER);
4869 for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++)
4872 sprintf (text[i], "Column %d", i);
4875 sprintf (text[1], "Right");
4876 sprintf (text[2], "Center");
4885 style = gtk_style_new ();
4886 style->fg[GTK_STATE_NORMAL] = col1;
4887 style->base[GTK_STATE_NORMAL] = col2;
4889 style->font_desc->size = 14 * PANGO_SCALE;
4890 style->font_desc->weight = PANGO_WEIGHT_BOLD;
4892 for (i = 0; i < 10; i++)
4894 sprintf (text[0], "CListRow %d", clist_rows++);
4895 gtk_clist_append (GTK_CLIST (clist), texts);
4900 gtk_clist_set_row_style (GTK_CLIST (clist), i, style);
4903 gtk_clist_set_cell_style (GTK_CLIST (clist), i, i % 4, style);
4908 gtk_style_unref (style);
4910 separator = gtk_hseparator_new ();
4911 gtk_box_pack_start (GTK_BOX (vbox), separator, FALSE, TRUE, 0);
4913 hbox = gtk_hbox_new (FALSE, 0);
4914 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
4916 button = gtk_button_new_with_label ("close");
4917 gtk_container_set_border_width (GTK_CONTAINER (button), 10);
4918 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4919 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
4920 GTK_SIGNAL_FUNC(gtk_widget_destroy),
4921 GTK_OBJECT (window));
4923 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
4924 gtk_widget_grab_default (button);
4927 if (!GTK_WIDGET_VISIBLE (window))
4928 gtk_widget_show_all (window);
4932 gtk_widget_destroy (window);
4947 static gint books = 0;
4948 static gint pages = 0;
4950 static GtkWidget *book_label;
4951 static GtkWidget *page_label;
4952 static GtkWidget *sel_label;
4953 static GtkWidget *vis_label;
4954 static GtkWidget *omenu1;
4955 static GtkWidget *omenu2;
4956 static GtkWidget *omenu3;
4957 static GtkWidget *omenu4;
4958 static GtkWidget *spin1;
4959 static GtkWidget *spin2;
4960 static GtkWidget *spin3;
4961 static gint line_style;
4963 void after_press (GtkCTree *ctree, gpointer data)
4967 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->selection));
4968 gtk_label_set_text (GTK_LABEL (sel_label), buf);
4970 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->row_list));
4971 gtk_label_set_text (GTK_LABEL (vis_label), buf);
4973 sprintf (buf, "%d", books);
4974 gtk_label_set_text (GTK_LABEL (book_label), buf);
4976 sprintf (buf, "%d", pages);
4977 gtk_label_set_text (GTK_LABEL (page_label), buf);
4980 void after_move (GtkCTree *ctree, GtkCTreeNode *child, GtkCTreeNode *parent,
4981 GtkCTreeNode *sibling, gpointer data)
4987 gtk_ctree_get_node_info (ctree, child, &source,
4988 NULL, NULL, NULL, NULL, NULL, NULL, NULL);
4990 gtk_ctree_get_node_info (ctree, parent, &target1,
4991 NULL, NULL, NULL, NULL, NULL, NULL, NULL);
4993 gtk_ctree_get_node_info (ctree, sibling, &target2,
4994 NULL, NULL, NULL, NULL, NULL, NULL, NULL);
4996 g_print ("Moving \"%s\" to \"%s\" with sibling \"%s\".\n", source,
4997 (parent) ? target1 : "nil", (sibling) ? target2 : "nil");
5000 void count_items (GtkCTree *ctree, GtkCTreeNode *list)
5002 if (GTK_CTREE_ROW (list)->is_leaf)
5008 void expand_all (GtkWidget *widget, GtkCTree *ctree)
5010 gtk_ctree_expand_recursive (ctree, NULL);
5011 after_press (ctree, NULL);
5014 void collapse_all (GtkWidget *widget, GtkCTree *ctree)
5016 gtk_ctree_collapse_recursive (ctree, NULL);
5017 after_press (ctree, NULL);
5020 void select_all (GtkWidget *widget, GtkCTree *ctree)
5022 gtk_ctree_select_recursive (ctree, NULL);
5023 after_press (ctree, NULL);
5026 void change_style (GtkWidget *widget, GtkCTree *ctree)
5028 static GtkStyle *style1 = NULL;
5029 static GtkStyle *style2 = NULL;
5035 if (GTK_CLIST (ctree)->focus_row >= 0)
5036 node = GTK_CTREE_NODE
5037 (g_list_nth (GTK_CLIST (ctree)->row_list,GTK_CLIST (ctree)->focus_row));
5039 node = GTK_CTREE_NODE (GTK_CLIST (ctree)->row_list);
5053 style1 = gtk_style_new ();
5054 style1->base[GTK_STATE_NORMAL] = col1;
5055 style1->fg[GTK_STATE_SELECTED] = col2;
5057 style2 = gtk_style_new ();
5058 style2->base[GTK_STATE_SELECTED] = col2;
5059 style2->fg[GTK_STATE_NORMAL] = col1;
5060 style2->base[GTK_STATE_NORMAL] = col2;
5061 pango_font_description_free (style2->font_desc);
5062 style2->font_desc = pango_font_description_from_string ("courier 30");
5065 gtk_ctree_node_set_cell_style (ctree, node, 1, style1);
5066 gtk_ctree_node_set_cell_style (ctree, node, 0, style2);
5068 if (GTK_CTREE_ROW (node)->children)
5069 gtk_ctree_node_set_row_style (ctree, GTK_CTREE_ROW (node)->children,
5073 void unselect_all (GtkWidget *widget, GtkCTree *ctree)
5075 gtk_ctree_unselect_recursive (ctree, NULL);
5076 after_press (ctree, NULL);
5079 void remove_selection (GtkWidget *widget, GtkCTree *ctree)
5084 clist = GTK_CLIST (ctree);
5086 gtk_clist_freeze (clist);
5088 while (clist->selection)
5090 node = clist->selection->data;
5092 if (GTK_CTREE_ROW (node)->is_leaf)
5095 gtk_ctree_post_recursive (ctree, node,
5096 (GtkCTreeFunc) count_items, NULL);
5098 gtk_ctree_remove_node (ctree, node);
5100 if (clist->selection_mode == GTK_SELECTION_BROWSE)
5104 if (clist->selection_mode == GTK_SELECTION_EXTENDED && !clist->selection &&
5105 clist->focus_row >= 0)
5107 node = gtk_ctree_node_nth (ctree, clist->focus_row);
5110 gtk_ctree_select (ctree, node);
5113 gtk_clist_thaw (clist);
5114 after_press (ctree, NULL);
5117 struct _ExportStruct {
5123 typedef struct _ExportStruct ExportStruct;
5126 gnode2ctree (GtkCTree *ctree,
5129 GtkCTreeNode *cnode,
5133 GdkPixmap *pixmap_closed;
5134 GdkBitmap *mask_closed;
5135 GdkPixmap *pixmap_opened;
5136 GdkBitmap *mask_opened;
5138 if (!cnode || !gnode || (!(es = gnode->data)))
5143 pixmap_closed = pixmap3;
5144 mask_closed = mask3;
5145 pixmap_opened = NULL;
5150 pixmap_closed = pixmap1;
5151 mask_closed = mask1;
5152 pixmap_opened = pixmap2;
5153 mask_opened = mask2;
5156 gtk_ctree_set_node_info (ctree, cnode, es->tree, 2, pixmap_closed,
5157 mask_closed, pixmap_opened, mask_opened,
5158 es->is_leaf, (depth < 3));
5159 gtk_ctree_node_set_text (ctree, cnode, 1, es->info);
5167 ctree2gnode (GtkCTree *ctree,
5170 GtkCTreeNode *cnode,
5175 if (!cnode || !gnode)
5178 es = g_new (ExportStruct, 1);
5180 es->is_leaf = GTK_CTREE_ROW (cnode)->is_leaf;
5181 es->tree = GTK_CELL_PIXTEXT (GTK_CTREE_ROW (cnode)->row.cell[0])->text;
5182 es->info = GTK_CELL_PIXTEXT (GTK_CTREE_ROW (cnode)->row.cell[1])->text;
5186 void export_ctree (GtkWidget *widget, GtkCTree *ctree)
5188 char *title[] = { "Tree" , "Info" };
5189 static GtkWidget *export_window = NULL;
5190 static GtkCTree *export_ctree;
5192 GtkWidget *scrolled_win;
5200 export_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5202 gtk_signal_connect (GTK_OBJECT (export_window), "destroy",
5203 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
5206 gtk_window_set_title (GTK_WINDOW (export_window), "exported ctree");
5207 gtk_container_set_border_width (GTK_CONTAINER (export_window), 5);
5209 vbox = gtk_vbox_new (FALSE, 0);
5210 gtk_container_add (GTK_CONTAINER (export_window), vbox);
5212 button = gtk_button_new_with_label ("Close");
5213 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, TRUE, 0);
5215 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5216 (GtkSignalFunc) gtk_widget_destroy,
5217 GTK_OBJECT(export_window));
5219 sep = gtk_hseparator_new ();
5220 gtk_box_pack_end (GTK_BOX (vbox), sep, FALSE, TRUE, 10);
5222 export_ctree = GTK_CTREE (gtk_ctree_new_with_titles (2, 0, title));
5223 gtk_ctree_set_line_style (export_ctree, GTK_CTREE_LINES_DOTTED);
5225 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
5226 gtk_container_add (GTK_CONTAINER (scrolled_win),
5227 GTK_WIDGET (export_ctree));
5228 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
5229 GTK_POLICY_AUTOMATIC,
5230 GTK_POLICY_AUTOMATIC);
5231 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
5232 gtk_clist_set_selection_mode (GTK_CLIST (export_ctree),
5233 GTK_SELECTION_EXTENDED);
5234 gtk_clist_set_column_width (GTK_CLIST (export_ctree), 0, 200);
5235 gtk_clist_set_column_width (GTK_CLIST (export_ctree), 1, 200);
5236 gtk_widget_set_usize (GTK_WIDGET (export_ctree), 300, 200);
5239 if (!GTK_WIDGET_VISIBLE (export_window))
5240 gtk_widget_show_all (export_window);
5242 gtk_clist_clear (GTK_CLIST (export_ctree));
5244 node = GTK_CTREE_NODE (g_list_nth (GTK_CLIST (ctree)->row_list,
5245 GTK_CLIST (ctree)->focus_row));
5249 gnode = gtk_ctree_export_to_gnode (ctree, NULL, NULL, node,
5253 gtk_ctree_insert_gnode (export_ctree, NULL, NULL, gnode,
5255 g_node_destroy (gnode);
5259 void change_indent (GtkWidget *widget, GtkCTree *ctree)
5261 gtk_ctree_set_indent (ctree, GTK_ADJUSTMENT (widget)->value);
5264 void change_spacing (GtkWidget *widget, GtkCTree *ctree)
5266 gtk_ctree_set_spacing (ctree, GTK_ADJUSTMENT (widget)->value);
5269 void change_row_height (GtkWidget *widget, GtkCList *clist)
5271 gtk_clist_set_row_height (clist, GTK_ADJUSTMENT (widget)->value);
5274 void set_background (GtkCTree *ctree, GtkCTreeNode *node, gpointer data)
5276 GtkStyle *style = NULL;
5281 if (ctree->line_style != GTK_CTREE_LINES_TABBED)
5283 if (!GTK_CTREE_ROW (node)->is_leaf)
5284 style = GTK_CTREE_ROW (node)->row.data;
5285 else if (GTK_CTREE_ROW (node)->parent)
5286 style = GTK_CTREE_ROW (GTK_CTREE_ROW (node)->parent)->row.data;
5289 gtk_ctree_node_set_row_style (ctree, node, style);
5292 void ctree_toggle_line_style (GtkWidget *widget, GtkCTree *ctree)
5296 if (!GTK_WIDGET_MAPPED (widget))
5299 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
5300 (((GtkOptionMenu *)omenu1)->menu_item), i);
5302 if ((ctree->line_style == GTK_CTREE_LINES_TABBED &&
5303 ((GtkCTreeLineStyle) (3 - i)) != GTK_CTREE_LINES_TABBED) ||
5304 (ctree->line_style != GTK_CTREE_LINES_TABBED &&
5305 ((GtkCTreeLineStyle) (3 - i)) == GTK_CTREE_LINES_TABBED))
5306 gtk_ctree_pre_recursive (ctree, NULL, set_background, NULL);
5307 gtk_ctree_set_line_style (ctree, 3 - i);
5311 void ctree_toggle_expander_style (GtkWidget *widget, GtkCTree *ctree)
5315 if (!GTK_WIDGET_MAPPED (widget))
5318 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
5319 (((GtkOptionMenu *)omenu2)->menu_item), i);
5321 gtk_ctree_set_expander_style (ctree, (GtkCTreeExpanderStyle) (3 - i));
5324 void ctree_toggle_justify (GtkWidget *widget, GtkCTree *ctree)
5328 if (!GTK_WIDGET_MAPPED (widget))
5331 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
5332 (((GtkOptionMenu *)omenu3)->menu_item), i);
5334 gtk_clist_set_column_justification (GTK_CLIST (ctree), ctree->tree_column,
5335 (GtkJustification) (1 - i));
5338 void ctree_toggle_sel_mode (GtkWidget *widget, GtkCTree *ctree)
5342 if (!GTK_WIDGET_MAPPED (widget))
5345 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
5346 (((GtkOptionMenu *)omenu4)->menu_item), i);
5348 gtk_clist_set_selection_mode (GTK_CLIST (ctree), (GtkSelectionMode) (3 - i));
5349 after_press (ctree, NULL);
5352 void build_recursive (GtkCTree *ctree, gint cur_depth, gint depth,
5353 gint num_books, gint num_pages, GtkCTreeNode *parent)
5358 GtkCTreeNode *sibling;
5365 for (i = num_pages + num_books; i > num_books; i--)
5368 sprintf (buf1, "Page %02d", (gint) rand() % 100);
5369 sprintf (buf2, "Item %d-%d", cur_depth, i);
5370 sibling = gtk_ctree_insert_node (ctree, parent, sibling, text, 5,
5371 pixmap3, mask3, NULL, NULL,
5374 if (parent && ctree->line_style == GTK_CTREE_LINES_TABBED)
5375 gtk_ctree_node_set_row_style (ctree, sibling,
5376 GTK_CTREE_ROW (parent)->row.style);
5379 if (cur_depth == depth)
5382 for (i = num_books; i > 0; i--)
5387 sprintf (buf1, "Book %02d", (gint) rand() % 100);
5388 sprintf (buf2, "Item %d-%d", cur_depth, i);
5389 sibling = gtk_ctree_insert_node (ctree, parent, sibling, text, 5,
5390 pixmap1, mask1, pixmap2, mask2,
5393 style = gtk_style_new ();
5394 switch (cur_depth % 3)
5397 style->base[GTK_STATE_NORMAL].red = 10000 * (cur_depth % 6);
5398 style->base[GTK_STATE_NORMAL].green = 0;
5399 style->base[GTK_STATE_NORMAL].blue = 65535 - ((i * 10000) % 65535);
5402 style->base[GTK_STATE_NORMAL].red = 10000 * (cur_depth % 6);
5403 style->base[GTK_STATE_NORMAL].green = 65535 - ((i * 10000) % 65535);
5404 style->base[GTK_STATE_NORMAL].blue = 0;
5407 style->base[GTK_STATE_NORMAL].red = 65535 - ((i * 10000) % 65535);
5408 style->base[GTK_STATE_NORMAL].green = 0;
5409 style->base[GTK_STATE_NORMAL].blue = 10000 * (cur_depth % 6);
5412 gtk_ctree_node_set_row_data_full (ctree, sibling, style,
5413 (GtkDestroyNotify) gtk_style_unref);
5415 if (ctree->line_style == GTK_CTREE_LINES_TABBED)
5416 gtk_ctree_node_set_row_style (ctree, sibling, style);
5418 build_recursive (ctree, cur_depth + 1, depth, num_books, num_pages,
5423 void rebuild_tree (GtkWidget *widget, GtkCTree *ctree)
5426 gchar label1[] = "Root";
5427 gchar label2[] = "";
5428 GtkCTreeNode *parent;
5435 d = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin1));
5436 b = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin2));
5437 p = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin3));
5439 n = ((pow (b, d) - 1) / (b - 1)) * (p + 1);
5443 g_print ("%d total items? Try less\n",n);
5447 gtk_clist_freeze (GTK_CLIST (ctree));
5448 gtk_clist_clear (GTK_CLIST (ctree));
5453 parent = gtk_ctree_insert_node (ctree, NULL, NULL, text, 5, pixmap1,
5454 mask1, pixmap2, mask2, FALSE, TRUE);
5456 style = gtk_style_new ();
5457 style->base[GTK_STATE_NORMAL].red = 0;
5458 style->base[GTK_STATE_NORMAL].green = 45000;
5459 style->base[GTK_STATE_NORMAL].blue = 55000;
5460 gtk_ctree_node_set_row_data_full (ctree, parent, style,
5461 (GtkDestroyNotify) gtk_style_unref);
5463 if (ctree->line_style == GTK_CTREE_LINES_TABBED)
5464 gtk_ctree_node_set_row_style (ctree, parent, style);
5466 build_recursive (ctree, 1, d, b, p, parent);
5467 gtk_clist_thaw (GTK_CLIST (ctree));
5468 after_press (ctree, NULL);
5472 ctree_click_column (GtkCTree *ctree, gint column, gpointer data)
5476 clist = GTK_CLIST (ctree);
5478 if (column == clist->sort_column)
5480 if (clist->sort_type == GTK_SORT_ASCENDING)
5481 clist->sort_type = GTK_SORT_DESCENDING;
5483 clist->sort_type = GTK_SORT_ASCENDING;
5486 gtk_clist_set_sort_column (clist, column);
5488 gtk_ctree_sort_recursive (ctree, NULL);
5491 void create_ctree (void)
5493 static GtkWidget *window = NULL;
5494 GtkTooltips *tooltips;
5496 GtkWidget *scrolled_win;
5508 GdkColor transparent = { 0 };
5510 char *title[] = { "Tree" , "Info" };
5513 static OptionMenuItem items1[] =
5515 { "No lines", ctree_toggle_line_style },
5516 { "Solid", ctree_toggle_line_style },
5517 { "Dotted", ctree_toggle_line_style },
5518 { "Tabbed", ctree_toggle_line_style }
5521 static OptionMenuItem items2[] =
5523 { "None", ctree_toggle_expander_style },
5524 { "Square", ctree_toggle_expander_style },
5525 { "Triangle", ctree_toggle_expander_style },
5526 { "Circular", ctree_toggle_expander_style }
5529 static OptionMenuItem items3[] =
5531 { "Left", ctree_toggle_justify },
5532 { "Right", ctree_toggle_justify }
5535 static OptionMenuItem items4[] =
5537 { "Single", ctree_toggle_sel_mode },
5538 { "Browse", ctree_toggle_sel_mode },
5539 { "Multiple", ctree_toggle_sel_mode },
5540 { "Extended", ctree_toggle_sel_mode }
5545 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5547 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5548 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
5551 gtk_window_set_title (GTK_WINDOW (window), "GtkCTree");
5552 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
5554 tooltips = gtk_tooltips_new ();
5555 gtk_object_ref (GTK_OBJECT (tooltips));
5556 gtk_object_sink (GTK_OBJECT (tooltips));
5558 gtk_object_set_data_full (GTK_OBJECT (window), "tooltips", tooltips,
5559 (GtkDestroyNotify) gtk_object_unref);
5561 vbox = gtk_vbox_new (FALSE, 0);
5562 gtk_container_add (GTK_CONTAINER (window), vbox);
5564 hbox = gtk_hbox_new (FALSE, 5);
5565 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
5566 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
5568 label = gtk_label_new ("Depth :");
5569 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
5571 adj = (GtkAdjustment *) gtk_adjustment_new (4, 1, 10, 1, 5, 0);
5572 spin1 = gtk_spin_button_new (adj, 0, 0);
5573 gtk_box_pack_start (GTK_BOX (hbox), spin1, FALSE, TRUE, 5);
5575 label = gtk_label_new ("Books :");
5576 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
5578 adj = (GtkAdjustment *) gtk_adjustment_new (3, 1, 20, 1, 5, 0);
5579 spin2 = gtk_spin_button_new (adj, 0, 0);
5580 gtk_box_pack_start (GTK_BOX (hbox), spin2, FALSE, TRUE, 5);
5582 label = gtk_label_new ("Pages :");
5583 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
5585 adj = (GtkAdjustment *) gtk_adjustment_new (5, 1, 20, 1, 5, 0);
5586 spin3 = gtk_spin_button_new (adj, 0, 0);
5587 gtk_box_pack_start (GTK_BOX (hbox), spin3, FALSE, TRUE, 5);
5589 button = gtk_button_new_with_label ("Close");
5590 gtk_box_pack_end (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5592 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5593 (GtkSignalFunc) gtk_widget_destroy,
5594 GTK_OBJECT(window));
5596 button = gtk_button_new_with_label ("Rebuild Tree");
5597 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5599 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
5600 gtk_container_set_border_width (GTK_CONTAINER (scrolled_win), 5);
5601 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
5602 GTK_POLICY_AUTOMATIC,
5604 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
5606 ctree = GTK_CTREE (gtk_ctree_new_with_titles (2, 0, title));
5607 gtk_container_add (GTK_CONTAINER (scrolled_win), GTK_WIDGET (ctree));
5609 gtk_clist_set_column_auto_resize (GTK_CLIST (ctree), 0, TRUE);
5610 gtk_clist_set_column_width (GTK_CLIST (ctree), 1, 200);
5611 gtk_clist_set_selection_mode (GTK_CLIST (ctree), GTK_SELECTION_EXTENDED);
5612 gtk_ctree_set_line_style (ctree, GTK_CTREE_LINES_DOTTED);
5613 line_style = GTK_CTREE_LINES_DOTTED;
5615 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5616 GTK_SIGNAL_FUNC (rebuild_tree), ctree);
5617 gtk_signal_connect (GTK_OBJECT (ctree), "click_column",
5618 (GtkSignalFunc) ctree_click_column, NULL);
5620 gtk_signal_connect_after (GTK_OBJECT (ctree), "button_press_event",
5621 GTK_SIGNAL_FUNC (after_press), NULL);
5622 gtk_signal_connect_after (GTK_OBJECT (ctree), "button_release_event",
5623 GTK_SIGNAL_FUNC (after_press), NULL);
5624 gtk_signal_connect_after (GTK_OBJECT (ctree), "tree_move",
5625 GTK_SIGNAL_FUNC (after_move), NULL);
5626 gtk_signal_connect_after (GTK_OBJECT (ctree), "end_selection",
5627 GTK_SIGNAL_FUNC (after_press), NULL);
5628 gtk_signal_connect_after (GTK_OBJECT (ctree), "toggle_focus_row",
5629 GTK_SIGNAL_FUNC (after_press), NULL);
5630 gtk_signal_connect_after (GTK_OBJECT (ctree), "select_all",
5631 GTK_SIGNAL_FUNC (after_press), NULL);
5632 gtk_signal_connect_after (GTK_OBJECT (ctree), "unselect_all",
5633 GTK_SIGNAL_FUNC (after_press), NULL);
5634 gtk_signal_connect_after (GTK_OBJECT (ctree), "scroll_vertical",
5635 GTK_SIGNAL_FUNC (after_press), NULL);
5637 bbox = gtk_hbox_new (FALSE, 5);
5638 gtk_container_set_border_width (GTK_CONTAINER (bbox), 5);
5639 gtk_box_pack_start (GTK_BOX (vbox), bbox, FALSE, TRUE, 0);
5641 mbox = gtk_vbox_new (TRUE, 5);
5642 gtk_box_pack_start (GTK_BOX (bbox), mbox, FALSE, TRUE, 0);
5644 label = gtk_label_new ("Row Height :");
5645 gtk_box_pack_start (GTK_BOX (mbox), label, FALSE, FALSE, 0);
5647 label = gtk_label_new ("Indent :");
5648 gtk_box_pack_start (GTK_BOX (mbox), label, FALSE, FALSE, 0);
5650 label = gtk_label_new ("Spacing :");
5651 gtk_box_pack_start (GTK_BOX (mbox), label, FALSE, FALSE, 0);
5653 mbox = gtk_vbox_new (TRUE, 5);
5654 gtk_box_pack_start (GTK_BOX (bbox), mbox, FALSE, TRUE, 0);
5656 adj = (GtkAdjustment *) gtk_adjustment_new (20, 12, 100, 1, 10, 0);
5657 spinner = gtk_spin_button_new (adj, 0, 0);
5658 gtk_box_pack_start (GTK_BOX (mbox), spinner, FALSE, FALSE, 5);
5659 gtk_tooltips_set_tip (tooltips, spinner,
5660 "Row height of list items", NULL);
5661 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
5662 GTK_SIGNAL_FUNC (change_row_height), ctree);
5663 gtk_clist_set_row_height ( GTK_CLIST (ctree), adj->value);
5665 adj = (GtkAdjustment *) gtk_adjustment_new (20, 0, 60, 1, 10, 0);
5666 spinner = gtk_spin_button_new (adj, 0, 0);
5667 gtk_box_pack_start (GTK_BOX (mbox), spinner, FALSE, FALSE, 5);
5668 gtk_tooltips_set_tip (tooltips, spinner, "Tree Indentation.", NULL);
5669 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
5670 GTK_SIGNAL_FUNC (change_indent), ctree);
5672 adj = (GtkAdjustment *) gtk_adjustment_new (5, 0, 60, 1, 10, 0);
5673 spinner = gtk_spin_button_new (adj, 0, 0);
5674 gtk_box_pack_start (GTK_BOX (mbox), spinner, FALSE, FALSE, 5);
5675 gtk_tooltips_set_tip (tooltips, spinner, "Tree Spacing.", NULL);
5676 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
5677 GTK_SIGNAL_FUNC (change_spacing), ctree);
5679 mbox = gtk_vbox_new (TRUE, 5);
5680 gtk_box_pack_start (GTK_BOX (bbox), mbox, FALSE, TRUE, 0);
5682 hbox = gtk_hbox_new (FALSE, 5);
5683 gtk_box_pack_start (GTK_BOX (mbox), hbox, FALSE, FALSE, 0);
5685 button = gtk_button_new_with_label ("Expand All");
5686 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5687 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5688 GTK_SIGNAL_FUNC (expand_all), ctree);
5690 button = gtk_button_new_with_label ("Collapse All");
5691 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5692 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5693 GTK_SIGNAL_FUNC (collapse_all), ctree);
5695 button = gtk_button_new_with_label ("Change Style");
5696 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5697 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5698 GTK_SIGNAL_FUNC (change_style), ctree);
5700 button = gtk_button_new_with_label ("Export Tree");
5701 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5702 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5703 GTK_SIGNAL_FUNC (export_ctree), ctree);
5705 hbox = gtk_hbox_new (FALSE, 5);
5706 gtk_box_pack_start (GTK_BOX (mbox), hbox, FALSE, FALSE, 0);
5708 button = gtk_button_new_with_label ("Select All");
5709 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5710 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5711 GTK_SIGNAL_FUNC (select_all), ctree);
5713 button = gtk_button_new_with_label ("Unselect All");
5714 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5715 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5716 GTK_SIGNAL_FUNC (unselect_all), ctree);
5718 button = gtk_button_new_with_label ("Remove Selection");
5719 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5720 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5721 GTK_SIGNAL_FUNC (remove_selection), ctree);
5723 check = gtk_check_button_new_with_label ("Reorderable");
5724 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
5725 gtk_tooltips_set_tip (tooltips, check,
5726 "Tree items can be reordered by dragging.", NULL);
5727 gtk_signal_connect (GTK_OBJECT (check), "clicked",
5728 GTK_SIGNAL_FUNC (toggle_reorderable), ctree);
5729 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE);
5731 hbox = gtk_hbox_new (TRUE, 5);
5732 gtk_box_pack_start (GTK_BOX (mbox), hbox, FALSE, FALSE, 0);
5734 omenu1 = build_option_menu (items1, 4, 2, ctree);
5735 gtk_box_pack_start (GTK_BOX (hbox), omenu1, FALSE, TRUE, 0);
5736 gtk_tooltips_set_tip (tooltips, omenu1, "The tree's line style.", NULL);
5738 omenu2 = build_option_menu (items2, 4, 1, ctree);
5739 gtk_box_pack_start (GTK_BOX (hbox), omenu2, FALSE, TRUE, 0);
5740 gtk_tooltips_set_tip (tooltips, omenu2, "The tree's expander style.",
5743 omenu3 = build_option_menu (items3, 2, 0, ctree);
5744 gtk_box_pack_start (GTK_BOX (hbox), omenu3, FALSE, TRUE, 0);
5745 gtk_tooltips_set_tip (tooltips, omenu3, "The tree's justification.",
5748 omenu4 = build_option_menu (items4, 4, 3, ctree);
5749 gtk_box_pack_start (GTK_BOX (hbox), omenu4, FALSE, TRUE, 0);
5750 gtk_tooltips_set_tip (tooltips, omenu4, "The list's selection mode.",
5753 gtk_widget_realize (window);
5756 pixmap1 = gdk_pixmap_create_from_xpm_d (window->window, &mask1,
5757 &transparent, book_closed_xpm);
5759 pixmap2 = gdk_pixmap_create_from_xpm_d (window->window, &mask2,
5760 &transparent, book_open_xpm);
5762 pixmap3 = gdk_pixmap_create_from_xpm_d (window->window, &mask3,
5763 &transparent, mini_page_xpm);
5765 gtk_widget_set_usize (GTK_WIDGET (ctree), 0, 300);
5767 frame = gtk_frame_new (NULL);
5768 gtk_container_set_border_width (GTK_CONTAINER (frame), 0);
5769 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_OUT);
5770 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
5772 hbox = gtk_hbox_new (TRUE, 2);
5773 gtk_container_set_border_width (GTK_CONTAINER (hbox), 2);
5774 gtk_container_add (GTK_CONTAINER (frame), hbox);
5776 frame = gtk_frame_new (NULL);
5777 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
5778 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
5780 hbox2 = gtk_hbox_new (FALSE, 0);
5781 gtk_container_set_border_width (GTK_CONTAINER (hbox2), 2);
5782 gtk_container_add (GTK_CONTAINER (frame), hbox2);
5784 label = gtk_label_new ("Books :");
5785 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
5787 sprintf (buf, "%d", books);
5788 book_label = gtk_label_new (buf);
5789 gtk_box_pack_end (GTK_BOX (hbox2), book_label, FALSE, TRUE, 5);
5791 frame = gtk_frame_new (NULL);
5792 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
5793 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
5795 hbox2 = gtk_hbox_new (FALSE, 0);
5796 gtk_container_set_border_width (GTK_CONTAINER (hbox2), 2);
5797 gtk_container_add (GTK_CONTAINER (frame), hbox2);
5799 label = gtk_label_new ("Pages :");
5800 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
5802 sprintf (buf, "%d", pages);
5803 page_label = gtk_label_new (buf);
5804 gtk_box_pack_end (GTK_BOX (hbox2), page_label, FALSE, TRUE, 5);
5806 frame = gtk_frame_new (NULL);
5807 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
5808 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
5810 hbox2 = gtk_hbox_new (FALSE, 0);
5811 gtk_container_set_border_width (GTK_CONTAINER (hbox2), 2);
5812 gtk_container_add (GTK_CONTAINER (frame), hbox2);
5814 label = gtk_label_new ("Selected :");
5815 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
5817 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->selection));
5818 sel_label = gtk_label_new (buf);
5819 gtk_box_pack_end (GTK_BOX (hbox2), sel_label, FALSE, TRUE, 5);
5821 frame = gtk_frame_new (NULL);
5822 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
5823 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
5825 hbox2 = gtk_hbox_new (FALSE, 0);
5826 gtk_container_set_border_width (GTK_CONTAINER (hbox2), 2);
5827 gtk_container_add (GTK_CONTAINER (frame), hbox2);
5829 label = gtk_label_new ("Visible :");
5830 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
5832 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->row_list));
5833 vis_label = gtk_label_new (buf);
5834 gtk_box_pack_end (GTK_BOX (hbox2), vis_label, FALSE, TRUE, 5);
5836 rebuild_tree (NULL, ctree);
5839 if (!GTK_WIDGET_VISIBLE (window))
5840 gtk_widget_show_all (window);
5842 gtk_widget_destroy (window);
5850 color_selection_ok (GtkWidget *w,
5851 GtkColorSelectionDialog *cs)
5853 GtkColorSelection *colorsel;
5856 colorsel=GTK_COLOR_SELECTION(cs->colorsel);
5858 gtk_color_selection_get_color(colorsel,color);
5859 gtk_color_selection_set_color(colorsel,color);
5863 color_selection_changed (GtkWidget *w,
5864 GtkColorSelectionDialog *cs)
5866 GtkColorSelection *colorsel;
5869 colorsel=GTK_COLOR_SELECTION(cs->colorsel);
5870 gtk_color_selection_get_color(colorsel,color);
5874 opacity_toggled_cb (GtkWidget *w,
5875 GtkColorSelectionDialog *cs)
5877 GtkColorSelection *colorsel;
5879 colorsel = GTK_COLOR_SELECTION (cs->colorsel);
5880 gtk_color_selection_set_use_opacity (colorsel,
5881 gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w)));
5885 palette_toggled_cb (GtkWidget *w,
5886 GtkColorSelectionDialog *cs)
5888 GtkColorSelection *colorsel;
5890 colorsel = GTK_COLOR_SELECTION (cs->colorsel);
5891 gtk_color_selection_set_use_palette (colorsel,
5892 gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w)));
5896 create_color_selection (void)
5898 static GtkWidget *window = NULL;
5902 GtkWidget *options_hbox;
5903 GtkWidget *check_button;
5905 window = gtk_color_selection_dialog_new ("color selection dialog");
5907 gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
5909 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5910 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5913 options_hbox = gtk_hbox_new (FALSE, 0);
5914 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), options_hbox, FALSE, FALSE, 0);
5915 gtk_container_set_border_width (GTK_CONTAINER (options_hbox), 10);
5917 check_button = gtk_check_button_new_with_label ("Show Opacity");
5918 gtk_box_pack_start (GTK_BOX (options_hbox), check_button, FALSE, FALSE, 0);
5919 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
5920 GTK_SIGNAL_FUNC (opacity_toggled_cb), window);
5922 check_button = gtk_check_button_new_with_label ("Show Palette");
5923 gtk_box_pack_end (GTK_BOX (options_hbox), check_button, FALSE, FALSE, 0);
5924 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
5925 GTK_SIGNAL_FUNC (palette_toggled_cb), window);
5927 gtk_widget_show_all (options_hbox);
5929 gtk_signal_connect (
5930 GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (window)->colorsel),
5932 GTK_SIGNAL_FUNC(color_selection_changed),
5935 gtk_signal_connect (
5936 GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (window)->ok_button),
5938 GTK_SIGNAL_FUNC(color_selection_ok),
5941 gtk_signal_connect_object (
5942 GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (window)->cancel_button),
5944 GTK_SIGNAL_FUNC(gtk_widget_destroy),
5945 GTK_OBJECT (window));
5948 if (!GTK_WIDGET_VISIBLE (window))
5949 gtk_widget_show (window);
5951 gtk_widget_destroy (window);
5959 file_selection_hide_fileops (GtkWidget *widget,
5960 GtkFileSelection *fs)
5962 gtk_file_selection_hide_fileop_buttons (fs);
5966 file_selection_ok (GtkWidget *w,
5967 GtkFileSelection *fs)
5969 g_print ("%s\n", gtk_file_selection_get_filename (fs));
5970 gtk_widget_destroy (GTK_WIDGET (fs));
5974 create_file_selection (void)
5976 static GtkWidget *window = NULL;
5981 window = gtk_file_selection_new ("file selection dialog");
5983 gtk_file_selection_hide_fileop_buttons (GTK_FILE_SELECTION (window));
5985 gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
5987 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5988 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5991 gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (window)->ok_button),
5992 "clicked", GTK_SIGNAL_FUNC(file_selection_ok),
5994 gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION (window)->cancel_button),
5995 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
5996 GTK_OBJECT (window));
5998 button = gtk_button_new_with_label ("Hide Fileops");
5999 gtk_signal_connect (GTK_OBJECT (button), "clicked",
6000 (GtkSignalFunc) file_selection_hide_fileops,
6002 gtk_box_pack_start (GTK_BOX (GTK_FILE_SELECTION (window)->action_area),
6003 button, FALSE, FALSE, 0);
6004 gtk_widget_show (button);
6006 button = gtk_button_new_with_label ("Show Fileops");
6007 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6008 (GtkSignalFunc) gtk_file_selection_show_fileop_buttons,
6010 gtk_box_pack_start (GTK_BOX (GTK_FILE_SELECTION (window)->action_area),
6011 button, FALSE, FALSE, 0);
6012 gtk_widget_show (button);
6015 if (!GTK_WIDGET_VISIBLE (window))
6016 gtk_widget_show (window);
6018 gtk_widget_destroy (window);
6022 flipping_toggled_cb (GtkWidget *widget, gpointer data)
6024 int state = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
6025 int new_direction = state ? GTK_TEXT_DIR_RTL : GTK_TEXT_DIR_LTR;
6027 gtk_widget_set_default_direction (new_direction);
6031 create_flipping (void)
6033 static GtkWidget *window = NULL;
6034 GtkWidget *check_button, *button;
6038 window = gtk_dialog_new ();
6040 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6041 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6044 gtk_window_set_title (GTK_WINDOW (window), "Bidirectional Flipping");
6046 check_button = gtk_check_button_new_with_label ("Right-to-left global direction");
6047 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
6048 check_button, TRUE, TRUE, 0);
6050 if (gtk_widget_get_default_direction () == GTK_TEXT_DIR_RTL)
6051 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button), TRUE);
6053 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
6054 flipping_toggled_cb, FALSE);
6056 gtk_container_set_border_width (GTK_CONTAINER (check_button), 10);
6058 button = gtk_button_new_with_label ("Close");
6059 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6060 GTK_SIGNAL_FUNC (gtk_widget_destroy), GTK_OBJECT (window));
6061 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
6062 button, TRUE, TRUE, 0);
6065 if (!GTK_WIDGET_VISIBLE (window))
6066 gtk_widget_show_all (window);
6068 gtk_widget_destroy (window);
6076 font_selection_ok (GtkWidget *w,
6077 GtkFontSelectionDialog *fs)
6079 gchar *s = gtk_font_selection_dialog_get_font_name (fs);
6081 g_print ("%s\n", s);
6083 gtk_widget_destroy (GTK_WIDGET (fs));
6087 create_font_selection (void)
6089 static GtkWidget *window = NULL;
6093 window = gtk_font_selection_dialog_new ("Font Selection Dialog");
6095 gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
6097 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6098 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6101 gtk_signal_connect (GTK_OBJECT (GTK_FONT_SELECTION_DIALOG (window)->ok_button),
6102 "clicked", GTK_SIGNAL_FUNC(font_selection_ok),
6103 GTK_FONT_SELECTION_DIALOG (window));
6104 gtk_signal_connect_object (GTK_OBJECT (GTK_FONT_SELECTION_DIALOG (window)->cancel_button),
6105 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
6106 GTK_OBJECT (window));
6109 if (!GTK_WIDGET_VISIBLE (window))
6110 gtk_widget_show (window);
6112 gtk_widget_destroy (window);
6119 static GtkWidget *dialog_window = NULL;
6122 label_toggle (GtkWidget *widget,
6127 *label = gtk_label_new ("Dialog Test");
6128 gtk_signal_connect (GTK_OBJECT (*label),
6130 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
6132 gtk_misc_set_padding (GTK_MISC (*label), 10, 10);
6133 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->vbox),
6134 *label, TRUE, TRUE, 0);
6135 gtk_widget_show (*label);
6138 gtk_widget_destroy (*label);
6142 create_dialog (void)
6144 static GtkWidget *label;
6149 dialog_window = gtk_dialog_new ();
6151 gtk_signal_connect (GTK_OBJECT (dialog_window), "destroy",
6152 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6155 gtk_window_set_title (GTK_WINDOW (dialog_window), "GtkDialog");
6156 gtk_container_set_border_width (GTK_CONTAINER (dialog_window), 0);
6157 gtk_widget_set_usize (dialog_window, 200, 110);
6159 button = gtk_button_new_with_label ("OK");
6160 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6161 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->action_area),
6162 button, TRUE, TRUE, 0);
6163 gtk_widget_grab_default (button);
6164 gtk_widget_show (button);
6166 button = gtk_button_new_with_label ("Toggle");
6167 gtk_signal_connect (GTK_OBJECT (button), "clicked",
6168 GTK_SIGNAL_FUNC (label_toggle),
6170 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6171 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->action_area),
6172 button, TRUE, TRUE, 0);
6173 gtk_widget_show (button);
6178 if (!GTK_WIDGET_VISIBLE (dialog_window))
6179 gtk_widget_show (dialog_window);
6181 gtk_widget_destroy (dialog_window);
6186 static gboolean event_watcher_enter_id = 0;
6187 static gboolean event_watcher_leave_id = 0;
6190 event_watcher (GtkObject *object,
6196 g_print ("Watch: \"%s\" emitted for %s\n",
6197 gtk_signal_name (signal_id),
6198 gtk_type_name (GTK_OBJECT_TYPE (object)));
6204 event_watcher_down (void)
6206 if (event_watcher_enter_id)
6210 signal_id = gtk_signal_lookup ("enter_notify_event", GTK_TYPE_WIDGET);
6211 gtk_signal_remove_emission_hook (signal_id, event_watcher_enter_id);
6212 event_watcher_enter_id = 0;
6213 signal_id = gtk_signal_lookup ("leave_notify_event", GTK_TYPE_WIDGET);
6214 gtk_signal_remove_emission_hook (signal_id, event_watcher_leave_id);
6215 event_watcher_leave_id = 0;
6220 event_watcher_toggle (void)
6222 if (event_watcher_enter_id)
6223 event_watcher_down ();
6228 signal_id = gtk_signal_lookup ("enter_notify_event", GTK_TYPE_WIDGET);
6229 event_watcher_enter_id = gtk_signal_add_emission_hook (signal_id, event_watcher, NULL);
6230 signal_id = gtk_signal_lookup ("leave_notify_event", GTK_TYPE_WIDGET);
6231 event_watcher_leave_id = gtk_signal_add_emission_hook (signal_id, event_watcher, NULL);
6236 create_event_watcher (void)
6242 dialog_window = gtk_dialog_new ();
6244 gtk_signal_connect (GTK_OBJECT (dialog_window), "destroy",
6245 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
6247 gtk_signal_connect (GTK_OBJECT (dialog_window),
6249 GTK_SIGNAL_FUNC (event_watcher_down),
6252 gtk_window_set_title (GTK_WINDOW (dialog_window), "Event Watcher");
6253 gtk_container_set_border_width (GTK_CONTAINER (dialog_window), 0);
6254 gtk_widget_set_usize (dialog_window, 200, 110);
6256 button = gtk_toggle_button_new_with_label ("Activate Watch");
6257 gtk_signal_connect (GTK_OBJECT (button), "clicked",
6258 GTK_SIGNAL_FUNC (event_watcher_toggle),
6260 gtk_container_set_border_width (GTK_CONTAINER (button), 10);
6261 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->vbox),
6262 button, TRUE, TRUE, 0);
6263 gtk_widget_show (button);
6265 button = gtk_button_new_with_label ("Close");
6266 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6267 GTK_SIGNAL_FUNC (gtk_widget_destroy),
6268 (GtkObject*) dialog_window);
6269 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6270 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->action_area),
6271 button, TRUE, TRUE, 0);
6272 gtk_widget_grab_default (button);
6273 gtk_widget_show (button);
6276 if (!GTK_WIDGET_VISIBLE (dialog_window))
6277 gtk_widget_show (dialog_window);
6279 gtk_widget_destroy (dialog_window);
6287 create_range_controls (void)
6289 static GtkWidget *window = NULL;
6293 GtkWidget *scrollbar;
6295 GtkWidget *separator;
6296 GtkObject *adjustment;
6301 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6303 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6304 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6307 gtk_window_set_title (GTK_WINDOW (window), "range controls");
6308 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6311 box1 = gtk_vbox_new (FALSE, 0);
6312 gtk_container_add (GTK_CONTAINER (window), box1);
6313 gtk_widget_show (box1);
6316 box2 = gtk_vbox_new (FALSE, 10);
6317 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6318 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
6319 gtk_widget_show (box2);
6322 adjustment = gtk_adjustment_new (0.0, 0.0, 101.0, 0.1, 1.0, 1.0);
6324 scale = gtk_hscale_new (GTK_ADJUSTMENT (adjustment));
6325 gtk_widget_set_usize (GTK_WIDGET (scale), 150, 30);
6326 gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED);
6327 gtk_scale_set_digits (GTK_SCALE (scale), 1);
6328 gtk_scale_set_draw_value (GTK_SCALE (scale), TRUE);
6329 gtk_box_pack_start (GTK_BOX (box2), scale, TRUE, TRUE, 0);
6330 gtk_widget_show (scale);
6332 scrollbar = gtk_hscrollbar_new (GTK_ADJUSTMENT (adjustment));
6333 gtk_range_set_update_policy (GTK_RANGE (scrollbar),
6334 GTK_UPDATE_CONTINUOUS);
6335 gtk_box_pack_start (GTK_BOX (box2), scrollbar, TRUE, TRUE, 0);
6336 gtk_widget_show (scrollbar);
6338 hbox = gtk_hbox_new (FALSE, 0);
6340 scale = gtk_vscale_new (GTK_ADJUSTMENT (adjustment));
6341 gtk_widget_set_usize (scale, -1, 200);
6342 gtk_scale_set_digits (GTK_SCALE (scale), 2);
6343 gtk_scale_set_draw_value (GTK_SCALE (scale), TRUE);
6344 gtk_box_pack_start (GTK_BOX (hbox), scale, TRUE, TRUE, 0);
6345 gtk_widget_show (scale);
6347 scale = gtk_vscale_new (GTK_ADJUSTMENT (adjustment));
6348 gtk_widget_set_usize (scale, -1, 200);
6349 gtk_scale_set_digits (GTK_SCALE (scale), 2);
6350 gtk_scale_set_draw_value (GTK_SCALE (scale), TRUE);
6351 gtk_range_set_inverted (GTK_RANGE (scale), TRUE);
6352 gtk_box_pack_start (GTK_BOX (hbox), scale, TRUE, TRUE, 0);
6353 gtk_widget_show (scale);
6355 gtk_box_pack_start (GTK_BOX (box2), hbox, TRUE, TRUE, 0);
6356 gtk_widget_show (hbox);
6358 separator = gtk_hseparator_new ();
6359 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
6360 gtk_widget_show (separator);
6363 box2 = gtk_vbox_new (FALSE, 10);
6364 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6365 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6366 gtk_widget_show (box2);
6369 button = gtk_button_new_with_label ("close");
6370 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6371 GTK_SIGNAL_FUNC(gtk_widget_destroy),
6372 GTK_OBJECT (window));
6373 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6374 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6375 gtk_widget_grab_default (button);
6376 gtk_widget_show (button);
6379 if (!GTK_WIDGET_VISIBLE (window))
6380 gtk_widget_show (window);
6382 gtk_widget_destroy (window);
6390 create_rulers (void)
6392 static GtkWidget *window = NULL;
6398 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6399 gtk_window_set_policy (GTK_WINDOW (window), TRUE, TRUE, FALSE);
6401 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6402 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6405 gtk_window_set_title (GTK_WINDOW (window), "rulers");
6406 gtk_widget_set_usize (window, 300, 300);
6407 gtk_widget_set_events (window,
6408 GDK_POINTER_MOTION_MASK
6409 | GDK_POINTER_MOTION_HINT_MASK);
6410 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6412 table = gtk_table_new (2, 2, FALSE);
6413 gtk_container_add (GTK_CONTAINER (window), table);
6414 gtk_widget_show (table);
6416 ruler = gtk_hruler_new ();
6417 gtk_ruler_set_metric (GTK_RULER (ruler), GTK_CENTIMETERS);
6418 gtk_ruler_set_range (GTK_RULER (ruler), 100, 0, 0, 20);
6420 gtk_signal_connect_object (GTK_OBJECT (window),
6421 "motion_notify_event",
6422 GTK_SIGNAL_FUNC (GTK_WIDGET_GET_CLASS (ruler)->motion_notify_event),
6423 GTK_OBJECT (ruler));
6425 gtk_table_attach (GTK_TABLE (table), ruler, 1, 2, 0, 1,
6426 GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
6427 gtk_widget_show (ruler);
6430 ruler = gtk_vruler_new ();
6431 gtk_ruler_set_range (GTK_RULER (ruler), 5, 15, 0, 20);
6433 gtk_signal_connect_object (GTK_OBJECT (window),
6434 "motion_notify_event",
6435 GTK_SIGNAL_FUNC (GTK_WIDGET_GET_CLASS (ruler)->motion_notify_event),
6436 GTK_OBJECT (ruler));
6438 gtk_table_attach (GTK_TABLE (table), ruler, 0, 1, 1, 2,
6439 GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
6440 gtk_widget_show (ruler);
6443 if (!GTK_WIDGET_VISIBLE (window))
6444 gtk_widget_show (window);
6446 gtk_widget_destroy (window);
6450 text_toggle_editable (GtkWidget *checkbutton,
6453 gtk_text_set_editable(GTK_TEXT(text),
6454 GTK_TOGGLE_BUTTON(checkbutton)->active);
6458 text_toggle_word_wrap (GtkWidget *checkbutton,
6461 gtk_text_set_word_wrap(GTK_TEXT(text),
6462 GTK_TOGGLE_BUTTON(checkbutton)->active);
6469 { { 0, 0x0000, 0x0000, 0x0000 }, "black" },
6470 { { 0, 0xFFFF, 0xFFFF, 0xFFFF }, "white" },
6471 { { 0, 0xFFFF, 0x0000, 0x0000 }, "red" },
6472 { { 0, 0x0000, 0xFFFF, 0x0000 }, "green" },
6473 { { 0, 0x0000, 0x0000, 0xFFFF }, "blue" },
6474 { { 0, 0x0000, 0xFFFF, 0xFFFF }, "cyan" },
6475 { { 0, 0xFFFF, 0x0000, 0xFFFF }, "magenta" },
6476 { { 0, 0xFFFF, 0xFFFF, 0x0000 }, "yellow" }
6479 int ntext_colors = sizeof(text_colors) / sizeof(text_colors[0]);
6485 text_insert_random (GtkWidget *w, GtkText *text)
6489 for (i=0; i<10; i++)
6491 c = 'A' + rand() % ('Z' - 'A');
6492 gtk_text_set_point (text, rand() % gtk_text_get_length (text));
6493 gtk_text_insert (text, NULL, NULL, NULL, &c, 1);
6502 static GtkWidget *window = NULL;
6508 GtkWidget *separator;
6509 GtkWidget *scrolled_window;
6516 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6517 gtk_widget_set_name (window, "text window");
6518 gtk_widget_set_usize (window, 500, 500);
6519 gtk_window_set_policy (GTK_WINDOW(window), TRUE, TRUE, FALSE);
6521 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6522 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6525 gtk_window_set_title (GTK_WINDOW (window), "test");
6526 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6529 box1 = gtk_vbox_new (FALSE, 0);
6530 gtk_container_add (GTK_CONTAINER (window), box1);
6531 gtk_widget_show (box1);
6534 box2 = gtk_vbox_new (FALSE, 10);
6535 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6536 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
6537 gtk_widget_show (box2);
6540 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
6541 gtk_box_pack_start (GTK_BOX (box2), scrolled_window, TRUE, TRUE, 0);
6542 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
6545 gtk_widget_show (scrolled_window);
6547 text = gtk_text_new (NULL, NULL);
6548 gtk_text_set_editable (GTK_TEXT (text), TRUE);
6549 gtk_container_add (GTK_CONTAINER (scrolled_window), text);
6550 gtk_widget_grab_focus (text);
6551 gtk_widget_show (text);
6554 gtk_text_freeze (GTK_TEXT (text));
6556 for (i=0; i<ntext_colors; i++)
6558 gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL,
6559 text_colors[i].name, -1);
6560 gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL, "\t", -1);
6562 for (j=0; j<ntext_colors; j++)
6564 gtk_text_insert (GTK_TEXT (text), NULL,
6565 &text_colors[j].color, &text_colors[i].color,
6568 gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL, "\n", -1);
6571 infile = fopen("testgtk.c", "r");
6576 int nbytes_read, nbytes_alloc;
6579 nbytes_alloc = 1024;
6580 buffer = g_new (char, nbytes_alloc);
6584 if (nbytes_alloc < nbytes_read + 1024)
6587 buffer = g_realloc (buffer, nbytes_alloc);
6589 len = fread (buffer + nbytes_read, 1, 1024, infile);
6595 gtk_text_insert (GTK_TEXT (text), NULL, NULL,
6596 NULL, buffer, nbytes_read);
6601 gtk_text_thaw (GTK_TEXT (text));
6603 hbox = gtk_hbutton_box_new ();
6604 gtk_box_pack_start (GTK_BOX (box2), hbox, FALSE, FALSE, 0);
6605 gtk_widget_show (hbox);
6607 check = gtk_check_button_new_with_label("Editable");
6608 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, FALSE, 0);
6609 gtk_signal_connect (GTK_OBJECT(check), "toggled",
6610 GTK_SIGNAL_FUNC(text_toggle_editable), text);
6611 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), TRUE);
6612 gtk_widget_show (check);
6614 check = gtk_check_button_new_with_label("Wrap Words");
6615 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
6616 gtk_signal_connect (GTK_OBJECT(check), "toggled",
6617 GTK_SIGNAL_FUNC(text_toggle_word_wrap), text);
6618 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), FALSE);
6619 gtk_widget_show (check);
6621 separator = gtk_hseparator_new ();
6622 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
6623 gtk_widget_show (separator);
6626 box2 = gtk_vbox_new (FALSE, 10);
6627 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6628 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6629 gtk_widget_show (box2);
6632 button = gtk_button_new_with_label ("insert random");
6633 gtk_signal_connect (GTK_OBJECT (button), "clicked",
6634 GTK_SIGNAL_FUNC(text_insert_random),
6636 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6637 gtk_widget_show (button);
6639 button = gtk_button_new_with_label ("close");
6640 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6641 GTK_SIGNAL_FUNC(gtk_widget_destroy),
6642 GTK_OBJECT (window));
6643 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6644 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6645 gtk_widget_grab_default (button);
6646 gtk_widget_show (button);
6649 if (!GTK_WIDGET_VISIBLE (window))
6650 gtk_widget_show (window);
6652 gtk_widget_destroy (window);
6659 GdkPixmap *book_open;
6660 GdkPixmap *book_closed;
6661 GdkBitmap *book_open_mask;
6662 GdkBitmap *book_closed_mask;
6663 GtkWidget *sample_notebook;
6666 set_page_pixmaps (GtkNotebook *notebook, gint page_num,
6667 GdkPixmap *pixmap, GdkPixmap *mask)
6669 GtkWidget *page_widget;
6672 page_widget = gtk_notebook_get_nth_page (notebook, page_num);
6674 pixwid = gtk_object_get_data (GTK_OBJECT (page_widget), "tab_pixmap");
6675 gtk_pixmap_set (GTK_PIXMAP (pixwid), pixmap, mask);
6677 pixwid = gtk_object_get_data (GTK_OBJECT (page_widget), "menu_pixmap");
6678 gtk_pixmap_set (GTK_PIXMAP (pixwid), pixmap, mask);
6682 page_switch (GtkWidget *widget, GtkNotebookPage *page, gint page_num)
6684 GtkNotebook *notebook = GTK_NOTEBOOK (widget);
6685 gint old_page_num = gtk_notebook_get_current_page (notebook);
6687 if (page_num == old_page_num)
6690 set_page_pixmaps (notebook, page_num, book_open, book_open_mask);
6692 if (old_page_num != -1)
6693 set_page_pixmaps (notebook, old_page_num, book_closed, book_closed_mask);
6697 tab_fill (GtkToggleButton *button, GtkWidget *child)
6700 GtkPackType pack_type;
6702 gtk_notebook_query_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
6703 &expand, NULL, &pack_type);
6704 gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
6705 expand, button->active, pack_type);
6709 tab_expand (GtkToggleButton *button, GtkWidget *child)
6712 GtkPackType pack_type;
6714 gtk_notebook_query_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
6715 NULL, &fill, &pack_type);
6716 gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
6717 button->active, fill, pack_type);
6721 tab_pack (GtkToggleButton *button, GtkWidget *child)
6727 gtk_notebook_query_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
6728 &expand, &fill, NULL);
6729 gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
6730 expand, fill, button->active);
6734 create_pages (GtkNotebook *notebook, gint start, gint end)
6736 GtkWidget *child = NULL;
6741 GtkWidget *label_box;
6742 GtkWidget *menu_box;
6747 for (i = start; i <= end; i++)
6749 sprintf (buffer, "Page %d", i);
6751 child = gtk_frame_new (buffer);
6752 gtk_container_set_border_width (GTK_CONTAINER (child), 10);
6754 vbox = gtk_vbox_new (TRUE,0);
6755 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
6756 gtk_container_add (GTK_CONTAINER (child), vbox);
6758 hbox = gtk_hbox_new (TRUE,0);
6759 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
6761 button = gtk_check_button_new_with_label ("Fill Tab");
6762 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
6763 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
6764 gtk_signal_connect (GTK_OBJECT (button), "toggled",
6765 GTK_SIGNAL_FUNC (tab_fill), child);
6767 button = gtk_check_button_new_with_label ("Expand Tab");
6768 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
6769 gtk_signal_connect (GTK_OBJECT (button), "toggled",
6770 GTK_SIGNAL_FUNC (tab_expand), child);
6772 button = gtk_check_button_new_with_label ("Pack end");
6773 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
6774 gtk_signal_connect (GTK_OBJECT (button), "toggled",
6775 GTK_SIGNAL_FUNC (tab_pack), child);
6777 button = gtk_button_new_with_label ("Hide Page");
6778 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 5);
6779 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6780 GTK_SIGNAL_FUNC (gtk_widget_hide),
6781 GTK_OBJECT (child));
6783 gtk_widget_show_all (child);
6785 label_box = gtk_hbox_new (FALSE, 0);
6786 pixwid = gtk_pixmap_new (book_closed, book_closed_mask);
6787 gtk_object_set_data (GTK_OBJECT (child), "tab_pixmap", pixwid);
6789 gtk_box_pack_start (GTK_BOX (label_box), pixwid, FALSE, TRUE, 0);
6790 gtk_misc_set_padding (GTK_MISC (pixwid), 3, 1);
6791 label = gtk_label_new (buffer);
6792 gtk_box_pack_start (GTK_BOX (label_box), label, FALSE, TRUE, 0);
6793 gtk_widget_show_all (label_box);
6796 menu_box = gtk_hbox_new (FALSE, 0);
6797 pixwid = gtk_pixmap_new (book_closed, book_closed_mask);
6798 gtk_object_set_data (GTK_OBJECT (child), "menu_pixmap", pixwid);
6800 gtk_box_pack_start (GTK_BOX (menu_box), pixwid, FALSE, TRUE, 0);
6801 gtk_misc_set_padding (GTK_MISC (pixwid), 3, 1);
6802 label = gtk_label_new (buffer);
6803 gtk_box_pack_start (GTK_BOX (menu_box), label, FALSE, TRUE, 0);
6804 gtk_widget_show_all (menu_box);
6806 gtk_notebook_append_page_menu (notebook, child, label_box, menu_box);
6811 rotate_notebook (GtkButton *button,
6812 GtkNotebook *notebook)
6814 gtk_notebook_set_tab_pos (notebook, (notebook->tab_pos + 1) % 4);
6818 show_all_pages (GtkButton *button,
6819 GtkNotebook *notebook)
6821 gtk_container_foreach (GTK_CONTAINER (notebook),
6822 (GtkCallback) gtk_widget_show, NULL);
6826 standard_notebook (GtkButton *button,
6827 GtkNotebook *notebook)
6831 gtk_notebook_set_show_tabs (notebook, TRUE);
6832 gtk_notebook_set_show_border (notebook, TRUE);
6833 gtk_notebook_set_scrollable (notebook, FALSE);
6834 if (g_list_length (notebook->children) == 15)
6835 for (i = 0; i < 10; i++)
6836 gtk_notebook_remove_page (notebook, 5);
6840 notabs_notebook (GtkButton *button,
6841 GtkNotebook *notebook)
6845 gtk_notebook_set_show_tabs (notebook, FALSE);
6846 gtk_notebook_set_show_border (notebook, TRUE);
6847 if (g_list_length (notebook->children) == 15)
6848 for (i = 0; i < 10; i++)
6849 gtk_notebook_remove_page (notebook, 5);
6853 borderless_notebook (GtkButton *button,
6854 GtkNotebook *notebook)
6858 gtk_notebook_set_show_tabs (notebook, FALSE);
6859 gtk_notebook_set_show_border (notebook, FALSE);
6860 if (g_list_length (notebook->children) == 15)
6861 for (i = 0; i < 10; i++)
6862 gtk_notebook_remove_page (notebook, 5);
6866 scrollable_notebook (GtkButton *button,
6867 GtkNotebook *notebook)
6869 gtk_notebook_set_show_tabs (notebook, TRUE);
6870 gtk_notebook_set_show_border (notebook, TRUE);
6871 gtk_notebook_set_scrollable (notebook, TRUE);
6872 if (g_list_length (notebook->children) == 5)
6873 create_pages (notebook, 6, 15);
6877 notebook_popup (GtkToggleButton *button,
6878 GtkNotebook *notebook)
6881 gtk_notebook_popup_enable (notebook);
6883 gtk_notebook_popup_disable (notebook);
6887 notebook_homogeneous (GtkToggleButton *button,
6888 GtkNotebook *notebook)
6890 gtk_notebook_set_homogeneous_tabs (notebook, button->active);
6894 create_notebook (void)
6896 static GtkWidget *window = NULL;
6900 GtkWidget *separator;
6902 GdkColor *transparent = NULL;
6905 static OptionMenuItem items[] =
6907 { "Standard", standard_notebook },
6908 { "No tabs", notabs_notebook },
6909 { "Borderless", borderless_notebook },
6910 { "Scrollable", scrollable_notebook },
6915 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6917 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6918 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6921 gtk_window_set_title (GTK_WINDOW (window), "notebook");
6922 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6924 box1 = gtk_vbox_new (FALSE, 0);
6925 gtk_container_add (GTK_CONTAINER (window), box1);
6927 sample_notebook = gtk_notebook_new ();
6928 gtk_signal_connect (GTK_OBJECT (sample_notebook), "switch_page",
6929 GTK_SIGNAL_FUNC (page_switch), NULL);
6930 gtk_notebook_set_tab_pos (GTK_NOTEBOOK (sample_notebook), GTK_POS_TOP);
6931 gtk_box_pack_start (GTK_BOX (box1), sample_notebook, TRUE, TRUE, 0);
6932 gtk_container_set_border_width (GTK_CONTAINER (sample_notebook), 10);
6934 gtk_widget_realize (sample_notebook);
6936 book_open = gdk_pixmap_create_from_xpm_d (sample_notebook->window,
6941 book_closed = gdk_pixmap_create_from_xpm_d (sample_notebook->window,
6946 create_pages (GTK_NOTEBOOK (sample_notebook), 1, 5);
6948 separator = gtk_hseparator_new ();
6949 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 10);
6951 box2 = gtk_hbox_new (FALSE, 5);
6952 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6953 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6955 button = gtk_check_button_new_with_label ("popup menu");
6956 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, FALSE, 0);
6957 gtk_signal_connect (GTK_OBJECT(button), "clicked",
6958 GTK_SIGNAL_FUNC (notebook_popup),
6959 GTK_OBJECT (sample_notebook));
6961 button = gtk_check_button_new_with_label ("homogeneous tabs");
6962 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, FALSE, 0);
6963 gtk_signal_connect (GTK_OBJECT(button), "clicked",
6964 GTK_SIGNAL_FUNC (notebook_homogeneous),
6965 GTK_OBJECT (sample_notebook));
6967 box2 = gtk_hbox_new (FALSE, 5);
6968 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6969 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6971 label = gtk_label_new ("Notebook Style :");
6972 gtk_box_pack_start (GTK_BOX (box2), label, FALSE, TRUE, 0);
6974 omenu = build_option_menu (items, G_N_ELEMENTS (items), 0, sample_notebook);
6975 gtk_box_pack_start (GTK_BOX (box2), omenu, FALSE, TRUE, 0);
6977 button = gtk_button_new_with_label ("Show all Pages");
6978 gtk_box_pack_start (GTK_BOX (box2), button, FALSE, TRUE, 0);
6979 gtk_signal_connect (GTK_OBJECT (button), "clicked",
6980 GTK_SIGNAL_FUNC (show_all_pages), sample_notebook);
6982 box2 = gtk_hbox_new (TRUE, 10);
6983 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6984 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6986 button = gtk_button_new_with_label ("prev");
6987 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6988 GTK_SIGNAL_FUNC (gtk_notebook_prev_page),
6989 GTK_OBJECT (sample_notebook));
6990 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6992 button = gtk_button_new_with_label ("next");
6993 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6994 GTK_SIGNAL_FUNC (gtk_notebook_next_page),
6995 GTK_OBJECT (sample_notebook));
6996 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6998 button = gtk_button_new_with_label ("rotate");
6999 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7000 GTK_SIGNAL_FUNC (rotate_notebook), sample_notebook);
7001 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
7003 separator = gtk_hseparator_new ();
7004 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 5);
7006 button = gtk_button_new_with_label ("close");
7007 gtk_container_set_border_width (GTK_CONTAINER (button), 5);
7008 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7009 GTK_SIGNAL_FUNC (gtk_widget_destroy),
7010 GTK_OBJECT (window));
7011 gtk_box_pack_start (GTK_BOX (box1), button, FALSE, FALSE, 0);
7012 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7013 gtk_widget_grab_default (button);
7016 if (!GTK_WIDGET_VISIBLE (window))
7017 gtk_widget_show_all (window);
7019 gtk_widget_destroy (window);
7027 toggle_resize (GtkWidget *widget, GtkWidget *child)
7029 GtkPaned *paned = GTK_PANED (child->parent);
7030 gboolean is_child1 = (child == paned->child1);
7031 gboolean resize, shrink;
7033 resize = is_child1 ? paned->child1_resize : paned->child2_resize;
7034 shrink = is_child1 ? paned->child1_shrink : paned->child2_shrink;
7036 gtk_widget_ref (child);
7037 gtk_container_remove (GTK_CONTAINER (child->parent), child);
7039 gtk_paned_pack1 (paned, child, !resize, shrink);
7041 gtk_paned_pack2 (paned, child, !resize, shrink);
7042 gtk_widget_unref (child);
7046 toggle_shrink (GtkWidget *widget, GtkWidget *child)
7048 GtkPaned *paned = GTK_PANED (child->parent);
7049 gboolean is_child1 = (child == paned->child1);
7050 gboolean resize, shrink;
7052 resize = is_child1 ? paned->child1_resize : paned->child2_resize;
7053 shrink = is_child1 ? paned->child1_shrink : paned->child2_shrink;
7055 gtk_widget_ref (child);
7056 gtk_container_remove (GTK_CONTAINER (child->parent), child);
7058 gtk_paned_pack1 (paned, child, resize, !shrink);
7060 gtk_paned_pack2 (paned, child, resize, !shrink);
7061 gtk_widget_unref (child);
7065 create_pane_options (GtkPaned *paned,
7066 const gchar *frame_label,
7067 const gchar *label1,
7068 const gchar *label2)
7073 GtkWidget *check_button;
7075 frame = gtk_frame_new (frame_label);
7076 gtk_container_set_border_width (GTK_CONTAINER (frame), 4);
7078 table = gtk_table_new (3, 2, 4);
7079 gtk_container_add (GTK_CONTAINER (frame), table);
7081 label = gtk_label_new (label1);
7082 gtk_table_attach_defaults (GTK_TABLE (table), label,
7085 check_button = gtk_check_button_new_with_label ("Resize");
7086 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
7088 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
7089 GTK_SIGNAL_FUNC (toggle_resize),
7092 check_button = gtk_check_button_new_with_label ("Shrink");
7093 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
7095 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
7097 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
7098 GTK_SIGNAL_FUNC (toggle_shrink),
7101 label = gtk_label_new (label2);
7102 gtk_table_attach_defaults (GTK_TABLE (table), label,
7105 check_button = gtk_check_button_new_with_label ("Resize");
7106 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
7108 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
7110 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
7111 GTK_SIGNAL_FUNC (toggle_resize),
7114 check_button = gtk_check_button_new_with_label ("Shrink");
7115 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
7117 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
7119 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
7120 GTK_SIGNAL_FUNC (toggle_shrink),
7129 static GtkWidget *window = NULL;
7138 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7140 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7141 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7144 gtk_window_set_title (GTK_WINDOW (window), "Panes");
7145 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
7147 vbox = gtk_vbox_new (FALSE, 0);
7148 gtk_container_add (GTK_CONTAINER (window), vbox);
7150 vpaned = gtk_vpaned_new ();
7151 gtk_box_pack_start (GTK_BOX (vbox), vpaned, TRUE, TRUE, 0);
7152 gtk_container_set_border_width (GTK_CONTAINER(vpaned), 5);
7154 hpaned = gtk_hpaned_new ();
7155 gtk_paned_add1 (GTK_PANED (vpaned), hpaned);
7157 frame = gtk_frame_new (NULL);
7158 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
7159 gtk_widget_set_usize (frame, 60, 60);
7160 gtk_paned_add1 (GTK_PANED (hpaned), frame);
7162 button = gtk_button_new_with_label ("Hi there");
7163 gtk_container_add (GTK_CONTAINER(frame), button);
7165 frame = gtk_frame_new (NULL);
7166 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
7167 gtk_widget_set_usize (frame, 80, 60);
7168 gtk_paned_add2 (GTK_PANED (hpaned), frame);
7170 frame = gtk_frame_new (NULL);
7171 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
7172 gtk_widget_set_usize (frame, 60, 80);
7173 gtk_paned_add2 (GTK_PANED (vpaned), frame);
7175 /* Now create toggle buttons to control sizing */
7177 gtk_box_pack_start (GTK_BOX (vbox),
7178 create_pane_options (GTK_PANED (hpaned),
7184 gtk_box_pack_start (GTK_BOX (vbox),
7185 create_pane_options (GTK_PANED (vpaned),
7191 gtk_widget_show_all (vbox);
7194 if (!GTK_WIDGET_VISIBLE (window))
7195 gtk_widget_show (window);
7197 gtk_widget_destroy (window);
7206 dnd_drop_destroy_popup (GtkWidget *widget, GtkWindow **window)
7208 if(GTK_IS_BUTTON(widget)) /* I.e. they clicked the close button */
7209 gtk_widget_destroy(GTK_WIDGET(*window));
7211 gtk_grab_remove(GTK_WIDGET(*window));
7219 dnd_drop (GtkWidget *button, GdkEvent *event)
7221 static GtkWidget *window = NULL;
7222 GtkWidget *vbox, *lbl, *btn;
7225 /* DND doesn't obey gtk_grab's, so check if we're already displaying
7226 * drop modal dialog first
7231 window = gtk_window_new(GTK_WINDOW_DIALOG);
7232 gtk_container_set_border_width (GTK_CONTAINER(window), 10);
7234 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7235 GTK_SIGNAL_FUNC(dnd_drop_destroy_popup),
7237 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
7238 GTK_SIGNAL_FUNC(gtk_false),
7241 vbox = gtk_vbox_new(FALSE, 5);
7243 /* Display message that we got from drop source */
7244 msg = g_malloc(strlen(event->dropdataavailable.data)
7245 + strlen(event->dropdataavailable.data_type) + 100);
7246 sprintf(msg, "Drop data of type %s was:\n\n%s",
7247 event->dropdataavailable.data_type,
7248 (char *)event->dropdataavailable.data);
7249 lbl = gtk_label_new(msg);
7250 gtk_label_set_justify(GTK_LABEL(lbl), GTK_JUSTIFY_FILL);
7252 gtk_widget_show(lbl);
7253 gtk_box_pack_start_defaults(GTK_BOX(vbox), lbl);
7255 /* Provide an obvious way out of this heinousness */
7256 btn = gtk_button_new_with_label("Continue with life in\nspite of this oppression");
7257 gtk_signal_connect_object (GTK_OBJECT (btn), "clicked",
7258 GTK_SIGNAL_FUNC(gtk_widget_destroy),
7259 GTK_OBJECT (window));
7260 gtk_widget_show(btn);
7261 gtk_box_pack_start_defaults(GTK_BOX(vbox), btn);
7263 gtk_container_add(GTK_CONTAINER(window), vbox);
7265 gtk_widget_show(vbox);
7266 gtk_grab_add(window);
7267 gtk_widget_show(window);
7271 dnd_drag_request (GtkWidget *button, GdkEvent *event)
7273 #define DND_STRING "Bill Gates demands royalties for\nyour use of his innovation."
7274 gtk_widget_dnd_data_set (button, event, DND_STRING, strlen(DND_STRING) + 1);
7280 static GtkWidget *window = NULL;
7286 GtkWidget *separator;
7288 /* For clarity... */
7289 char *possible_drag_types[] = {"text/plain"};
7290 char *accepted_drop_types[] = {"text/plain"};
7292 static GtkWidget *drag_icon = NULL;
7293 static GtkWidget *drop_icon = NULL;
7297 GdkPoint hotspot = {5,5};
7301 drag_icon = shape_create_icon ("Modeller.xpm",
7302 440, 140, 0,0, GTK_WINDOW_POPUP);
7304 gtk_signal_connect (GTK_OBJECT (drag_icon), "destroy",
7305 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7308 gtk_widget_hide (drag_icon);
7313 drop_icon = shape_create_icon ("3DRings.xpm",
7314 440, 140, 0,0, GTK_WINDOW_POPUP);
7316 gtk_signal_connect (GTK_OBJECT (drop_icon), "destroy",
7317 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7320 gtk_widget_hide (drop_icon);
7323 gdk_dnd_set_drag_shape(drag_icon->window,
7328 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7330 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7331 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7334 gtk_window_set_title (GTK_WINDOW (window), "Drag -N- Drop");
7335 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
7337 box1 = gtk_vbox_new (FALSE, 0);
7338 gtk_container_add (GTK_CONTAINER (window), box1);
7339 gtk_widget_show (box1);
7341 box2 = gtk_hbox_new (FALSE, 5);
7342 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
7343 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
7344 gtk_widget_show (box2);
7346 frame = gtk_frame_new ("Drag");
7347 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
7348 gtk_widget_show (frame);
7350 box3 = gtk_vbox_new (FALSE, 5);
7351 gtk_container_set_border_width (GTK_CONTAINER (box3), 5);
7352 gtk_container_add (GTK_CONTAINER (frame), box3);
7353 gtk_widget_show (box3);
7358 button = gtk_button_new_with_label ("Drag me!");
7359 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
7360 gtk_widget_show (button);
7363 * currently, the widget has to be realized to
7364 * set dnd on it, this needs to change
7366 gtk_widget_realize (button);
7367 gtk_signal_connect (GTK_OBJECT (button),
7368 "drag_request_event",
7369 GTK_SIGNAL_FUNC(dnd_drag_request),
7372 gtk_widget_dnd_drag_set (button, TRUE, possible_drag_types, 1);
7375 frame = gtk_frame_new ("Drop");
7376 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
7377 gtk_widget_show (frame);
7379 box3 = gtk_vbox_new (FALSE, 5);
7380 gtk_container_set_border_width (GTK_CONTAINER (box3), 5);
7381 gtk_container_add (GTK_CONTAINER (frame), box3);
7382 gtk_widget_show (box3);
7388 button = gtk_button_new_with_label ("To");
7389 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
7390 gtk_widget_show (button);
7392 gtk_widget_realize (button);
7393 gtk_signal_connect (GTK_OBJECT (button),
7394 "drop_data_available_event",
7395 GTK_SIGNAL_FUNC(dnd_drop),
7398 gtk_widget_dnd_drop_set (button, TRUE, accepted_drop_types, 1, FALSE);
7401 separator = gtk_hseparator_new ();
7402 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
7403 gtk_widget_show (separator);
7406 box2 = gtk_vbox_new (FALSE, 10);
7407 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
7408 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
7409 gtk_widget_show (box2);
7412 button = gtk_button_new_with_label ("close");
7414 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7415 GTK_SIGNAL_FUNC(gtk_widget_destroy),
7416 GTK_OBJECT (window));
7418 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
7419 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7420 gtk_widget_grab_default (button);
7421 gtk_widget_show (button);
7424 if (!GTK_WIDGET_VISIBLE (window))
7425 gtk_widget_show (window);
7427 gtk_widget_destroy (window);
7435 typedef struct _cursoroffset {gint x,y;} CursorOffset;
7438 shape_pressed (GtkWidget *widget, GdkEventButton *event)
7442 /* ignore double and triple click */
7443 if (event->type != GDK_BUTTON_PRESS)
7446 p = gtk_object_get_user_data (GTK_OBJECT(widget));
7447 p->x = (int) event->x;
7448 p->y = (int) event->y;
7450 gtk_grab_add (widget);
7451 gdk_pointer_grab (widget->window, TRUE,
7452 GDK_BUTTON_RELEASE_MASK |
7453 GDK_BUTTON_MOTION_MASK |
7454 GDK_POINTER_MOTION_HINT_MASK,
7459 shape_released (GtkWidget *widget)
7461 gtk_grab_remove (widget);
7462 gdk_pointer_ungrab (0);
7466 shape_motion (GtkWidget *widget,
7467 GdkEventMotion *event)
7471 GdkModifierType mask;
7473 p = gtk_object_get_user_data (GTK_OBJECT (widget));
7476 * Can't use event->x / event->y here
7477 * because I need absolute coordinates.
7479 gdk_window_get_pointer (NULL, &xp, &yp, &mask);
7480 gtk_widget_set_uposition (widget, xp - p->x, yp - p->y);
7484 shape_create_icon (char *xpm_file,
7494 CursorOffset* icon_pos;
7496 GdkBitmap *gdk_pixmap_mask;
7497 GdkPixmap *gdk_pixmap;
7500 style = gtk_widget_get_default_style ();
7501 gc = style->black_gc;
7504 * GDK_WINDOW_TOPLEVEL works also, giving you a title border
7506 window = gtk_window_new (window_type);
7508 fixed = gtk_fixed_new ();
7509 gtk_widget_set_usize (fixed, 100,100);
7510 gtk_container_add (GTK_CONTAINER (window), fixed);
7511 gtk_widget_show (fixed);
7513 gtk_widget_set_events (window,
7514 gtk_widget_get_events (window) |
7515 GDK_BUTTON_MOTION_MASK |
7516 GDK_POINTER_MOTION_HINT_MASK |
7517 GDK_BUTTON_PRESS_MASK);
7519 gtk_widget_realize (window);
7520 gdk_pixmap = gdk_pixmap_create_from_xpm (window->window, &gdk_pixmap_mask,
7521 &style->bg[GTK_STATE_NORMAL],
7524 pixmap = gtk_pixmap_new (gdk_pixmap, gdk_pixmap_mask);
7525 gtk_fixed_put (GTK_FIXED (fixed), pixmap, px,py);
7526 gtk_widget_show (pixmap);
7528 gtk_widget_shape_combine_mask (window, gdk_pixmap_mask, px, py);
7530 gdk_drawable_unref (gdk_pixmap_mask);
7531 gdk_drawable_unref (gdk_pixmap);
7533 gtk_signal_connect (GTK_OBJECT (window), "button_press_event",
7534 GTK_SIGNAL_FUNC (shape_pressed),NULL);
7535 gtk_signal_connect (GTK_OBJECT (window), "button_release_event",
7536 GTK_SIGNAL_FUNC (shape_released),NULL);
7537 gtk_signal_connect (GTK_OBJECT (window), "motion_notify_event",
7538 GTK_SIGNAL_FUNC (shape_motion),NULL);
7540 icon_pos = g_new (CursorOffset, 1);
7541 gtk_object_set_user_data(GTK_OBJECT(window), icon_pos);
7543 gtk_widget_set_uposition (window, x, y);
7544 gtk_widget_show (window);
7550 create_shapes (void)
7552 /* Variables used by the Drag/Drop and Shape Window demos */
7553 static GtkWidget *modeller = NULL;
7554 static GtkWidget *sheets = NULL;
7555 static GtkWidget *rings = NULL;
7556 static GtkWidget *with_region = NULL;
7558 if (!(file_exists ("Modeller.xpm") &&
7559 file_exists ("FilesQueue.xpm") &&
7560 file_exists ("3DRings.xpm")))
7566 modeller = shape_create_icon ("Modeller.xpm",
7567 440, 140, 0,0, GTK_WINDOW_POPUP);
7569 gtk_signal_connect (GTK_OBJECT (modeller), "destroy",
7570 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7574 gtk_widget_destroy (modeller);
7578 sheets = shape_create_icon ("FilesQueue.xpm",
7579 580, 170, 0,0, GTK_WINDOW_POPUP);
7581 gtk_signal_connect (GTK_OBJECT (sheets), "destroy",
7582 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7587 gtk_widget_destroy (sheets);
7591 rings = shape_create_icon ("3DRings.xpm",
7592 460, 270, 25,25, GTK_WINDOW_TOPLEVEL);
7594 gtk_signal_connect (GTK_OBJECT (rings), "destroy",
7595 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7599 gtk_widget_destroy (rings);
7606 with_region = shape_create_icon ("3DRings.xpm",
7607 460, 270, 25,25, GTK_WINDOW_TOPLEVEL);
7609 gtk_signal_connect (GTK_OBJECT (with_region), "destroy",
7610 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7613 /* reset shape from mask to a region */
7616 region = gdk_region_new ();
7628 gdk_region_union_with_rect (region, &rect);
7636 gdk_window_shape_combine_region (with_region->window,
7641 gtk_widget_destroy (with_region);
7649 create_wmhints (void)
7651 static GtkWidget *window = NULL;
7653 GtkWidget *separator;
7662 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7664 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7665 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7668 gtk_window_set_title (GTK_WINDOW (window), "WM Hints");
7669 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
7671 gtk_widget_realize (window);
7673 circles = gdk_bitmap_create_from_data (window->window,
7677 gdk_window_set_icon (window->window, NULL,
7680 gdk_window_set_icon_name (window->window, "WMHints Test Icon");
7682 gdk_window_set_decorations (window->window, GDK_DECOR_ALL | GDK_DECOR_MENU);
7683 gdk_window_set_functions (window->window, GDK_FUNC_ALL | GDK_FUNC_RESIZE);
7685 box1 = gtk_vbox_new (FALSE, 0);
7686 gtk_container_add (GTK_CONTAINER (window), box1);
7687 gtk_widget_show (box1);
7689 label = gtk_label_new ("Try iconizing me!");
7690 gtk_widget_set_usize (label, 150, 50);
7691 gtk_box_pack_start (GTK_BOX (box1), label, TRUE, TRUE, 0);
7692 gtk_widget_show (label);
7695 separator = gtk_hseparator_new ();
7696 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
7697 gtk_widget_show (separator);
7700 box2 = gtk_vbox_new (FALSE, 10);
7701 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
7702 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
7703 gtk_widget_show (box2);
7706 button = gtk_button_new_with_label ("close");
7708 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7709 GTK_SIGNAL_FUNC(gtk_widget_destroy),
7710 GTK_OBJECT (window));
7712 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
7713 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7714 gtk_widget_grab_default (button);
7715 gtk_widget_show (button);
7718 if (!GTK_WIDGET_VISIBLE (window))
7719 gtk_widget_show (window);
7721 gtk_widget_destroy (window);
7726 * Window state tracking
7730 window_state_callback (GtkWidget *widget,
7731 GdkEventWindowState *event,
7734 GtkWidget *label = data;
7737 msg = g_strconcat (GTK_WINDOW (widget)->title, ": ",
7738 (event->new_window_state & GDK_WINDOW_STATE_WITHDRAWN) ?
7739 "withdrawn" : "not withdrawn", ", ",
7740 (event->new_window_state & GDK_WINDOW_STATE_ICONIFIED) ?
7741 "iconified" : "not iconified", ", ",
7742 (event->new_window_state & GDK_WINDOW_STATE_STICKY) ?
7743 "sticky" : "not sticky", ", ",
7744 (event->new_window_state & GDK_WINDOW_STATE_MAXIMIZED) ?
7745 "maximized" : "not maximized",
7748 gtk_label_set_text (GTK_LABEL (label), msg);
7756 tracking_label (GtkWidget *window)
7762 hbox = gtk_hbox_new (FALSE, 5);
7764 gtk_signal_connect_object (GTK_OBJECT (hbox),
7766 GTK_SIGNAL_FUNC (gtk_widget_destroy),
7767 GTK_OBJECT (window));
7769 label = gtk_label_new ("<no window state events received>");
7770 gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
7771 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
7773 gtk_signal_connect (GTK_OBJECT (window),
7774 "window_state_event",
7775 GTK_SIGNAL_FUNC (window_state_callback),
7778 button = gtk_button_new_with_label ("Deiconify");
7779 gtk_signal_connect_object (GTK_WIDGET (button),
7781 GTK_SIGNAL_FUNC (gtk_window_deiconify),
7782 GTK_OBJECT (window));
7783 gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
7785 button = gtk_button_new_with_label ("Iconify");
7786 gtk_signal_connect_object (GTK_WIDGET (button),
7788 GTK_SIGNAL_FUNC (gtk_window_iconify),
7789 GTK_OBJECT (window));
7790 gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
7792 button = gtk_button_new_with_label ("Present");
7793 gtk_signal_connect_object (GTK_WIDGET (button),
7795 GTK_SIGNAL_FUNC (gtk_window_present),
7796 GTK_OBJECT (window));
7797 gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
7799 button = gtk_button_new_with_label ("Show");
7800 gtk_signal_connect_object (GTK_WIDGET (button),
7802 GTK_SIGNAL_FUNC (gtk_widget_show),
7803 GTK_OBJECT (window));
7804 gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
7806 gtk_widget_show_all (hbox);
7812 get_state_controls (GtkWidget *window)
7817 vbox = gtk_vbox_new (FALSE, 0);
7819 button = gtk_button_new_with_label ("Stick");
7820 gtk_signal_connect_object (GTK_WIDGET (button),
7822 GTK_SIGNAL_FUNC (gtk_window_stick),
7823 GTK_OBJECT (window));
7824 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
7826 button = gtk_button_new_with_label ("Unstick");
7827 gtk_signal_connect_object (GTK_WIDGET (button),
7829 GTK_SIGNAL_FUNC (gtk_window_unstick),
7830 GTK_OBJECT (window));
7831 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
7833 button = gtk_button_new_with_label ("Maximize");
7834 gtk_signal_connect_object (GTK_WIDGET (button),
7836 GTK_SIGNAL_FUNC (gtk_window_maximize),
7837 GTK_OBJECT (window));
7838 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
7840 button = gtk_button_new_with_label ("Unmaximize");
7841 gtk_signal_connect_object (GTK_WIDGET (button),
7843 GTK_SIGNAL_FUNC (gtk_window_unmaximize),
7844 GTK_OBJECT (window));
7845 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
7847 button = gtk_button_new_with_label ("Iconify");
7848 gtk_signal_connect_object (GTK_WIDGET (button),
7850 GTK_SIGNAL_FUNC (gtk_window_iconify),
7851 GTK_OBJECT (window));
7852 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
7854 button = gtk_button_new_with_label ("Hide (withdraw)");
7855 gtk_signal_connect_object (GTK_WIDGET (button),
7857 GTK_SIGNAL_FUNC (gtk_widget_hide),
7858 GTK_OBJECT (window));
7859 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
7861 gtk_widget_show_all (vbox);
7867 create_window_states (void)
7869 static GtkWidget *window = NULL;
7872 GtkWidget *iconified;
7874 GtkWidget *controls;
7878 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7880 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7881 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7884 gtk_window_set_title (GTK_WINDOW (window), "Window states");
7886 box1 = gtk_vbox_new (FALSE, 0);
7887 gtk_container_add (GTK_CONTAINER (window), box1);
7889 iconified = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7890 gtk_window_iconify (iconified);
7891 gtk_window_set_title (GTK_WINDOW (iconified), "Iconified initially");
7892 controls = get_state_controls (iconified);
7893 gtk_container_add (GTK_CONTAINER (iconified), controls);
7895 normal = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7896 gtk_window_set_title (GTK_WINDOW (normal), "Deiconified initially");
7897 controls = get_state_controls (normal);
7898 gtk_container_add (GTK_CONTAINER (normal), controls);
7900 label = tracking_label (iconified);
7901 gtk_container_add (GTK_CONTAINER (box1), label);
7903 label = tracking_label (normal);
7904 gtk_container_add (GTK_CONTAINER (box1), label);
7906 gtk_widget_show_all (iconified);
7907 gtk_widget_show_all (normal);
7908 gtk_widget_show_all (box1);
7911 if (!GTK_WIDGET_VISIBLE (window))
7912 gtk_widget_show (window);
7914 gtk_widget_destroy (window);
7921 typedef struct _ProgressData {
7924 GtkWidget *block_spin;
7925 GtkWidget *x_align_spin;
7926 GtkWidget *y_align_spin;
7927 GtkWidget *step_spin;
7928 GtkWidget *act_blocks_spin;
7937 progress_timeout (gpointer data)
7942 adj = GTK_PROGRESS (data)->adjustment;
7944 new_val = adj->value + 1;
7945 if (new_val > adj->upper)
7946 new_val = adj->lower;
7948 gtk_progress_set_value (GTK_PROGRESS (data), new_val);
7954 destroy_progress (GtkWidget *widget,
7955 ProgressData **pdata)
7957 gtk_timeout_remove ((*pdata)->timer);
7958 (*pdata)->timer = 0;
7959 (*pdata)->window = NULL;
7965 progressbar_toggle_orientation (GtkWidget *widget, ProgressData *pdata)
7969 if (!GTK_WIDGET_MAPPED (widget))
7972 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
7973 (((GtkOptionMenu *)(pdata->omenu1))->menu_item), i);
7975 gtk_progress_bar_set_orientation (GTK_PROGRESS_BAR (pdata->pbar),
7976 (GtkProgressBarOrientation) (3-i));
7980 toggle_show_text (GtkWidget *widget, ProgressData *pdata)
7982 gtk_progress_set_show_text (GTK_PROGRESS (pdata->pbar),
7983 GTK_TOGGLE_BUTTON (widget)->active);
7984 gtk_widget_set_sensitive (pdata->entry, GTK_TOGGLE_BUTTON (widget)->active);
7985 gtk_widget_set_sensitive (pdata->x_align_spin,
7986 GTK_TOGGLE_BUTTON (widget)->active);
7987 gtk_widget_set_sensitive (pdata->y_align_spin,
7988 GTK_TOGGLE_BUTTON (widget)->active);
7992 progressbar_toggle_bar_style (GtkWidget *widget, ProgressData *pdata)
7996 if (!GTK_WIDGET_MAPPED (widget))
7999 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
8000 (((GtkOptionMenu *)(pdata->omenu2))->menu_item), i);
8005 gtk_widget_set_sensitive (pdata->block_spin, TRUE);
8007 gtk_widget_set_sensitive (pdata->block_spin, FALSE);
8009 gtk_progress_bar_set_bar_style (GTK_PROGRESS_BAR (pdata->pbar),
8010 (GtkProgressBarStyle) i);
8014 progress_value_changed (GtkAdjustment *adj, ProgressData *pdata)
8018 if (GTK_PROGRESS (pdata->pbar)->activity_mode)
8019 sprintf (buf, "???");
8021 sprintf (buf, "%.0f%%", 100 *
8022 gtk_progress_get_current_percentage (GTK_PROGRESS (pdata->pbar)));
8023 gtk_label_set_text (GTK_LABEL (pdata->label), buf);
8027 adjust_blocks (GtkAdjustment *adj, ProgressData *pdata)
8029 gtk_progress_set_percentage (GTK_PROGRESS (pdata->pbar), 0);
8030 gtk_progress_bar_set_discrete_blocks (GTK_PROGRESS_BAR (pdata->pbar),
8031 gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (pdata->block_spin)));
8035 adjust_step (GtkAdjustment *adj, ProgressData *pdata)
8037 gtk_progress_bar_set_activity_step (GTK_PROGRESS_BAR (pdata->pbar),
8038 gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (pdata->step_spin)));
8042 adjust_act_blocks (GtkAdjustment *adj, ProgressData *pdata)
8044 gtk_progress_bar_set_activity_blocks (GTK_PROGRESS_BAR (pdata->pbar),
8045 gtk_spin_button_get_value_as_int
8046 (GTK_SPIN_BUTTON (pdata->act_blocks_spin)));
8050 adjust_align (GtkAdjustment *adj, ProgressData *pdata)
8052 gtk_progress_set_text_alignment (GTK_PROGRESS (pdata->pbar),
8053 gtk_spin_button_get_value_as_float
8054 (GTK_SPIN_BUTTON (pdata->x_align_spin)),
8055 gtk_spin_button_get_value_as_float
8056 (GTK_SPIN_BUTTON (pdata->y_align_spin)));
8060 toggle_activity_mode (GtkWidget *widget, ProgressData *pdata)
8062 gtk_progress_set_activity_mode (GTK_PROGRESS (pdata->pbar),
8063 GTK_TOGGLE_BUTTON (widget)->active);
8064 gtk_widget_set_sensitive (pdata->step_spin,
8065 GTK_TOGGLE_BUTTON (widget)->active);
8066 gtk_widget_set_sensitive (pdata->act_blocks_spin,
8067 GTK_TOGGLE_BUTTON (widget)->active);
8071 entry_changed (GtkWidget *widget, ProgressData *pdata)
8073 gtk_progress_set_format_string (GTK_PROGRESS (pdata->pbar),
8074 gtk_entry_get_text (GTK_ENTRY (pdata->entry)));
8078 create_progress_bar (void)
8090 static ProgressData *pdata = NULL;
8092 static OptionMenuItem items1[] =
8094 { "Left-Right", progressbar_toggle_orientation },
8095 { "Right-Left", progressbar_toggle_orientation },
8096 { "Bottom-Top", progressbar_toggle_orientation },
8097 { "Top-Bottom", progressbar_toggle_orientation }
8100 static OptionMenuItem items2[] =
8102 { "Continuous", progressbar_toggle_bar_style },
8103 { "Discrete", progressbar_toggle_bar_style }
8107 pdata = g_new0 (ProgressData, 1);
8111 pdata->window = gtk_dialog_new ();
8113 gtk_window_set_policy (GTK_WINDOW (pdata->window), FALSE, FALSE, TRUE);
8115 gtk_signal_connect (GTK_OBJECT (pdata->window), "destroy",
8116 GTK_SIGNAL_FUNC (destroy_progress),
8121 gtk_window_set_title (GTK_WINDOW (pdata->window), "GtkProgressBar");
8122 gtk_container_set_border_width (GTK_CONTAINER (pdata->window), 0);
8124 vbox = gtk_vbox_new (FALSE, 5);
8125 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
8126 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (pdata->window)->vbox),
8127 vbox, FALSE, TRUE, 0);
8129 frame = gtk_frame_new ("Progress");
8130 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
8132 vbox2 = gtk_vbox_new (FALSE, 5);
8133 gtk_container_add (GTK_CONTAINER (frame), vbox2);
8135 align = gtk_alignment_new (0.5, 0.5, 0, 0);
8136 gtk_box_pack_start (GTK_BOX (vbox2), align, FALSE, FALSE, 5);
8138 adj = (GtkAdjustment *) gtk_adjustment_new (0, 1, 300, 0, 0, 0);
8139 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
8140 GTK_SIGNAL_FUNC (progress_value_changed), pdata);
8142 pdata->pbar = gtk_progress_bar_new_with_adjustment (adj);
8143 gtk_progress_set_format_string (GTK_PROGRESS (pdata->pbar),
8144 "%v from [%l,%u] (=%p%%)");
8145 gtk_container_add (GTK_CONTAINER (align), pdata->pbar);
8146 pdata->timer = gtk_timeout_add (100, progress_timeout, pdata->pbar);
8148 align = gtk_alignment_new (0.5, 0.5, 0, 0);
8149 gtk_box_pack_start (GTK_BOX (vbox2), align, FALSE, FALSE, 5);
8151 hbox = gtk_hbox_new (FALSE, 5);
8152 gtk_container_add (GTK_CONTAINER (align), hbox);
8153 label = gtk_label_new ("Label updated by user :");
8154 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
8155 pdata->label = gtk_label_new ("");
8156 gtk_box_pack_start (GTK_BOX (hbox), pdata->label, FALSE, TRUE, 0);
8158 frame = gtk_frame_new ("Options");
8159 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
8161 vbox2 = gtk_vbox_new (FALSE, 5);
8162 gtk_container_add (GTK_CONTAINER (frame), vbox2);
8164 tab = gtk_table_new (7, 2, FALSE);
8165 gtk_box_pack_start (GTK_BOX (vbox2), tab, FALSE, TRUE, 0);
8167 label = gtk_label_new ("Orientation :");
8168 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 0, 1,
8169 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8171 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
8173 pdata->omenu1 = build_option_menu (items1, 4, 0, pdata);
8174 hbox = gtk_hbox_new (FALSE, 0);
8175 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 0, 1,
8176 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8178 gtk_box_pack_start (GTK_BOX (hbox), pdata->omenu1, TRUE, TRUE, 0);
8180 check = gtk_check_button_new_with_label ("Show text");
8181 gtk_signal_connect (GTK_OBJECT (check), "clicked",
8182 GTK_SIGNAL_FUNC (toggle_show_text),
8184 gtk_table_attach (GTK_TABLE (tab), check, 0, 1, 1, 2,
8185 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8188 hbox = gtk_hbox_new (FALSE, 0);
8189 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 1, 2,
8190 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8193 label = gtk_label_new ("Format : ");
8194 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
8196 pdata->entry = gtk_entry_new ();
8197 gtk_signal_connect (GTK_OBJECT (pdata->entry), "changed",
8198 GTK_SIGNAL_FUNC (entry_changed),
8200 gtk_box_pack_start (GTK_BOX (hbox), pdata->entry, TRUE, TRUE, 0);
8201 gtk_entry_set_text (GTK_ENTRY (pdata->entry), "%v from [%l,%u] (=%p%%)");
8202 gtk_widget_set_usize (pdata->entry, 100, -1);
8203 gtk_widget_set_sensitive (pdata->entry, FALSE);
8205 label = gtk_label_new ("Text align :");
8206 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 2, 3,
8207 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8209 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
8211 hbox = gtk_hbox_new (FALSE, 0);
8212 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 2, 3,
8213 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8216 label = gtk_label_new ("x :");
8217 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 5);
8219 adj = (GtkAdjustment *) gtk_adjustment_new (0.5, 0, 1, 0.1, 0.1, 0);
8220 pdata->x_align_spin = gtk_spin_button_new (adj, 0, 1);
8221 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
8222 GTK_SIGNAL_FUNC (adjust_align), pdata);
8223 gtk_box_pack_start (GTK_BOX (hbox), pdata->x_align_spin, FALSE, TRUE, 0);
8224 gtk_widget_set_sensitive (pdata->x_align_spin, FALSE);
8226 label = gtk_label_new ("y :");
8227 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 5);
8229 adj = (GtkAdjustment *) gtk_adjustment_new (0.5, 0, 1, 0.1, 0.1, 0);
8230 pdata->y_align_spin = gtk_spin_button_new (adj, 0, 1);
8231 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
8232 GTK_SIGNAL_FUNC (adjust_align), pdata);
8233 gtk_box_pack_start (GTK_BOX (hbox), pdata->y_align_spin, FALSE, TRUE, 0);
8234 gtk_widget_set_sensitive (pdata->y_align_spin, FALSE);
8236 label = gtk_label_new ("Bar Style :");
8237 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 3, 4,
8238 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8240 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
8242 pdata->omenu2 = build_option_menu (items2, 2, 0, pdata);
8243 hbox = gtk_hbox_new (FALSE, 0);
8244 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 3, 4,
8245 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8247 gtk_box_pack_start (GTK_BOX (hbox), pdata->omenu2, TRUE, TRUE, 0);
8249 label = gtk_label_new ("Block count :");
8250 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 4, 5,
8251 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8253 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
8255 hbox = gtk_hbox_new (FALSE, 0);
8256 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 4, 5,
8257 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8259 adj = (GtkAdjustment *) gtk_adjustment_new (10, 2, 20, 1, 5, 0);
8260 pdata->block_spin = gtk_spin_button_new (adj, 0, 0);
8261 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
8262 GTK_SIGNAL_FUNC (adjust_blocks), pdata);
8263 gtk_box_pack_start (GTK_BOX (hbox), pdata->block_spin, FALSE, TRUE, 0);
8264 gtk_widget_set_sensitive (pdata->block_spin, FALSE);
8266 check = gtk_check_button_new_with_label ("Activity mode");
8267 gtk_signal_connect (GTK_OBJECT (check), "clicked",
8268 GTK_SIGNAL_FUNC (toggle_activity_mode),
8270 gtk_table_attach (GTK_TABLE (tab), check, 0, 1, 5, 6,
8271 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8274 hbox = gtk_hbox_new (FALSE, 0);
8275 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 5, 6,
8276 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8278 label = gtk_label_new ("Step size : ");
8279 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
8280 adj = (GtkAdjustment *) gtk_adjustment_new (3, 1, 20, 1, 5, 0);
8281 pdata->step_spin = gtk_spin_button_new (adj, 0, 0);
8282 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
8283 GTK_SIGNAL_FUNC (adjust_step), pdata);
8284 gtk_box_pack_start (GTK_BOX (hbox), pdata->step_spin, FALSE, TRUE, 0);
8285 gtk_widget_set_sensitive (pdata->step_spin, FALSE);
8287 hbox = gtk_hbox_new (FALSE, 0);
8288 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 6, 7,
8289 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8291 label = gtk_label_new ("Blocks : ");
8292 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
8293 adj = (GtkAdjustment *) gtk_adjustment_new (5, 2, 10, 1, 5, 0);
8294 pdata->act_blocks_spin = gtk_spin_button_new (adj, 0, 0);
8295 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
8296 GTK_SIGNAL_FUNC (adjust_act_blocks), pdata);
8297 gtk_box_pack_start (GTK_BOX (hbox), pdata->act_blocks_spin, FALSE, TRUE,
8299 gtk_widget_set_sensitive (pdata->act_blocks_spin, FALSE);
8301 button = gtk_button_new_with_label ("close");
8302 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
8303 GTK_SIGNAL_FUNC (gtk_widget_destroy),
8304 GTK_OBJECT (pdata->window));
8305 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8306 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (pdata->window)->action_area),
8307 button, TRUE, TRUE, 0);
8308 gtk_widget_grab_default (button);
8311 if (!GTK_WIDGET_VISIBLE (pdata->window))
8312 gtk_widget_show_all (pdata->window);
8314 gtk_widget_destroy (pdata->window);
8321 static int color_idle = 0;
8324 color_idle_func (GtkWidget *preview)
8326 static int count = 1;
8330 for (i = 0; i < 256; i++)
8332 for (j = 0, k = 0; j < 256; j++)
8334 buf[k+0] = i + count;
8336 buf[k+2] = j + count;
8340 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
8345 gtk_widget_draw (preview, NULL);
8351 color_preview_destroy (GtkWidget *widget,
8354 gtk_idle_remove (color_idle);
8361 create_color_preview (void)
8363 static GtkWidget *window = NULL;
8370 gtk_widget_push_colormap (gdk_rgb_get_cmap ());
8371 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
8372 gtk_widget_pop_colormap ();
8374 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8375 GTK_SIGNAL_FUNC(color_preview_destroy),
8378 gtk_window_set_title (GTK_WINDOW (window), "test");
8379 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
8381 preview = gtk_preview_new (GTK_PREVIEW_COLOR);
8382 gtk_preview_size (GTK_PREVIEW (preview), 256, 256);
8383 gtk_container_add (GTK_CONTAINER (window), preview);
8385 for (i = 0; i < 256; i++)
8387 for (j = 0, k = 0; j < 256; j++)
8395 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
8398 color_idle = gtk_idle_add ((GtkFunction) color_idle_func, preview);
8401 if (!GTK_WIDGET_VISIBLE (window))
8402 gtk_widget_show_all (window);
8404 gtk_widget_destroy (window);
8411 static int gray_idle = 0;
8414 gray_idle_func (GtkWidget *preview)
8416 static int count = 1;
8420 for (i = 0; i < 256; i++)
8422 for (j = 0; j < 256; j++)
8423 buf[j] = i + j + count;
8425 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
8430 gtk_widget_draw (preview, NULL);
8436 gray_preview_destroy (GtkWidget *widget,
8439 gtk_idle_remove (gray_idle);
8446 create_gray_preview (void)
8448 static GtkWidget *window = NULL;
8455 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
8457 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8458 GTK_SIGNAL_FUNC(gray_preview_destroy),
8461 gtk_window_set_title (GTK_WINDOW (window), "test");
8462 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
8464 preview = gtk_preview_new (GTK_PREVIEW_GRAYSCALE);
8465 gtk_preview_size (GTK_PREVIEW (preview), 256, 256);
8466 gtk_container_add (GTK_CONTAINER (window), preview);
8468 for (i = 0; i < 256; i++)
8470 for (j = 0; j < 256; j++)
8473 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
8476 gray_idle = gtk_idle_add ((GtkFunction) gray_idle_func, preview);
8479 if (!GTK_WIDGET_VISIBLE (window))
8480 gtk_widget_show_all (window);
8482 gtk_widget_destroy (window);
8491 selection_test_received (GtkWidget *list, GtkSelectionData *data)
8494 GtkWidget *list_item;
8498 if (data->length < 0)
8500 g_print ("Selection retrieval failed\n");
8503 if (data->type != GDK_SELECTION_TYPE_ATOM)
8505 g_print ("Selection \"TARGETS\" was not returned as atoms!\n");
8509 /* Clear out any current list items */
8511 gtk_list_clear_items (GTK_LIST(list), 0, -1);
8513 /* Add new items to list */
8515 atoms = (GdkAtom *)data->data;
8518 l = data->length / sizeof (GdkAtom);
8519 for (i = 0; i < l; i++)
8522 name = gdk_atom_name (atoms[i]);
8525 list_item = gtk_list_item_new_with_label (name);
8529 list_item = gtk_list_item_new_with_label ("(bad atom)");
8531 gtk_widget_show (list_item);
8532 item_list = g_list_append (item_list, list_item);
8535 gtk_list_append_items (GTK_LIST (list), item_list);
8541 selection_test_get_targets (GtkWidget *widget, GtkWidget *list)
8543 static GdkAtom targets_atom = GDK_NONE;
8545 if (targets_atom == GDK_NONE)
8546 targets_atom = gdk_atom_intern ("TARGETS", FALSE);
8548 gtk_selection_convert (list, GDK_SELECTION_PRIMARY, targets_atom,
8553 create_selection_test (void)
8555 static GtkWidget *window = NULL;
8558 GtkWidget *scrolled_win;
8564 window = gtk_dialog_new ();
8566 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8567 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
8570 gtk_window_set_title (GTK_WINDOW (window), "Selection Test");
8571 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
8573 /* Create the list */
8575 vbox = gtk_vbox_new (FALSE, 5);
8576 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
8577 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), vbox,
8580 label = gtk_label_new ("Gets available targets for current selection");
8581 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
8583 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
8584 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
8585 GTK_POLICY_AUTOMATIC,
8586 GTK_POLICY_AUTOMATIC);
8587 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
8588 gtk_widget_set_usize (scrolled_win, 100, 200);
8590 list = gtk_list_new ();
8591 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_win), list);
8593 gtk_signal_connect (GTK_OBJECT(list), "selection_received",
8594 GTK_SIGNAL_FUNC (selection_test_received), NULL);
8596 /* .. And create some buttons */
8597 button = gtk_button_new_with_label ("Get Targets");
8598 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8599 button, TRUE, TRUE, 0);
8601 gtk_signal_connect (GTK_OBJECT (button), "clicked",
8602 GTK_SIGNAL_FUNC (selection_test_get_targets), list);
8604 button = gtk_button_new_with_label ("Quit");
8605 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8606 button, TRUE, TRUE, 0);
8608 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
8609 GTK_SIGNAL_FUNC (gtk_widget_destroy),
8610 GTK_OBJECT (window));
8613 if (!GTK_WIDGET_VISIBLE (window))
8614 gtk_widget_show_all (window);
8616 gtk_widget_destroy (window);
8624 create_gamma_curve (void)
8626 static GtkWidget *window = NULL, *curve;
8627 static int count = 0;
8634 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
8635 gtk_window_set_title (GTK_WINDOW (window), "test");
8636 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
8638 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8639 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
8642 curve = gtk_gamma_curve_new ();
8643 gtk_container_add (GTK_CONTAINER (window), curve);
8644 gtk_widget_show (curve);
8647 max = 127 + (count % 2)*128;
8648 gtk_curve_set_range (GTK_CURVE (GTK_GAMMA_CURVE (curve)->curve),
8650 for (i = 0; i < max; ++i)
8651 vec[i] = (127 / sqrt (max)) * sqrt (i);
8652 gtk_curve_set_vector (GTK_CURVE (GTK_GAMMA_CURVE (curve)->curve),
8655 if (!GTK_WIDGET_VISIBLE (window))
8656 gtk_widget_show (window);
8657 else if (count % 4 == 3)
8659 gtk_widget_destroy (window);
8670 static int scroll_test_pos = 0.0;
8671 static GdkGC *scroll_test_gc = NULL;
8674 scroll_test_expose (GtkWidget *widget, GdkEventExpose *event,
8678 gint imin, imax, jmin, jmax;
8680 imin = (event->area.x) / 10;
8681 imax = (event->area.x + event->area.width + 9) / 10;
8683 jmin = ((int)adj->value + event->area.y) / 10;
8684 jmax = ((int)adj->value + event->area.y + event->area.height + 9) / 10;
8686 gdk_window_clear_area (widget->window,
8687 event->area.x, event->area.y,
8688 event->area.width, event->area.height);
8690 for (i=imin; i<imax; i++)
8691 for (j=jmin; j<jmax; j++)
8693 gdk_draw_rectangle (widget->window,
8694 widget->style->black_gc,
8696 10*i, 10*j - (int)adj->value, 1+i%10, 1+j%10);
8702 scroll_test_scroll (GtkWidget *widget, GdkEventScroll *event,
8705 gfloat new_value = adj->value + ((event->direction == GDK_SCROLL_UP) ?
8706 -adj->page_increment / 2:
8707 adj->page_increment / 2);
8708 new_value = CLAMP (new_value, adj->lower, adj->upper - adj->page_size);
8709 gtk_adjustment_set_value (adj, new_value);
8715 scroll_test_configure (GtkWidget *widget, GdkEventConfigure *event,
8718 adj->page_increment = 0.9 * widget->allocation.height;
8719 adj->page_size = widget->allocation.height;
8721 gtk_signal_emit_by_name (GTK_OBJECT (adj), "changed");
8725 scroll_test_adjustment_changed (GtkAdjustment *adj, GtkWidget *widget)
8727 gint source_min = (int)adj->value - scroll_test_pos;
8728 gint source_max = source_min + widget->allocation.height;
8730 gint dest_max = widget->allocation.height;
8734 scroll_test_pos = adj->value;
8736 if (!GTK_WIDGET_DRAWABLE (widget))
8743 rect.width = widget->allocation.width;
8744 rect.height = -source_min;
8745 if (rect.height > widget->allocation.height)
8746 rect.height = widget->allocation.height;
8749 dest_min = rect.height;
8754 rect.y = 2*widget->allocation.height - source_max;
8757 rect.width = widget->allocation.width;
8758 rect.height = widget->allocation.height - rect.y;
8760 source_max = widget->allocation.height;
8764 if (source_min != source_max)
8766 if (scroll_test_gc == NULL)
8768 scroll_test_gc = gdk_gc_new (widget->window);
8769 gdk_gc_set_exposures (scroll_test_gc, TRUE);
8772 gdk_draw_pixmap (widget->window,
8777 widget->allocation.width,
8778 source_max - source_min);
8780 /* Make sure graphics expose events are processed before scrolling
8783 while ((event = gdk_event_get_graphics_expose (widget->window)) != NULL)
8785 gtk_widget_event (widget, event);
8786 if (event->expose.count == 0)
8788 gdk_event_free (event);
8791 gdk_event_free (event);
8795 if (rect.height != 0)
8796 gtk_widget_draw (widget, &rect);
8801 create_scroll_test (void)
8803 static GtkWidget *window = NULL;
8805 GtkWidget *drawing_area;
8806 GtkWidget *scrollbar;
8809 GdkGeometry geometry;
8810 GdkWindowHints geometry_mask;
8814 window = gtk_dialog_new ();
8816 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8817 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
8820 gtk_window_set_title (GTK_WINDOW (window), "Scroll Test");
8821 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
8823 hbox = gtk_hbox_new (FALSE, 0);
8824 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), hbox,
8826 gtk_widget_show (hbox);
8828 drawing_area = gtk_drawing_area_new ();
8829 gtk_drawing_area_size (GTK_DRAWING_AREA (drawing_area), 200, 200);
8830 gtk_box_pack_start (GTK_BOX (hbox), drawing_area, TRUE, TRUE, 0);
8831 gtk_widget_show (drawing_area);
8833 gtk_widget_set_events (drawing_area, GDK_EXPOSURE_MASK | GDK_SCROLL_MASK);
8835 adj = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.0, 1000.0, 1.0, 180.0, 200.0));
8836 scroll_test_pos = 0.0;
8838 scrollbar = gtk_vscrollbar_new (adj);
8839 gtk_box_pack_start (GTK_BOX (hbox), scrollbar, FALSE, FALSE, 0);
8840 gtk_widget_show (scrollbar);
8842 gtk_signal_connect (GTK_OBJECT (drawing_area), "expose_event",
8843 GTK_SIGNAL_FUNC (scroll_test_expose), adj);
8844 gtk_signal_connect (GTK_OBJECT (drawing_area), "configure_event",
8845 GTK_SIGNAL_FUNC (scroll_test_configure), adj);
8846 gtk_signal_connect (GTK_OBJECT (drawing_area), "scroll_event",
8847 GTK_SIGNAL_FUNC (scroll_test_scroll), adj);
8849 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
8850 GTK_SIGNAL_FUNC (scroll_test_adjustment_changed),
8853 /* .. And create some buttons */
8855 button = gtk_button_new_with_label ("Quit");
8856 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8857 button, TRUE, TRUE, 0);
8859 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
8860 GTK_SIGNAL_FUNC (gtk_widget_destroy),
8861 GTK_OBJECT (window));
8862 gtk_widget_show (button);
8864 /* Set up gridded geometry */
8866 geometry_mask = GDK_HINT_MIN_SIZE |
8867 GDK_HINT_BASE_SIZE |
8868 GDK_HINT_RESIZE_INC;
8870 geometry.min_width = 20;
8871 geometry.min_height = 20;
8872 geometry.base_width = 0;
8873 geometry.base_height = 0;
8874 geometry.width_inc = 10;
8875 geometry.height_inc = 10;
8877 gtk_window_set_geometry_hints (GTK_WINDOW (window),
8878 drawing_area, &geometry, geometry_mask);
8881 if (!GTK_WIDGET_VISIBLE (window))
8882 gtk_widget_show (window);
8884 gtk_widget_destroy (window);
8891 static int timer = 0;
8894 timeout_test (GtkWidget *label)
8896 static int count = 0;
8897 static char buffer[32];
8899 sprintf (buffer, "count: %d", ++count);
8900 gtk_label_set_text (GTK_LABEL (label), buffer);
8906 start_timeout_test (GtkWidget *widget,
8911 timer = gtk_timeout_add (100, (GtkFunction) timeout_test, label);
8916 stop_timeout_test (GtkWidget *widget,
8921 gtk_timeout_remove (timer);
8927 destroy_timeout_test (GtkWidget *widget,
8930 stop_timeout_test (NULL, NULL);
8936 create_timeout_test (void)
8938 static GtkWidget *window = NULL;
8944 window = gtk_dialog_new ();
8946 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8947 GTK_SIGNAL_FUNC(destroy_timeout_test),
8950 gtk_window_set_title (GTK_WINDOW (window), "Timeout Test");
8951 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
8953 label = gtk_label_new ("count: 0");
8954 gtk_misc_set_padding (GTK_MISC (label), 10, 10);
8955 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
8956 label, TRUE, TRUE, 0);
8957 gtk_widget_show (label);
8959 button = gtk_button_new_with_label ("close");
8960 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
8961 GTK_SIGNAL_FUNC(gtk_widget_destroy),
8962 GTK_OBJECT (window));
8963 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8964 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8965 button, TRUE, TRUE, 0);
8966 gtk_widget_grab_default (button);
8967 gtk_widget_show (button);
8969 button = gtk_button_new_with_label ("start");
8970 gtk_signal_connect (GTK_OBJECT (button), "clicked",
8971 GTK_SIGNAL_FUNC(start_timeout_test),
8973 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8974 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8975 button, TRUE, TRUE, 0);
8976 gtk_widget_show (button);
8978 button = gtk_button_new_with_label ("stop");
8979 gtk_signal_connect (GTK_OBJECT (button), "clicked",
8980 GTK_SIGNAL_FUNC(stop_timeout_test),
8982 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8983 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8984 button, TRUE, TRUE, 0);
8985 gtk_widget_show (button);
8988 if (!GTK_WIDGET_VISIBLE (window))
8989 gtk_widget_show (window);
8991 gtk_widget_destroy (window);
8998 static int idle_id = 0;
9001 idle_test (GtkWidget *label)
9003 static int count = 0;
9004 static char buffer[32];
9006 sprintf (buffer, "count: %d", ++count);
9007 gtk_label_set_text (GTK_LABEL (label), buffer);
9013 start_idle_test (GtkWidget *widget,
9018 idle_id = gtk_idle_add ((GtkFunction) idle_test, label);
9023 stop_idle_test (GtkWidget *widget,
9028 gtk_idle_remove (idle_id);
9034 destroy_idle_test (GtkWidget *widget,
9037 stop_idle_test (NULL, NULL);
9043 toggle_idle_container (GtkObject *button,
9044 GtkContainer *container)
9046 gtk_container_set_resize_mode (container, GPOINTER_TO_INT (gtk_object_get_user_data (button)));
9050 create_idle_test (void)
9052 static GtkWidget *window = NULL;
9055 GtkWidget *container;
9062 window = gtk_dialog_new ();
9064 gtk_signal_connect (GTK_OBJECT (window), "destroy",
9065 GTK_SIGNAL_FUNC(destroy_idle_test),
9068 gtk_window_set_title (GTK_WINDOW (window), "Idle Test");
9069 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
9071 label = gtk_label_new ("count: 0");
9072 gtk_misc_set_padding (GTK_MISC (label), 10, 10);
9073 gtk_widget_show (label);
9076 gtk_widget_new (GTK_TYPE_HBOX,
9078 /* "GtkContainer::child", gtk_widget_new (GTK_TYPE_HBOX,
9079 * "GtkWidget::visible", TRUE,
9084 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
9085 container, TRUE, TRUE, 0);
9088 gtk_widget_new (GTK_TYPE_FRAME,
9090 "label", "Label Container",
9092 "parent", GTK_DIALOG (window)->vbox,
9095 gtk_widget_new (GTK_TYPE_VBOX,
9100 g_object_connect (gtk_widget_new (GTK_TYPE_RADIO_BUTTON,
9101 "label", "Resize-Parent",
9102 "user_data", (void*)GTK_RESIZE_PARENT,
9106 "signal::clicked", toggle_idle_container, container,
9109 g_object_connect (gtk_widget_new (GTK_TYPE_RADIO_BUTTON,
9110 "label", "Resize-Queue",
9111 "user_data", (void*)GTK_RESIZE_QUEUE,
9116 "signal::clicked", toggle_idle_container, container,
9119 g_object_set (g_object_connect (gtk_widget_new (GTK_TYPE_RADIO_BUTTON,
9120 "label", "Resize-Immediate",
9121 "user_data", (void*)GTK_RESIZE_IMMEDIATE,
9123 "signal::clicked", toggle_idle_container, container,
9130 button = gtk_button_new_with_label ("close");
9131 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
9132 GTK_SIGNAL_FUNC(gtk_widget_destroy),
9133 GTK_OBJECT (window));
9134 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
9135 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
9136 button, TRUE, TRUE, 0);
9137 gtk_widget_grab_default (button);
9138 gtk_widget_show (button);
9140 button = gtk_button_new_with_label ("start");
9141 gtk_signal_connect (GTK_OBJECT (button), "clicked",
9142 GTK_SIGNAL_FUNC(start_idle_test),
9144 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
9145 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
9146 button, TRUE, TRUE, 0);
9147 gtk_widget_show (button);
9149 button = gtk_button_new_with_label ("stop");
9150 gtk_signal_connect (GTK_OBJECT (button), "clicked",
9151 GTK_SIGNAL_FUNC(stop_idle_test),
9153 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
9154 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
9155 button, TRUE, TRUE, 0);
9156 gtk_widget_show (button);
9159 if (!GTK_WIDGET_VISIBLE (window))
9160 gtk_widget_show (window);
9162 gtk_widget_destroy (window);
9170 reload_rc_file (void)
9174 if (gtk_rc_reparse_all ())
9176 toplevels = gdk_window_get_toplevels();
9180 gdk_window_get_user_data (toplevels->data, (gpointer *)&widget);
9183 gtk_widget_reset_rc_styles (widget);
9185 toplevels = toplevels->next;
9187 g_list_free (toplevels);
9192 reload_all_rc_files (void)
9194 static GdkAtom atom_rcfiles = GDK_NONE;
9200 atom_rcfiles = gdk_atom_intern("_GTK_READ_RCFILES", FALSE);
9202 for(i = 0; i < 5; i++)
9204 sev.data_format = 32;
9205 sev.message_type = atom_rcfiles;
9206 gdk_event_send_clientmessage_toall ((GdkEvent *) &sev);
9210 create_rc_file (void)
9212 static GtkWidget *window = NULL;
9217 window = gtk_dialog_new ();
9219 gtk_signal_connect (GTK_OBJECT (window), "destroy",
9220 GTK_SIGNAL_FUNC(destroy_idle_test),
9223 gtk_window_set_title (GTK_WINDOW (window), "Reload Rc file");
9224 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
9226 button = gtk_button_new_with_label ("Reload");
9227 gtk_signal_connect (GTK_OBJECT (button), "clicked",
9228 GTK_SIGNAL_FUNC(reload_rc_file), NULL);
9229 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
9230 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
9231 button, TRUE, TRUE, 0);
9232 gtk_widget_grab_default (button);
9233 gtk_widget_show (button);
9235 button = gtk_button_new_with_label ("Reload All");
9236 gtk_signal_connect (GTK_OBJECT (button), "clicked",
9237 GTK_SIGNAL_FUNC(reload_all_rc_files), NULL);
9238 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
9239 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
9240 button, TRUE, TRUE, 0);
9241 gtk_widget_show (button);
9243 button = gtk_button_new_with_label ("Close");
9244 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
9245 GTK_SIGNAL_FUNC(gtk_widget_destroy),
9246 GTK_OBJECT (window));
9247 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
9248 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
9249 button, TRUE, TRUE, 0);
9250 gtk_widget_show (button);
9254 if (!GTK_WIDGET_VISIBLE (window))
9255 gtk_widget_show (window);
9257 gtk_widget_destroy (window);
9261 * Test of recursive mainloop
9265 mainloop_destroyed (GtkWidget *w, GtkWidget **window)
9272 create_mainloop (void)
9274 static GtkWidget *window = NULL;
9280 window = gtk_dialog_new ();
9282 gtk_window_set_title (GTK_WINDOW (window), "Test Main Loop");
9284 gtk_signal_connect (GTK_OBJECT (window), "destroy",
9285 GTK_SIGNAL_FUNC(mainloop_destroyed),
9288 label = gtk_label_new ("In recursive main loop...");
9289 gtk_misc_set_padding (GTK_MISC(label), 20, 20);
9291 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), label,
9293 gtk_widget_show (label);
9295 button = gtk_button_new_with_label ("Leave");
9296 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area), button,
9299 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
9300 GTK_SIGNAL_FUNC (gtk_widget_destroy),
9301 GTK_OBJECT (window));
9303 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
9304 gtk_widget_grab_default (button);
9306 gtk_widget_show (button);
9309 if (!GTK_WIDGET_VISIBLE (window))
9311 gtk_widget_show (window);
9313 g_print ("create_mainloop: start\n");
9315 g_print ("create_mainloop: done\n");
9318 gtk_widget_destroy (window);
9322 layout_expose_handler (GtkWidget *widget, GdkEventExpose *event)
9327 gint imin, imax, jmin, jmax;
9329 layout = GTK_LAYOUT (widget);
9331 imin = (layout->xoffset + event->area.x) / 10;
9332 imax = (layout->xoffset + event->area.x + event->area.width + 9) / 10;
9334 jmin = (layout->yoffset + event->area.y) / 10;
9335 jmax = (layout->yoffset + event->area.y + event->area.height + 9) / 10;
9337 gdk_window_clear_area (widget->window,
9338 event->area.x, event->area.y,
9339 event->area.width, event->area.height);
9341 for (i=imin; i<imax; i++)
9342 for (j=jmin; j<jmax; j++)
9344 gdk_draw_rectangle (layout->bin_window,
9345 widget->style->black_gc,
9347 10*i - layout->xoffset, 10*j - layout->yoffset,
9353 void create_layout (void)
9355 static GtkWidget *window = NULL;
9357 GtkWidget *scrolledwindow;
9366 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
9367 gtk_signal_connect (GTK_OBJECT (window), "destroy",
9368 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
9371 gtk_window_set_title (GTK_WINDOW (window), "Layout");
9372 gtk_widget_set_usize (window, 200, 200);
9374 scrolledwindow = gtk_scrolled_window_new (NULL, NULL);
9375 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow),
9377 gtk_scrolled_window_set_placement (GTK_SCROLLED_WINDOW (scrolledwindow),
9378 GTK_CORNER_TOP_RIGHT);
9380 gtk_container_add (GTK_CONTAINER (window), scrolledwindow);
9382 layout = gtk_layout_new (NULL, NULL);
9383 gtk_container_add (GTK_CONTAINER (scrolledwindow), layout);
9385 /* We set step sizes here since GtkLayout does not set
9388 GTK_LAYOUT (layout)->hadjustment->step_increment = 10.0;
9389 GTK_LAYOUT (layout)->vadjustment->step_increment = 10.0;
9391 gtk_widget_set_events (layout, GDK_EXPOSURE_MASK);
9392 gtk_signal_connect (GTK_OBJECT (layout), "expose_event",
9393 GTK_SIGNAL_FUNC (layout_expose_handler), NULL);
9395 gtk_layout_set_size (GTK_LAYOUT (layout), 1600, 128000);
9397 for (i=0 ; i < 16 ; i++)
9398 for (j=0 ; j < 16 ; j++)
9400 sprintf(buf, "Button %d, %d", i, j);
9402 button = gtk_button_new_with_label (buf);
9404 button = gtk_label_new (buf);
9406 gtk_layout_put (GTK_LAYOUT (layout), button,
9410 for (i=16; i < 1280; i++)
9412 sprintf(buf, "Button %d, %d", i, 0);
9414 button = gtk_button_new_with_label (buf);
9416 button = gtk_label_new (buf);
9418 gtk_layout_put (GTK_LAYOUT (layout), button,
9423 if (!GTK_WIDGET_VISIBLE (window))
9424 gtk_widget_show_all (window);
9426 gtk_widget_destroy (window);
9430 create_styles (void)
9432 static GtkWidget *window = NULL;
9437 static GdkColor red = { 0, 0xffff, 0, 0 };
9438 static GdkColor green = { 0, 0, 0xffff, 0 };
9439 static GdkColor blue = { 0, 0, 0, 0xffff };
9440 static GdkColor yellow = { 0, 0xffff, 0xffff, 0 };
9441 static GdkColor cyan = { 0, 0 , 0xffff, 0xffff };
9442 PangoFontDescription *font_desc;
9444 GtkRcStyle *rc_style;
9448 window = gtk_dialog_new ();
9449 gtk_signal_connect (GTK_OBJECT (window), "destroy",
9450 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
9454 button = gtk_button_new_with_label ("Close");
9455 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
9456 GTK_SIGNAL_FUNC(gtk_widget_destroy),
9457 GTK_OBJECT (window));
9458 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
9459 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
9460 button, TRUE, TRUE, 0);
9461 gtk_widget_show (button);
9463 vbox = gtk_vbox_new (FALSE, 5);
9464 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
9465 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), vbox, FALSE, FALSE, 0);
9467 label = gtk_label_new ("Font:");
9468 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
9469 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9471 font_desc = pango_font_description_from_string ("Helvetica,Sans Oblique 18");
9473 button = gtk_button_new_with_label ("Some Text");
9474 gtk_widget_modify_font (GTK_BIN (button)->child, font_desc);
9475 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
9477 label = gtk_label_new ("Foreground:");
9478 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
9479 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9481 button = gtk_button_new_with_label ("Some Text");
9482 gtk_widget_modify_fg (GTK_BIN (button)->child, GTK_STATE_NORMAL, &red);
9483 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
9485 label = gtk_label_new ("Background:");
9486 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
9487 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9489 button = gtk_button_new_with_label ("Some Text");
9490 gtk_widget_modify_bg (button, GTK_STATE_NORMAL, &green);
9491 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
9493 label = gtk_label_new ("Text:");
9494 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
9495 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9497 entry = gtk_entry_new ();
9498 gtk_entry_set_text (GTK_ENTRY (entry), "Some Text");
9499 gtk_widget_modify_text (entry, GTK_STATE_NORMAL, &blue);
9500 gtk_box_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 0);
9502 label = gtk_label_new ("Base:");
9503 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
9504 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9506 entry = gtk_entry_new ();
9507 gtk_entry_set_text (GTK_ENTRY (entry), "Some Text");
9508 gtk_widget_modify_base (entry, GTK_STATE_NORMAL, &yellow);
9509 gtk_box_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 0);
9511 label = gtk_label_new ("Multiple:");
9512 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
9513 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9515 button = gtk_button_new_with_label ("Some Text");
9517 rc_style = gtk_rc_style_new ();
9519 rc_style->font_desc = font_desc;
9520 rc_style->color_flags[GTK_STATE_NORMAL] = GTK_RC_FG | GTK_RC_BG;
9521 rc_style->color_flags[GTK_STATE_PRELIGHT] = GTK_RC_FG | GTK_RC_BG;
9522 rc_style->color_flags[GTK_STATE_ACTIVE] = GTK_RC_FG | GTK_RC_BG;
9523 rc_style->fg[GTK_STATE_NORMAL] = yellow;
9524 rc_style->bg[GTK_STATE_NORMAL] = blue;
9525 rc_style->fg[GTK_STATE_PRELIGHT] = blue;
9526 rc_style->bg[GTK_STATE_PRELIGHT] = yellow;
9527 rc_style->fg[GTK_STATE_ACTIVE] = red;
9528 rc_style->bg[GTK_STATE_ACTIVE] = cyan;
9529 rc_style->xthickness = 5;
9530 rc_style->ythickness = 5;
9532 gtk_widget_modify_style (button, rc_style);
9533 gtk_widget_modify_style (GTK_BIN (button)->child, rc_style);
9535 g_object_unref (G_OBJECT (rc_style));
9537 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
9540 if (!GTK_WIDGET_VISIBLE (window))
9541 gtk_widget_show_all (window);
9543 gtk_widget_destroy (window);
9547 * Main Window and Exit
9551 do_exit (GtkWidget *widget, GtkWidget *window)
9553 gtk_widget_destroy (window);
9558 create_main_window (void)
9565 { "button box", create_button_box },
9566 { "buttons", create_buttons },
9567 { "check buttons", create_check_buttons },
9568 { "clist", create_clist},
9569 { "color selection", create_color_selection },
9570 { "ctree", create_ctree },
9571 { "cursors", create_cursors },
9572 { "dialog", create_dialog },
9573 /* { "dnd", create_dnd }, */
9574 { "entry", create_entry },
9575 { "event watcher", create_event_watcher },
9576 { "file selection", create_file_selection },
9577 { "flipping", create_flipping },
9578 { "font selection", create_font_selection },
9579 { "gamma curve", create_gamma_curve },
9580 { "handle box", create_handle_box },
9581 { "image from drawable", create_get_image },
9582 { "image", create_image },
9583 { "item factory", create_item_factory },
9584 { "labels", create_labels },
9585 { "layout", create_layout },
9586 { "list", create_list },
9587 { "menus", create_menus },
9588 { "message dialog", create_message_dialog },
9589 { "modal window", create_modal_window },
9590 { "notebook", create_notebook },
9591 { "panes", create_panes },
9592 { "pixmap", create_pixmap },
9593 { "preview color", create_color_preview },
9594 { "preview gray", create_gray_preview },
9595 { "progress bar", create_progress_bar },
9596 { "radio buttons", create_radio_buttons },
9597 { "range controls", create_range_controls },
9598 { "rc file", create_rc_file },
9599 { "reparent", create_reparent },
9600 { "rulers", create_rulers },
9601 { "saved position", create_saved_position },
9602 { "scrolled windows", create_scrolled_windows },
9603 { "shapes", create_shapes },
9604 { "spinbutton", create_spins },
9605 { "statusbar", create_statusbar },
9606 { "styles", create_styles },
9607 { "test idle", create_idle_test },
9608 { "test mainloop", create_mainloop },
9609 { "test scrolling", create_scroll_test },
9610 { "test selection", create_selection_test },
9611 { "test timeout", create_timeout_test },
9612 { "text", create_text },
9613 { "toggle buttons", create_toggle_buttons },
9614 { "toolbar", create_toolbar },
9615 { "tooltips", create_tooltips },
9616 { "tree", create_tree_mode_window},
9617 { "WM hints", create_wmhints },
9618 { "window states", create_window_states }
9620 int nbuttons = sizeof (buttons) / sizeof (buttons[0]);
9624 GtkWidget *scrolled_window;
9628 GtkWidget *separator;
9629 GdkGeometry geometry;
9632 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
9633 gtk_widget_set_name (window, "main window");
9634 gtk_widget_set_uposition (window, 20, 20);
9635 gtk_window_set_default_size (GTK_WINDOW (window), -1, 400);
9637 geometry.min_width = -1;
9638 geometry.min_height = -1;
9639 geometry.max_width = -1;
9640 geometry.max_height = G_MAXSHORT;
9641 gtk_window_set_geometry_hints (GTK_WINDOW (window), NULL,
9643 GDK_HINT_MIN_SIZE | GDK_HINT_MAX_SIZE);
9645 gtk_signal_connect (GTK_OBJECT (window), "destroy",
9646 GTK_SIGNAL_FUNC(gtk_main_quit),
9648 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
9649 GTK_SIGNAL_FUNC (gtk_false),
9652 box1 = gtk_vbox_new (FALSE, 0);
9653 gtk_container_add (GTK_CONTAINER (window), box1);
9655 if (gtk_micro_version > 0)
9667 label = gtk_label_new (buffer);
9668 gtk_box_pack_start (GTK_BOX (box1), label, FALSE, FALSE, 0);
9670 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
9671 gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10);
9672 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
9674 GTK_POLICY_AUTOMATIC);
9675 gtk_box_pack_start (GTK_BOX (box1), scrolled_window, TRUE, TRUE, 0);
9677 box2 = gtk_vbox_new (FALSE, 0);
9678 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
9679 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), box2);
9680 gtk_container_set_focus_vadjustment (GTK_CONTAINER (box2),
9681 gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
9682 gtk_widget_show (box2);
9684 for (i = 0; i < nbuttons; i++)
9686 button = gtk_button_new_with_label (buttons[i].label);
9687 if (buttons[i].func)
9688 gtk_signal_connect (GTK_OBJECT (button),
9690 GTK_SIGNAL_FUNC(buttons[i].func),
9693 gtk_widget_set_sensitive (button, FALSE);
9694 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
9697 separator = gtk_hseparator_new ();
9698 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
9700 box2 = gtk_vbox_new (FALSE, 10);
9701 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
9702 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
9704 button = gtk_button_new_with_label ("close");
9705 gtk_signal_connect (GTK_OBJECT (button), "clicked",
9706 GTK_SIGNAL_FUNC (do_exit),
9708 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
9709 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
9710 gtk_widget_grab_default (button);
9712 gtk_widget_show_all (window);
9718 if (file_exists ("../gdk-pixbuf/.libs/libpixbufloader-pnm.so"))
9720 putenv ("GDK_PIXBUF_MODULEDIR=../gdk-pixbuf/.libs");
9721 putenv ("GTK_IM_MODULE_FILE=./gtk.immodules");
9726 main (int argc, char *argv[])
9728 GtkBindingSet *binding_set;
9730 srand (time (NULL));
9735 /* Check to see if we are being run from the correct
9738 if (file_exists ("testgtkrc"))
9739 gtk_rc_add_default_file ("testgtkrc");
9741 gtk_init (&argc, &argv);
9745 binding_set = gtk_binding_set_by_class (gtk_type_class (GTK_TYPE_WIDGET));
9746 gtk_binding_entry_add_signal (binding_set,
9747 '9', GDK_CONTROL_MASK | GDK_RELEASE_MASK,
9750 GTK_TYPE_STRING, "GtkWidgetClass <ctrl><release>9 test");
9752 create_main_window ();
9758 while (g_main_pending ())
9759 g_main_iteration (FALSE);
9761 while (g_main_pending ())
9762 g_main_iteration (FALSE);