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_box_set_spacing (GTK_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);
6141 #define RESPONSE_TOGGLE_SEPARATOR 1
6144 print_response (GtkWidget *dialog,
6148 g_print ("response signal received (%d)\n", response_id);
6150 if (response_id == RESPONSE_TOGGLE_SEPARATOR)
6152 gtk_dialog_set_has_separator (GTK_DIALOG (dialog),
6153 !gtk_dialog_get_has_separator (GTK_DIALOG (dialog)));
6158 create_dialog (void)
6160 static GtkWidget *label;
6165 /* This is a terrible example; it's much simpler to create
6166 * dialogs than this. Don't use testgtk for example code,
6170 dialog_window = gtk_dialog_new ();
6172 gtk_signal_connect (GTK_OBJECT (dialog_window),
6174 GTK_SIGNAL_FUNC (print_response),
6177 gtk_signal_connect (GTK_OBJECT (dialog_window), "destroy",
6178 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6181 gtk_window_set_title (GTK_WINDOW (dialog_window), "GtkDialog");
6182 gtk_container_set_border_width (GTK_CONTAINER (dialog_window), 0);
6184 button = gtk_button_new_with_label ("OK");
6185 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6186 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->action_area),
6187 button, TRUE, TRUE, 0);
6188 gtk_widget_grab_default (button);
6189 gtk_widget_show (button);
6191 button = gtk_button_new_with_label ("Toggle");
6192 gtk_signal_connect (GTK_OBJECT (button), "clicked",
6193 GTK_SIGNAL_FUNC (label_toggle),
6195 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6196 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->action_area),
6197 button, TRUE, TRUE, 0);
6198 gtk_widget_show (button);
6202 button = gtk_button_new_with_label ("Separator");
6204 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6206 gtk_dialog_add_action_widget (GTK_DIALOG (dialog_window),
6208 RESPONSE_TOGGLE_SEPARATOR);
6209 gtk_widget_show (button);
6212 if (!GTK_WIDGET_VISIBLE (dialog_window))
6213 gtk_widget_show (dialog_window);
6215 gtk_widget_destroy (dialog_window);
6220 static gboolean event_watcher_enter_id = 0;
6221 static gboolean event_watcher_leave_id = 0;
6224 event_watcher (GtkObject *object,
6230 g_print ("Watch: \"%s\" emitted for %s\n",
6231 gtk_signal_name (signal_id),
6232 gtk_type_name (GTK_OBJECT_TYPE (object)));
6238 event_watcher_down (void)
6240 if (event_watcher_enter_id)
6244 signal_id = gtk_signal_lookup ("enter_notify_event", GTK_TYPE_WIDGET);
6245 // gtk_signal_remove_emission_hook (signal_id, event_watcher_enter_id);
6246 event_watcher_enter_id = 0;
6247 signal_id = gtk_signal_lookup ("leave_notify_event", GTK_TYPE_WIDGET);
6248 // gtk_signal_remove_emission_hook (signal_id, event_watcher_leave_id);
6249 event_watcher_leave_id = 0;
6254 event_watcher_toggle (void)
6256 if (event_watcher_enter_id)
6257 event_watcher_down ();
6262 signal_id = gtk_signal_lookup ("enter_notify_event", GTK_TYPE_WIDGET);
6263 // event_watcher_enter_id = gtk_signal_add_emission_hook (signal_id, event_watcher, NULL);
6264 signal_id = gtk_signal_lookup ("leave_notify_event", GTK_TYPE_WIDGET);
6265 // event_watcher_leave_id = gtk_signal_add_emission_hook (signal_id, event_watcher, NULL);
6270 create_event_watcher (void)
6276 dialog_window = gtk_dialog_new ();
6278 gtk_signal_connect (GTK_OBJECT (dialog_window), "destroy",
6279 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
6281 gtk_signal_connect (GTK_OBJECT (dialog_window),
6283 GTK_SIGNAL_FUNC (event_watcher_down),
6286 gtk_window_set_title (GTK_WINDOW (dialog_window), "Event Watcher");
6287 gtk_container_set_border_width (GTK_CONTAINER (dialog_window), 0);
6288 gtk_widget_set_usize (dialog_window, 200, 110);
6290 button = gtk_toggle_button_new_with_label ("Activate Watch");
6291 gtk_signal_connect (GTK_OBJECT (button), "clicked",
6292 GTK_SIGNAL_FUNC (event_watcher_toggle),
6294 gtk_container_set_border_width (GTK_CONTAINER (button), 10);
6295 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->vbox),
6296 button, TRUE, TRUE, 0);
6297 gtk_widget_show (button);
6299 button = gtk_button_new_with_label ("Close");
6300 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6301 GTK_SIGNAL_FUNC (gtk_widget_destroy),
6302 (GtkObject*) dialog_window);
6303 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6304 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->action_area),
6305 button, TRUE, TRUE, 0);
6306 gtk_widget_grab_default (button);
6307 gtk_widget_show (button);
6310 if (!GTK_WIDGET_VISIBLE (dialog_window))
6311 gtk_widget_show (dialog_window);
6313 gtk_widget_destroy (dialog_window);
6321 create_range_controls (void)
6323 static GtkWidget *window = NULL;
6327 GtkWidget *scrollbar;
6329 GtkWidget *separator;
6330 GtkObject *adjustment;
6335 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6337 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6338 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6341 gtk_window_set_title (GTK_WINDOW (window), "range controls");
6342 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6345 box1 = gtk_vbox_new (FALSE, 0);
6346 gtk_container_add (GTK_CONTAINER (window), box1);
6347 gtk_widget_show (box1);
6350 box2 = gtk_vbox_new (FALSE, 10);
6351 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6352 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
6353 gtk_widget_show (box2);
6356 adjustment = gtk_adjustment_new (0.0, 0.0, 101.0, 0.1, 1.0, 1.0);
6358 scale = gtk_hscale_new (GTK_ADJUSTMENT (adjustment));
6359 gtk_widget_set_usize (GTK_WIDGET (scale), 150, 30);
6360 gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED);
6361 gtk_scale_set_digits (GTK_SCALE (scale), 1);
6362 gtk_scale_set_draw_value (GTK_SCALE (scale), TRUE);
6363 gtk_box_pack_start (GTK_BOX (box2), scale, TRUE, TRUE, 0);
6364 gtk_widget_show (scale);
6366 scrollbar = gtk_hscrollbar_new (GTK_ADJUSTMENT (adjustment));
6367 gtk_range_set_update_policy (GTK_RANGE (scrollbar),
6368 GTK_UPDATE_CONTINUOUS);
6369 gtk_box_pack_start (GTK_BOX (box2), scrollbar, TRUE, TRUE, 0);
6370 gtk_widget_show (scrollbar);
6372 hbox = gtk_hbox_new (FALSE, 0);
6374 scale = gtk_vscale_new (GTK_ADJUSTMENT (adjustment));
6375 gtk_widget_set_usize (scale, -1, 200);
6376 gtk_scale_set_digits (GTK_SCALE (scale), 2);
6377 gtk_scale_set_draw_value (GTK_SCALE (scale), TRUE);
6378 gtk_box_pack_start (GTK_BOX (hbox), scale, TRUE, TRUE, 0);
6379 gtk_widget_show (scale);
6381 scale = gtk_vscale_new (GTK_ADJUSTMENT (adjustment));
6382 gtk_widget_set_usize (scale, -1, 200);
6383 gtk_scale_set_digits (GTK_SCALE (scale), 2);
6384 gtk_scale_set_draw_value (GTK_SCALE (scale), TRUE);
6385 gtk_range_set_inverted (GTK_RANGE (scale), TRUE);
6386 gtk_box_pack_start (GTK_BOX (hbox), scale, TRUE, TRUE, 0);
6387 gtk_widget_show (scale);
6389 gtk_box_pack_start (GTK_BOX (box2), hbox, TRUE, TRUE, 0);
6390 gtk_widget_show (hbox);
6392 separator = gtk_hseparator_new ();
6393 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
6394 gtk_widget_show (separator);
6397 box2 = gtk_vbox_new (FALSE, 10);
6398 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6399 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6400 gtk_widget_show (box2);
6403 button = gtk_button_new_with_label ("close");
6404 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6405 GTK_SIGNAL_FUNC(gtk_widget_destroy),
6406 GTK_OBJECT (window));
6407 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6408 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6409 gtk_widget_grab_default (button);
6410 gtk_widget_show (button);
6413 if (!GTK_WIDGET_VISIBLE (window))
6414 gtk_widget_show (window);
6416 gtk_widget_destroy (window);
6424 create_rulers (void)
6426 static GtkWidget *window = NULL;
6432 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6433 gtk_window_set_policy (GTK_WINDOW (window), TRUE, TRUE, FALSE);
6435 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6436 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6439 gtk_window_set_title (GTK_WINDOW (window), "rulers");
6440 gtk_widget_set_usize (window, 300, 300);
6441 gtk_widget_set_events (window,
6442 GDK_POINTER_MOTION_MASK
6443 | GDK_POINTER_MOTION_HINT_MASK);
6444 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6446 table = gtk_table_new (2, 2, FALSE);
6447 gtk_container_add (GTK_CONTAINER (window), table);
6448 gtk_widget_show (table);
6450 ruler = gtk_hruler_new ();
6451 gtk_ruler_set_metric (GTK_RULER (ruler), GTK_CENTIMETERS);
6452 gtk_ruler_set_range (GTK_RULER (ruler), 100, 0, 0, 20);
6454 gtk_signal_connect_object (GTK_OBJECT (window),
6455 "motion_notify_event",
6456 GTK_SIGNAL_FUNC (GTK_WIDGET_GET_CLASS (ruler)->motion_notify_event),
6457 GTK_OBJECT (ruler));
6459 gtk_table_attach (GTK_TABLE (table), ruler, 1, 2, 0, 1,
6460 GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
6461 gtk_widget_show (ruler);
6464 ruler = gtk_vruler_new ();
6465 gtk_ruler_set_range (GTK_RULER (ruler), 5, 15, 0, 20);
6467 gtk_signal_connect_object (GTK_OBJECT (window),
6468 "motion_notify_event",
6469 GTK_SIGNAL_FUNC (GTK_WIDGET_GET_CLASS (ruler)->motion_notify_event),
6470 GTK_OBJECT (ruler));
6472 gtk_table_attach (GTK_TABLE (table), ruler, 0, 1, 1, 2,
6473 GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
6474 gtk_widget_show (ruler);
6477 if (!GTK_WIDGET_VISIBLE (window))
6478 gtk_widget_show (window);
6480 gtk_widget_destroy (window);
6484 text_toggle_editable (GtkWidget *checkbutton,
6487 gtk_text_set_editable(GTK_TEXT(text),
6488 GTK_TOGGLE_BUTTON(checkbutton)->active);
6492 text_toggle_word_wrap (GtkWidget *checkbutton,
6495 gtk_text_set_word_wrap(GTK_TEXT(text),
6496 GTK_TOGGLE_BUTTON(checkbutton)->active);
6503 { { 0, 0x0000, 0x0000, 0x0000 }, "black" },
6504 { { 0, 0xFFFF, 0xFFFF, 0xFFFF }, "white" },
6505 { { 0, 0xFFFF, 0x0000, 0x0000 }, "red" },
6506 { { 0, 0x0000, 0xFFFF, 0x0000 }, "green" },
6507 { { 0, 0x0000, 0x0000, 0xFFFF }, "blue" },
6508 { { 0, 0x0000, 0xFFFF, 0xFFFF }, "cyan" },
6509 { { 0, 0xFFFF, 0x0000, 0xFFFF }, "magenta" },
6510 { { 0, 0xFFFF, 0xFFFF, 0x0000 }, "yellow" }
6513 int ntext_colors = sizeof(text_colors) / sizeof(text_colors[0]);
6519 text_insert_random (GtkWidget *w, GtkText *text)
6523 for (i=0; i<10; i++)
6525 c = 'A' + rand() % ('Z' - 'A');
6526 gtk_text_set_point (text, rand() % gtk_text_get_length (text));
6527 gtk_text_insert (text, NULL, NULL, NULL, &c, 1);
6536 static GtkWidget *window = NULL;
6542 GtkWidget *separator;
6543 GtkWidget *scrolled_window;
6550 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6551 gtk_widget_set_name (window, "text window");
6552 gtk_widget_set_usize (window, 500, 500);
6553 gtk_window_set_policy (GTK_WINDOW(window), TRUE, TRUE, FALSE);
6555 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6556 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6559 gtk_window_set_title (GTK_WINDOW (window), "test");
6560 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6563 box1 = gtk_vbox_new (FALSE, 0);
6564 gtk_container_add (GTK_CONTAINER (window), box1);
6565 gtk_widget_show (box1);
6568 box2 = gtk_vbox_new (FALSE, 10);
6569 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6570 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
6571 gtk_widget_show (box2);
6574 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
6575 gtk_box_pack_start (GTK_BOX (box2), scrolled_window, TRUE, TRUE, 0);
6576 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
6579 gtk_widget_show (scrolled_window);
6581 text = gtk_text_new (NULL, NULL);
6582 gtk_text_set_editable (GTK_TEXT (text), TRUE);
6583 gtk_container_add (GTK_CONTAINER (scrolled_window), text);
6584 gtk_widget_grab_focus (text);
6585 gtk_widget_show (text);
6588 gtk_text_freeze (GTK_TEXT (text));
6590 for (i=0; i<ntext_colors; i++)
6592 gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL,
6593 text_colors[i].name, -1);
6594 gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL, "\t", -1);
6596 for (j=0; j<ntext_colors; j++)
6598 gtk_text_insert (GTK_TEXT (text), NULL,
6599 &text_colors[j].color, &text_colors[i].color,
6602 gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL, "\n", -1);
6605 infile = fopen("testgtk.c", "r");
6610 int nbytes_read, nbytes_alloc;
6613 nbytes_alloc = 1024;
6614 buffer = g_new (char, nbytes_alloc);
6618 if (nbytes_alloc < nbytes_read + 1024)
6621 buffer = g_realloc (buffer, nbytes_alloc);
6623 len = fread (buffer + nbytes_read, 1, 1024, infile);
6629 gtk_text_insert (GTK_TEXT (text), NULL, NULL,
6630 NULL, buffer, nbytes_read);
6635 gtk_text_thaw (GTK_TEXT (text));
6637 hbox = gtk_hbutton_box_new ();
6638 gtk_box_pack_start (GTK_BOX (box2), hbox, FALSE, FALSE, 0);
6639 gtk_widget_show (hbox);
6641 check = gtk_check_button_new_with_label("Editable");
6642 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, FALSE, 0);
6643 gtk_signal_connect (GTK_OBJECT(check), "toggled",
6644 GTK_SIGNAL_FUNC(text_toggle_editable), text);
6645 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), TRUE);
6646 gtk_widget_show (check);
6648 check = gtk_check_button_new_with_label("Wrap Words");
6649 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
6650 gtk_signal_connect (GTK_OBJECT(check), "toggled",
6651 GTK_SIGNAL_FUNC(text_toggle_word_wrap), text);
6652 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), FALSE);
6653 gtk_widget_show (check);
6655 separator = gtk_hseparator_new ();
6656 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
6657 gtk_widget_show (separator);
6660 box2 = gtk_vbox_new (FALSE, 10);
6661 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6662 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6663 gtk_widget_show (box2);
6666 button = gtk_button_new_with_label ("insert random");
6667 gtk_signal_connect (GTK_OBJECT (button), "clicked",
6668 GTK_SIGNAL_FUNC(text_insert_random),
6670 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6671 gtk_widget_show (button);
6673 button = gtk_button_new_with_label ("close");
6674 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6675 GTK_SIGNAL_FUNC(gtk_widget_destroy),
6676 GTK_OBJECT (window));
6677 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6678 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6679 gtk_widget_grab_default (button);
6680 gtk_widget_show (button);
6683 if (!GTK_WIDGET_VISIBLE (window))
6684 gtk_widget_show (window);
6686 gtk_widget_destroy (window);
6693 GdkPixmap *book_open;
6694 GdkPixmap *book_closed;
6695 GdkBitmap *book_open_mask;
6696 GdkBitmap *book_closed_mask;
6697 GtkWidget *sample_notebook;
6700 set_page_pixmaps (GtkNotebook *notebook, gint page_num,
6701 GdkPixmap *pixmap, GdkPixmap *mask)
6703 GtkWidget *page_widget;
6706 page_widget = gtk_notebook_get_nth_page (notebook, page_num);
6708 pixwid = gtk_object_get_data (GTK_OBJECT (page_widget), "tab_pixmap");
6709 gtk_pixmap_set (GTK_PIXMAP (pixwid), pixmap, mask);
6711 pixwid = gtk_object_get_data (GTK_OBJECT (page_widget), "menu_pixmap");
6712 gtk_pixmap_set (GTK_PIXMAP (pixwid), pixmap, mask);
6716 page_switch (GtkWidget *widget, GtkNotebookPage *page, gint page_num)
6718 GtkNotebook *notebook = GTK_NOTEBOOK (widget);
6719 gint old_page_num = gtk_notebook_get_current_page (notebook);
6721 if (page_num == old_page_num)
6724 set_page_pixmaps (notebook, page_num, book_open, book_open_mask);
6726 if (old_page_num != -1)
6727 set_page_pixmaps (notebook, old_page_num, book_closed, book_closed_mask);
6731 tab_fill (GtkToggleButton *button, GtkWidget *child)
6734 GtkPackType pack_type;
6736 gtk_notebook_query_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
6737 &expand, NULL, &pack_type);
6738 gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
6739 expand, button->active, pack_type);
6743 tab_expand (GtkToggleButton *button, GtkWidget *child)
6746 GtkPackType pack_type;
6748 gtk_notebook_query_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
6749 NULL, &fill, &pack_type);
6750 gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
6751 button->active, fill, pack_type);
6755 tab_pack (GtkToggleButton *button, GtkWidget *child)
6761 gtk_notebook_query_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
6762 &expand, &fill, NULL);
6763 gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
6764 expand, fill, button->active);
6768 create_pages (GtkNotebook *notebook, gint start, gint end)
6770 GtkWidget *child = NULL;
6775 GtkWidget *label_box;
6776 GtkWidget *menu_box;
6781 for (i = start; i <= end; i++)
6783 sprintf (buffer, "Page %d", i);
6785 child = gtk_frame_new (buffer);
6786 gtk_container_set_border_width (GTK_CONTAINER (child), 10);
6788 vbox = gtk_vbox_new (TRUE,0);
6789 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
6790 gtk_container_add (GTK_CONTAINER (child), vbox);
6792 hbox = gtk_hbox_new (TRUE,0);
6793 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
6795 button = gtk_check_button_new_with_label ("Fill Tab");
6796 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
6797 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
6798 gtk_signal_connect (GTK_OBJECT (button), "toggled",
6799 GTK_SIGNAL_FUNC (tab_fill), child);
6801 button = gtk_check_button_new_with_label ("Expand Tab");
6802 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
6803 gtk_signal_connect (GTK_OBJECT (button), "toggled",
6804 GTK_SIGNAL_FUNC (tab_expand), child);
6806 button = gtk_check_button_new_with_label ("Pack end");
6807 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
6808 gtk_signal_connect (GTK_OBJECT (button), "toggled",
6809 GTK_SIGNAL_FUNC (tab_pack), child);
6811 button = gtk_button_new_with_label ("Hide Page");
6812 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 5);
6813 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6814 GTK_SIGNAL_FUNC (gtk_widget_hide),
6815 GTK_OBJECT (child));
6817 gtk_widget_show_all (child);
6819 label_box = gtk_hbox_new (FALSE, 0);
6820 pixwid = gtk_pixmap_new (book_closed, book_closed_mask);
6821 gtk_object_set_data (GTK_OBJECT (child), "tab_pixmap", pixwid);
6823 gtk_box_pack_start (GTK_BOX (label_box), pixwid, FALSE, TRUE, 0);
6824 gtk_misc_set_padding (GTK_MISC (pixwid), 3, 1);
6825 label = gtk_label_new (buffer);
6826 gtk_box_pack_start (GTK_BOX (label_box), label, FALSE, TRUE, 0);
6827 gtk_widget_show_all (label_box);
6830 menu_box = gtk_hbox_new (FALSE, 0);
6831 pixwid = gtk_pixmap_new (book_closed, book_closed_mask);
6832 gtk_object_set_data (GTK_OBJECT (child), "menu_pixmap", pixwid);
6834 gtk_box_pack_start (GTK_BOX (menu_box), pixwid, FALSE, TRUE, 0);
6835 gtk_misc_set_padding (GTK_MISC (pixwid), 3, 1);
6836 label = gtk_label_new (buffer);
6837 gtk_box_pack_start (GTK_BOX (menu_box), label, FALSE, TRUE, 0);
6838 gtk_widget_show_all (menu_box);
6840 gtk_notebook_append_page_menu (notebook, child, label_box, menu_box);
6845 rotate_notebook (GtkButton *button,
6846 GtkNotebook *notebook)
6848 gtk_notebook_set_tab_pos (notebook, (notebook->tab_pos + 1) % 4);
6852 show_all_pages (GtkButton *button,
6853 GtkNotebook *notebook)
6855 gtk_container_foreach (GTK_CONTAINER (notebook),
6856 (GtkCallback) gtk_widget_show, NULL);
6860 standard_notebook (GtkButton *button,
6861 GtkNotebook *notebook)
6865 gtk_notebook_set_show_tabs (notebook, TRUE);
6866 gtk_notebook_set_show_border (notebook, TRUE);
6867 gtk_notebook_set_scrollable (notebook, FALSE);
6868 if (g_list_length (notebook->children) == 15)
6869 for (i = 0; i < 10; i++)
6870 gtk_notebook_remove_page (notebook, 5);
6874 notabs_notebook (GtkButton *button,
6875 GtkNotebook *notebook)
6879 gtk_notebook_set_show_tabs (notebook, FALSE);
6880 gtk_notebook_set_show_border (notebook, TRUE);
6881 if (g_list_length (notebook->children) == 15)
6882 for (i = 0; i < 10; i++)
6883 gtk_notebook_remove_page (notebook, 5);
6887 borderless_notebook (GtkButton *button,
6888 GtkNotebook *notebook)
6892 gtk_notebook_set_show_tabs (notebook, FALSE);
6893 gtk_notebook_set_show_border (notebook, FALSE);
6894 if (g_list_length (notebook->children) == 15)
6895 for (i = 0; i < 10; i++)
6896 gtk_notebook_remove_page (notebook, 5);
6900 scrollable_notebook (GtkButton *button,
6901 GtkNotebook *notebook)
6903 gtk_notebook_set_show_tabs (notebook, TRUE);
6904 gtk_notebook_set_show_border (notebook, TRUE);
6905 gtk_notebook_set_scrollable (notebook, TRUE);
6906 if (g_list_length (notebook->children) == 5)
6907 create_pages (notebook, 6, 15);
6911 notebook_popup (GtkToggleButton *button,
6912 GtkNotebook *notebook)
6915 gtk_notebook_popup_enable (notebook);
6917 gtk_notebook_popup_disable (notebook);
6921 notebook_homogeneous (GtkToggleButton *button,
6922 GtkNotebook *notebook)
6924 gtk_notebook_set_homogeneous_tabs (notebook, button->active);
6928 create_notebook (void)
6930 static GtkWidget *window = NULL;
6934 GtkWidget *separator;
6936 GdkColor *transparent = NULL;
6939 static OptionMenuItem items[] =
6941 { "Standard", standard_notebook },
6942 { "No tabs", notabs_notebook },
6943 { "Borderless", borderless_notebook },
6944 { "Scrollable", scrollable_notebook },
6949 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6951 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6952 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6955 gtk_window_set_title (GTK_WINDOW (window), "notebook");
6956 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6958 box1 = gtk_vbox_new (FALSE, 0);
6959 gtk_container_add (GTK_CONTAINER (window), box1);
6961 sample_notebook = gtk_notebook_new ();
6962 gtk_signal_connect (GTK_OBJECT (sample_notebook), "switch_page",
6963 GTK_SIGNAL_FUNC (page_switch), NULL);
6964 gtk_notebook_set_tab_pos (GTK_NOTEBOOK (sample_notebook), GTK_POS_TOP);
6965 gtk_box_pack_start (GTK_BOX (box1), sample_notebook, TRUE, TRUE, 0);
6966 gtk_container_set_border_width (GTK_CONTAINER (sample_notebook), 10);
6968 gtk_widget_realize (sample_notebook);
6970 book_open = gdk_pixmap_create_from_xpm_d (sample_notebook->window,
6975 book_closed = gdk_pixmap_create_from_xpm_d (sample_notebook->window,
6980 create_pages (GTK_NOTEBOOK (sample_notebook), 1, 5);
6982 separator = gtk_hseparator_new ();
6983 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 10);
6985 box2 = gtk_hbox_new (FALSE, 5);
6986 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6987 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6989 button = gtk_check_button_new_with_label ("popup menu");
6990 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, FALSE, 0);
6991 gtk_signal_connect (GTK_OBJECT(button), "clicked",
6992 GTK_SIGNAL_FUNC (notebook_popup),
6993 GTK_OBJECT (sample_notebook));
6995 button = gtk_check_button_new_with_label ("homogeneous tabs");
6996 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, FALSE, 0);
6997 gtk_signal_connect (GTK_OBJECT(button), "clicked",
6998 GTK_SIGNAL_FUNC (notebook_homogeneous),
6999 GTK_OBJECT (sample_notebook));
7001 box2 = gtk_hbox_new (FALSE, 5);
7002 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
7003 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
7005 label = gtk_label_new ("Notebook Style :");
7006 gtk_box_pack_start (GTK_BOX (box2), label, FALSE, TRUE, 0);
7008 omenu = build_option_menu (items, G_N_ELEMENTS (items), 0, sample_notebook);
7009 gtk_box_pack_start (GTK_BOX (box2), omenu, FALSE, TRUE, 0);
7011 button = gtk_button_new_with_label ("Show all Pages");
7012 gtk_box_pack_start (GTK_BOX (box2), button, FALSE, TRUE, 0);
7013 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7014 GTK_SIGNAL_FUNC (show_all_pages), sample_notebook);
7016 box2 = gtk_hbox_new (TRUE, 10);
7017 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
7018 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
7020 button = gtk_button_new_with_label ("prev");
7021 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7022 GTK_SIGNAL_FUNC (gtk_notebook_prev_page),
7023 GTK_OBJECT (sample_notebook));
7024 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
7026 button = gtk_button_new_with_label ("next");
7027 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7028 GTK_SIGNAL_FUNC (gtk_notebook_next_page),
7029 GTK_OBJECT (sample_notebook));
7030 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
7032 button = gtk_button_new_with_label ("rotate");
7033 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7034 GTK_SIGNAL_FUNC (rotate_notebook), sample_notebook);
7035 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
7037 separator = gtk_hseparator_new ();
7038 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 5);
7040 button = gtk_button_new_with_label ("close");
7041 gtk_container_set_border_width (GTK_CONTAINER (button), 5);
7042 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7043 GTK_SIGNAL_FUNC (gtk_widget_destroy),
7044 GTK_OBJECT (window));
7045 gtk_box_pack_start (GTK_BOX (box1), button, FALSE, FALSE, 0);
7046 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7047 gtk_widget_grab_default (button);
7050 if (!GTK_WIDGET_VISIBLE (window))
7051 gtk_widget_show_all (window);
7053 gtk_widget_destroy (window);
7061 toggle_resize (GtkWidget *widget, GtkWidget *child)
7063 GtkPaned *paned = GTK_PANED (child->parent);
7064 gboolean is_child1 = (child == paned->child1);
7065 gboolean resize, shrink;
7067 resize = is_child1 ? paned->child1_resize : paned->child2_resize;
7068 shrink = is_child1 ? paned->child1_shrink : paned->child2_shrink;
7070 gtk_widget_ref (child);
7071 gtk_container_remove (GTK_CONTAINER (child->parent), child);
7073 gtk_paned_pack1 (paned, child, !resize, shrink);
7075 gtk_paned_pack2 (paned, child, !resize, shrink);
7076 gtk_widget_unref (child);
7080 toggle_shrink (GtkWidget *widget, GtkWidget *child)
7082 GtkPaned *paned = GTK_PANED (child->parent);
7083 gboolean is_child1 = (child == paned->child1);
7084 gboolean resize, shrink;
7086 resize = is_child1 ? paned->child1_resize : paned->child2_resize;
7087 shrink = is_child1 ? paned->child1_shrink : paned->child2_shrink;
7089 gtk_widget_ref (child);
7090 gtk_container_remove (GTK_CONTAINER (child->parent), child);
7092 gtk_paned_pack1 (paned, child, resize, !shrink);
7094 gtk_paned_pack2 (paned, child, resize, !shrink);
7095 gtk_widget_unref (child);
7099 create_pane_options (GtkPaned *paned,
7100 const gchar *frame_label,
7101 const gchar *label1,
7102 const gchar *label2)
7107 GtkWidget *check_button;
7109 frame = gtk_frame_new (frame_label);
7110 gtk_container_set_border_width (GTK_CONTAINER (frame), 4);
7112 table = gtk_table_new (3, 2, 4);
7113 gtk_container_add (GTK_CONTAINER (frame), table);
7115 label = gtk_label_new (label1);
7116 gtk_table_attach_defaults (GTK_TABLE (table), label,
7119 check_button = gtk_check_button_new_with_label ("Resize");
7120 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
7122 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
7123 GTK_SIGNAL_FUNC (toggle_resize),
7126 check_button = gtk_check_button_new_with_label ("Shrink");
7127 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
7129 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
7131 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
7132 GTK_SIGNAL_FUNC (toggle_shrink),
7135 label = gtk_label_new (label2);
7136 gtk_table_attach_defaults (GTK_TABLE (table), label,
7139 check_button = gtk_check_button_new_with_label ("Resize");
7140 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
7142 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
7144 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
7145 GTK_SIGNAL_FUNC (toggle_resize),
7148 check_button = gtk_check_button_new_with_label ("Shrink");
7149 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
7151 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
7153 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
7154 GTK_SIGNAL_FUNC (toggle_shrink),
7163 static GtkWidget *window = NULL;
7172 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7174 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7175 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7178 gtk_window_set_title (GTK_WINDOW (window), "Panes");
7179 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
7181 vbox = gtk_vbox_new (FALSE, 0);
7182 gtk_container_add (GTK_CONTAINER (window), vbox);
7184 vpaned = gtk_vpaned_new ();
7185 gtk_box_pack_start (GTK_BOX (vbox), vpaned, TRUE, TRUE, 0);
7186 gtk_container_set_border_width (GTK_CONTAINER(vpaned), 5);
7188 hpaned = gtk_hpaned_new ();
7189 gtk_paned_add1 (GTK_PANED (vpaned), hpaned);
7191 frame = gtk_frame_new (NULL);
7192 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
7193 gtk_widget_set_usize (frame, 60, 60);
7194 gtk_paned_add1 (GTK_PANED (hpaned), frame);
7196 button = gtk_button_new_with_label ("Hi there");
7197 gtk_container_add (GTK_CONTAINER(frame), button);
7199 frame = gtk_frame_new (NULL);
7200 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
7201 gtk_widget_set_usize (frame, 80, 60);
7202 gtk_paned_add2 (GTK_PANED (hpaned), frame);
7204 frame = gtk_frame_new (NULL);
7205 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
7206 gtk_widget_set_usize (frame, 60, 80);
7207 gtk_paned_add2 (GTK_PANED (vpaned), frame);
7209 /* Now create toggle buttons to control sizing */
7211 gtk_box_pack_start (GTK_BOX (vbox),
7212 create_pane_options (GTK_PANED (hpaned),
7218 gtk_box_pack_start (GTK_BOX (vbox),
7219 create_pane_options (GTK_PANED (vpaned),
7225 gtk_widget_show_all (vbox);
7228 if (!GTK_WIDGET_VISIBLE (window))
7229 gtk_widget_show (window);
7231 gtk_widget_destroy (window);
7240 dnd_drop_destroy_popup (GtkWidget *widget, GtkWindow **window)
7242 if(GTK_IS_BUTTON(widget)) /* I.e. they clicked the close button */
7243 gtk_widget_destroy(GTK_WIDGET(*window));
7245 gtk_grab_remove(GTK_WIDGET(*window));
7253 dnd_drop (GtkWidget *button, GdkEvent *event)
7255 static GtkWidget *window = NULL;
7256 GtkWidget *vbox, *lbl, *btn;
7259 /* DND doesn't obey gtk_grab's, so check if we're already displaying
7260 * drop modal dialog first
7265 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
7266 gtk_container_set_border_width (GTK_CONTAINER(window), 10);
7268 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7269 GTK_SIGNAL_FUNC(dnd_drop_destroy_popup),
7271 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
7272 GTK_SIGNAL_FUNC(gtk_false),
7275 vbox = gtk_vbox_new(FALSE, 5);
7277 /* Display message that we got from drop source */
7278 msg = g_malloc(strlen(event->dropdataavailable.data)
7279 + strlen(event->dropdataavailable.data_type) + 100);
7280 sprintf(msg, "Drop data of type %s was:\n\n%s",
7281 event->dropdataavailable.data_type,
7282 (char *)event->dropdataavailable.data);
7283 lbl = gtk_label_new(msg);
7284 gtk_label_set_justify(GTK_LABEL(lbl), GTK_JUSTIFY_FILL);
7286 gtk_widget_show(lbl);
7287 gtk_box_pack_start_defaults(GTK_BOX(vbox), lbl);
7289 /* Provide an obvious way out of this heinousness */
7290 btn = gtk_button_new_with_label("Continue with life in\nspite of this oppression");
7291 gtk_signal_connect_object (GTK_OBJECT (btn), "clicked",
7292 GTK_SIGNAL_FUNC(gtk_widget_destroy),
7293 GTK_OBJECT (window));
7294 gtk_widget_show(btn);
7295 gtk_box_pack_start_defaults(GTK_BOX(vbox), btn);
7297 gtk_container_add(GTK_CONTAINER(window), vbox);
7299 gtk_widget_show(vbox);
7300 gtk_grab_add(window);
7301 gtk_widget_show(window);
7305 dnd_drag_request (GtkWidget *button, GdkEvent *event)
7307 #define DND_STRING "Bill Gates demands royalties for\nyour use of his innovation."
7308 gtk_widget_dnd_data_set (button, event, DND_STRING, strlen(DND_STRING) + 1);
7314 static GtkWidget *window = NULL;
7320 GtkWidget *separator;
7322 /* For clarity... */
7323 char *possible_drag_types[] = {"text/plain"};
7324 char *accepted_drop_types[] = {"text/plain"};
7326 static GtkWidget *drag_icon = NULL;
7327 static GtkWidget *drop_icon = NULL;
7331 GdkPoint hotspot = {5,5};
7335 drag_icon = shape_create_icon ("Modeller.xpm",
7336 440, 140, 0,0, GTK_WINDOW_POPUP);
7338 gtk_signal_connect (GTK_OBJECT (drag_icon), "destroy",
7339 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7342 gtk_widget_hide (drag_icon);
7347 drop_icon = shape_create_icon ("3DRings.xpm",
7348 440, 140, 0,0, GTK_WINDOW_POPUP);
7350 gtk_signal_connect (GTK_OBJECT (drop_icon), "destroy",
7351 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7354 gtk_widget_hide (drop_icon);
7357 gdk_dnd_set_drag_shape(drag_icon->window,
7362 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7364 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7365 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7368 gtk_window_set_title (GTK_WINDOW (window), "Drag -N- Drop");
7369 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
7371 box1 = gtk_vbox_new (FALSE, 0);
7372 gtk_container_add (GTK_CONTAINER (window), box1);
7373 gtk_widget_show (box1);
7375 box2 = gtk_hbox_new (FALSE, 5);
7376 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
7377 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
7378 gtk_widget_show (box2);
7380 frame = gtk_frame_new ("Drag");
7381 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
7382 gtk_widget_show (frame);
7384 box3 = gtk_vbox_new (FALSE, 5);
7385 gtk_container_set_border_width (GTK_CONTAINER (box3), 5);
7386 gtk_container_add (GTK_CONTAINER (frame), box3);
7387 gtk_widget_show (box3);
7392 button = gtk_button_new_with_label ("Drag me!");
7393 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
7394 gtk_widget_show (button);
7397 * currently, the widget has to be realized to
7398 * set dnd on it, this needs to change
7400 gtk_widget_realize (button);
7401 gtk_signal_connect (GTK_OBJECT (button),
7402 "drag_request_event",
7403 GTK_SIGNAL_FUNC(dnd_drag_request),
7406 gtk_widget_dnd_drag_set (button, TRUE, possible_drag_types, 1);
7409 frame = gtk_frame_new ("Drop");
7410 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
7411 gtk_widget_show (frame);
7413 box3 = gtk_vbox_new (FALSE, 5);
7414 gtk_container_set_border_width (GTK_CONTAINER (box3), 5);
7415 gtk_container_add (GTK_CONTAINER (frame), box3);
7416 gtk_widget_show (box3);
7422 button = gtk_button_new_with_label ("To");
7423 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
7424 gtk_widget_show (button);
7426 gtk_widget_realize (button);
7427 gtk_signal_connect (GTK_OBJECT (button),
7428 "drop_data_available_event",
7429 GTK_SIGNAL_FUNC(dnd_drop),
7432 gtk_widget_dnd_drop_set (button, TRUE, accepted_drop_types, 1, FALSE);
7435 separator = gtk_hseparator_new ();
7436 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
7437 gtk_widget_show (separator);
7440 box2 = gtk_vbox_new (FALSE, 10);
7441 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
7442 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
7443 gtk_widget_show (box2);
7446 button = gtk_button_new_with_label ("close");
7448 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7449 GTK_SIGNAL_FUNC(gtk_widget_destroy),
7450 GTK_OBJECT (window));
7452 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
7453 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7454 gtk_widget_grab_default (button);
7455 gtk_widget_show (button);
7458 if (!GTK_WIDGET_VISIBLE (window))
7459 gtk_widget_show (window);
7461 gtk_widget_destroy (window);
7469 typedef struct _cursoroffset {gint x,y;} CursorOffset;
7472 shape_pressed (GtkWidget *widget, GdkEventButton *event)
7476 /* ignore double and triple click */
7477 if (event->type != GDK_BUTTON_PRESS)
7480 p = gtk_object_get_user_data (GTK_OBJECT(widget));
7481 p->x = (int) event->x;
7482 p->y = (int) event->y;
7484 gtk_grab_add (widget);
7485 gdk_pointer_grab (widget->window, TRUE,
7486 GDK_BUTTON_RELEASE_MASK |
7487 GDK_BUTTON_MOTION_MASK |
7488 GDK_POINTER_MOTION_HINT_MASK,
7493 shape_released (GtkWidget *widget)
7495 gtk_grab_remove (widget);
7496 gdk_pointer_ungrab (0);
7500 shape_motion (GtkWidget *widget,
7501 GdkEventMotion *event)
7505 GdkModifierType mask;
7507 p = gtk_object_get_user_data (GTK_OBJECT (widget));
7510 * Can't use event->x / event->y here
7511 * because I need absolute coordinates.
7513 gdk_window_get_pointer (NULL, &xp, &yp, &mask);
7514 gtk_widget_set_uposition (widget, xp - p->x, yp - p->y);
7518 shape_create_icon (char *xpm_file,
7528 CursorOffset* icon_pos;
7530 GdkBitmap *gdk_pixmap_mask;
7531 GdkPixmap *gdk_pixmap;
7534 style = gtk_widget_get_default_style ();
7535 gc = style->black_gc;
7538 * GDK_WINDOW_TOPLEVEL works also, giving you a title border
7540 window = gtk_window_new (window_type);
7542 fixed = gtk_fixed_new ();
7543 gtk_widget_set_usize (fixed, 100,100);
7544 gtk_container_add (GTK_CONTAINER (window), fixed);
7545 gtk_widget_show (fixed);
7547 gtk_widget_set_events (window,
7548 gtk_widget_get_events (window) |
7549 GDK_BUTTON_MOTION_MASK |
7550 GDK_POINTER_MOTION_HINT_MASK |
7551 GDK_BUTTON_PRESS_MASK);
7553 gtk_widget_realize (window);
7554 gdk_pixmap = gdk_pixmap_create_from_xpm (window->window, &gdk_pixmap_mask,
7555 &style->bg[GTK_STATE_NORMAL],
7558 pixmap = gtk_pixmap_new (gdk_pixmap, gdk_pixmap_mask);
7559 gtk_fixed_put (GTK_FIXED (fixed), pixmap, px,py);
7560 gtk_widget_show (pixmap);
7562 gtk_widget_shape_combine_mask (window, gdk_pixmap_mask, px, py);
7564 gdk_drawable_unref (gdk_pixmap_mask);
7565 gdk_drawable_unref (gdk_pixmap);
7567 gtk_signal_connect (GTK_OBJECT (window), "button_press_event",
7568 GTK_SIGNAL_FUNC (shape_pressed),NULL);
7569 gtk_signal_connect (GTK_OBJECT (window), "button_release_event",
7570 GTK_SIGNAL_FUNC (shape_released),NULL);
7571 gtk_signal_connect (GTK_OBJECT (window), "motion_notify_event",
7572 GTK_SIGNAL_FUNC (shape_motion),NULL);
7574 icon_pos = g_new (CursorOffset, 1);
7575 gtk_object_set_user_data(GTK_OBJECT(window), icon_pos);
7577 gtk_widget_set_uposition (window, x, y);
7578 gtk_widget_show (window);
7584 create_shapes (void)
7586 /* Variables used by the Drag/Drop and Shape Window demos */
7587 static GtkWidget *modeller = NULL;
7588 static GtkWidget *sheets = NULL;
7589 static GtkWidget *rings = NULL;
7590 static GtkWidget *with_region = NULL;
7592 if (!(file_exists ("Modeller.xpm") &&
7593 file_exists ("FilesQueue.xpm") &&
7594 file_exists ("3DRings.xpm")))
7600 modeller = shape_create_icon ("Modeller.xpm",
7601 440, 140, 0,0, GTK_WINDOW_POPUP);
7603 gtk_signal_connect (GTK_OBJECT (modeller), "destroy",
7604 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7608 gtk_widget_destroy (modeller);
7612 sheets = shape_create_icon ("FilesQueue.xpm",
7613 580, 170, 0,0, GTK_WINDOW_POPUP);
7615 gtk_signal_connect (GTK_OBJECT (sheets), "destroy",
7616 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7621 gtk_widget_destroy (sheets);
7625 rings = shape_create_icon ("3DRings.xpm",
7626 460, 270, 25,25, GTK_WINDOW_TOPLEVEL);
7628 gtk_signal_connect (GTK_OBJECT (rings), "destroy",
7629 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7633 gtk_widget_destroy (rings);
7640 with_region = shape_create_icon ("3DRings.xpm",
7641 460, 270, 25,25, GTK_WINDOW_TOPLEVEL);
7643 gtk_window_set_decorated (GTK_WINDOW (with_region), FALSE);
7645 gtk_signal_connect (GTK_OBJECT (with_region), "destroy",
7646 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7649 /* reset shape from mask to a region */
7652 region = gdk_region_new ();
7664 gdk_region_union_with_rect (region, &rect);
7672 gdk_window_shape_combine_region (with_region->window,
7677 gtk_widget_destroy (with_region);
7685 create_wmhints (void)
7687 static GtkWidget *window = NULL;
7689 GtkWidget *separator;
7698 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7700 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7701 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7704 gtk_window_set_title (GTK_WINDOW (window), "WM Hints");
7705 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
7707 gtk_widget_realize (window);
7709 circles = gdk_bitmap_create_from_data (window->window,
7713 gdk_window_set_icon (window->window, NULL,
7716 gdk_window_set_icon_name (window->window, "WMHints Test Icon");
7718 gdk_window_set_decorations (window->window, GDK_DECOR_ALL | GDK_DECOR_MENU);
7719 gdk_window_set_functions (window->window, GDK_FUNC_ALL | GDK_FUNC_RESIZE);
7721 box1 = gtk_vbox_new (FALSE, 0);
7722 gtk_container_add (GTK_CONTAINER (window), box1);
7723 gtk_widget_show (box1);
7725 label = gtk_label_new ("Try iconizing me!");
7726 gtk_widget_set_usize (label, 150, 50);
7727 gtk_box_pack_start (GTK_BOX (box1), label, TRUE, TRUE, 0);
7728 gtk_widget_show (label);
7731 separator = gtk_hseparator_new ();
7732 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
7733 gtk_widget_show (separator);
7736 box2 = gtk_vbox_new (FALSE, 10);
7737 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
7738 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
7739 gtk_widget_show (box2);
7742 button = gtk_button_new_with_label ("close");
7744 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7745 GTK_SIGNAL_FUNC(gtk_widget_destroy),
7746 GTK_OBJECT (window));
7748 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
7749 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7750 gtk_widget_grab_default (button);
7751 gtk_widget_show (button);
7754 if (!GTK_WIDGET_VISIBLE (window))
7755 gtk_widget_show (window);
7757 gtk_widget_destroy (window);
7762 * Window state tracking
7766 window_state_callback (GtkWidget *widget,
7767 GdkEventWindowState *event,
7770 GtkWidget *label = data;
7773 msg = g_strconcat (GTK_WINDOW (widget)->title, ": ",
7774 (event->new_window_state & GDK_WINDOW_STATE_WITHDRAWN) ?
7775 "withdrawn" : "not withdrawn", ", ",
7776 (event->new_window_state & GDK_WINDOW_STATE_ICONIFIED) ?
7777 "iconified" : "not iconified", ", ",
7778 (event->new_window_state & GDK_WINDOW_STATE_STICKY) ?
7779 "sticky" : "not sticky", ", ",
7780 (event->new_window_state & GDK_WINDOW_STATE_MAXIMIZED) ?
7781 "maximized" : "not maximized",
7784 gtk_label_set_text (GTK_LABEL (label), msg);
7792 tracking_label (GtkWidget *window)
7798 hbox = gtk_hbox_new (FALSE, 5);
7800 gtk_signal_connect_object (GTK_OBJECT (hbox),
7802 GTK_SIGNAL_FUNC (gtk_widget_destroy),
7803 GTK_OBJECT (window));
7805 label = gtk_label_new ("<no window state events received>");
7806 gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
7807 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
7809 gtk_signal_connect (GTK_OBJECT (window),
7810 "window_state_event",
7811 GTK_SIGNAL_FUNC (window_state_callback),
7814 button = gtk_button_new_with_label ("Deiconify");
7815 gtk_signal_connect_object (GTK_WIDGET (button),
7817 GTK_SIGNAL_FUNC (gtk_window_deiconify),
7818 GTK_OBJECT (window));
7819 gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
7821 button = gtk_button_new_with_label ("Iconify");
7822 gtk_signal_connect_object (GTK_WIDGET (button),
7824 GTK_SIGNAL_FUNC (gtk_window_iconify),
7825 GTK_OBJECT (window));
7826 gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
7828 button = gtk_button_new_with_label ("Present");
7829 gtk_signal_connect_object (GTK_WIDGET (button),
7831 GTK_SIGNAL_FUNC (gtk_window_present),
7832 GTK_OBJECT (window));
7833 gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
7835 button = gtk_button_new_with_label ("Show");
7836 gtk_signal_connect_object (GTK_WIDGET (button),
7838 GTK_SIGNAL_FUNC (gtk_widget_show),
7839 GTK_OBJECT (window));
7840 gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
7842 gtk_widget_show_all (hbox);
7848 get_state_controls (GtkWidget *window)
7853 vbox = gtk_vbox_new (FALSE, 0);
7855 button = gtk_button_new_with_label ("Stick");
7856 gtk_signal_connect_object (GTK_WIDGET (button),
7858 GTK_SIGNAL_FUNC (gtk_window_stick),
7859 GTK_OBJECT (window));
7860 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
7862 button = gtk_button_new_with_label ("Unstick");
7863 gtk_signal_connect_object (GTK_WIDGET (button),
7865 GTK_SIGNAL_FUNC (gtk_window_unstick),
7866 GTK_OBJECT (window));
7867 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
7869 button = gtk_button_new_with_label ("Maximize");
7870 gtk_signal_connect_object (GTK_WIDGET (button),
7872 GTK_SIGNAL_FUNC (gtk_window_maximize),
7873 GTK_OBJECT (window));
7874 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
7876 button = gtk_button_new_with_label ("Unmaximize");
7877 gtk_signal_connect_object (GTK_WIDGET (button),
7879 GTK_SIGNAL_FUNC (gtk_window_unmaximize),
7880 GTK_OBJECT (window));
7881 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
7883 button = gtk_button_new_with_label ("Iconify");
7884 gtk_signal_connect_object (GTK_WIDGET (button),
7886 GTK_SIGNAL_FUNC (gtk_window_iconify),
7887 GTK_OBJECT (window));
7888 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
7890 button = gtk_button_new_with_label ("Hide (withdraw)");
7891 gtk_signal_connect_object (GTK_WIDGET (button),
7893 GTK_SIGNAL_FUNC (gtk_widget_hide),
7894 GTK_OBJECT (window));
7895 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
7897 gtk_widget_show_all (vbox);
7903 create_window_states (void)
7905 static GtkWidget *window = NULL;
7908 GtkWidget *iconified;
7910 GtkWidget *controls;
7914 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7916 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7917 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7920 gtk_window_set_title (GTK_WINDOW (window), "Window states");
7922 box1 = gtk_vbox_new (FALSE, 0);
7923 gtk_container_add (GTK_CONTAINER (window), box1);
7925 iconified = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7926 gtk_window_iconify (iconified);
7927 gtk_window_set_title (GTK_WINDOW (iconified), "Iconified initially");
7928 controls = get_state_controls (iconified);
7929 gtk_container_add (GTK_CONTAINER (iconified), controls);
7931 normal = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7932 gtk_window_set_title (GTK_WINDOW (normal), "Deiconified initially");
7933 controls = get_state_controls (normal);
7934 gtk_container_add (GTK_CONTAINER (normal), controls);
7936 label = tracking_label (iconified);
7937 gtk_container_add (GTK_CONTAINER (box1), label);
7939 label = tracking_label (normal);
7940 gtk_container_add (GTK_CONTAINER (box1), label);
7942 gtk_widget_show_all (iconified);
7943 gtk_widget_show_all (normal);
7944 gtk_widget_show_all (box1);
7947 if (!GTK_WIDGET_VISIBLE (window))
7948 gtk_widget_show (window);
7950 gtk_widget_destroy (window);
7957 typedef struct _ProgressData {
7960 GtkWidget *block_spin;
7961 GtkWidget *x_align_spin;
7962 GtkWidget *y_align_spin;
7963 GtkWidget *step_spin;
7964 GtkWidget *act_blocks_spin;
7973 progress_timeout (gpointer data)
7978 adj = GTK_PROGRESS (data)->adjustment;
7980 new_val = adj->value + 1;
7981 if (new_val > adj->upper)
7982 new_val = adj->lower;
7984 gtk_progress_set_value (GTK_PROGRESS (data), new_val);
7990 destroy_progress (GtkWidget *widget,
7991 ProgressData **pdata)
7993 gtk_timeout_remove ((*pdata)->timer);
7994 (*pdata)->timer = 0;
7995 (*pdata)->window = NULL;
8001 progressbar_toggle_orientation (GtkWidget *widget, ProgressData *pdata)
8005 if (!GTK_WIDGET_MAPPED (widget))
8008 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
8009 (((GtkOptionMenu *)(pdata->omenu1))->menu_item), i);
8011 gtk_progress_bar_set_orientation (GTK_PROGRESS_BAR (pdata->pbar),
8012 (GtkProgressBarOrientation) (3-i));
8016 toggle_show_text (GtkWidget *widget, ProgressData *pdata)
8018 gtk_progress_set_show_text (GTK_PROGRESS (pdata->pbar),
8019 GTK_TOGGLE_BUTTON (widget)->active);
8020 gtk_widget_set_sensitive (pdata->entry, GTK_TOGGLE_BUTTON (widget)->active);
8021 gtk_widget_set_sensitive (pdata->x_align_spin,
8022 GTK_TOGGLE_BUTTON (widget)->active);
8023 gtk_widget_set_sensitive (pdata->y_align_spin,
8024 GTK_TOGGLE_BUTTON (widget)->active);
8028 progressbar_toggle_bar_style (GtkWidget *widget, ProgressData *pdata)
8032 if (!GTK_WIDGET_MAPPED (widget))
8035 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
8036 (((GtkOptionMenu *)(pdata->omenu2))->menu_item), i);
8041 gtk_widget_set_sensitive (pdata->block_spin, TRUE);
8043 gtk_widget_set_sensitive (pdata->block_spin, FALSE);
8045 gtk_progress_bar_set_bar_style (GTK_PROGRESS_BAR (pdata->pbar),
8046 (GtkProgressBarStyle) i);
8050 progress_value_changed (GtkAdjustment *adj, ProgressData *pdata)
8054 if (GTK_PROGRESS (pdata->pbar)->activity_mode)
8055 sprintf (buf, "???");
8057 sprintf (buf, "%.0f%%", 100 *
8058 gtk_progress_get_current_percentage (GTK_PROGRESS (pdata->pbar)));
8059 gtk_label_set_text (GTK_LABEL (pdata->label), buf);
8063 adjust_blocks (GtkAdjustment *adj, ProgressData *pdata)
8065 gtk_progress_set_percentage (GTK_PROGRESS (pdata->pbar), 0);
8066 gtk_progress_bar_set_discrete_blocks (GTK_PROGRESS_BAR (pdata->pbar),
8067 gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (pdata->block_spin)));
8071 adjust_step (GtkAdjustment *adj, ProgressData *pdata)
8073 gtk_progress_bar_set_activity_step (GTK_PROGRESS_BAR (pdata->pbar),
8074 gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (pdata->step_spin)));
8078 adjust_act_blocks (GtkAdjustment *adj, ProgressData *pdata)
8080 gtk_progress_bar_set_activity_blocks (GTK_PROGRESS_BAR (pdata->pbar),
8081 gtk_spin_button_get_value_as_int
8082 (GTK_SPIN_BUTTON (pdata->act_blocks_spin)));
8086 adjust_align (GtkAdjustment *adj, ProgressData *pdata)
8088 gtk_progress_set_text_alignment (GTK_PROGRESS (pdata->pbar),
8089 gtk_spin_button_get_value_as_float
8090 (GTK_SPIN_BUTTON (pdata->x_align_spin)),
8091 gtk_spin_button_get_value_as_float
8092 (GTK_SPIN_BUTTON (pdata->y_align_spin)));
8096 toggle_activity_mode (GtkWidget *widget, ProgressData *pdata)
8098 gtk_progress_set_activity_mode (GTK_PROGRESS (pdata->pbar),
8099 GTK_TOGGLE_BUTTON (widget)->active);
8100 gtk_widget_set_sensitive (pdata->step_spin,
8101 GTK_TOGGLE_BUTTON (widget)->active);
8102 gtk_widget_set_sensitive (pdata->act_blocks_spin,
8103 GTK_TOGGLE_BUTTON (widget)->active);
8107 entry_changed (GtkWidget *widget, ProgressData *pdata)
8109 gtk_progress_set_format_string (GTK_PROGRESS (pdata->pbar),
8110 gtk_entry_get_text (GTK_ENTRY (pdata->entry)));
8114 create_progress_bar (void)
8126 static ProgressData *pdata = NULL;
8128 static OptionMenuItem items1[] =
8130 { "Left-Right", progressbar_toggle_orientation },
8131 { "Right-Left", progressbar_toggle_orientation },
8132 { "Bottom-Top", progressbar_toggle_orientation },
8133 { "Top-Bottom", progressbar_toggle_orientation }
8136 static OptionMenuItem items2[] =
8138 { "Continuous", progressbar_toggle_bar_style },
8139 { "Discrete", progressbar_toggle_bar_style }
8143 pdata = g_new0 (ProgressData, 1);
8147 pdata->window = gtk_dialog_new ();
8149 gtk_window_set_policy (GTK_WINDOW (pdata->window), FALSE, FALSE, TRUE);
8151 gtk_signal_connect (GTK_OBJECT (pdata->window), "destroy",
8152 GTK_SIGNAL_FUNC (destroy_progress),
8157 gtk_window_set_title (GTK_WINDOW (pdata->window), "GtkProgressBar");
8158 gtk_container_set_border_width (GTK_CONTAINER (pdata->window), 0);
8160 vbox = gtk_vbox_new (FALSE, 5);
8161 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
8162 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (pdata->window)->vbox),
8163 vbox, FALSE, TRUE, 0);
8165 frame = gtk_frame_new ("Progress");
8166 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
8168 vbox2 = gtk_vbox_new (FALSE, 5);
8169 gtk_container_add (GTK_CONTAINER (frame), vbox2);
8171 align = gtk_alignment_new (0.5, 0.5, 0, 0);
8172 gtk_box_pack_start (GTK_BOX (vbox2), align, FALSE, FALSE, 5);
8174 adj = (GtkAdjustment *) gtk_adjustment_new (0, 1, 300, 0, 0, 0);
8175 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
8176 GTK_SIGNAL_FUNC (progress_value_changed), pdata);
8178 pdata->pbar = gtk_progress_bar_new_with_adjustment (adj);
8179 gtk_progress_set_format_string (GTK_PROGRESS (pdata->pbar),
8180 "%v from [%l,%u] (=%p%%)");
8181 gtk_container_add (GTK_CONTAINER (align), pdata->pbar);
8182 pdata->timer = gtk_timeout_add (100, progress_timeout, pdata->pbar);
8184 align = gtk_alignment_new (0.5, 0.5, 0, 0);
8185 gtk_box_pack_start (GTK_BOX (vbox2), align, FALSE, FALSE, 5);
8187 hbox = gtk_hbox_new (FALSE, 5);
8188 gtk_container_add (GTK_CONTAINER (align), hbox);
8189 label = gtk_label_new ("Label updated by user :");
8190 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
8191 pdata->label = gtk_label_new ("");
8192 gtk_box_pack_start (GTK_BOX (hbox), pdata->label, FALSE, TRUE, 0);
8194 frame = gtk_frame_new ("Options");
8195 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
8197 vbox2 = gtk_vbox_new (FALSE, 5);
8198 gtk_container_add (GTK_CONTAINER (frame), vbox2);
8200 tab = gtk_table_new (7, 2, FALSE);
8201 gtk_box_pack_start (GTK_BOX (vbox2), tab, FALSE, TRUE, 0);
8203 label = gtk_label_new ("Orientation :");
8204 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 0, 1,
8205 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8207 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
8209 pdata->omenu1 = build_option_menu (items1, 4, 0, pdata);
8210 hbox = gtk_hbox_new (FALSE, 0);
8211 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 0, 1,
8212 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8214 gtk_box_pack_start (GTK_BOX (hbox), pdata->omenu1, TRUE, TRUE, 0);
8216 check = gtk_check_button_new_with_label ("Show text");
8217 gtk_signal_connect (GTK_OBJECT (check), "clicked",
8218 GTK_SIGNAL_FUNC (toggle_show_text),
8220 gtk_table_attach (GTK_TABLE (tab), check, 0, 1, 1, 2,
8221 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8224 hbox = gtk_hbox_new (FALSE, 0);
8225 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 1, 2,
8226 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8229 label = gtk_label_new ("Format : ");
8230 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
8232 pdata->entry = gtk_entry_new ();
8233 gtk_signal_connect (GTK_OBJECT (pdata->entry), "changed",
8234 GTK_SIGNAL_FUNC (entry_changed),
8236 gtk_box_pack_start (GTK_BOX (hbox), pdata->entry, TRUE, TRUE, 0);
8237 gtk_entry_set_text (GTK_ENTRY (pdata->entry), "%v from [%l,%u] (=%p%%)");
8238 gtk_widget_set_usize (pdata->entry, 100, -1);
8239 gtk_widget_set_sensitive (pdata->entry, FALSE);
8241 label = gtk_label_new ("Text align :");
8242 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 2, 3,
8243 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8245 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
8247 hbox = gtk_hbox_new (FALSE, 0);
8248 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 2, 3,
8249 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8252 label = gtk_label_new ("x :");
8253 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 5);
8255 adj = (GtkAdjustment *) gtk_adjustment_new (0.5, 0, 1, 0.1, 0.1, 0);
8256 pdata->x_align_spin = gtk_spin_button_new (adj, 0, 1);
8257 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
8258 GTK_SIGNAL_FUNC (adjust_align), pdata);
8259 gtk_box_pack_start (GTK_BOX (hbox), pdata->x_align_spin, FALSE, TRUE, 0);
8260 gtk_widget_set_sensitive (pdata->x_align_spin, FALSE);
8262 label = gtk_label_new ("y :");
8263 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 5);
8265 adj = (GtkAdjustment *) gtk_adjustment_new (0.5, 0, 1, 0.1, 0.1, 0);
8266 pdata->y_align_spin = gtk_spin_button_new (adj, 0, 1);
8267 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
8268 GTK_SIGNAL_FUNC (adjust_align), pdata);
8269 gtk_box_pack_start (GTK_BOX (hbox), pdata->y_align_spin, FALSE, TRUE, 0);
8270 gtk_widget_set_sensitive (pdata->y_align_spin, FALSE);
8272 label = gtk_label_new ("Bar Style :");
8273 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 3, 4,
8274 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8276 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
8278 pdata->omenu2 = build_option_menu (items2, 2, 0, pdata);
8279 hbox = gtk_hbox_new (FALSE, 0);
8280 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 3, 4,
8281 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8283 gtk_box_pack_start (GTK_BOX (hbox), pdata->omenu2, TRUE, TRUE, 0);
8285 label = gtk_label_new ("Block count :");
8286 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 4, 5,
8287 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8289 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
8291 hbox = gtk_hbox_new (FALSE, 0);
8292 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 4, 5,
8293 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8295 adj = (GtkAdjustment *) gtk_adjustment_new (10, 2, 20, 1, 5, 0);
8296 pdata->block_spin = gtk_spin_button_new (adj, 0, 0);
8297 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
8298 GTK_SIGNAL_FUNC (adjust_blocks), pdata);
8299 gtk_box_pack_start (GTK_BOX (hbox), pdata->block_spin, FALSE, TRUE, 0);
8300 gtk_widget_set_sensitive (pdata->block_spin, FALSE);
8302 check = gtk_check_button_new_with_label ("Activity mode");
8303 gtk_signal_connect (GTK_OBJECT (check), "clicked",
8304 GTK_SIGNAL_FUNC (toggle_activity_mode),
8306 gtk_table_attach (GTK_TABLE (tab), check, 0, 1, 5, 6,
8307 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8310 hbox = gtk_hbox_new (FALSE, 0);
8311 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 5, 6,
8312 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8314 label = gtk_label_new ("Step size : ");
8315 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
8316 adj = (GtkAdjustment *) gtk_adjustment_new (3, 1, 20, 1, 5, 0);
8317 pdata->step_spin = gtk_spin_button_new (adj, 0, 0);
8318 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
8319 GTK_SIGNAL_FUNC (adjust_step), pdata);
8320 gtk_box_pack_start (GTK_BOX (hbox), pdata->step_spin, FALSE, TRUE, 0);
8321 gtk_widget_set_sensitive (pdata->step_spin, FALSE);
8323 hbox = gtk_hbox_new (FALSE, 0);
8324 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 6, 7,
8325 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8327 label = gtk_label_new ("Blocks : ");
8328 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
8329 adj = (GtkAdjustment *) gtk_adjustment_new (5, 2, 10, 1, 5, 0);
8330 pdata->act_blocks_spin = gtk_spin_button_new (adj, 0, 0);
8331 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
8332 GTK_SIGNAL_FUNC (adjust_act_blocks), pdata);
8333 gtk_box_pack_start (GTK_BOX (hbox), pdata->act_blocks_spin, FALSE, TRUE,
8335 gtk_widget_set_sensitive (pdata->act_blocks_spin, FALSE);
8337 button = gtk_button_new_with_label ("close");
8338 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
8339 GTK_SIGNAL_FUNC (gtk_widget_destroy),
8340 GTK_OBJECT (pdata->window));
8341 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8342 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (pdata->window)->action_area),
8343 button, TRUE, TRUE, 0);
8344 gtk_widget_grab_default (button);
8347 if (!GTK_WIDGET_VISIBLE (pdata->window))
8348 gtk_widget_show_all (pdata->window);
8350 gtk_widget_destroy (pdata->window);
8357 static int color_idle = 0;
8360 color_idle_func (GtkWidget *preview)
8362 static int count = 1;
8366 for (i = 0; i < 256; i++)
8368 for (j = 0, k = 0; j < 256; j++)
8370 buf[k+0] = i + count;
8372 buf[k+2] = j + count;
8376 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
8381 gtk_widget_draw (preview, NULL);
8387 color_preview_destroy (GtkWidget *widget,
8390 gtk_idle_remove (color_idle);
8397 create_color_preview (void)
8399 static GtkWidget *window = NULL;
8406 gtk_widget_push_colormap (gdk_rgb_get_cmap ());
8407 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
8408 gtk_widget_pop_colormap ();
8410 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8411 GTK_SIGNAL_FUNC(color_preview_destroy),
8414 gtk_window_set_title (GTK_WINDOW (window), "test");
8415 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
8417 preview = gtk_preview_new (GTK_PREVIEW_COLOR);
8418 gtk_preview_size (GTK_PREVIEW (preview), 256, 256);
8419 gtk_container_add (GTK_CONTAINER (window), preview);
8421 for (i = 0; i < 256; i++)
8423 for (j = 0, k = 0; j < 256; j++)
8431 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
8434 color_idle = gtk_idle_add ((GtkFunction) color_idle_func, preview);
8437 if (!GTK_WIDGET_VISIBLE (window))
8438 gtk_widget_show_all (window);
8440 gtk_widget_destroy (window);
8447 static int gray_idle = 0;
8450 gray_idle_func (GtkWidget *preview)
8452 static int count = 1;
8456 for (i = 0; i < 256; i++)
8458 for (j = 0; j < 256; j++)
8459 buf[j] = i + j + count;
8461 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
8466 gtk_widget_draw (preview, NULL);
8472 gray_preview_destroy (GtkWidget *widget,
8475 gtk_idle_remove (gray_idle);
8482 create_gray_preview (void)
8484 static GtkWidget *window = NULL;
8491 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
8493 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8494 GTK_SIGNAL_FUNC(gray_preview_destroy),
8497 gtk_window_set_title (GTK_WINDOW (window), "test");
8498 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
8500 preview = gtk_preview_new (GTK_PREVIEW_GRAYSCALE);
8501 gtk_preview_size (GTK_PREVIEW (preview), 256, 256);
8502 gtk_container_add (GTK_CONTAINER (window), preview);
8504 for (i = 0; i < 256; i++)
8506 for (j = 0; j < 256; j++)
8509 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
8512 gray_idle = gtk_idle_add ((GtkFunction) gray_idle_func, preview);
8515 if (!GTK_WIDGET_VISIBLE (window))
8516 gtk_widget_show_all (window);
8518 gtk_widget_destroy (window);
8527 selection_test_received (GtkWidget *list, GtkSelectionData *data)
8530 GtkWidget *list_item;
8534 if (data->length < 0)
8536 g_print ("Selection retrieval failed\n");
8539 if (data->type != GDK_SELECTION_TYPE_ATOM)
8541 g_print ("Selection \"TARGETS\" was not returned as atoms!\n");
8545 /* Clear out any current list items */
8547 gtk_list_clear_items (GTK_LIST(list), 0, -1);
8549 /* Add new items to list */
8551 atoms = (GdkAtom *)data->data;
8554 l = data->length / sizeof (GdkAtom);
8555 for (i = 0; i < l; i++)
8558 name = gdk_atom_name (atoms[i]);
8561 list_item = gtk_list_item_new_with_label (name);
8565 list_item = gtk_list_item_new_with_label ("(bad atom)");
8567 gtk_widget_show (list_item);
8568 item_list = g_list_append (item_list, list_item);
8571 gtk_list_append_items (GTK_LIST (list), item_list);
8577 selection_test_get_targets (GtkWidget *widget, GtkWidget *list)
8579 static GdkAtom targets_atom = GDK_NONE;
8581 if (targets_atom == GDK_NONE)
8582 targets_atom = gdk_atom_intern ("TARGETS", FALSE);
8584 gtk_selection_convert (list, GDK_SELECTION_PRIMARY, targets_atom,
8589 create_selection_test (void)
8591 static GtkWidget *window = NULL;
8594 GtkWidget *scrolled_win;
8600 window = gtk_dialog_new ();
8602 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8603 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
8606 gtk_window_set_title (GTK_WINDOW (window), "Selection Test");
8607 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
8609 /* Create the list */
8611 vbox = gtk_vbox_new (FALSE, 5);
8612 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
8613 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), vbox,
8616 label = gtk_label_new ("Gets available targets for current selection");
8617 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
8619 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
8620 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
8621 GTK_POLICY_AUTOMATIC,
8622 GTK_POLICY_AUTOMATIC);
8623 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
8624 gtk_widget_set_usize (scrolled_win, 100, 200);
8626 list = gtk_list_new ();
8627 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_win), list);
8629 gtk_signal_connect (GTK_OBJECT(list), "selection_received",
8630 GTK_SIGNAL_FUNC (selection_test_received), NULL);
8632 /* .. And create some buttons */
8633 button = gtk_button_new_with_label ("Get Targets");
8634 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8635 button, TRUE, TRUE, 0);
8637 gtk_signal_connect (GTK_OBJECT (button), "clicked",
8638 GTK_SIGNAL_FUNC (selection_test_get_targets), list);
8640 button = gtk_button_new_with_label ("Quit");
8641 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8642 button, TRUE, TRUE, 0);
8644 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
8645 GTK_SIGNAL_FUNC (gtk_widget_destroy),
8646 GTK_OBJECT (window));
8649 if (!GTK_WIDGET_VISIBLE (window))
8650 gtk_widget_show_all (window);
8652 gtk_widget_destroy (window);
8660 create_gamma_curve (void)
8662 static GtkWidget *window = NULL, *curve;
8663 static int count = 0;
8670 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
8671 gtk_window_set_title (GTK_WINDOW (window), "test");
8672 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
8674 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8675 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
8678 curve = gtk_gamma_curve_new ();
8679 gtk_container_add (GTK_CONTAINER (window), curve);
8680 gtk_widget_show (curve);
8683 max = 127 + (count % 2)*128;
8684 gtk_curve_set_range (GTK_CURVE (GTK_GAMMA_CURVE (curve)->curve),
8686 for (i = 0; i < max; ++i)
8687 vec[i] = (127 / sqrt (max)) * sqrt (i);
8688 gtk_curve_set_vector (GTK_CURVE (GTK_GAMMA_CURVE (curve)->curve),
8691 if (!GTK_WIDGET_VISIBLE (window))
8692 gtk_widget_show (window);
8693 else if (count % 4 == 3)
8695 gtk_widget_destroy (window);
8706 static int scroll_test_pos = 0.0;
8707 static GdkGC *scroll_test_gc = NULL;
8710 scroll_test_expose (GtkWidget *widget, GdkEventExpose *event,
8714 gint imin, imax, jmin, jmax;
8716 imin = (event->area.x) / 10;
8717 imax = (event->area.x + event->area.width + 9) / 10;
8719 jmin = ((int)adj->value + event->area.y) / 10;
8720 jmax = ((int)adj->value + event->area.y + event->area.height + 9) / 10;
8722 gdk_window_clear_area (widget->window,
8723 event->area.x, event->area.y,
8724 event->area.width, event->area.height);
8726 for (i=imin; i<imax; i++)
8727 for (j=jmin; j<jmax; j++)
8729 gdk_draw_rectangle (widget->window,
8730 widget->style->black_gc,
8732 10*i, 10*j - (int)adj->value, 1+i%10, 1+j%10);
8738 scroll_test_scroll (GtkWidget *widget, GdkEventScroll *event,
8741 gfloat new_value = adj->value + ((event->direction == GDK_SCROLL_UP) ?
8742 -adj->page_increment / 2:
8743 adj->page_increment / 2);
8744 new_value = CLAMP (new_value, adj->lower, adj->upper - adj->page_size);
8745 gtk_adjustment_set_value (adj, new_value);
8751 scroll_test_configure (GtkWidget *widget, GdkEventConfigure *event,
8754 adj->page_increment = 0.9 * widget->allocation.height;
8755 adj->page_size = widget->allocation.height;
8757 gtk_signal_emit_by_name (GTK_OBJECT (adj), "changed");
8761 scroll_test_adjustment_changed (GtkAdjustment *adj, GtkWidget *widget)
8763 gint source_min = (int)adj->value - scroll_test_pos;
8764 gint source_max = source_min + widget->allocation.height;
8766 gint dest_max = widget->allocation.height;
8770 scroll_test_pos = adj->value;
8772 if (!GTK_WIDGET_DRAWABLE (widget))
8779 rect.width = widget->allocation.width;
8780 rect.height = -source_min;
8781 if (rect.height > widget->allocation.height)
8782 rect.height = widget->allocation.height;
8785 dest_min = rect.height;
8790 rect.y = 2*widget->allocation.height - source_max;
8793 rect.width = widget->allocation.width;
8794 rect.height = widget->allocation.height - rect.y;
8796 source_max = widget->allocation.height;
8800 if (source_min != source_max)
8802 if (scroll_test_gc == NULL)
8804 scroll_test_gc = gdk_gc_new (widget->window);
8805 gdk_gc_set_exposures (scroll_test_gc, TRUE);
8808 gdk_draw_pixmap (widget->window,
8813 widget->allocation.width,
8814 source_max - source_min);
8816 /* Make sure graphics expose events are processed before scrolling
8819 while ((event = gdk_event_get_graphics_expose (widget->window)) != NULL)
8821 gtk_widget_event (widget, event);
8822 if (event->expose.count == 0)
8824 gdk_event_free (event);
8827 gdk_event_free (event);
8831 if (rect.height != 0)
8832 gtk_widget_draw (widget, &rect);
8837 create_scroll_test (void)
8839 static GtkWidget *window = NULL;
8841 GtkWidget *drawing_area;
8842 GtkWidget *scrollbar;
8845 GdkGeometry geometry;
8846 GdkWindowHints geometry_mask;
8850 window = gtk_dialog_new ();
8852 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8853 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
8856 gtk_window_set_title (GTK_WINDOW (window), "Scroll Test");
8857 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
8859 hbox = gtk_hbox_new (FALSE, 0);
8860 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), hbox,
8862 gtk_widget_show (hbox);
8864 drawing_area = gtk_drawing_area_new ();
8865 gtk_drawing_area_size (GTK_DRAWING_AREA (drawing_area), 200, 200);
8866 gtk_box_pack_start (GTK_BOX (hbox), drawing_area, TRUE, TRUE, 0);
8867 gtk_widget_show (drawing_area);
8869 gtk_widget_set_events (drawing_area, GDK_EXPOSURE_MASK | GDK_SCROLL_MASK);
8871 adj = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.0, 1000.0, 1.0, 180.0, 200.0));
8872 scroll_test_pos = 0.0;
8874 scrollbar = gtk_vscrollbar_new (adj);
8875 gtk_box_pack_start (GTK_BOX (hbox), scrollbar, FALSE, FALSE, 0);
8876 gtk_widget_show (scrollbar);
8878 gtk_signal_connect (GTK_OBJECT (drawing_area), "expose_event",
8879 GTK_SIGNAL_FUNC (scroll_test_expose), adj);
8880 gtk_signal_connect (GTK_OBJECT (drawing_area), "configure_event",
8881 GTK_SIGNAL_FUNC (scroll_test_configure), adj);
8882 gtk_signal_connect (GTK_OBJECT (drawing_area), "scroll_event",
8883 GTK_SIGNAL_FUNC (scroll_test_scroll), adj);
8885 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
8886 GTK_SIGNAL_FUNC (scroll_test_adjustment_changed),
8889 /* .. And create some buttons */
8891 button = gtk_button_new_with_label ("Quit");
8892 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8893 button, TRUE, TRUE, 0);
8895 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
8896 GTK_SIGNAL_FUNC (gtk_widget_destroy),
8897 GTK_OBJECT (window));
8898 gtk_widget_show (button);
8900 /* Set up gridded geometry */
8902 geometry_mask = GDK_HINT_MIN_SIZE |
8903 GDK_HINT_BASE_SIZE |
8904 GDK_HINT_RESIZE_INC;
8906 geometry.min_width = 20;
8907 geometry.min_height = 20;
8908 geometry.base_width = 0;
8909 geometry.base_height = 0;
8910 geometry.width_inc = 10;
8911 geometry.height_inc = 10;
8913 gtk_window_set_geometry_hints (GTK_WINDOW (window),
8914 drawing_area, &geometry, geometry_mask);
8917 if (!GTK_WIDGET_VISIBLE (window))
8918 gtk_widget_show (window);
8920 gtk_widget_destroy (window);
8927 static int timer = 0;
8930 timeout_test (GtkWidget *label)
8932 static int count = 0;
8933 static char buffer[32];
8935 sprintf (buffer, "count: %d", ++count);
8936 gtk_label_set_text (GTK_LABEL (label), buffer);
8942 start_timeout_test (GtkWidget *widget,
8947 timer = gtk_timeout_add (100, (GtkFunction) timeout_test, label);
8952 stop_timeout_test (GtkWidget *widget,
8957 gtk_timeout_remove (timer);
8963 destroy_timeout_test (GtkWidget *widget,
8966 stop_timeout_test (NULL, NULL);
8972 create_timeout_test (void)
8974 static GtkWidget *window = NULL;
8980 window = gtk_dialog_new ();
8982 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8983 GTK_SIGNAL_FUNC(destroy_timeout_test),
8986 gtk_window_set_title (GTK_WINDOW (window), "Timeout Test");
8987 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
8989 label = gtk_label_new ("count: 0");
8990 gtk_misc_set_padding (GTK_MISC (label), 10, 10);
8991 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
8992 label, TRUE, TRUE, 0);
8993 gtk_widget_show (label);
8995 button = gtk_button_new_with_label ("close");
8996 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
8997 GTK_SIGNAL_FUNC(gtk_widget_destroy),
8998 GTK_OBJECT (window));
8999 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
9000 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
9001 button, TRUE, TRUE, 0);
9002 gtk_widget_grab_default (button);
9003 gtk_widget_show (button);
9005 button = gtk_button_new_with_label ("start");
9006 gtk_signal_connect (GTK_OBJECT (button), "clicked",
9007 GTK_SIGNAL_FUNC(start_timeout_test),
9009 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
9010 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
9011 button, TRUE, TRUE, 0);
9012 gtk_widget_show (button);
9014 button = gtk_button_new_with_label ("stop");
9015 gtk_signal_connect (GTK_OBJECT (button), "clicked",
9016 GTK_SIGNAL_FUNC(stop_timeout_test),
9018 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
9019 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
9020 button, TRUE, TRUE, 0);
9021 gtk_widget_show (button);
9024 if (!GTK_WIDGET_VISIBLE (window))
9025 gtk_widget_show (window);
9027 gtk_widget_destroy (window);
9034 static int idle_id = 0;
9037 idle_test (GtkWidget *label)
9039 static int count = 0;
9040 static char buffer[32];
9042 sprintf (buffer, "count: %d", ++count);
9043 gtk_label_set_text (GTK_LABEL (label), buffer);
9049 start_idle_test (GtkWidget *widget,
9054 idle_id = gtk_idle_add ((GtkFunction) idle_test, label);
9059 stop_idle_test (GtkWidget *widget,
9064 gtk_idle_remove (idle_id);
9070 destroy_idle_test (GtkWidget *widget,
9073 stop_idle_test (NULL, NULL);
9079 toggle_idle_container (GtkObject *button,
9080 GtkContainer *container)
9082 gtk_container_set_resize_mode (container, GPOINTER_TO_INT (gtk_object_get_user_data (button)));
9086 create_idle_test (void)
9088 static GtkWidget *window = NULL;
9091 GtkWidget *container;
9098 window = gtk_dialog_new ();
9100 gtk_signal_connect (GTK_OBJECT (window), "destroy",
9101 GTK_SIGNAL_FUNC(destroy_idle_test),
9104 gtk_window_set_title (GTK_WINDOW (window), "Idle Test");
9105 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
9107 label = gtk_label_new ("count: 0");
9108 gtk_misc_set_padding (GTK_MISC (label), 10, 10);
9109 gtk_widget_show (label);
9112 gtk_widget_new (GTK_TYPE_HBOX,
9114 /* "GtkContainer::child", gtk_widget_new (GTK_TYPE_HBOX,
9115 * "GtkWidget::visible", TRUE,
9120 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
9121 container, TRUE, TRUE, 0);
9124 gtk_widget_new (GTK_TYPE_FRAME,
9126 "label", "Label Container",
9128 "parent", GTK_DIALOG (window)->vbox,
9131 gtk_widget_new (GTK_TYPE_VBOX,
9136 g_object_connect (gtk_widget_new (GTK_TYPE_RADIO_BUTTON,
9137 "label", "Resize-Parent",
9138 "user_data", (void*)GTK_RESIZE_PARENT,
9142 "signal::clicked", toggle_idle_container, container,
9145 g_object_connect (gtk_widget_new (GTK_TYPE_RADIO_BUTTON,
9146 "label", "Resize-Queue",
9147 "user_data", (void*)GTK_RESIZE_QUEUE,
9152 "signal::clicked", toggle_idle_container, container,
9155 g_object_set (g_object_connect (gtk_widget_new (GTK_TYPE_RADIO_BUTTON,
9156 "label", "Resize-Immediate",
9157 "user_data", (void*)GTK_RESIZE_IMMEDIATE,
9159 "signal::clicked", toggle_idle_container, container,
9166 button = gtk_button_new_with_label ("close");
9167 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
9168 GTK_SIGNAL_FUNC(gtk_widget_destroy),
9169 GTK_OBJECT (window));
9170 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
9171 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
9172 button, TRUE, TRUE, 0);
9173 gtk_widget_grab_default (button);
9174 gtk_widget_show (button);
9176 button = gtk_button_new_with_label ("start");
9177 gtk_signal_connect (GTK_OBJECT (button), "clicked",
9178 GTK_SIGNAL_FUNC(start_idle_test),
9180 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
9181 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
9182 button, TRUE, TRUE, 0);
9183 gtk_widget_show (button);
9185 button = gtk_button_new_with_label ("stop");
9186 gtk_signal_connect (GTK_OBJECT (button), "clicked",
9187 GTK_SIGNAL_FUNC(stop_idle_test),
9189 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
9190 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
9191 button, TRUE, TRUE, 0);
9192 gtk_widget_show (button);
9195 if (!GTK_WIDGET_VISIBLE (window))
9196 gtk_widget_show (window);
9198 gtk_widget_destroy (window);
9206 reload_rc_file (void)
9210 if (gtk_rc_reparse_all ())
9212 toplevels = gdk_window_get_toplevels();
9216 gdk_window_get_user_data (toplevels->data, (gpointer *)&widget);
9219 gtk_widget_reset_rc_styles (widget);
9221 toplevels = toplevels->next;
9223 g_list_free (toplevels);
9228 reload_all_rc_files (void)
9230 static GdkAtom atom_rcfiles = GDK_NONE;
9236 atom_rcfiles = gdk_atom_intern("_GTK_READ_RCFILES", FALSE);
9238 for(i = 0; i < 5; i++)
9240 sev.data_format = 32;
9241 sev.message_type = atom_rcfiles;
9242 gdk_event_send_clientmessage_toall ((GdkEvent *) &sev);
9246 create_rc_file (void)
9248 static GtkWidget *window = NULL;
9253 window = gtk_dialog_new ();
9255 gtk_signal_connect (GTK_OBJECT (window), "destroy",
9256 GTK_SIGNAL_FUNC(destroy_idle_test),
9259 gtk_window_set_title (GTK_WINDOW (window), "Reload Rc file");
9260 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
9262 button = gtk_button_new_with_label ("Reload");
9263 gtk_signal_connect (GTK_OBJECT (button), "clicked",
9264 GTK_SIGNAL_FUNC(reload_rc_file), NULL);
9265 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
9266 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
9267 button, TRUE, TRUE, 0);
9268 gtk_widget_grab_default (button);
9269 gtk_widget_show (button);
9271 button = gtk_button_new_with_label ("Reload All");
9272 gtk_signal_connect (GTK_OBJECT (button), "clicked",
9273 GTK_SIGNAL_FUNC(reload_all_rc_files), NULL);
9274 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
9275 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
9276 button, TRUE, TRUE, 0);
9277 gtk_widget_show (button);
9279 button = gtk_button_new_with_label ("Close");
9280 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
9281 GTK_SIGNAL_FUNC(gtk_widget_destroy),
9282 GTK_OBJECT (window));
9283 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
9284 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
9285 button, TRUE, TRUE, 0);
9286 gtk_widget_show (button);
9290 if (!GTK_WIDGET_VISIBLE (window))
9291 gtk_widget_show (window);
9293 gtk_widget_destroy (window);
9297 * Test of recursive mainloop
9301 mainloop_destroyed (GtkWidget *w, GtkWidget **window)
9308 create_mainloop (void)
9310 static GtkWidget *window = NULL;
9316 window = gtk_dialog_new ();
9318 gtk_window_set_title (GTK_WINDOW (window), "Test Main Loop");
9320 gtk_signal_connect (GTK_OBJECT (window), "destroy",
9321 GTK_SIGNAL_FUNC(mainloop_destroyed),
9324 label = gtk_label_new ("In recursive main loop...");
9325 gtk_misc_set_padding (GTK_MISC(label), 20, 20);
9327 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), label,
9329 gtk_widget_show (label);
9331 button = gtk_button_new_with_label ("Leave");
9332 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area), button,
9335 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
9336 GTK_SIGNAL_FUNC (gtk_widget_destroy),
9337 GTK_OBJECT (window));
9339 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
9340 gtk_widget_grab_default (button);
9342 gtk_widget_show (button);
9345 if (!GTK_WIDGET_VISIBLE (window))
9347 gtk_widget_show (window);
9349 g_print ("create_mainloop: start\n");
9351 g_print ("create_mainloop: done\n");
9354 gtk_widget_destroy (window);
9358 layout_expose_handler (GtkWidget *widget, GdkEventExpose *event)
9363 gint imin, imax, jmin, jmax;
9365 layout = GTK_LAYOUT (widget);
9367 imin = (layout->xoffset + event->area.x) / 10;
9368 imax = (layout->xoffset + event->area.x + event->area.width + 9) / 10;
9370 jmin = (layout->yoffset + event->area.y) / 10;
9371 jmax = (layout->yoffset + event->area.y + event->area.height + 9) / 10;
9373 gdk_window_clear_area (widget->window,
9374 event->area.x, event->area.y,
9375 event->area.width, event->area.height);
9377 for (i=imin; i<imax; i++)
9378 for (j=jmin; j<jmax; j++)
9380 gdk_draw_rectangle (layout->bin_window,
9381 widget->style->black_gc,
9383 10*i - layout->xoffset, 10*j - layout->yoffset,
9389 void create_layout (void)
9391 static GtkWidget *window = NULL;
9393 GtkWidget *scrolledwindow;
9402 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
9403 gtk_signal_connect (GTK_OBJECT (window), "destroy",
9404 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
9407 gtk_window_set_title (GTK_WINDOW (window), "Layout");
9408 gtk_widget_set_usize (window, 200, 200);
9410 scrolledwindow = gtk_scrolled_window_new (NULL, NULL);
9411 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow),
9413 gtk_scrolled_window_set_placement (GTK_SCROLLED_WINDOW (scrolledwindow),
9414 GTK_CORNER_TOP_RIGHT);
9416 gtk_container_add (GTK_CONTAINER (window), scrolledwindow);
9418 layout = gtk_layout_new (NULL, NULL);
9419 gtk_container_add (GTK_CONTAINER (scrolledwindow), layout);
9421 /* We set step sizes here since GtkLayout does not set
9424 GTK_LAYOUT (layout)->hadjustment->step_increment = 10.0;
9425 GTK_LAYOUT (layout)->vadjustment->step_increment = 10.0;
9427 gtk_widget_set_events (layout, GDK_EXPOSURE_MASK);
9428 gtk_signal_connect (GTK_OBJECT (layout), "expose_event",
9429 GTK_SIGNAL_FUNC (layout_expose_handler), NULL);
9431 gtk_layout_set_size (GTK_LAYOUT (layout), 1600, 128000);
9433 for (i=0 ; i < 16 ; i++)
9434 for (j=0 ; j < 16 ; j++)
9436 sprintf(buf, "Button %d, %d", i, j);
9438 button = gtk_button_new_with_label (buf);
9440 button = gtk_label_new (buf);
9442 gtk_layout_put (GTK_LAYOUT (layout), button,
9446 for (i=16; i < 1280; i++)
9448 sprintf(buf, "Button %d, %d", i, 0);
9450 button = gtk_button_new_with_label (buf);
9452 button = gtk_label_new (buf);
9454 gtk_layout_put (GTK_LAYOUT (layout), button,
9459 if (!GTK_WIDGET_VISIBLE (window))
9460 gtk_widget_show_all (window);
9462 gtk_widget_destroy (window);
9466 create_styles (void)
9468 static GtkWidget *window = NULL;
9473 static GdkColor red = { 0, 0xffff, 0, 0 };
9474 static GdkColor green = { 0, 0, 0xffff, 0 };
9475 static GdkColor blue = { 0, 0, 0, 0xffff };
9476 static GdkColor yellow = { 0, 0xffff, 0xffff, 0 };
9477 static GdkColor cyan = { 0, 0 , 0xffff, 0xffff };
9478 PangoFontDescription *font_desc;
9480 GtkRcStyle *rc_style;
9484 window = gtk_dialog_new ();
9485 gtk_signal_connect (GTK_OBJECT (window), "destroy",
9486 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
9490 button = gtk_button_new_with_label ("Close");
9491 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
9492 GTK_SIGNAL_FUNC(gtk_widget_destroy),
9493 GTK_OBJECT (window));
9494 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
9495 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
9496 button, TRUE, TRUE, 0);
9497 gtk_widget_show (button);
9499 vbox = gtk_vbox_new (FALSE, 5);
9500 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
9501 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), vbox, FALSE, FALSE, 0);
9503 label = gtk_label_new ("Font:");
9504 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
9505 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9507 font_desc = pango_font_description_from_string ("Helvetica,Sans Oblique 18");
9509 button = gtk_button_new_with_label ("Some Text");
9510 gtk_widget_modify_font (GTK_BIN (button)->child, font_desc);
9511 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
9513 label = gtk_label_new ("Foreground:");
9514 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
9515 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9517 button = gtk_button_new_with_label ("Some Text");
9518 gtk_widget_modify_fg (GTK_BIN (button)->child, GTK_STATE_NORMAL, &red);
9519 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
9521 label = gtk_label_new ("Background:");
9522 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
9523 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9525 button = gtk_button_new_with_label ("Some Text");
9526 gtk_widget_modify_bg (button, GTK_STATE_NORMAL, &green);
9527 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
9529 label = gtk_label_new ("Text:");
9530 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
9531 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9533 entry = gtk_entry_new ();
9534 gtk_entry_set_text (GTK_ENTRY (entry), "Some Text");
9535 gtk_widget_modify_text (entry, GTK_STATE_NORMAL, &blue);
9536 gtk_box_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 0);
9538 label = gtk_label_new ("Base:");
9539 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
9540 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9542 entry = gtk_entry_new ();
9543 gtk_entry_set_text (GTK_ENTRY (entry), "Some Text");
9544 gtk_widget_modify_base (entry, GTK_STATE_NORMAL, &yellow);
9545 gtk_box_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 0);
9547 label = gtk_label_new ("Multiple:");
9548 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
9549 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9551 button = gtk_button_new_with_label ("Some Text");
9553 rc_style = gtk_rc_style_new ();
9555 rc_style->font_desc = font_desc;
9556 rc_style->color_flags[GTK_STATE_NORMAL] = GTK_RC_FG | GTK_RC_BG;
9557 rc_style->color_flags[GTK_STATE_PRELIGHT] = GTK_RC_FG | GTK_RC_BG;
9558 rc_style->color_flags[GTK_STATE_ACTIVE] = GTK_RC_FG | GTK_RC_BG;
9559 rc_style->fg[GTK_STATE_NORMAL] = yellow;
9560 rc_style->bg[GTK_STATE_NORMAL] = blue;
9561 rc_style->fg[GTK_STATE_PRELIGHT] = blue;
9562 rc_style->bg[GTK_STATE_PRELIGHT] = yellow;
9563 rc_style->fg[GTK_STATE_ACTIVE] = red;
9564 rc_style->bg[GTK_STATE_ACTIVE] = cyan;
9565 rc_style->xthickness = 5;
9566 rc_style->ythickness = 5;
9568 gtk_widget_modify_style (button, rc_style);
9569 gtk_widget_modify_style (GTK_BIN (button)->child, rc_style);
9571 g_object_unref (G_OBJECT (rc_style));
9573 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
9576 if (!GTK_WIDGET_VISIBLE (window))
9577 gtk_widget_show_all (window);
9579 gtk_widget_destroy (window);
9583 * Main Window and Exit
9587 do_exit (GtkWidget *widget, GtkWidget *window)
9589 gtk_widget_destroy (window);
9594 create_main_window (void)
9601 { "button box", create_button_box },
9602 { "buttons", create_buttons },
9603 { "check buttons", create_check_buttons },
9604 { "clist", create_clist},
9605 { "color selection", create_color_selection },
9606 { "ctree", create_ctree },
9607 { "cursors", create_cursors },
9608 { "dialog", create_dialog },
9609 /* { "dnd", create_dnd }, */
9610 { "entry", create_entry },
9611 { "event watcher", create_event_watcher },
9612 { "file selection", create_file_selection },
9613 { "flipping", create_flipping },
9614 { "font selection", create_font_selection },
9615 { "gamma curve", create_gamma_curve },
9616 { "handle box", create_handle_box },
9617 { "image from drawable", create_get_image },
9618 { "image", create_image },
9619 { "item factory", create_item_factory },
9620 { "labels", create_labels },
9621 { "layout", create_layout },
9622 { "list", create_list },
9623 { "menus", create_menus },
9624 { "message dialog", create_message_dialog },
9625 { "modal window", create_modal_window },
9626 { "notebook", create_notebook },
9627 { "panes", create_panes },
9628 { "pixmap", create_pixmap },
9629 { "preview color", create_color_preview },
9630 { "preview gray", create_gray_preview },
9631 { "progress bar", create_progress_bar },
9632 { "radio buttons", create_radio_buttons },
9633 { "range controls", create_range_controls },
9634 { "rc file", create_rc_file },
9635 { "reparent", create_reparent },
9636 { "rulers", create_rulers },
9637 { "saved position", create_saved_position },
9638 { "scrolled windows", create_scrolled_windows },
9639 { "shapes", create_shapes },
9640 { "spinbutton", create_spins },
9641 { "statusbar", create_statusbar },
9642 { "styles", create_styles },
9643 { "test idle", create_idle_test },
9644 { "test mainloop", create_mainloop },
9645 { "test scrolling", create_scroll_test },
9646 { "test selection", create_selection_test },
9647 { "test timeout", create_timeout_test },
9648 { "text", create_text },
9649 { "toggle buttons", create_toggle_buttons },
9650 { "toolbar", create_toolbar },
9651 { "tooltips", create_tooltips },
9652 { "tree", create_tree_mode_window},
9653 { "WM hints", create_wmhints },
9654 { "window states", create_window_states }
9656 int nbuttons = sizeof (buttons) / sizeof (buttons[0]);
9660 GtkWidget *scrolled_window;
9664 GtkWidget *separator;
9665 GdkGeometry geometry;
9668 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
9669 gtk_widget_set_name (window, "main window");
9670 gtk_widget_set_uposition (window, 20, 20);
9671 gtk_window_set_default_size (GTK_WINDOW (window), -1, 400);
9673 geometry.min_width = -1;
9674 geometry.min_height = -1;
9675 geometry.max_width = -1;
9676 geometry.max_height = G_MAXSHORT;
9677 gtk_window_set_geometry_hints (GTK_WINDOW (window), NULL,
9679 GDK_HINT_MIN_SIZE | GDK_HINT_MAX_SIZE);
9681 gtk_signal_connect (GTK_OBJECT (window), "destroy",
9682 GTK_SIGNAL_FUNC(gtk_main_quit),
9684 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
9685 GTK_SIGNAL_FUNC (gtk_false),
9688 box1 = gtk_vbox_new (FALSE, 0);
9689 gtk_container_add (GTK_CONTAINER (window), box1);
9691 if (gtk_micro_version > 0)
9703 label = gtk_label_new (buffer);
9704 gtk_box_pack_start (GTK_BOX (box1), label, FALSE, FALSE, 0);
9706 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
9707 gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10);
9708 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
9710 GTK_POLICY_AUTOMATIC);
9711 gtk_box_pack_start (GTK_BOX (box1), scrolled_window, TRUE, TRUE, 0);
9713 box2 = gtk_vbox_new (FALSE, 0);
9714 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
9715 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), box2);
9716 gtk_container_set_focus_vadjustment (GTK_CONTAINER (box2),
9717 gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
9718 gtk_widget_show (box2);
9720 for (i = 0; i < nbuttons; i++)
9722 button = gtk_button_new_with_label (buttons[i].label);
9723 if (buttons[i].func)
9724 gtk_signal_connect (GTK_OBJECT (button),
9726 GTK_SIGNAL_FUNC(buttons[i].func),
9729 gtk_widget_set_sensitive (button, FALSE);
9730 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
9733 separator = gtk_hseparator_new ();
9734 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
9736 box2 = gtk_vbox_new (FALSE, 10);
9737 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
9738 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
9740 button = gtk_button_new_with_label ("close");
9741 gtk_signal_connect (GTK_OBJECT (button), "clicked",
9742 GTK_SIGNAL_FUNC (do_exit),
9744 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
9745 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
9746 gtk_widget_grab_default (button);
9748 gtk_widget_show_all (window);
9754 if (file_exists ("../gdk-pixbuf/.libs/libpixbufloader-pnm.so"))
9756 putenv ("GDK_PIXBUF_MODULEDIR=../gdk-pixbuf/.libs");
9757 putenv ("GTK_IM_MODULE_FILE=./gtk.immodules");
9762 main (int argc, char *argv[])
9764 GtkBindingSet *binding_set;
9766 srand (time (NULL));
9771 /* Check to see if we are being run from the correct
9774 if (file_exists ("testgtkrc"))
9775 gtk_rc_add_default_file ("testgtkrc");
9777 gtk_init (&argc, &argv);
9781 binding_set = gtk_binding_set_by_class (gtk_type_class (GTK_TYPE_WIDGET));
9782 gtk_binding_entry_add_signal (binding_set,
9783 '9', GDK_CONTROL_MASK | GDK_RELEASE_MASK,
9786 GTK_TYPE_STRING, "GtkWidgetClass <ctrl><release>9 test");
9788 create_main_window ();
9794 while (g_main_pending ())
9795 g_main_iteration (FALSE);
9797 while (g_main_pending ())
9798 g_main_iteration (FALSE);