1 /* GTK - The GIMP Toolkit
2 * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the
16 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17 * Boston, MA 02111-1307, USA.
21 * Modified by the GTK+ Team and others 1997-2000. See the AUTHORS
22 * file for a list of people on the GTK+ Team. See the ChangeLog
23 * files for a list of changes. These files are distributed with
24 * GTK+ at ftp://ftp.gtk.org/pub/gtk/.
41 #define GTK_ENABLE_BROKEN
44 #include "gdk/gdkkeysyms.h"
47 #define sleep(n) _sleep(n)
50 #include "circles.xbm"
53 typedef struct _OptionMenuItem
60 file_exists (const char *filename)
64 return stat (filename, &statbuf) == 0;
68 shape_create_icon (char *xpm_file,
76 build_option_menu (OptionMenuItem items[],
81 /* macro, structure and variables used by tree window demos */
82 #define DEFAULT_NUMBER_OF_ITEM 3
83 #define DEFAULT_RECURSION_LEVEL 3
86 GSList* selection_mode_group;
87 GtkWidget* single_button;
88 GtkWidget* browse_button;
89 GtkWidget* multiple_button;
90 GtkWidget* draw_line_button;
91 GtkWidget* view_line_button;
92 GtkWidget* no_root_item_button;
93 GtkWidget* nb_item_spinner;
94 GtkWidget* recursion_spinner;
95 } sTreeSampleSelection;
97 typedef struct sTreeButtons {
99 GtkWidget* add_button;
100 GtkWidget* remove_button;
101 GtkWidget* subtree_button;
103 /* end of tree section */
106 build_option_menu (OptionMenuItem items[],
113 GtkWidget *menu_item;
116 omenu = gtk_option_menu_new ();
118 menu = gtk_menu_new ();
120 for (i = 0; i < num_items; i++)
122 menu_item = gtk_menu_item_new_with_label (items[i].name);
123 gtk_signal_connect (GTK_OBJECT (menu_item), "activate",
124 (GtkSignalFunc) items[i].func, data);
125 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
126 gtk_widget_show (menu_item);
129 gtk_option_menu_set_menu (GTK_OPTION_MENU (omenu), menu);
130 gtk_option_menu_set_history (GTK_OPTION_MENU (omenu), history);
136 destroy_tooltips (GtkWidget *widget, GtkWindow **window)
138 GtkTooltips *tt = gtk_object_get_data (GTK_OBJECT (*window), "tooltips");
139 gtk_object_unref (GTK_OBJECT (tt));
148 button_window (GtkWidget *widget,
151 if (!GTK_WIDGET_VISIBLE (button))
152 gtk_widget_show (button);
154 gtk_widget_hide (button);
158 create_buttons (void)
160 static GtkWidget *window = NULL;
164 GtkWidget *button[10];
165 GtkWidget *separator;
169 GtkAccelGroup *accel_group;
171 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
173 accel_group = gtk_window_get_default_accel_group (GTK_WINDOW (window));
175 gtk_signal_connect (GTK_OBJECT (window), "destroy",
176 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
179 gtk_window_set_title (GTK_WINDOW (window), "GtkButton");
180 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
182 box1 = gtk_vbox_new (FALSE, 0);
183 gtk_container_add (GTK_CONTAINER (window), box1);
185 table = gtk_table_new (3, 3, FALSE);
186 gtk_table_set_row_spacings (GTK_TABLE (table), 5);
187 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
188 gtk_container_set_border_width (GTK_CONTAINER (table), 10);
189 gtk_box_pack_start (GTK_BOX (box1), table, TRUE, TRUE, 0);
191 button[0] = gtk_button_new_with_label ("button1");
192 button[1] = gtk_button_new_accel ("_button2", accel_group);
193 button[2] = gtk_button_new_with_label ("button3");
194 button[3] = gtk_button_new_stock (GTK_STOCK_BUTTON_OK, NULL);
195 button[4] = gtk_button_new_with_label ("button5");
196 button[5] = gtk_button_new_with_label ("button6");
197 button[6] = gtk_button_new_with_label ("button7");
198 button[7] = gtk_button_new_stock (GTK_STOCK_BUTTON_CLOSE, accel_group);
199 button[8] = gtk_button_new_with_label ("button9");
201 gtk_signal_connect (GTK_OBJECT (button[0]), "clicked",
202 GTK_SIGNAL_FUNC(button_window),
205 gtk_table_attach (GTK_TABLE (table), button[0], 0, 1, 0, 1,
206 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
208 gtk_signal_connect (GTK_OBJECT (button[1]), "clicked",
209 GTK_SIGNAL_FUNC(button_window),
212 gtk_table_attach (GTK_TABLE (table), button[1], 1, 2, 1, 2,
213 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
215 gtk_signal_connect (GTK_OBJECT (button[2]), "clicked",
216 GTK_SIGNAL_FUNC(button_window),
218 gtk_table_attach (GTK_TABLE (table), button[2], 2, 3, 2, 3,
219 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
221 gtk_signal_connect (GTK_OBJECT (button[3]), "clicked",
222 GTK_SIGNAL_FUNC(button_window),
224 gtk_table_attach (GTK_TABLE (table), button[3], 0, 1, 2, 3,
225 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
227 gtk_signal_connect (GTK_OBJECT (button[4]), "clicked",
228 GTK_SIGNAL_FUNC(button_window),
230 gtk_table_attach (GTK_TABLE (table), button[4], 2, 3, 0, 1,
231 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
233 gtk_signal_connect (GTK_OBJECT (button[5]), "clicked",
234 GTK_SIGNAL_FUNC(button_window),
236 gtk_table_attach (GTK_TABLE (table), button[5], 1, 2, 2, 3,
237 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
239 gtk_signal_connect (GTK_OBJECT (button[6]), "clicked",
240 GTK_SIGNAL_FUNC(button_window),
242 gtk_table_attach (GTK_TABLE (table), button[6], 1, 2, 0, 1,
243 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
245 gtk_signal_connect (GTK_OBJECT (button[7]), "clicked",
246 GTK_SIGNAL_FUNC(button_window),
248 gtk_table_attach (GTK_TABLE (table), button[7], 2, 3, 1, 2,
249 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
251 gtk_signal_connect (GTK_OBJECT (button[8]), "clicked",
252 GTK_SIGNAL_FUNC(button_window),
254 gtk_table_attach (GTK_TABLE (table), button[8], 0, 1, 1, 2,
255 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
257 separator = gtk_hseparator_new ();
258 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
260 box2 = gtk_vbox_new (FALSE, 10);
261 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
262 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
264 button[9] = gtk_button_new_with_label ("close");
265 gtk_signal_connect_object (GTK_OBJECT (button[9]), "clicked",
266 GTK_SIGNAL_FUNC(gtk_widget_destroy),
267 GTK_OBJECT (window));
268 gtk_box_pack_start (GTK_BOX (box2), button[9], TRUE, TRUE, 0);
269 GTK_WIDGET_SET_FLAGS (button[9], GTK_CAN_DEFAULT);
270 gtk_widget_grab_default (button[9]);
273 if (!GTK_WIDGET_VISIBLE (window))
274 gtk_widget_show_all (window);
276 gtk_widget_hide (window);
284 create_toggle_buttons (void)
286 static GtkWidget *window = NULL;
290 GtkWidget *separator;
294 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
296 gtk_signal_connect (GTK_OBJECT (window), "destroy",
297 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
300 gtk_window_set_title (GTK_WINDOW (window), "GtkToggleButton");
301 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
303 box1 = gtk_vbox_new (FALSE, 0);
304 gtk_container_add (GTK_CONTAINER (window), box1);
306 box2 = gtk_vbox_new (FALSE, 10);
307 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
308 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
310 button = gtk_toggle_button_new_with_label ("button1");
311 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
313 button = gtk_toggle_button_new_with_label ("button2");
314 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
316 button = gtk_toggle_button_new_with_label ("button3");
317 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
319 button = gtk_toggle_button_new_with_label ("inconsistent");
320 gtk_toggle_button_set_inconsistent (GTK_TOGGLE_BUTTON (button), TRUE);
321 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
323 separator = gtk_hseparator_new ();
324 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
326 box2 = gtk_vbox_new (FALSE, 10);
327 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
328 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
330 button = gtk_button_new_with_label ("close");
331 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
332 GTK_SIGNAL_FUNC(gtk_widget_destroy),
333 GTK_OBJECT (window));
334 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
335 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
336 gtk_widget_grab_default (button);
339 if (!GTK_WIDGET_VISIBLE (window))
340 gtk_widget_show_all (window);
342 gtk_widget_destroy (window);
350 create_check_buttons (void)
352 static GtkWidget *window = NULL;
356 GtkWidget *separator;
360 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
362 gtk_signal_connect (GTK_OBJECT (window), "destroy",
363 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
366 gtk_window_set_title (GTK_WINDOW (window), "GtkCheckButton");
367 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
369 box1 = gtk_vbox_new (FALSE, 0);
370 gtk_container_add (GTK_CONTAINER (window), box1);
372 box2 = gtk_vbox_new (FALSE, 10);
373 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
374 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
376 button = gtk_check_button_new_with_label ("button1");
377 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
379 button = gtk_check_button_new_with_label ("button2");
380 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
382 button = gtk_check_button_new_with_label ("button3");
383 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
385 button = gtk_check_button_new_with_label ("inconsistent");
386 gtk_toggle_button_set_inconsistent (GTK_TOGGLE_BUTTON (button), TRUE);
387 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
389 separator = gtk_hseparator_new ();
390 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
392 box2 = gtk_vbox_new (FALSE, 10);
393 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
394 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
396 button = gtk_button_new_with_label ("close");
397 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
398 GTK_SIGNAL_FUNC(gtk_widget_destroy),
399 GTK_OBJECT (window));
400 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
401 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
402 gtk_widget_grab_default (button);
405 if (!GTK_WIDGET_VISIBLE (window))
406 gtk_widget_show_all (window);
408 gtk_widget_destroy (window);
416 create_radio_buttons (void)
418 static GtkWidget *window = NULL;
422 GtkWidget *separator;
426 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
428 gtk_signal_connect (GTK_OBJECT (window), "destroy",
429 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
432 gtk_window_set_title (GTK_WINDOW (window), "radio buttons");
433 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
435 box1 = gtk_vbox_new (FALSE, 0);
436 gtk_container_add (GTK_CONTAINER (window), box1);
438 box2 = gtk_vbox_new (FALSE, 10);
439 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
440 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
442 button = gtk_radio_button_new_with_label (NULL, "button1");
443 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
445 button = gtk_radio_button_new_with_label (
446 gtk_radio_button_group (GTK_RADIO_BUTTON (button)),
448 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
449 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
451 button = gtk_radio_button_new_with_label (
452 gtk_radio_button_group (GTK_RADIO_BUTTON (button)),
454 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
456 button = gtk_radio_button_new_with_label (
457 gtk_radio_button_group (GTK_RADIO_BUTTON (button)),
459 gtk_toggle_button_set_inconsistent (GTK_TOGGLE_BUTTON (button), TRUE);
460 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
462 separator = gtk_hseparator_new ();
463 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
465 box2 = gtk_vbox_new (FALSE, 10);
466 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
467 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
469 button = gtk_button_new_with_label ("close");
470 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
471 GTK_SIGNAL_FUNC(gtk_widget_destroy),
472 GTK_OBJECT (window));
473 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
474 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
475 gtk_widget_grab_default (button);
478 if (!GTK_WIDGET_VISIBLE (window))
479 gtk_widget_show_all (window);
481 gtk_widget_destroy (window);
489 create_bbox (gint horizontal,
500 frame = gtk_frame_new (title);
503 bbox = gtk_hbutton_box_new ();
505 bbox = gtk_vbutton_box_new ();
507 gtk_container_set_border_width (GTK_CONTAINER (bbox), 5);
508 gtk_container_add (GTK_CONTAINER (frame), bbox);
510 gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), layout);
511 gtk_button_box_set_spacing (GTK_BUTTON_BOX (bbox), spacing);
512 gtk_button_box_set_child_size (GTK_BUTTON_BOX (bbox), child_w, child_h);
514 button = gtk_button_new_with_label ("OK");
515 gtk_container_add (GTK_CONTAINER (bbox), button);
517 button = gtk_button_new_with_label ("Cancel");
518 gtk_container_add (GTK_CONTAINER (bbox), button);
520 button = gtk_button_new_with_label ("Help");
521 gtk_container_add (GTK_CONTAINER (bbox), button);
527 create_button_box (void)
529 static GtkWidget* window = NULL;
530 GtkWidget *main_vbox;
533 GtkWidget *frame_horz;
534 GtkWidget *frame_vert;
538 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
539 gtk_window_set_title (GTK_WINDOW (window), "Button Boxes");
541 gtk_signal_connect (GTK_OBJECT (window), "destroy",
542 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
545 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
547 main_vbox = gtk_vbox_new (FALSE, 0);
548 gtk_container_add (GTK_CONTAINER (window), main_vbox);
550 frame_horz = gtk_frame_new ("Horizontal Button Boxes");
551 gtk_box_pack_start (GTK_BOX (main_vbox), frame_horz, TRUE, TRUE, 10);
553 vbox = gtk_vbox_new (FALSE, 0);
554 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
555 gtk_container_add (GTK_CONTAINER (frame_horz), vbox);
557 gtk_box_pack_start (GTK_BOX (vbox),
558 create_bbox (TRUE, "Spread", 40, 85, 20, GTK_BUTTONBOX_SPREAD),
561 gtk_box_pack_start (GTK_BOX (vbox),
562 create_bbox (TRUE, "Edge", 40, 85, 20, GTK_BUTTONBOX_EDGE),
565 gtk_box_pack_start (GTK_BOX (vbox),
566 create_bbox (TRUE, "Start", 40, 85, 20, GTK_BUTTONBOX_START),
569 gtk_box_pack_start (GTK_BOX (vbox),
570 create_bbox (TRUE, "End", 40, 85, 20, GTK_BUTTONBOX_END),
573 frame_vert = gtk_frame_new ("Vertical Button Boxes");
574 gtk_box_pack_start (GTK_BOX (main_vbox), frame_vert, TRUE, TRUE, 10);
576 hbox = gtk_hbox_new (FALSE, 0);
577 gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
578 gtk_container_add (GTK_CONTAINER (frame_vert), hbox);
580 gtk_box_pack_start (GTK_BOX (hbox),
581 create_bbox (FALSE, "Spread", 30, 85, 20, GTK_BUTTONBOX_SPREAD),
584 gtk_box_pack_start (GTK_BOX (hbox),
585 create_bbox (FALSE, "Edge", 30, 85, 20, GTK_BUTTONBOX_EDGE),
588 gtk_box_pack_start (GTK_BOX (hbox),
589 create_bbox (FALSE, "Start", 30, 85, 20, GTK_BUTTONBOX_START),
592 gtk_box_pack_start (GTK_BOX (hbox),
593 create_bbox (FALSE, "End", 30, 85, 20, GTK_BUTTONBOX_END),
597 if (!GTK_WIDGET_VISIBLE (window))
598 gtk_widget_show_all (window);
600 gtk_widget_destroy (window);
608 new_pixmap (char *filename,
610 GdkColor *background)
616 if (strcmp (filename, "test.xpm") == 0 ||
617 !file_exists (filename))
619 pixmap = gdk_pixmap_create_from_xpm_d (window, &mask,
624 pixmap = gdk_pixmap_create_from_xpm (window, &mask,
628 wpixmap = gtk_pixmap_new (pixmap, mask);
634 set_toolbar_horizontal (GtkWidget *widget,
637 gtk_toolbar_set_orientation (GTK_TOOLBAR (data), GTK_ORIENTATION_HORIZONTAL);
641 set_toolbar_vertical (GtkWidget *widget,
644 gtk_toolbar_set_orientation (GTK_TOOLBAR (data), GTK_ORIENTATION_VERTICAL);
648 set_toolbar_icons (GtkWidget *widget,
651 gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_ICONS);
655 set_toolbar_text (GtkWidget *widget,
658 gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_TEXT);
662 set_toolbar_both (GtkWidget *widget,
665 gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_BOTH);
669 set_toolbar_both_horiz (GtkWidget *widget,
672 gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_BOTH_HORIZ);
676 set_toolbar_small_space (GtkWidget *widget,
679 gtk_toolbar_set_space_size (GTK_TOOLBAR (data), 5);
683 set_toolbar_big_space (GtkWidget *widget,
686 gtk_toolbar_set_space_size (GTK_TOOLBAR (data), 10);
690 set_toolbar_enable (GtkWidget *widget,
693 gtk_toolbar_set_tooltips (GTK_TOOLBAR (data), TRUE);
697 set_toolbar_disable (GtkWidget *widget,
700 gtk_toolbar_set_tooltips (GTK_TOOLBAR (data), FALSE);
704 set_toolbar_borders (GtkWidget *widget,
707 gtk_toolbar_set_button_relief (GTK_TOOLBAR (data), GTK_RELIEF_NORMAL);
711 set_toolbar_borderless (GtkWidget *widget,
714 gtk_toolbar_set_button_relief (GTK_TOOLBAR (data), GTK_RELIEF_NONE);
718 set_toolbar_space_style_empty (GtkWidget *widget,
721 gtk_toolbar_set_space_style (GTK_TOOLBAR (data), GTK_TOOLBAR_SPACE_EMPTY);
725 set_toolbar_space_style_line (GtkWidget *widget,
728 gtk_toolbar_set_space_style (GTK_TOOLBAR (data), GTK_TOOLBAR_SPACE_LINE);
732 create_toolbar (void)
734 static GtkWidget *window = NULL;
740 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
741 gtk_window_set_title (GTK_WINDOW (window), "Toolbar test");
742 gtk_window_set_policy (GTK_WINDOW (window), FALSE, TRUE, TRUE);
744 gtk_signal_connect (GTK_OBJECT (window), "destroy",
745 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
748 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
749 gtk_widget_realize (window);
751 toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_BOTH);
752 gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NONE);
754 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
755 "Horizontal", "Horizontal toolbar layout", "Toolbar/Horizontal",
756 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
757 (GtkSignalFunc) set_toolbar_horizontal, toolbar);
758 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
759 "Vertical", "Vertical toolbar layout", "Toolbar/Vertical",
760 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
761 (GtkSignalFunc) set_toolbar_vertical, toolbar);
763 gtk_toolbar_append_space (GTK_TOOLBAR(toolbar));
765 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
766 "Icons", "Only show toolbar icons", "Toolbar/IconsOnly",
767 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
768 (GtkSignalFunc) set_toolbar_icons, toolbar);
769 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
770 "Text", "Only show toolbar text", "Toolbar/TextOnly",
771 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
772 (GtkSignalFunc) set_toolbar_text, toolbar);
773 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
774 "Both", "Show toolbar icons and text", "Toolbar/Both",
775 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
776 (GtkSignalFunc) set_toolbar_both, toolbar);
777 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
779 "Show toolbar icons and text in a horizontal fashion",
781 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
782 (GtkSignalFunc) set_toolbar_both_horiz, toolbar);
784 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
786 entry = gtk_entry_new ();
788 gtk_toolbar_append_widget (GTK_TOOLBAR (toolbar), entry, "This is an unusable GtkEntry ;)", "Hey don't click me!!!");
790 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
792 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
793 "Small", "Use small spaces", "Toolbar/Small",
794 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
795 (GtkSignalFunc) set_toolbar_small_space, toolbar);
796 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
797 "Big", "Use big spaces", "Toolbar/Big",
798 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
799 (GtkSignalFunc) set_toolbar_big_space, toolbar);
801 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
803 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
804 "Enable", "Enable tooltips", NULL,
805 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
806 (GtkSignalFunc) set_toolbar_enable, toolbar);
807 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
808 "Disable", "Disable tooltips", NULL,
809 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
810 (GtkSignalFunc) set_toolbar_disable, toolbar);
812 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
814 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
815 "Borders", "Show Borders", NULL,
816 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
817 (GtkSignalFunc) set_toolbar_borders, toolbar);
818 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
819 "Borderless", "Hide Borders", NULL,
820 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
821 (GtkSignalFunc) set_toolbar_borderless, toolbar);
823 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
825 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
826 "Empty", "Empty spaces", NULL,
827 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
828 (GtkSignalFunc) set_toolbar_space_style_empty, toolbar);
829 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
830 "Lines", "Lines in spaces", NULL,
831 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
832 (GtkSignalFunc) set_toolbar_space_style_line, toolbar);
834 gtk_container_add (GTK_CONTAINER (window), toolbar);
837 if (!GTK_WIDGET_VISIBLE (window))
838 gtk_widget_show_all (window);
840 gtk_widget_destroy (window);
844 make_toolbar (GtkWidget *window)
848 if (!GTK_WIDGET_REALIZED (window))
849 gtk_widget_realize (window);
851 toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_BOTH);
852 gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NONE);
854 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
855 "Horizontal", "Horizontal toolbar layout", NULL,
856 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
857 (GtkSignalFunc) set_toolbar_horizontal, toolbar);
858 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
859 "Vertical", "Vertical toolbar layout", NULL,
860 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
861 (GtkSignalFunc) set_toolbar_vertical, toolbar);
863 gtk_toolbar_append_space (GTK_TOOLBAR(toolbar));
865 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
866 "Icons", "Only show toolbar icons", NULL,
867 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
868 (GtkSignalFunc) set_toolbar_icons, toolbar);
869 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
870 "Text", "Only show toolbar text", NULL,
871 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
872 (GtkSignalFunc) set_toolbar_text, toolbar);
873 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
874 "Both", "Show toolbar icons and text", NULL,
875 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
876 (GtkSignalFunc) set_toolbar_both, toolbar);
878 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
880 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
881 "Small", "Use small spaces", NULL,
882 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
883 (GtkSignalFunc) set_toolbar_small_space, toolbar);
884 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
885 "Big", "Use big spaces", "Toolbar/Big",
886 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
887 (GtkSignalFunc) set_toolbar_big_space, toolbar);
889 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
891 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
892 "Enable", "Enable tooltips", NULL,
893 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
894 (GtkSignalFunc) set_toolbar_enable, toolbar);
895 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
896 "Disable", "Disable tooltips", NULL,
897 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
898 (GtkSignalFunc) set_toolbar_disable, toolbar);
900 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
902 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
903 "Borders", "Show Borders", NULL,
904 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
905 (GtkSignalFunc) set_toolbar_borders, toolbar);
906 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
907 "Borderless", "Hide Borders", NULL,
908 new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
909 (GtkSignalFunc) set_toolbar_borderless, toolbar);
918 static guint statusbar_counter = 1;
921 statusbar_push (GtkWidget *button,
922 GtkStatusbar *statusbar)
926 sprintf (text, "something %d", statusbar_counter++);
928 gtk_statusbar_push (statusbar, 1, text);
932 statusbar_pop (GtkWidget *button,
933 GtkStatusbar *statusbar)
935 gtk_statusbar_pop (statusbar, 1);
939 statusbar_steal (GtkWidget *button,
940 GtkStatusbar *statusbar)
942 gtk_statusbar_remove (statusbar, 1, 4);
946 statusbar_popped (GtkStatusbar *statusbar,
950 if (!statusbar->messages)
951 statusbar_counter = 1;
955 statusbar_contexts (GtkStatusbar *statusbar)
959 string = "any context";
960 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
962 gtk_statusbar_get_context_id (statusbar, string));
964 string = "idle messages";
965 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
967 gtk_statusbar_get_context_id (statusbar, string));
969 string = "some text";
970 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
972 gtk_statusbar_get_context_id (statusbar, string));
974 string = "hit the mouse";
975 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
977 gtk_statusbar_get_context_id (statusbar, string));
979 string = "hit the mouse2";
980 g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
982 gtk_statusbar_get_context_id (statusbar, string));
986 create_statusbar (void)
988 static GtkWidget *window = NULL;
992 GtkWidget *separator;
993 GtkWidget *statusbar;
997 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
999 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1000 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
1003 gtk_window_set_title (GTK_WINDOW (window), "statusbar");
1004 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
1006 box1 = gtk_vbox_new (FALSE, 0);
1007 gtk_container_add (GTK_CONTAINER (window), box1);
1009 box2 = gtk_vbox_new (FALSE, 10);
1010 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
1011 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
1013 statusbar = gtk_statusbar_new ();
1014 gtk_box_pack_end (GTK_BOX (box1), statusbar, TRUE, TRUE, 0);
1015 gtk_signal_connect (GTK_OBJECT (statusbar),
1017 GTK_SIGNAL_FUNC (statusbar_popped),
1020 button = gtk_widget_new (gtk_button_get_type (),
1021 "label", "push something",
1025 g_object_set (G_OBJECT (button),
1026 "signal::clicked", statusbar_push, statusbar,
1029 button = gtk_widget_new (gtk_button_get_type (),
1034 g_object_set (G_OBJECT (button),
1035 "signal_after::clicked", statusbar_pop, statusbar,
1038 button = gtk_widget_new (gtk_button_get_type (),
1039 "label", "steal #4",
1043 g_object_set (G_OBJECT (button),
1044 "signal_after::clicked", statusbar_steal, statusbar,
1047 button = gtk_widget_new (gtk_button_get_type (),
1048 "label", "test contexts",
1052 g_object_set (G_OBJECT (button),
1053 "swapped_signal_after::clicked", statusbar_contexts, statusbar,
1056 separator = gtk_hseparator_new ();
1057 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
1059 box2 = gtk_vbox_new (FALSE, 10);
1060 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
1061 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
1063 button = gtk_button_new_with_label ("close");
1064 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
1065 GTK_SIGNAL_FUNC(gtk_widget_destroy),
1066 GTK_OBJECT (window));
1067 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
1068 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
1069 gtk_widget_grab_default (button);
1072 if (!GTK_WIDGET_VISIBLE (window))
1073 gtk_widget_show_all (window);
1075 gtk_widget_destroy (window);
1083 cb_tree_destroy_event(GtkWidget* w)
1085 sTreeButtons* tree_buttons;
1087 /* free buttons structure associate at this tree */
1088 tree_buttons = gtk_object_get_user_data (GTK_OBJECT (w));
1089 g_free (tree_buttons);
1093 cb_add_new_item(GtkWidget* w, GtkTree* tree)
1095 sTreeButtons* tree_buttons;
1096 GList* selected_list;
1097 GtkWidget* selected_item;
1099 GtkWidget* item_new;
1102 tree_buttons = gtk_object_get_user_data(GTK_OBJECT(tree));
1104 selected_list = GTK_TREE_SELECTION_OLD(tree);
1106 if(selected_list == NULL)
1108 /* there is no item in tree */
1109 subtree = GTK_WIDGET(tree);
1113 /* list can have only one element */
1114 selected_item = GTK_WIDGET(selected_list->data);
1116 subtree = GTK_TREE_ITEM_SUBTREE(selected_item);
1120 /* current selected item have not subtree ... create it */
1121 subtree = gtk_tree_new();
1122 gtk_tree_item_set_subtree(GTK_TREE_ITEM(selected_item),
1127 /* at this point, we know which subtree will be used to add new item */
1128 /* create a new item */
1129 sprintf(buffer, "item add %d", tree_buttons->nb_item_add);
1130 item_new = gtk_tree_item_new_with_label(buffer);
1131 gtk_tree_append(GTK_TREE(subtree), item_new);
1132 gtk_widget_show(item_new);
1134 tree_buttons->nb_item_add++;
1138 cb_remove_item(GtkWidget*w, GtkTree* tree)
1140 GList* selected_list;
1143 selected_list = GTK_TREE_SELECTION_OLD(tree);
1147 while (selected_list)
1149 clear_list = g_list_prepend (clear_list, selected_list->data);
1150 selected_list = selected_list->next;
1153 clear_list = g_list_reverse (clear_list);
1154 gtk_tree_remove_items(tree, clear_list);
1156 g_list_free (clear_list);
1160 cb_remove_subtree(GtkWidget*w, GtkTree* tree)
1162 GList* selected_list;
1165 selected_list = GTK_TREE_SELECTION_OLD(tree);
1169 item = GTK_TREE_ITEM (selected_list->data);
1171 gtk_tree_item_remove_subtree (item);
1176 cb_tree_changed(GtkTree* tree)
1178 sTreeButtons* tree_buttons;
1179 GList* selected_list;
1182 tree_buttons = gtk_object_get_user_data(GTK_OBJECT(tree));
1184 selected_list = GTK_TREE_SELECTION_OLD(tree);
1185 nb_selected = g_list_length(selected_list);
1187 if(nb_selected == 0)
1189 if(tree->children == NULL)
1190 gtk_widget_set_sensitive(tree_buttons->add_button, TRUE);
1192 gtk_widget_set_sensitive(tree_buttons->add_button, FALSE);
1193 gtk_widget_set_sensitive(tree_buttons->remove_button, FALSE);
1194 gtk_widget_set_sensitive(tree_buttons->subtree_button, FALSE);
1198 gtk_widget_set_sensitive(tree_buttons->remove_button, TRUE);
1199 gtk_widget_set_sensitive(tree_buttons->add_button, (nb_selected == 1));
1200 gtk_widget_set_sensitive(tree_buttons->subtree_button, (nb_selected == 1));
1205 create_subtree(GtkWidget* item, guint level, guint nb_item_max, guint recursion_level_max)
1207 GtkWidget* item_subtree;
1208 GtkWidget* item_new;
1213 if(level == recursion_level_max) return;
1217 /* query with no root item */
1219 item_subtree = item;
1224 /* query with no root item */
1225 /* create subtree and associate it with current item */
1226 item_subtree = gtk_tree_new();
1230 for(nb_item = 0; nb_item < nb_item_max; nb_item++)
1232 sprintf(buffer, "item %d-%d", level, nb_item);
1233 item_new = gtk_tree_item_new_with_label(buffer);
1234 gtk_tree_append(GTK_TREE(item_subtree), item_new);
1235 create_subtree(item_new, level+1, nb_item_max, recursion_level_max);
1236 gtk_widget_show(item_new);
1240 gtk_tree_item_set_subtree(GTK_TREE_ITEM(item), item_subtree);
1244 create_tree_sample(guint selection_mode,
1245 guint draw_line, guint view_line, guint no_root_item,
1246 guint nb_item_max, guint recursion_level_max)
1251 GtkWidget* separator;
1253 GtkWidget* scrolled_win;
1254 GtkWidget* root_tree;
1255 GtkWidget* root_item;
1256 sTreeButtons* tree_buttons;
1258 /* create tree buttons struct */
1259 if ((tree_buttons = g_malloc (sizeof (sTreeButtons))) == NULL)
1261 g_error("can't allocate memory for tree structure !\n");
1264 tree_buttons->nb_item_add = 0;
1266 /* create top level window */
1267 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
1268 gtk_window_set_title(GTK_WINDOW(window), "Tree Sample");
1269 gtk_signal_connect(GTK_OBJECT(window), "destroy",
1270 (GtkSignalFunc) cb_tree_destroy_event, NULL);
1271 gtk_object_set_user_data(GTK_OBJECT(window), tree_buttons);
1273 box1 = gtk_vbox_new(FALSE, 0);
1274 gtk_container_add(GTK_CONTAINER(window), box1);
1275 gtk_widget_show(box1);
1277 /* create tree box */
1278 box2 = gtk_vbox_new(FALSE, 0);
1279 gtk_box_pack_start(GTK_BOX(box1), box2, TRUE, TRUE, 0);
1280 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1281 gtk_widget_show(box2);
1283 /* create scrolled window */
1284 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
1285 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
1286 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1287 gtk_box_pack_start (GTK_BOX (box2), scrolled_win, TRUE, TRUE, 0);
1288 gtk_widget_set_usize (scrolled_win, 200, 200);
1289 gtk_widget_show (scrolled_win);
1291 /* create root tree widget */
1292 root_tree = gtk_tree_new();
1293 gtk_signal_connect(GTK_OBJECT(root_tree), "selection_changed",
1294 (GtkSignalFunc)cb_tree_changed,
1296 gtk_object_set_user_data(GTK_OBJECT(root_tree), tree_buttons);
1297 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_win), root_tree);
1298 gtk_tree_set_selection_mode(GTK_TREE(root_tree), selection_mode);
1299 gtk_tree_set_view_lines(GTK_TREE(root_tree), draw_line);
1300 gtk_tree_set_view_mode(GTK_TREE(root_tree), !view_line);
1301 gtk_widget_show(root_tree);
1305 /* set root tree to subtree function with root item variable */
1306 root_item = GTK_WIDGET(root_tree);
1310 /* create root tree item widget */
1311 root_item = gtk_tree_item_new_with_label("root item");
1312 gtk_tree_append(GTK_TREE(root_tree), root_item);
1313 gtk_widget_show(root_item);
1315 create_subtree(root_item, -no_root_item, nb_item_max, recursion_level_max);
1317 box2 = gtk_vbox_new(FALSE, 0);
1318 gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, FALSE, 0);
1319 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1320 gtk_widget_show(box2);
1322 button = gtk_button_new_with_label("Add Item");
1323 gtk_widget_set_sensitive(button, FALSE);
1324 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1325 (GtkSignalFunc) cb_add_new_item,
1326 (gpointer)root_tree);
1327 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1328 gtk_widget_show(button);
1329 tree_buttons->add_button = button;
1331 button = gtk_button_new_with_label("Remove Item(s)");
1332 gtk_widget_set_sensitive(button, FALSE);
1333 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1334 (GtkSignalFunc) cb_remove_item,
1335 (gpointer)root_tree);
1336 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1337 gtk_widget_show(button);
1338 tree_buttons->remove_button = button;
1340 button = gtk_button_new_with_label("Remove Subtree");
1341 gtk_widget_set_sensitive(button, FALSE);
1342 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1343 (GtkSignalFunc) cb_remove_subtree,
1344 (gpointer)root_tree);
1345 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1346 gtk_widget_show(button);
1347 tree_buttons->subtree_button = button;
1349 /* create separator */
1350 separator = gtk_hseparator_new();
1351 gtk_box_pack_start(GTK_BOX(box1), separator, FALSE, FALSE, 0);
1352 gtk_widget_show(separator);
1354 /* create button box */
1355 box2 = gtk_vbox_new(FALSE, 0);
1356 gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, FALSE, 0);
1357 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1358 gtk_widget_show(box2);
1360 button = gtk_button_new_with_label("Close");
1361 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1362 gtk_signal_connect_object(GTK_OBJECT (button), "clicked",
1363 (GtkSignalFunc) gtk_widget_destroy,
1364 GTK_OBJECT(window));
1365 gtk_widget_show(button);
1367 gtk_widget_show(window);
1371 cb_create_tree(GtkWidget* w)
1373 guint selection_mode = GTK_SELECTION_SINGLE;
1378 guint recursion_level;
1380 /* get selection mode choice */
1381 if(GTK_TOGGLE_BUTTON(sTreeSampleSelection.single_button)->active)
1382 selection_mode = GTK_SELECTION_SINGLE;
1384 if(GTK_TOGGLE_BUTTON(sTreeSampleSelection.browse_button)->active)
1385 selection_mode = GTK_SELECTION_BROWSE;
1387 selection_mode = GTK_SELECTION_MULTIPLE;
1389 /* get options choice */
1390 draw_line = GTK_TOGGLE_BUTTON(sTreeSampleSelection.draw_line_button)->active;
1391 view_line = GTK_TOGGLE_BUTTON(sTreeSampleSelection.view_line_button)->active;
1392 no_root_item = GTK_TOGGLE_BUTTON(sTreeSampleSelection.no_root_item_button)->active;
1395 nb_item = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(sTreeSampleSelection.nb_item_spinner));
1396 recursion_level = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(sTreeSampleSelection.recursion_spinner));
1398 if (pow (nb_item, recursion_level) > 10000)
1400 g_print ("%g total items? That will take a very long time. Try less\n",
1401 pow (nb_item, recursion_level));
1405 create_tree_sample(selection_mode, draw_line, view_line, no_root_item, nb_item, recursion_level);
1409 create_tree_mode_window(void)
1411 static GtkWidget* window;
1419 GtkWidget* separator;
1426 /* create toplevel window */
1427 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
1428 gtk_window_set_title(GTK_WINDOW(window), "Set Tree Parameters");
1429 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1430 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
1432 box1 = gtk_vbox_new(FALSE, 0);
1433 gtk_container_add(GTK_CONTAINER(window), box1);
1435 /* create upper box - selection box */
1436 box2 = gtk_vbox_new(FALSE, 5);
1437 gtk_box_pack_start(GTK_BOX(box1), box2, TRUE, TRUE, 0);
1438 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1440 box3 = gtk_hbox_new(FALSE, 5);
1441 gtk_box_pack_start(GTK_BOX(box2), box3, TRUE, TRUE, 0);
1443 /* create selection mode frame */
1444 frame = gtk_frame_new("Selection Mode");
1445 gtk_box_pack_start(GTK_BOX(box3), frame, TRUE, TRUE, 0);
1447 box4 = gtk_vbox_new(FALSE, 0);
1448 gtk_container_add(GTK_CONTAINER(frame), box4);
1449 gtk_container_set_border_width(GTK_CONTAINER(box4), 5);
1451 /* create radio button */
1452 button = gtk_radio_button_new_with_label(NULL, "SINGLE");
1453 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1454 sTreeSampleSelection.single_button = button;
1456 button = gtk_radio_button_new_with_label(gtk_radio_button_group (GTK_RADIO_BUTTON (button)),
1458 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1459 sTreeSampleSelection.browse_button = button;
1461 button = gtk_radio_button_new_with_label(gtk_radio_button_group (GTK_RADIO_BUTTON (button)),
1463 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1464 sTreeSampleSelection.multiple_button = button;
1466 sTreeSampleSelection.selection_mode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (button));
1468 /* create option mode frame */
1469 frame = gtk_frame_new("Options");
1470 gtk_box_pack_start(GTK_BOX(box3), frame, TRUE, TRUE, 0);
1472 box4 = gtk_vbox_new(FALSE, 0);
1473 gtk_container_add(GTK_CONTAINER(frame), box4);
1474 gtk_container_set_border_width(GTK_CONTAINER(box4), 5);
1476 /* create check button */
1477 button = gtk_check_button_new_with_label("Draw line");
1478 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1479 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
1480 sTreeSampleSelection.draw_line_button = button;
1482 button = gtk_check_button_new_with_label("View Line mode");
1483 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1484 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
1485 sTreeSampleSelection.view_line_button = button;
1487 button = gtk_check_button_new_with_label("Without Root item");
1488 gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
1489 sTreeSampleSelection.no_root_item_button = button;
1491 /* create recursion parameter */
1492 frame = gtk_frame_new("Size Parameters");
1493 gtk_box_pack_start(GTK_BOX(box2), frame, TRUE, TRUE, 0);
1495 box4 = gtk_hbox_new(FALSE, 5);
1496 gtk_container_add(GTK_CONTAINER(frame), box4);
1497 gtk_container_set_border_width(GTK_CONTAINER(box4), 5);
1499 /* create number of item spin button */
1500 box5 = gtk_hbox_new(FALSE, 5);
1501 gtk_box_pack_start(GTK_BOX(box4), box5, FALSE, FALSE, 0);
1503 label = gtk_label_new("Number of items : ");
1504 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
1505 gtk_box_pack_start (GTK_BOX (box5), label, FALSE, TRUE, 0);
1507 adj = (GtkAdjustment *) gtk_adjustment_new ((gfloat)DEFAULT_NUMBER_OF_ITEM, 1.0, 255.0, 1.0,
1509 spinner = gtk_spin_button_new (adj, 0, 0);
1510 gtk_box_pack_start (GTK_BOX (box5), spinner, FALSE, TRUE, 0);
1511 sTreeSampleSelection.nb_item_spinner = spinner;
1513 /* create recursion level spin button */
1514 box5 = gtk_hbox_new(FALSE, 5);
1515 gtk_box_pack_start(GTK_BOX(box4), box5, FALSE, FALSE, 0);
1517 label = gtk_label_new("Depth : ");
1518 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
1519 gtk_box_pack_start (GTK_BOX (box5), label, FALSE, TRUE, 0);
1521 adj = (GtkAdjustment *) gtk_adjustment_new ((gfloat)DEFAULT_RECURSION_LEVEL, 0.0, 255.0, 1.0,
1523 spinner = gtk_spin_button_new (adj, 0, 0);
1524 gtk_box_pack_start (GTK_BOX (box5), spinner, FALSE, TRUE, 0);
1525 sTreeSampleSelection.recursion_spinner = spinner;
1527 /* create horizontal separator */
1528 separator = gtk_hseparator_new();
1529 gtk_box_pack_start(GTK_BOX(box1), separator, FALSE, FALSE, 0);
1531 /* create bottom button box */
1532 box2 = gtk_hbox_new(TRUE, 10);
1533 gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, FALSE, 0);
1534 gtk_container_set_border_width(GTK_CONTAINER(box2), 5);
1536 button = gtk_button_new_with_label("Create Tree");
1537 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1538 gtk_signal_connect(GTK_OBJECT (button), "clicked",
1539 (GtkSignalFunc) cb_create_tree, NULL);
1541 button = gtk_button_new_with_label("Close");
1542 gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 0);
1543 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
1544 GTK_SIGNAL_FUNC(gtk_widget_destroy),
1545 GTK_OBJECT (window));
1547 if (!GTK_WIDGET_VISIBLE (window))
1548 gtk_widget_show_all (window);
1550 gtk_widget_destroy (window);
1558 handle_box_child_signal (GtkHandleBox *hb,
1560 const gchar *action)
1562 printf ("%s: child <%s> %sed\n",
1563 gtk_type_name (GTK_OBJECT_TYPE (hb)),
1564 gtk_type_name (GTK_OBJECT_TYPE (child)),
1569 create_handle_box (void)
1571 static GtkWidget* window = NULL;
1572 GtkWidget *handle_box;
1573 GtkWidget *handle_box2;
1578 GtkWidget *separator;
1582 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1583 gtk_window_set_title (GTK_WINDOW (window),
1585 gtk_window_set_policy (GTK_WINDOW (window),
1590 gtk_signal_connect (GTK_OBJECT (window), "destroy",
1591 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
1594 gtk_container_set_border_width (GTK_CONTAINER (window), 20);
1596 vbox = gtk_vbox_new (FALSE, 0);
1597 gtk_container_add (GTK_CONTAINER (window), vbox);
1598 gtk_widget_show (vbox);
1600 label = gtk_label_new ("Above");
1601 gtk_container_add (GTK_CONTAINER (vbox), label);
1602 gtk_widget_show (label);
1604 separator = gtk_hseparator_new ();
1605 gtk_container_add (GTK_CONTAINER (vbox), separator);
1606 gtk_widget_show (separator);
1608 hbox = gtk_hbox_new (FALSE, 10);
1609 gtk_container_add (GTK_CONTAINER (vbox), hbox);
1610 gtk_widget_show (hbox);
1612 separator = gtk_hseparator_new ();
1613 gtk_container_add (GTK_CONTAINER (vbox), separator);
1614 gtk_widget_show (separator);
1616 label = gtk_label_new ("Below");
1617 gtk_container_add (GTK_CONTAINER (vbox), label);
1618 gtk_widget_show (label);
1620 handle_box = gtk_handle_box_new ();
1621 gtk_box_pack_start (GTK_BOX (hbox), handle_box, FALSE, FALSE, 0);
1622 gtk_signal_connect (GTK_OBJECT (handle_box),
1624 GTK_SIGNAL_FUNC (handle_box_child_signal),
1626 gtk_signal_connect (GTK_OBJECT (handle_box),
1628 GTK_SIGNAL_FUNC (handle_box_child_signal),
1630 gtk_widget_show (handle_box);
1632 toolbar = make_toolbar (window);
1633 gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NORMAL);
1634 gtk_container_add (GTK_CONTAINER (handle_box), toolbar);
1635 gtk_widget_show (toolbar);
1637 handle_box = gtk_handle_box_new ();
1638 gtk_box_pack_start (GTK_BOX (hbox), handle_box, FALSE, FALSE, 0);
1639 gtk_signal_connect (GTK_OBJECT (handle_box),
1641 GTK_SIGNAL_FUNC (handle_box_child_signal),
1643 gtk_signal_connect (GTK_OBJECT (handle_box),
1645 GTK_SIGNAL_FUNC (handle_box_child_signal),
1647 gtk_widget_show (handle_box);
1649 handle_box2 = gtk_handle_box_new ();
1650 gtk_container_add (GTK_CONTAINER (handle_box), handle_box2);
1651 gtk_signal_connect (GTK_OBJECT (handle_box2),
1653 GTK_SIGNAL_FUNC (handle_box_child_signal),
1655 gtk_signal_connect (GTK_OBJECT (handle_box2),
1657 GTK_SIGNAL_FUNC (handle_box_child_signal),
1659 gtk_widget_show (handle_box2);
1661 label = gtk_label_new ("Fooo!");
1662 gtk_container_add (GTK_CONTAINER (handle_box2), label);
1663 gtk_widget_show (label);
1666 if (!GTK_WIDGET_VISIBLE (window))
1667 gtk_widget_show (window);
1669 gtk_widget_destroy (window);
1673 * Test for getting an image from a drawable
1684 take_snapshot (GtkWidget *button,
1687 struct GetImageData *gid = data;
1688 GdkRectangle visible;
1690 int height_fraction;
1693 GdkColor color = { 0, 30000, 0, 0 };
1694 GdkRectangle target;
1697 /* Do some begin_paint_rect on some random rects, draw some
1698 * distinctive stuff into those rects, then take the snapshot.
1699 * figure out whether any rects were overlapped and report to
1703 visible = gid->sw->allocation;
1705 visible.x = gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (gid->sw))->value;
1706 visible.y = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (gid->sw))->value;
1708 width_fraction = visible.width / 4;
1709 height_fraction = visible.height / 4;
1711 gc = gdk_gc_new (gid->src->window);
1712 black_gc = gid->src->style->black_gc;
1714 gdk_gc_set_rgb_fg_color (gc, &color);
1717 target.x = visible.x + width_fraction;
1718 target.y = visible.y + height_fraction * 3;
1719 target.width = width_fraction;
1720 target.height = height_fraction / 2;
1722 gdk_window_begin_paint_rect (gid->src->window,
1725 gdk_draw_rectangle (gid->src->window,
1729 target.width, target.height);
1731 gdk_draw_rectangle (gid->src->window,
1734 target.x + 10, target.y + 10,
1735 target.width - 20, target.height - 20);
1737 target.x = visible.x + width_fraction;
1738 target.y = visible.y + height_fraction;
1739 target.width = width_fraction;
1740 target.height = height_fraction;
1742 gdk_window_begin_paint_rect (gid->src->window,
1745 gdk_draw_rectangle (gid->src->window,
1749 target.width, target.height);
1751 gdk_draw_rectangle (gid->src->window,
1754 target.x + 10, target.y + 10,
1755 target.width - 20, target.height - 20);
1757 target.x = visible.x + width_fraction * 3;
1758 target.y = visible.y + height_fraction;
1759 target.width = width_fraction / 2;
1760 target.height = height_fraction;
1762 gdk_window_begin_paint_rect (gid->src->window,
1765 gdk_draw_rectangle (gid->src->window,
1769 target.width, target.height);
1771 gdk_draw_rectangle (gid->src->window,
1774 target.x + 10, target.y + 10,
1775 target.width - 20, target.height - 20);
1777 target.x = visible.x + width_fraction * 2;
1778 target.y = visible.y + height_fraction * 2;
1779 target.width = width_fraction / 4;
1780 target.height = height_fraction / 4;
1782 gdk_window_begin_paint_rect (gid->src->window,
1785 gdk_draw_rectangle (gid->src->window,
1789 target.width, target.height);
1791 gdk_draw_rectangle (gid->src->window,
1794 target.x + 10, target.y + 10,
1795 target.width - 20, target.height - 20);
1797 target.x += target.width / 2;
1798 target.y += target.width / 2;
1800 gdk_window_begin_paint_rect (gid->src->window,
1803 gdk_draw_rectangle (gid->src->window,
1807 target.width, target.height);
1809 gdk_draw_rectangle (gid->src->window,
1812 target.x + 10, target.y + 10,
1813 target.width - 20, target.height - 20);
1815 /* Screen shot area */
1817 target.x = visible.x + width_fraction * 1.5;
1818 target.y = visible.y + height_fraction * 1.5;
1819 target.width = width_fraction * 2;
1820 target.height = height_fraction * 2;
1822 shot = gdk_drawable_get_image (gid->src->window,
1824 target.width, target.height);
1826 gtk_image_set_from_image (GTK_IMAGE (gid->snap),
1829 g_object_unref (G_OBJECT (shot));
1831 gdk_window_end_paint (gid->src->window);
1832 gdk_window_end_paint (gid->src->window);
1833 gdk_window_end_paint (gid->src->window);
1834 gdk_window_end_paint (gid->src->window);
1835 gdk_window_end_paint (gid->src->window);
1837 gdk_draw_rectangle (gid->src->window,
1838 gid->src->style->black_gc,
1841 target.width, target.height);
1843 g_object_unref (G_OBJECT (gc));
1847 image_source_expose (GtkWidget *da,
1848 GdkEventExpose *event,
1851 int x = event->area.x;
1852 GdkColor red = { 0, 65535, 0, 0 };
1853 GdkColor green = { 0, 0, 65535, 0 };
1854 GdkColor blue = { 0, 0, 0, 65535 };
1857 gc = gdk_gc_new (event->window);
1859 while (x < (event->area.x + event->area.width))
1866 gdk_gc_set_rgb_fg_color (gc, &red);
1872 gdk_gc_set_rgb_fg_color (gc, &green);
1878 gdk_gc_set_rgb_fg_color (gc, &blue);
1882 g_assert_not_reached ();
1886 gdk_draw_line (event->window,
1889 x, event->area.y + event->area.height);
1894 g_object_unref (G_OBJECT (gc));
1900 create_get_image (void)
1902 static GtkWidget *window = NULL;
1905 gtk_widget_destroy (window);
1914 struct GetImageData *gid;
1916 gid = g_new (struct GetImageData, 1);
1918 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1920 gtk_signal_connect (GTK_OBJECT (window),
1922 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
1925 gtk_object_set_data_full (GTK_OBJECT (window),
1926 "testgtk-get-image-data",
1930 vbox = gtk_vbox_new (FALSE, 0);
1932 gtk_container_add (GTK_CONTAINER (window), vbox);
1934 sw = gtk_scrolled_window_new (NULL, NULL);
1935 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
1936 GTK_POLICY_AUTOMATIC,
1937 GTK_POLICY_AUTOMATIC);
1941 gtk_widget_set_usize (sw, 400, 400);
1943 src = gtk_drawing_area_new ();
1944 gtk_widget_set_usize (src, 10000, 10000);
1946 gtk_signal_connect (GTK_OBJECT (src),
1948 GTK_SIGNAL_FUNC (image_source_expose),
1953 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (sw),
1956 gtk_box_pack_start (GTK_BOX (vbox),
1960 hbox = gtk_hbox_new (FALSE, 3);
1962 snap = gtk_widget_new (GTK_TYPE_IMAGE, NULL);
1966 sw = gtk_scrolled_window_new (NULL, NULL);
1967 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
1968 GTK_POLICY_AUTOMATIC,
1969 GTK_POLICY_AUTOMATIC);
1970 gtk_widget_set_usize (sw, 300, 300);
1972 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (sw), snap);
1974 gtk_box_pack_end (GTK_BOX (hbox), sw, FALSE, FALSE, 5);
1976 button = gtk_button_new_with_label ("Get image from drawable");
1978 gtk_signal_connect (GTK_OBJECT (button),
1980 GTK_SIGNAL_FUNC (take_snapshot),
1983 gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
1985 gtk_box_pack_end (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
1987 gtk_widget_show_all (window);
1995 sensitivity_toggled (GtkWidget *toggle,
1998 gtk_widget_set_sensitive (widget, GTK_TOGGLE_BUTTON (toggle)->active);
2002 create_sensitivity_control (GtkWidget *widget)
2006 button = gtk_toggle_button_new_with_label ("Sensitive");
2008 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button),
2009 GTK_WIDGET_IS_SENSITIVE (widget));
2011 gtk_signal_connect (GTK_OBJECT (button),
2013 GTK_SIGNAL_FUNC (sensitivity_toggled),
2016 gtk_widget_show_all (button);
2022 set_selectable_recursive (GtkWidget *widget,
2025 if (GTK_IS_CONTAINER (widget))
2030 children = gtk_container_children (GTK_CONTAINER (widget));
2034 set_selectable_recursive (tmp->data, setting);
2038 g_list_free (children);
2040 else if (GTK_IS_LABEL (widget))
2042 gtk_label_set_selectable (GTK_LABEL (widget), setting);
2047 selectable_toggled (GtkWidget *toggle,
2050 set_selectable_recursive (widget,
2051 GTK_TOGGLE_BUTTON (toggle)->active);
2055 create_selectable_control (GtkWidget *widget)
2059 button = gtk_toggle_button_new_with_label ("Selectable");
2061 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button),
2064 gtk_signal_connect (GTK_OBJECT (button),
2066 GTK_SIGNAL_FUNC (selectable_toggled),
2069 gtk_widget_show_all (button);
2074 void create_labels (void)
2076 static GtkWidget *window = NULL;
2087 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2088 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2089 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2092 gtk_window_set_title (GTK_WINDOW (window), "Label");
2094 vbox = gtk_vbox_new (FALSE, 5);
2096 hbox = gtk_hbox_new (FALSE, 5);
2097 gtk_container_add (GTK_CONTAINER (window), vbox);
2099 gtk_box_pack_end (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
2101 button = create_sensitivity_control (hbox);
2103 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
2105 button = create_selectable_control (hbox);
2107 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
2109 vbox = gtk_vbox_new (FALSE, 5);
2111 gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);
2112 gtk_container_set_border_width (GTK_CONTAINER (window), 5);
2114 frame = gtk_frame_new ("Normal Label");
2115 label = gtk_label_new ("This is a Normal label");
2116 gtk_container_add (GTK_CONTAINER (frame), label);
2117 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2119 frame = gtk_frame_new ("Multi-line Label");
2120 label = gtk_label_new ("This is a Multi-line label.\nSecond line\nThird line");
2121 gtk_container_add (GTK_CONTAINER (frame), label);
2122 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2124 frame = gtk_frame_new ("Left Justified Label");
2125 label = gtk_label_new ("This is a Left-Justified\nMulti-line label.\nThird line");
2126 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2127 gtk_container_add (GTK_CONTAINER (frame), label);
2128 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2130 frame = gtk_frame_new ("Right Justified Label");
2131 label = gtk_label_new ("This is a Right-Justified\nMulti-line label.\nFourth line, (j/k)");
2132 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_RIGHT);
2133 gtk_container_add (GTK_CONTAINER (frame), label);
2134 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2136 frame = gtk_frame_new ("Internationalized Label");
2137 label = gtk_label_new ("French (Français) Bonjour, Salut\n"
2138 "Korean (한글) 안녕하세요, 안녕하십니까\n"
2139 "Russian (Русский) Здравствуйте!");
2140 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2141 gtk_container_add (GTK_CONTAINER (frame), label);
2142 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2144 frame = gtk_frame_new ("Bidirection Label");
2145 label = gtk_label_new ("Arabic السلام عليكم\n"
2147 gtk_widget_set_direction (label, GTK_TEXT_DIR_RTL);
2148 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_RIGHT);
2149 gtk_container_add (GTK_CONTAINER (frame), label);
2150 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2152 vbox = gtk_vbox_new (FALSE, 5);
2153 gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);
2154 frame = gtk_frame_new ("Line wrapped label");
2155 label = gtk_label_new ("This is an example of a line-wrapped label. It should not be taking "\
2156 "up the entire "/* big space to test spacing */\
2157 "width allocated to it, but automatically wraps the words to fit. "\
2158 "The time has come, for all good men, to come to the aid of their party. "\
2159 "The sixth sheik's six sheep's sick.\n"\
2160 " It supports multiple paragraphs correctly, and correctly adds "\
2161 "many extra spaces. ");
2163 gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
2164 gtk_container_add (GTK_CONTAINER (frame), label);
2165 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2167 frame = gtk_frame_new ("Filled, wrapped label");
2168 label = gtk_label_new ("This is an example of a line-wrapped, filled label. It should be taking "\
2169 "up the entire width allocated to it. Here is a seneance to prove "\
2170 "my point. Here is another sentence. "\
2171 "Here comes the sun, do de do de do.\n"\
2172 " This is a new paragraph.\n"\
2173 " This is another newer, longer, better paragraph. It is coming to an end, "\
2175 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_FILL);
2176 gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
2177 gtk_container_add (GTK_CONTAINER (frame), label);
2178 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2180 frame = gtk_frame_new ("Underlined label");
2181 label = gtk_label_new ("This label is underlined!\n"
2182 "This one is underlined (こんにちは) in quite a funky fashion");
2183 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2184 gtk_label_set_pattern (GTK_LABEL (label), "_________________________ _ _________ _ _____ _ __ __ ___ ____ _____");
2185 gtk_container_add (GTK_CONTAINER (frame), label);
2186 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2188 frame = gtk_frame_new ("Markup label");
2189 label = gtk_label_new (NULL);
2191 /* There's also a gtk_label_set_markup() without accel if you
2192 * don't have an accelerator key
2195 gtk_label_set_markup_with_accel (GTK_LABEL (label),
2196 "This <span foreground=\"blue\" background=\"orange\">label</span> has "
2197 "<b>markup</b> _such as "
2198 "<big><i>Big Italics</i></big>\n"
2199 "<tt>Monospace font</tt>\n"
2200 "<u>Underline!</u>\n"
2202 "<span foreground=\"green\" background=\"red\">Ugly colors</span>\n"
2203 "and nothing on this line,\n"
2206 "or even on this one\n"
2207 "la <big>la <big>la <big>la <big>la</big></big></big></big>\n"
2208 "but this _word is <span foreground=\"purple\"><big>purple</big></span>\n"
2209 "<span underline=\"double\">We like <sup>superscript</sup> and <sub>subscript</sub> too</span>");
2211 g_return_if_fail (keyval == GDK_s);
2213 gtk_container_add (GTK_CONTAINER (frame), label);
2214 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
2217 if (!GTK_WIDGET_VISIBLE (window))
2218 gtk_widget_show_all (window);
2220 gtk_widget_destroy (window);
2228 reparent_label (GtkWidget *widget,
2229 GtkWidget *new_parent)
2233 label = gtk_object_get_user_data (GTK_OBJECT (widget));
2235 gtk_widget_reparent (label, new_parent);
2239 set_parent_signal (GtkWidget *child,
2240 GtkWidget *old_parent,
2243 g_print ("set_parent for \"%s\": new parent: \"%s\", old parent: \"%s\", data: %d\n",
2244 gtk_type_name (GTK_OBJECT_TYPE (child)),
2245 child->parent ? gtk_type_name (GTK_OBJECT_TYPE (child->parent)) : "NULL",
2246 old_parent ? gtk_type_name (GTK_OBJECT_TYPE (old_parent)) : "NULL",
2247 GPOINTER_TO_INT (func_data));
2251 create_reparent (void)
2253 static GtkWidget *window = NULL;
2260 GtkWidget *separator;
2264 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2266 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2267 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2270 gtk_window_set_title (GTK_WINDOW (window), "reparent");
2271 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
2273 box1 = gtk_vbox_new (FALSE, 0);
2274 gtk_container_add (GTK_CONTAINER (window), box1);
2276 box2 = gtk_hbox_new (FALSE, 5);
2277 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2278 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2280 label = gtk_label_new ("Hello World");
2282 frame = gtk_frame_new ("Frame 1");
2283 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
2285 box3 = gtk_vbox_new (FALSE, 5);
2286 gtk_container_set_border_width (GTK_CONTAINER (box3), 5);
2287 gtk_container_add (GTK_CONTAINER (frame), box3);
2289 button = gtk_button_new_with_label ("switch");
2290 gtk_signal_connect (GTK_OBJECT (button), "clicked",
2291 GTK_SIGNAL_FUNC(reparent_label),
2293 gtk_object_set_user_data (GTK_OBJECT (button), label);
2294 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
2296 gtk_box_pack_start (GTK_BOX (box3), label, FALSE, TRUE, 0);
2297 gtk_signal_connect (GTK_OBJECT (label),
2299 GTK_SIGNAL_FUNC (set_parent_signal),
2300 GINT_TO_POINTER (42));
2302 frame = gtk_frame_new ("Frame 2");
2303 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
2305 box3 = gtk_vbox_new (FALSE, 5);
2306 gtk_container_set_border_width (GTK_CONTAINER (box3), 5);
2307 gtk_container_add (GTK_CONTAINER (frame), box3);
2309 button = gtk_button_new_with_label ("switch");
2310 gtk_signal_connect (GTK_OBJECT (button), "clicked",
2311 GTK_SIGNAL_FUNC(reparent_label),
2313 gtk_object_set_user_data (GTK_OBJECT (button), label);
2314 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
2316 separator = gtk_hseparator_new ();
2317 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2319 box2 = gtk_vbox_new (FALSE, 10);
2320 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2321 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2323 button = gtk_button_new_with_label ("close");
2324 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2325 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2326 GTK_OBJECT (window));
2327 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2328 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2329 gtk_widget_grab_default (button);
2332 if (!GTK_WIDGET_VISIBLE (window))
2333 gtk_widget_show_all (window);
2335 gtk_widget_destroy (window);
2341 gint upositionx = 0;
2342 gint upositiony = 0;
2345 uposition_configure (GtkWidget *window)
2351 lx = gtk_object_get_data (GTK_OBJECT (window), "x");
2352 ly = gtk_object_get_data (GTK_OBJECT (window), "y");
2354 gdk_window_get_root_origin (window->window, &upositionx, &upositiony);
2355 sprintf (buffer, "%d", upositionx);
2356 gtk_label_set_text (lx, buffer);
2357 sprintf (buffer, "%d", upositiony);
2358 gtk_label_set_text (ly, buffer);
2364 uposition_stop_configure (GtkToggleButton *toggle,
2368 gtk_signal_handler_block_by_func (window, uposition_configure, NULL);
2370 gtk_signal_handler_unblock_by_func (window, uposition_configure, NULL);
2374 create_saved_position (void)
2376 static GtkWidget *window = NULL;
2381 GtkWidget *main_vbox;
2389 window = gtk_widget_new (GTK_TYPE_WINDOW,
2390 "type", GTK_WINDOW_TOPLEVEL,
2391 "signal::configure_event", uposition_configure, NULL,
2394 "title", "Saved Position",
2397 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2398 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
2401 main_vbox = gtk_vbox_new (FALSE, 5);
2402 gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 0);
2403 gtk_container_add (GTK_CONTAINER (window), main_vbox);
2406 gtk_widget_new (gtk_vbox_get_type (),
2407 "GtkBox::homogeneous", FALSE,
2408 "GtkBox::spacing", 5,
2409 "GtkContainer::border_width", 10,
2410 "GtkWidget::parent", main_vbox,
2411 "GtkWidget::visible", TRUE,
2412 "child", gtk_widget_new (GTK_TYPE_TOGGLE_BUTTON,
2413 "label", "Stop Events",
2415 "signal::clicked", uposition_stop_configure, window,
2420 hbox = gtk_hbox_new (FALSE, 0);
2421 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
2422 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
2424 label = gtk_label_new ("X Origin : ");
2425 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
2426 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
2428 x_label = gtk_label_new ("");
2429 gtk_box_pack_start (GTK_BOX (hbox), x_label, TRUE, TRUE, 0);
2430 gtk_object_set_data (GTK_OBJECT (window), "x", x_label);
2432 hbox = gtk_hbox_new (FALSE, 0);
2433 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
2434 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
2436 label = gtk_label_new ("Y Origin : ");
2437 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
2438 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
2440 y_label = gtk_label_new ("");
2441 gtk_box_pack_start (GTK_BOX (hbox), y_label, TRUE, TRUE, 0);
2442 gtk_object_set_data (GTK_OBJECT (window), "y", y_label);
2445 gtk_widget_new (gtk_hseparator_get_type (),
2446 "GtkWidget::visible", TRUE,
2448 gtk_box_pack_start (GTK_BOX (main_vbox), any, FALSE, TRUE, 0);
2450 hbox = gtk_hbox_new (FALSE, 0);
2451 gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
2452 gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
2454 button = gtk_button_new_with_label ("Close");
2455 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2456 GTK_SIGNAL_FUNC (gtk_widget_destroy),
2457 GTK_OBJECT (window));
2458 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
2459 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2460 gtk_widget_grab_default (button);
2462 gtk_widget_show_all (window);
2465 gtk_widget_destroy (window);
2473 create_pixmap (void)
2475 static GtkWidget *window = NULL;
2481 GtkWidget *separator;
2482 GtkWidget *pixmapwid;
2486 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2488 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2489 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2492 gtk_window_set_title (GTK_WINDOW (window), "GtkPixmap");
2493 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
2494 gtk_widget_realize(window);
2496 box1 = gtk_vbox_new (FALSE, 0);
2497 gtk_container_add (GTK_CONTAINER (window), box1);
2499 box2 = gtk_vbox_new (FALSE, 10);
2500 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2501 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2503 button = gtk_button_new ();
2504 gtk_box_pack_start (GTK_BOX (box2), button, FALSE, FALSE, 0);
2506 pixmapwid = new_pixmap ("test.xpm", window->window, NULL);
2508 label = gtk_label_new ("Pixmap\ntest");
2509 box3 = gtk_hbox_new (FALSE, 0);
2510 gtk_container_set_border_width (GTK_CONTAINER (box3), 2);
2511 gtk_container_add (GTK_CONTAINER (box3), pixmapwid);
2512 gtk_container_add (GTK_CONTAINER (box3), label);
2513 gtk_container_add (GTK_CONTAINER (button), box3);
2515 button = gtk_button_new ();
2516 gtk_box_pack_start (GTK_BOX (box2), button, FALSE, FALSE, 0);
2518 pixmapwid = new_pixmap ("test.xpm", window->window, NULL);
2520 label = gtk_label_new ("Pixmap\ntest");
2521 box3 = gtk_hbox_new (FALSE, 0);
2522 gtk_container_set_border_width (GTK_CONTAINER (box3), 2);
2523 gtk_container_add (GTK_CONTAINER (box3), pixmapwid);
2524 gtk_container_add (GTK_CONTAINER (box3), label);
2525 gtk_container_add (GTK_CONTAINER (button), box3);
2527 gtk_widget_set_sensitive (button, FALSE);
2529 separator = gtk_hseparator_new ();
2530 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2532 box2 = gtk_vbox_new (FALSE, 10);
2533 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2534 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2536 button = gtk_button_new_with_label ("close");
2537 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2538 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2539 GTK_OBJECT (window));
2540 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2541 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2542 gtk_widget_grab_default (button);
2545 if (!GTK_WIDGET_VISIBLE (window))
2546 gtk_widget_show_all (window);
2548 gtk_widget_destroy (window);
2552 tips_query_widget_entered (GtkTipsQuery *tips_query,
2554 const gchar *tip_text,
2555 const gchar *tip_private,
2558 if (GTK_TOGGLE_BUTTON (toggle)->active)
2560 gtk_label_set_text (GTK_LABEL (tips_query), tip_text ? "There is a Tip!" : "There is no Tip!");
2561 /* don't let GtkTipsQuery reset its label */
2562 gtk_signal_emit_stop_by_name (GTK_OBJECT (tips_query), "widget_entered");
2567 tips_query_widget_selected (GtkWidget *tips_query,
2569 const gchar *tip_text,
2570 const gchar *tip_private,
2571 GdkEventButton *event,
2575 g_print ("Help \"%s\" requested for <%s>\n",
2576 tip_private ? tip_private : "None",
2577 gtk_type_name (GTK_OBJECT_TYPE (widget)));
2582 create_tooltips (void)
2584 static GtkWidget *window = NULL;
2591 GtkWidget *tips_query;
2592 GtkWidget *separator;
2593 GtkTooltips *tooltips;
2598 gtk_widget_new (gtk_window_get_type (),
2599 "GtkWindow::type", GTK_WINDOW_TOPLEVEL,
2600 "GtkContainer::border_width", 0,
2601 "GtkWindow::title", "Tooltips",
2602 "GtkWindow::allow_shrink", TRUE,
2603 "GtkWindow::allow_grow", FALSE,
2604 "GtkWindow::auto_shrink", TRUE,
2605 "GtkWidget::width", 200,
2608 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2609 GTK_SIGNAL_FUNC (destroy_tooltips),
2612 tooltips=gtk_tooltips_new();
2613 gtk_object_set_data (GTK_OBJECT (window), "tooltips", tooltips);
2615 box1 = gtk_vbox_new (FALSE, 0);
2616 gtk_container_add (GTK_CONTAINER (window), box1);
2618 box2 = gtk_vbox_new (FALSE, 10);
2619 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2620 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2622 button = gtk_toggle_button_new_with_label ("button1");
2623 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2625 gtk_tooltips_set_tip (tooltips,button,"This is button 1", "ContextHelp/buttons/1");
2627 button = gtk_toggle_button_new_with_label ("button2");
2628 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2630 gtk_tooltips_set_tip (tooltips,
2632 "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.",
2633 "ContextHelp/buttons/2_long");
2635 toggle = gtk_toggle_button_new_with_label ("Override TipsQuery Label");
2636 gtk_box_pack_start (GTK_BOX (box2), toggle, TRUE, TRUE, 0);
2638 gtk_tooltips_set_tip (tooltips, toggle, "Toggle TipsQuery view.", "Hi msw! ;)");
2641 gtk_widget_new (gtk_vbox_get_type (),
2642 "GtkBox::homogeneous", FALSE,
2643 "GtkBox::spacing", 5,
2644 "GtkContainer::border_width", 5,
2645 "GtkWidget::visible", TRUE,
2648 tips_query = gtk_tips_query_new ();
2651 gtk_widget_new (gtk_button_get_type (),
2652 "GtkButton::label", "[?]",
2653 "GtkWidget::visible", TRUE,
2654 "GtkWidget::parent", box3,
2656 g_object_set (G_OBJECT (button),
2657 "swapped_signal::clicked", gtk_tips_query_start_query, tips_query,
2659 gtk_box_set_child_packing (GTK_BOX (box3), button, FALSE, FALSE, 0, GTK_PACK_START);
2660 gtk_tooltips_set_tip (tooltips,
2662 "Start the Tooltips Inspector",
2663 "ContextHelp/buttons/?");
2666 gtk_widget_set (tips_query,
2667 "GtkWidget::visible", TRUE,
2668 "GtkWidget::parent", box3,
2669 "GtkTipsQuery::caller", button,
2670 "GtkObject::signal::widget_entered", tips_query_widget_entered, toggle,
2671 "GtkObject::signal::widget_selected", tips_query_widget_selected, NULL,
2675 gtk_widget_new (gtk_frame_get_type (),
2676 "GtkFrame::label", "ToolTips Inspector",
2677 "GtkFrame::label_xalign", (double) 0.5,
2678 "GtkContainer::border_width", 0,
2679 "GtkWidget::visible", TRUE,
2680 "GtkWidget::parent", box2,
2681 "GtkContainer::child", box3,
2683 gtk_box_set_child_packing (GTK_BOX (box2), frame, TRUE, TRUE, 10, GTK_PACK_START);
2685 separator = gtk_hseparator_new ();
2686 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2688 box2 = gtk_vbox_new (FALSE, 10);
2689 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2690 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2692 button = gtk_button_new_with_label ("close");
2693 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2694 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2695 GTK_OBJECT (window));
2696 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2697 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2698 gtk_widget_grab_default (button);
2700 gtk_tooltips_set_tip (tooltips, button, "Push this button to close window", "ContextHelp/buttons/Close");
2703 if (!GTK_WIDGET_VISIBLE (window))
2704 gtk_widget_show_all (window);
2706 gtk_widget_destroy (window);
2714 pack_image (GtkWidget *box,
2718 gtk_box_pack_start (GTK_BOX (box),
2719 gtk_label_new (text),
2722 gtk_box_pack_start (GTK_BOX (box),
2730 static GtkWidget *window = NULL;
2738 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2740 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2741 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2744 vbox = gtk_vbox_new (FALSE, 5);
2746 gtk_container_add (GTK_CONTAINER (window), vbox);
2748 pack_image (vbox, "Stock Warning Dialog",
2749 gtk_image_new_from_stock (GTK_STOCK_DIALOG_WARNING,
2750 GTK_ICON_SIZE_DIALOG));
2752 pixmap = gdk_pixmap_colormap_create_from_xpm_d (NULL,
2753 gtk_widget_get_colormap (window),
2758 pack_image (vbox, "Pixmap",
2759 gtk_image_new_from_pixmap (pixmap, mask));
2762 if (!GTK_WIDGET_VISIBLE (window))
2763 gtk_widget_show_all (window);
2765 gtk_widget_destroy (window);
2773 create_menu (gint depth, gint length, gboolean tearoff)
2776 GtkWidget *menuitem;
2785 menu = gtk_menu_new ();
2790 menuitem = gtk_tearoff_menu_item_new ();
2791 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
2792 gtk_widget_show (menuitem);
2795 image = gtk_image_new_from_stock (GTK_STOCK_OPEN,
2796 GTK_ICON_SIZE_MENU);
2797 gtk_widget_show (image);
2798 menuitem = gtk_image_menu_item_new (image, "Image item");
2799 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
2800 gtk_widget_show (menuitem);
2802 for (i = 0, j = 1; i < length; i++, j++)
2804 sprintf (buf, "item %2d - %d", depth, j);
2806 menuitem = gtk_radio_menu_item_new_with_label (group, buf);
2807 group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menuitem));
2810 gtk_check_menu_item_set_show_toggle (GTK_CHECK_MENU_ITEM (menuitem), TRUE);
2812 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
2813 gtk_widget_show (menuitem);
2815 gtk_widget_set_sensitive (menuitem, FALSE);
2818 gtk_check_menu_item_set_inconsistent (GTK_CHECK_MENU_ITEM (menuitem),
2822 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (depth - 1, 5, TRUE));
2831 static GtkWidget *window = NULL;
2835 GtkWidget *optionmenu;
2836 GtkWidget *separator;
2842 GtkWidget *menuitem;
2843 GtkAccelGroup *accel_group;
2846 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2848 gtk_signal_connect (GTK_OBJECT (window), "destroy",
2849 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
2851 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
2852 GTK_SIGNAL_FUNC (gtk_true),
2855 accel_group = gtk_accel_group_new ();
2856 gtk_accel_group_attach (accel_group, GTK_OBJECT (window));
2858 gtk_window_set_title (GTK_WINDOW (window), "menus");
2859 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
2862 box1 = gtk_vbox_new (FALSE, 0);
2863 gtk_container_add (GTK_CONTAINER (window), box1);
2864 gtk_widget_show (box1);
2866 menubar = gtk_menu_bar_new ();
2867 gtk_box_pack_start (GTK_BOX (box1), menubar, FALSE, TRUE, 0);
2868 gtk_widget_show (menubar);
2870 menu = create_menu (2, 50, TRUE);
2872 menuitem = gtk_menu_item_new_with_label ("test\nline2");
2873 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), menu);
2874 gtk_menu_bar_append (GTK_MENU_BAR (menubar), menuitem);
2875 gtk_widget_show (menuitem);
2877 menuitem = gtk_menu_item_new_with_label ("foo");
2878 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (3, 5, TRUE));
2879 gtk_menu_bar_append (GTK_MENU_BAR (menubar), menuitem);
2880 gtk_widget_show (menuitem);
2882 image = gtk_image_new_from_stock (GTK_STOCK_HELP,
2883 GTK_ICON_SIZE_MENU);
2884 gtk_widget_show (image);
2885 menuitem = gtk_image_menu_item_new (image, "Help");
2886 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (4, 5, TRUE));
2887 gtk_menu_item_right_justify (GTK_MENU_ITEM (menuitem));
2888 gtk_menu_bar_append (GTK_MENU_BAR (menubar), menuitem);
2889 gtk_widget_show (menuitem);
2891 box2 = gtk_vbox_new (FALSE, 10);
2892 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2893 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
2894 gtk_widget_show (box2);
2896 menu = create_menu (1, 5, FALSE);
2897 gtk_menu_set_accel_group (GTK_MENU (menu), accel_group);
2899 menuitem = gtk_check_menu_item_new_with_label ("Accelerate Me");
2900 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
2901 gtk_widget_show (menuitem);
2902 gtk_widget_add_accelerator (menuitem,
2907 GTK_ACCEL_VISIBLE | GTK_ACCEL_SIGNAL_VISIBLE);
2908 menuitem = gtk_check_menu_item_new_with_label ("Accelerator Locked");
2909 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
2910 gtk_widget_show (menuitem);
2911 gtk_widget_add_accelerator (menuitem,
2916 GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
2917 menuitem = gtk_check_menu_item_new_with_label ("Accelerators Frozen");
2918 gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
2919 gtk_widget_show (menuitem);
2920 gtk_widget_add_accelerator (menuitem,
2926 gtk_widget_add_accelerator (menuitem,
2932 gtk_widget_lock_accelerators (menuitem);
2934 optionmenu = gtk_option_menu_new ();
2935 gtk_option_menu_set_menu (GTK_OPTION_MENU (optionmenu), menu);
2936 gtk_option_menu_set_history (GTK_OPTION_MENU (optionmenu), 3);
2937 gtk_box_pack_start (GTK_BOX (box2), optionmenu, TRUE, TRUE, 0);
2938 gtk_widget_show (optionmenu);
2940 separator = gtk_hseparator_new ();
2941 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
2942 gtk_widget_show (separator);
2944 box2 = gtk_vbox_new (FALSE, 10);
2945 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
2946 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
2947 gtk_widget_show (box2);
2949 button = gtk_button_new_with_label ("close");
2950 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
2951 GTK_SIGNAL_FUNC(gtk_widget_destroy),
2952 GTK_OBJECT (window));
2953 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
2954 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
2955 gtk_widget_grab_default (button);
2956 gtk_widget_show (button);
2959 if (!GTK_WIDGET_VISIBLE (window))
2960 gtk_widget_show (window);
2962 gtk_widget_destroy (window);
2966 gtk_ifactory_cb (gpointer callback_data,
2967 guint callback_action,
2970 g_message ("ItemFactory: activated \"%s\"", gtk_item_factory_path_from_widget (widget));
2973 static GtkItemFactoryEntry menu_items[] =
2975 { "/_File", NULL, 0, 0, "<Branch>" },
2976 { "/File/tearoff1", NULL, gtk_ifactory_cb, 0, "<Tearoff>" },
2977 { "/File/_New", "<control>N", gtk_ifactory_cb, 0 },
2978 { "/File/_Open", "<control>O", gtk_ifactory_cb, 0 },
2979 { "/File/_Save", "<control>S", gtk_ifactory_cb, 0 },
2980 { "/File/Save _As...", NULL, gtk_ifactory_cb, 0 },
2981 { "/File/sep1", NULL, gtk_ifactory_cb, 0, "<Separator>" },
2982 { "/File/_Quit", "<control>Q", gtk_ifactory_cb, 0 },
2984 { "/_Preferences", NULL, 0, 0, "<Branch>" },
2985 { "/_Preferences/_Color", NULL, 0, 0, "<Branch>" },
2986 { "/_Preferences/Color/_Red", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
2987 { "/_Preferences/Color/_Green", NULL, gtk_ifactory_cb, 0, "/Preferences/Color/Red" },
2988 { "/_Preferences/Color/_Blue", NULL, gtk_ifactory_cb, 0, "/Preferences/Color/Red" },
2989 { "/_Preferences/_Shape", NULL, 0, 0, "<Branch>" },
2990 { "/_Preferences/Shape/_Square", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
2991 { "/_Preferences/Shape/_Rectangle", NULL, gtk_ifactory_cb, 0, "/Preferences/Shape/Square" },
2992 { "/_Preferences/Shape/_Oval", NULL, gtk_ifactory_cb, 0, "/Preferences/Shape/Rectangle" },
2993 { "/_Preferences/Shape/_Rectangle", NULL, gtk_ifactory_cb, 0, "/Preferences/Shape/Square" },
2994 { "/_Preferences/Shape/_Oval", NULL, gtk_ifactory_cb, 0, "/Preferences/Shape/Rectangle" },
2996 /* For testing deletion of menus */
2997 { "/_Preferences/Should_NotAppear", NULL, 0, 0, "<Branch>" },
2998 { "/Preferences/ShouldNotAppear/SubItem1", NULL, gtk_ifactory_cb, 0 },
2999 { "/Preferences/ShouldNotAppear/SubItem2", NULL, gtk_ifactory_cb, 0 },
3001 { "/_Help", NULL, 0, 0, "<LastBranch>" },
3002 { "/Help/_About", NULL, gtk_ifactory_cb, 0 },
3006 static int nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]);
3009 create_item_factory (void)
3011 static GtkWidget *window = NULL;
3017 GtkWidget *separator;
3020 GtkAccelGroup *accel_group;
3021 GtkItemFactory *item_factory;
3023 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3025 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3026 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
3028 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
3029 GTK_SIGNAL_FUNC (gtk_true),
3032 accel_group = gtk_accel_group_new ();
3033 item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>", accel_group);
3034 gtk_object_set_data_full (GTK_OBJECT (window),
3037 (GtkDestroyNotify) gtk_object_unref);
3038 gtk_accel_group_attach (accel_group, GTK_OBJECT (window));
3039 gtk_window_set_title (GTK_WINDOW (window), "Item Factory");
3040 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
3041 gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL);
3043 /* preselect /Preferences/Shape/Oval over the other radios
3045 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (gtk_item_factory_get_item (item_factory,
3046 "/Preferences/Shape/Oval")),
3049 box1 = gtk_vbox_new (FALSE, 0);
3050 gtk_container_add (GTK_CONTAINER (window), box1);
3052 gtk_box_pack_start (GTK_BOX (box1),
3053 gtk_item_factory_get_widget (item_factory, "<main>"),
3056 label = gtk_label_new ("Type\n<alt>\nto start");
3057 gtk_widget_set_usize (label, 200, 200);
3058 gtk_misc_set_alignment (GTK_MISC (label), 0.5, 0.5);
3059 gtk_box_pack_start (GTK_BOX (box1), label, TRUE, TRUE, 0);
3062 separator = gtk_hseparator_new ();
3063 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
3066 box2 = gtk_vbox_new (FALSE, 10);
3067 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
3068 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
3070 button = gtk_button_new_with_label ("close");
3071 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
3072 GTK_SIGNAL_FUNC(gtk_widget_destroy),
3073 GTK_OBJECT (window));
3074 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
3075 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
3076 gtk_widget_grab_default (button);
3078 gtk_item_factory_delete_item (item_factory, "/Preferences/ShouldNotAppear");
3080 gtk_widget_show_all (window);
3083 gtk_widget_destroy (window);
3091 cmw_destroy_cb(GtkWidget *widget)
3093 /* This is needed to get out of gtk_main */
3100 cmw_color (GtkWidget *widget, GtkWidget *parent)
3104 csd=gtk_color_selection_dialog_new ("This is a modal color selection dialog");
3107 gtk_window_set_modal (GTK_WINDOW(csd),TRUE);
3109 /* And mark it as a transient dialog */
3110 gtk_window_set_transient_for (GTK_WINDOW (csd), GTK_WINDOW (parent));
3112 gtk_signal_connect (GTK_OBJECT(csd), "destroy",
3113 GTK_SIGNAL_FUNC(cmw_destroy_cb),NULL);
3115 gtk_signal_connect_object (GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(csd)->ok_button),
3116 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
3118 gtk_signal_connect_object (GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(csd)->cancel_button),
3119 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
3122 /* wait until destroy calls gtk_main_quit */
3123 gtk_widget_show (csd);
3128 cmw_file (GtkWidget *widget, GtkWidget *parent)
3132 fs = gtk_file_selection_new("This is a modal file selection dialog");
3135 gtk_window_set_modal (GTK_WINDOW(fs),TRUE);
3137 /* And mark it as a transient dialog */
3138 gtk_window_set_transient_for (GTK_WINDOW (fs), GTK_WINDOW (parent));
3140 gtk_signal_connect (GTK_OBJECT(fs), "destroy",
3141 GTK_SIGNAL_FUNC(cmw_destroy_cb),NULL);
3143 gtk_signal_connect_object (GTK_OBJECT(GTK_FILE_SELECTION(fs)->ok_button),
3144 "clicked",GTK_SIGNAL_FUNC(gtk_widget_destroy),
3146 gtk_signal_connect_object (GTK_OBJECT(GTK_FILE_SELECTION(fs)->cancel_button),
3147 "clicked",GTK_SIGNAL_FUNC(gtk_widget_destroy),
3150 /* wait until destroy calls gtk_main_quit */
3151 gtk_widget_show (fs);
3158 create_modal_window (void)
3160 GtkWidget *window = NULL;
3161 GtkWidget *box1,*box2;
3163 GtkWidget *btnColor,*btnFile,*btnClose;
3165 /* Create modal window (Here you can use any window descendent )*/
3166 window=gtk_window_new (GTK_WINDOW_TOPLEVEL);
3167 gtk_window_set_title (GTK_WINDOW(window),"This window is modal");
3169 /* Set window as modal */
3170 gtk_window_set_modal (GTK_WINDOW(window),TRUE);
3172 /* Create widgets */
3173 box1 = gtk_vbox_new (FALSE,5);
3174 frame1 = gtk_frame_new ("Standard dialogs in modal form");
3175 box2 = gtk_vbox_new (TRUE,5);
3176 btnColor = gtk_button_new_with_label ("Color");
3177 btnFile = gtk_button_new_with_label ("File Selection");
3178 btnClose = gtk_button_new_with_label ("Close");
3181 gtk_container_set_border_width (GTK_CONTAINER(box1),3);
3182 gtk_container_set_border_width (GTK_CONTAINER(box2),3);
3185 gtk_container_add (GTK_CONTAINER (window), box1);
3186 gtk_box_pack_start (GTK_BOX (box1), frame1, TRUE, TRUE, 4);
3187 gtk_container_add (GTK_CONTAINER (frame1), box2);
3188 gtk_box_pack_start (GTK_BOX (box2), btnColor, FALSE, FALSE, 4);
3189 gtk_box_pack_start (GTK_BOX (box2), btnFile, FALSE, FALSE, 4);
3190 gtk_box_pack_start (GTK_BOX (box1), gtk_hseparator_new (), FALSE, FALSE, 4);
3191 gtk_box_pack_start (GTK_BOX (box1), btnClose, FALSE, FALSE, 4);
3193 /* connect signals */
3194 gtk_signal_connect_object (GTK_OBJECT (btnClose), "clicked",
3195 GTK_SIGNAL_FUNC (gtk_widget_destroy),
3196 GTK_OBJECT (window));
3198 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3199 GTK_SIGNAL_FUNC (cmw_destroy_cb),NULL);
3201 gtk_signal_connect (GTK_OBJECT (btnColor), "clicked",
3202 GTK_SIGNAL_FUNC (cmw_color),window);
3203 gtk_signal_connect (GTK_OBJECT (btnFile), "clicked",
3204 GTK_SIGNAL_FUNC (cmw_file),window);
3207 gtk_widget_show_all (window);
3209 /* wait until dialog get destroyed */
3218 make_message_dialog (GtkWidget **dialog,
3219 GtkMessageType type,
3220 GtkButtonsType buttons)
3224 gtk_widget_destroy (*dialog);
3229 *dialog = gtk_message_dialog_new (NULL, 0, type, buttons,
3230 "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.)");
3232 gtk_signal_connect_object (GTK_OBJECT (*dialog),
3234 GTK_SIGNAL_FUNC (gtk_widget_destroy),
3235 GTK_OBJECT (*dialog));
3237 gtk_signal_connect (GTK_OBJECT (*dialog),
3239 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
3242 gtk_widget_show (*dialog);
3246 create_message_dialog (void)
3248 static GtkWidget *info = NULL;
3249 static GtkWidget *warning = NULL;
3250 static GtkWidget *error = NULL;
3251 static GtkWidget *question = NULL;
3253 make_message_dialog (&info, GTK_MESSAGE_INFO, GTK_BUTTONS_OK);
3254 make_message_dialog (&warning, GTK_MESSAGE_WARNING, GTK_BUTTONS_CLOSE);
3255 make_message_dialog (&error, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK_CANCEL);
3256 make_message_dialog (&question, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO);
3263 static GtkWidget *sw_parent = NULL;
3264 static GtkWidget *sw_float_parent;
3265 static guint sw_destroyed_handler = 0;
3268 scrolled_windows_delete_cb (GtkWidget *widget, GdkEventAny *event, GtkWidget *scrollwin)
3270 gtk_widget_reparent (scrollwin, sw_parent);
3272 gtk_signal_disconnect (GTK_OBJECT (sw_parent), sw_destroyed_handler);
3273 sw_float_parent = NULL;
3275 sw_destroyed_handler = 0;
3281 scrolled_windows_destroy_cb (GtkWidget *widget, GtkWidget *scrollwin)
3283 gtk_widget_destroy (sw_float_parent);
3285 sw_float_parent = NULL;
3287 sw_destroyed_handler = 0;
3291 scrolled_windows_remove (GtkWidget *widget, GtkWidget *scrollwin)
3295 gtk_widget_reparent (scrollwin, sw_parent);
3296 gtk_widget_destroy (sw_float_parent);
3298 gtk_signal_disconnect (GTK_OBJECT (sw_parent), sw_destroyed_handler);
3299 sw_float_parent = NULL;
3301 sw_destroyed_handler = 0;
3305 sw_parent = scrollwin->parent;
3306 sw_float_parent = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3307 gtk_window_set_default_size (GTK_WINDOW (sw_float_parent), 200, 200);
3309 gtk_widget_reparent (scrollwin, sw_float_parent);
3310 gtk_widget_show (sw_float_parent);
3312 sw_destroyed_handler =
3313 gtk_signal_connect (GTK_OBJECT (sw_parent), "destroy",
3314 GTK_SIGNAL_FUNC (scrolled_windows_destroy_cb), scrollwin);
3315 gtk_signal_connect (GTK_OBJECT (sw_float_parent), "delete_event",
3316 GTK_SIGNAL_FUNC (scrolled_windows_delete_cb), scrollwin);
3321 create_scrolled_windows (void)
3323 static GtkWidget *window;
3324 GtkWidget *scrolled_window;
3332 window = gtk_dialog_new ();
3334 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3335 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
3338 gtk_window_set_title (GTK_WINDOW (window), "dialog");
3339 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
3342 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
3343 gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10);
3344 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
3345 GTK_POLICY_AUTOMATIC,
3346 GTK_POLICY_AUTOMATIC);
3347 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
3348 scrolled_window, TRUE, TRUE, 0);
3349 gtk_widget_show (scrolled_window);
3351 table = gtk_table_new (20, 20, FALSE);
3352 gtk_table_set_row_spacings (GTK_TABLE (table), 10);
3353 gtk_table_set_col_spacings (GTK_TABLE (table), 10);
3354 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), table);
3355 gtk_container_set_focus_hadjustment (GTK_CONTAINER (table),
3356 gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
3357 gtk_container_set_focus_vadjustment (GTK_CONTAINER (table),
3358 gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
3359 gtk_widget_show (table);
3361 for (i = 0; i < 20; i++)
3362 for (j = 0; j < 20; j++)
3364 sprintf (buffer, "button (%d,%d)\n", i, j);
3365 button = gtk_toggle_button_new_with_label (buffer);
3366 gtk_table_attach_defaults (GTK_TABLE (table), button,
3368 gtk_widget_show (button);
3372 button = gtk_button_new_with_label ("Close");
3373 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
3374 GTK_SIGNAL_FUNC(gtk_widget_destroy),
3375 GTK_OBJECT (window));
3376 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
3377 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
3378 button, TRUE, TRUE, 0);
3379 gtk_widget_grab_default (button);
3380 gtk_widget_show (button);
3382 button = gtk_button_new_with_label ("Reparent Out");
3383 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3384 GTK_SIGNAL_FUNC(scrolled_windows_remove),
3386 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
3387 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
3388 button, TRUE, TRUE, 0);
3389 gtk_widget_grab_default (button);
3390 gtk_widget_show (button);
3392 gtk_window_set_default_size (GTK_WINDOW (window), 300, 300);
3395 if (!GTK_WIDGET_VISIBLE (window))
3396 gtk_widget_show (window);
3398 gtk_widget_destroy (window);
3406 entry_toggle_frame (GtkWidget *checkbutton,
3409 gtk_entry_set_has_frame (GTK_ENTRY(entry),
3410 GTK_TOGGLE_BUTTON(checkbutton)->active);
3414 entry_toggle_editable (GtkWidget *checkbutton,
3417 gtk_entry_set_editable(GTK_ENTRY(entry),
3418 GTK_TOGGLE_BUTTON(checkbutton)->active);
3422 entry_toggle_sensitive (GtkWidget *checkbutton,
3425 gtk_widget_set_sensitive (entry, GTK_TOGGLE_BUTTON(checkbutton)->active);
3429 entry_toggle_visibility (GtkWidget *checkbutton,
3432 gtk_entry_set_visibility (GTK_ENTRY (entry),
3433 GTK_TOGGLE_BUTTON (checkbutton)->active);
3437 entry_toggle_invisible_char (GtkWidget *checkbutton,
3440 if (GTK_TOGGLE_BUTTON (checkbutton)->active)
3441 gtk_entry_set_invisible_char (GTK_ENTRY (entry), 0);
3443 gtk_entry_set_invisible_char (GTK_ENTRY (entry), '*');
3448 entry_toggle_activate_default (GtkWidget *checkbutton,
3451 gtk_entry_set_activates_default (GTK_ENTRY (entry),
3452 GTK_TOGGLE_BUTTON (checkbutton)->active);
3458 static GtkWidget *window = NULL;
3461 GtkWidget *editable_check;
3462 GtkWidget *sensitive_check;
3463 GtkWidget *invisible_char_check;
3464 GtkWidget *activate_check;
3465 GtkWidget *entry, *cb;
3467 GtkWidget *separator;
3468 GList *cbitems = NULL;
3472 cbitems = g_list_append(cbitems, "item0");
3473 cbitems = g_list_append(cbitems, "item1 item1");
3474 cbitems = g_list_append(cbitems, "item2 item2 item2");
3475 cbitems = g_list_append(cbitems, "item3 item3 item3 item3");
3476 cbitems = g_list_append(cbitems, "item4 item4 item4 item4 item4");
3477 cbitems = g_list_append(cbitems, "item5 item5 item5 item5 item5 item5");
3478 cbitems = g_list_append(cbitems, "item6 item6 item6 item6 item6");
3479 cbitems = g_list_append(cbitems, "item7 item7 item7 item7");
3480 cbitems = g_list_append(cbitems, "item8 item8 item8");
3481 cbitems = g_list_append(cbitems, "item9 item9");
3483 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3485 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3486 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
3489 gtk_window_set_title (GTK_WINDOW (window), "entry");
3490 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
3493 box1 = gtk_vbox_new (FALSE, 0);
3494 gtk_container_add (GTK_CONTAINER (window), box1);
3495 gtk_widget_show (box1);
3498 box2 = gtk_vbox_new (FALSE, 10);
3499 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
3500 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
3501 gtk_widget_show (box2);
3503 entry = gtk_entry_new ();
3504 gtk_entry_set_text (GTK_ENTRY (entry), "hello world السلام عليكم");
3505 gtk_editable_select_region (GTK_EDITABLE (entry), 0, 5);
3506 gtk_box_pack_start (GTK_BOX (box2), entry, TRUE, TRUE, 0);
3507 gtk_widget_show (entry);
3509 cb = gtk_combo_new ();
3510 gtk_combo_set_popdown_strings (GTK_COMBO (cb), cbitems);
3511 gtk_entry_set_text (GTK_ENTRY (GTK_COMBO(cb)->entry), "hello world");
3512 gtk_editable_select_region (GTK_EDITABLE (GTK_COMBO(cb)->entry),
3514 gtk_box_pack_start (GTK_BOX (box2), cb, TRUE, TRUE, 0);
3515 gtk_widget_show (cb);
3517 editable_check = gtk_check_button_new_with_label("Editable");
3518 gtk_box_pack_start (GTK_BOX (box2), editable_check, FALSE, TRUE, 0);
3519 gtk_signal_connect (GTK_OBJECT(editable_check), "toggled",
3520 GTK_SIGNAL_FUNC(entry_toggle_editable), entry);
3521 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(editable_check), TRUE);
3522 gtk_widget_show (editable_check);
3524 editable_check = gtk_check_button_new_with_label("Visible");
3525 gtk_box_pack_start (GTK_BOX (box2), editable_check, FALSE, TRUE, 0);
3526 gtk_signal_connect (GTK_OBJECT(editable_check), "toggled",
3527 GTK_SIGNAL_FUNC(entry_toggle_visibility), entry);
3528 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(editable_check), TRUE);
3529 gtk_widget_show (editable_check);
3531 sensitive_check = gtk_check_button_new_with_label("Sensitive");
3532 gtk_box_pack_start (GTK_BOX (box2), sensitive_check, FALSE, TRUE, 0);
3533 gtk_signal_connect (GTK_OBJECT(sensitive_check), "toggled",
3534 GTK_SIGNAL_FUNC(entry_toggle_sensitive), entry);
3535 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(sensitive_check), TRUE);
3536 gtk_widget_show (sensitive_check);
3538 activate_check = gtk_check_button_new_with_label ("Activates default");
3539 gtk_box_pack_start (GTK_BOX (box2), activate_check, FALSE, TRUE, 0);
3540 gtk_signal_connect (GTK_OBJECT (activate_check), "toggled",
3541 GTK_SIGNAL_FUNC (entry_toggle_activate_default), entry);
3542 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (activate_check), FALSE);
3543 gtk_widget_show (activate_check);
3545 invisible_char_check = gtk_check_button_new_with_label("invisible_char = 0");
3546 gtk_box_pack_start (GTK_BOX (box2), invisible_char_check, FALSE, TRUE, 0);
3547 gtk_signal_connect (GTK_OBJECT(invisible_char_check), "toggled",
3548 GTK_SIGNAL_FUNC(entry_toggle_invisible_char), entry);
3549 gtk_widget_show (invisible_char_check);
3551 editable_check = gtk_check_button_new_with_label("Has Frame");
3552 gtk_box_pack_start (GTK_BOX (box2), editable_check, FALSE, TRUE, 0);
3553 gtk_signal_connect (GTK_OBJECT(editable_check), "toggled",
3554 GTK_SIGNAL_FUNC(entry_toggle_frame), entry);
3555 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(editable_check), TRUE);
3556 gtk_widget_show (editable_check);
3558 separator = gtk_hseparator_new ();
3559 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
3560 gtk_widget_show (separator);
3562 box2 = gtk_vbox_new (FALSE, 10);
3563 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
3564 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
3565 gtk_widget_show (box2);
3568 button = gtk_button_new_with_label ("close");
3569 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
3570 GTK_SIGNAL_FUNC(gtk_widget_destroy),
3571 GTK_OBJECT (window));
3572 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
3573 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
3574 gtk_widget_grab_default (button);
3575 gtk_widget_show (button);
3578 if (!GTK_WIDGET_VISIBLE (window))
3579 gtk_widget_show (window);
3581 gtk_widget_destroy (window);
3588 static GtkWidget *spinner1;
3591 toggle_snap (GtkWidget *widget, GtkSpinButton *spin)
3593 gtk_spin_button_set_snap_to_ticks (spin, GTK_TOGGLE_BUTTON (widget)->active);
3597 toggle_numeric (GtkWidget *widget, GtkSpinButton *spin)
3599 gtk_spin_button_set_numeric (spin, GTK_TOGGLE_BUTTON (widget)->active);
3603 change_digits (GtkWidget *widget, GtkSpinButton *spin)
3605 gtk_spin_button_set_digits (GTK_SPIN_BUTTON (spinner1),
3606 gtk_spin_button_get_value_as_int (spin));
3610 get_value (GtkWidget *widget, gpointer data)
3614 GtkSpinButton *spin;
3616 spin = GTK_SPIN_BUTTON (spinner1);
3617 label = GTK_LABEL (gtk_object_get_user_data (GTK_OBJECT (widget)));
3618 if (GPOINTER_TO_INT (data) == 1)
3619 sprintf (buf, "%d", gtk_spin_button_get_value_as_int (spin));
3621 sprintf (buf, "%0.*f", spin->digits,
3622 gtk_spin_button_get_value_as_float (spin));
3623 gtk_label_set_text (label, buf);
3627 spin_button_time_output_func (GtkSpinButton *spin_button)
3629 static gchar buf[6];
3633 hours = spin_button->adjustment->value / 60.0;
3634 minutes = (fabs(floor (hours) - hours) < 1e-5) ? 0.0 : 30;
3635 sprintf (buf, "%02.0f:%02.0f", floor (hours), minutes);
3636 if (strcmp (buf, gtk_entry_get_text (GTK_ENTRY (spin_button))))
3637 gtk_entry_set_text (GTK_ENTRY (spin_button), buf);
3642 spin_button_month_input_func (GtkSpinButton *spin_button,
3646 static gchar *month[12] = { "January", "February", "March", "April",
3647 "May", "June", "July", "August",
3648 "September", "October", "November", "December" };
3650 gboolean found = FALSE;
3652 for (i = 1; i <= 12; i++)
3654 tmp1 = g_strdup (month[i-1]);
3656 tmp2 = g_strdup (gtk_entry_get_text (GTK_ENTRY (spin_button)));
3658 if (strstr (tmp1, tmp2) == tmp1)
3668 return GTK_INPUT_ERROR;
3670 *new_val = (gfloat) i;
3675 spin_button_month_output_func (GtkSpinButton *spin_button)
3678 static gchar *month[12] = { "January", "February", "March", "April",
3679 "May", "June", "July", "August", "September",
3680 "October", "November", "December" };
3682 for (i = 1; i <= 12; i++)
3683 if (fabs (spin_button->adjustment->value - (double)i) < 1e-5)
3685 if (strcmp (month[i-1], gtk_entry_get_text (GTK_ENTRY (spin_button))))
3686 gtk_entry_set_text (GTK_ENTRY (spin_button), month[i-1]);
3692 spin_button_hex_input_func (GtkSpinButton *spin_button,
3699 buf = gtk_entry_get_text (GTK_ENTRY (spin_button));
3700 res = (gfloat)(strtol(buf, &err, 16));
3703 return GTK_INPUT_ERROR;
3709 spin_button_hex_output_func (GtkSpinButton *spin_button)
3711 static gchar buf[7];
3714 val = (gint) spin_button->adjustment->value;
3715 if (fabs (val) < 1e-5)
3716 sprintf (buf, "0x00");
3718 sprintf (buf, "0x%.2X", val);
3719 if (strcmp (buf, gtk_entry_get_text (GTK_ENTRY (spin_button))))
3720 gtk_entry_set_text (GTK_ENTRY (spin_button), buf);
3727 static GtkWidget *window = NULL;
3730 GtkWidget *main_vbox;
3733 GtkWidget *spinner2;
3737 GtkWidget *val_label;
3742 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3744 gtk_signal_connect (GTK_OBJECT (window), "destroy",
3745 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
3748 gtk_window_set_title (GTK_WINDOW (window), "GtkSpinButton");
3750 main_vbox = gtk_vbox_new (FALSE, 5);
3751 gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 10);
3752 gtk_container_add (GTK_CONTAINER (window), main_vbox);
3754 frame = gtk_frame_new ("Not accelerated");
3755 gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0);
3757 vbox = gtk_vbox_new (FALSE, 0);
3758 gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
3759 gtk_container_add (GTK_CONTAINER (frame), vbox);
3761 /* Time, month, hex spinners */
3763 hbox = gtk_hbox_new (FALSE, 0);
3764 gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 5);
3766 vbox2 = gtk_vbox_new (FALSE, 0);
3767 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
3769 label = gtk_label_new ("Time :");
3770 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
3771 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
3773 adj = (GtkAdjustment *) gtk_adjustment_new (0, 0, 1410, 30, 60, 0);
3774 spinner = gtk_spin_button_new (adj, 0, 0);
3775 gtk_editable_set_editable (GTK_EDITABLE (spinner), FALSE);
3776 gtk_signal_connect (GTK_OBJECT (spinner),
3778 GTK_SIGNAL_FUNC (spin_button_time_output_func),
3780 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
3781 gtk_widget_set_usize (spinner, 55, -1);
3782 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
3784 vbox2 = gtk_vbox_new (FALSE, 0);
3785 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
3787 label = gtk_label_new ("Month :");
3788 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
3789 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
3791 adj = (GtkAdjustment *) gtk_adjustment_new (1.0, 1.0, 12.0, 1.0,
3793 spinner = gtk_spin_button_new (adj, 0, 0);
3794 gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (spinner),
3795 GTK_UPDATE_IF_VALID);
3796 gtk_signal_connect (GTK_OBJECT (spinner),
3798 GTK_SIGNAL_FUNC (spin_button_month_input_func),
3800 gtk_signal_connect (GTK_OBJECT (spinner),
3802 GTK_SIGNAL_FUNC (spin_button_month_output_func),
3804 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
3805 gtk_widget_set_usize (spinner, 85, -1);
3806 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
3808 vbox2 = gtk_vbox_new (FALSE, 0);
3809 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
3811 label = gtk_label_new ("Hex :");
3812 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
3813 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
3815 adj = (GtkAdjustment *) gtk_adjustment_new (0, 0, 255, 1, 16, 0);
3816 spinner = gtk_spin_button_new (adj, 0, 0);
3817 gtk_editable_set_editable (GTK_EDITABLE (spinner), TRUE);
3818 gtk_signal_connect (GTK_OBJECT (spinner),
3820 GTK_SIGNAL_FUNC (spin_button_hex_input_func),
3822 gtk_signal_connect (GTK_OBJECT (spinner),
3824 GTK_SIGNAL_FUNC (spin_button_hex_output_func),
3826 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner), TRUE);
3827 gtk_widget_set_usize (spinner, 55, 0);
3828 gtk_box_pack_start (GTK_BOX (vbox2), spinner, FALSE, TRUE, 0);
3830 frame = gtk_frame_new ("Accelerated");
3831 gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0);
3833 vbox = gtk_vbox_new (FALSE, 0);
3834 gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
3835 gtk_container_add (GTK_CONTAINER (frame), vbox);
3837 hbox = gtk_hbox_new (FALSE, 0);
3838 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
3840 vbox2 = gtk_vbox_new (FALSE, 0);
3841 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
3843 label = gtk_label_new ("Value :");
3844 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
3845 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
3847 adj = (GtkAdjustment *) gtk_adjustment_new (0.0, -10000.0, 10000.0,
3849 spinner1 = gtk_spin_button_new (adj, 1.0, 2);
3850 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner1), TRUE);
3851 gtk_widget_set_usize (spinner1, 100, 0);
3852 gtk_box_pack_start (GTK_BOX (vbox2), spinner1, FALSE, TRUE, 0);
3854 vbox2 = gtk_vbox_new (FALSE, 0);
3855 gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
3857 label = gtk_label_new ("Digits :");
3858 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
3859 gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, TRUE, 0);
3861 adj = (GtkAdjustment *) gtk_adjustment_new (2, 1, 5, 1, 1, 0);
3862 spinner2 = gtk_spin_button_new (adj, 0.0, 0);
3863 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
3864 GTK_SIGNAL_FUNC (change_digits),
3865 (gpointer) spinner2);
3866 gtk_box_pack_start (GTK_BOX (vbox2), spinner2, FALSE, TRUE, 0);
3868 hbox = gtk_hbox_new (FALSE, 0);
3869 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
3871 button = gtk_check_button_new_with_label ("Snap to 0.5-ticks");
3872 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3873 GTK_SIGNAL_FUNC (toggle_snap),
3875 gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
3876 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
3878 button = gtk_check_button_new_with_label ("Numeric only input mode");
3879 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3880 GTK_SIGNAL_FUNC (toggle_numeric),
3882 gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
3883 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
3885 val_label = gtk_label_new ("");
3887 hbox = gtk_hbox_new (FALSE, 0);
3888 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
3890 button = gtk_button_new_with_label ("Value as Int");
3891 gtk_object_set_user_data (GTK_OBJECT (button), val_label);
3892 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3893 GTK_SIGNAL_FUNC (get_value),
3894 GINT_TO_POINTER (1));
3895 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
3897 button = gtk_button_new_with_label ("Value as Float");
3898 gtk_object_set_user_data (GTK_OBJECT (button), val_label);
3899 gtk_signal_connect (GTK_OBJECT (button), "clicked",
3900 GTK_SIGNAL_FUNC (get_value),
3901 GINT_TO_POINTER (2));
3902 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
3904 gtk_box_pack_start (GTK_BOX (vbox), val_label, TRUE, TRUE, 0);
3905 gtk_label_set_text (GTK_LABEL (val_label), "0");
3907 hbox = gtk_hbox_new (FALSE, 0);
3908 gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
3910 button = gtk_button_new_with_label ("Close");
3911 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
3912 GTK_SIGNAL_FUNC (gtk_widget_destroy),
3913 GTK_OBJECT (window));
3914 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
3917 if (!GTK_WIDGET_VISIBLE (window))
3918 gtk_widget_show_all (window);
3920 gtk_widget_destroy (window);
3929 cursor_expose_event (GtkWidget *widget,
3933 GtkDrawingArea *darea;
3934 GdkDrawable *drawable;
3941 g_return_val_if_fail (widget != NULL, TRUE);
3942 g_return_val_if_fail (GTK_IS_DRAWING_AREA (widget), TRUE);
3944 darea = GTK_DRAWING_AREA (widget);
3945 drawable = widget->window;
3946 white_gc = widget->style->white_gc;
3947 gray_gc = widget->style->bg_gc[GTK_STATE_NORMAL];
3948 black_gc = widget->style->black_gc;
3949 max_width = widget->allocation.width;
3950 max_height = widget->allocation.height;
3952 gdk_draw_rectangle (drawable, white_gc,
3959 gdk_draw_rectangle (drawable, black_gc,
3966 gdk_draw_rectangle (drawable, gray_gc,
3977 set_cursor (GtkWidget *spinner,
3985 c = CLAMP (gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spinner)), 0, 152);
3988 label = gtk_object_get_user_data (GTK_OBJECT (spinner));
3989 vals = gtk_type_enum_get_values (GTK_TYPE_GDK_CURSOR_TYPE);
3990 while (vals && vals->value != c)
3993 gtk_label_set_text (GTK_LABEL (label), vals->value_nick);
3995 gtk_label_set_text (GTK_LABEL (label), "<unknown>");
3997 cursor = gdk_cursor_new (c);
3998 gdk_window_set_cursor (widget->window, cursor);
3999 gdk_cursor_unref (cursor);
4003 cursor_event (GtkWidget *widget,
4005 GtkSpinButton *spinner)
4007 if ((event->type == GDK_BUTTON_PRESS) &&
4008 ((event->button.button == 1) ||
4009 (event->button.button == 3)))
4011 gtk_spin_button_spin (spinner, event->button.button == 1 ?
4012 GTK_SPIN_STEP_FORWARD : GTK_SPIN_STEP_BACKWARD, 0);
4020 create_cursors (void)
4022 static GtkWidget *window = NULL;
4025 GtkWidget *main_vbox;
4036 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
4038 gtk_signal_connect (GTK_OBJECT (window), "destroy",
4039 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
4042 gtk_window_set_title (GTK_WINDOW (window), "Cursors");
4044 main_vbox = gtk_vbox_new (FALSE, 5);
4045 gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 0);
4046 gtk_container_add (GTK_CONTAINER (window), main_vbox);
4049 gtk_widget_new (gtk_vbox_get_type (),
4050 "GtkBox::homogeneous", FALSE,
4051 "GtkBox::spacing", 5,
4052 "GtkContainer::border_width", 10,
4053 "GtkWidget::parent", main_vbox,
4054 "GtkWidget::visible", TRUE,
4057 hbox = gtk_hbox_new (FALSE, 0);
4058 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4059 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
4061 label = gtk_label_new ("Cursor Value : ");
4062 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
4063 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
4065 adj = (GtkAdjustment *) gtk_adjustment_new (0,
4069 spinner = gtk_spin_button_new (adj, 0, 0);
4070 gtk_box_pack_start (GTK_BOX (hbox), spinner, TRUE, TRUE, 0);
4073 gtk_widget_new (gtk_frame_get_type (),
4074 "GtkFrame::shadow", GTK_SHADOW_ETCHED_IN,
4075 "GtkFrame::label_xalign", 0.5,
4076 "GtkFrame::label", "Cursor Area",
4077 "GtkContainer::border_width", 10,
4078 "GtkWidget::parent", vbox,
4079 "GtkWidget::visible", TRUE,
4082 darea = gtk_drawing_area_new ();
4083 gtk_widget_set_usize (darea, 80, 80);
4084 gtk_container_add (GTK_CONTAINER (frame), darea);
4085 gtk_signal_connect (GTK_OBJECT (darea),
4087 GTK_SIGNAL_FUNC (cursor_expose_event),
4089 gtk_widget_set_events (darea, GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK);
4090 gtk_signal_connect (GTK_OBJECT (darea),
4091 "button_press_event",
4092 GTK_SIGNAL_FUNC (cursor_event),
4094 gtk_widget_show (darea);
4096 gtk_signal_connect (GTK_OBJECT (spinner), "changed",
4097 GTK_SIGNAL_FUNC (set_cursor),
4100 label = gtk_widget_new (GTK_TYPE_LABEL,
4105 gtk_container_child_set (GTK_CONTAINER (vbox), label,
4108 gtk_object_set_user_data (GTK_OBJECT (spinner), label);
4111 gtk_widget_new (gtk_hseparator_get_type (),
4112 "GtkWidget::visible", TRUE,
4114 gtk_box_pack_start (GTK_BOX (main_vbox), any, FALSE, TRUE, 0);
4116 hbox = gtk_hbox_new (FALSE, 0);
4117 gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
4118 gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
4120 button = gtk_button_new_with_label ("Close");
4121 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
4122 GTK_SIGNAL_FUNC (gtk_widget_destroy),
4123 GTK_OBJECT (window));
4124 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
4126 gtk_widget_show_all (window);
4128 set_cursor (spinner, darea);
4131 gtk_widget_destroy (window);
4139 list_add (GtkWidget *widget,
4144 GtkWidget *list_item;
4145 GtkContainer *container;
4147 container = GTK_CONTAINER (list);
4149 sprintf (buffer, "added item %d", i++);
4150 list_item = gtk_list_item_new_with_label (buffer);
4151 gtk_widget_show (list_item);
4153 gtk_container_add (container, list_item);
4157 list_remove (GtkWidget *widget,
4160 GList *clear_list = NULL;
4161 GList *sel_row = NULL;
4164 if (list->selection_mode == GTK_SELECTION_EXTENDED)
4168 item = GTK_CONTAINER (list)->focus_child;
4169 if (!item && list->selection)
4170 item = list->selection->data;
4174 work = g_list_find (list->children, item);
4175 for (sel_row = work; sel_row; sel_row = sel_row->next)
4176 if (GTK_WIDGET (sel_row->data)->state != GTK_STATE_SELECTED)
4181 for (sel_row = work; sel_row; sel_row = sel_row->prev)
4182 if (GTK_WIDGET (sel_row->data)->state != GTK_STATE_SELECTED)
4188 for (work = list->selection; work; work = work->next)
4189 clear_list = g_list_prepend (clear_list, work->data);
4191 clear_list = g_list_reverse (clear_list);
4192 gtk_list_remove_items (GTK_LIST (list), clear_list);
4193 g_list_free (clear_list);
4195 if (list->selection_mode == GTK_SELECTION_EXTENDED && sel_row)
4196 gtk_list_select_child (list, GTK_WIDGET(sel_row->data));
4200 list_clear (GtkWidget *widget,
4203 gtk_list_clear_items (GTK_LIST (list), 0, -1);
4206 #define RADIOMENUTOGGLED(_rmi_, __i) { \
4209 __g = gtk_radio_menu_item_group(_rmi_); \
4210 while( __g && !((GtkCheckMenuItem *)(__g->data))->active) { \
4216 static GtkWidget *list_omenu;
4219 list_toggle_sel_mode (GtkWidget *widget, GtkList *list)
4223 if (!GTK_WIDGET_MAPPED (widget))
4226 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
4227 (((GtkOptionMenu *)list_omenu)->menu_item), i);
4229 gtk_list_set_selection_mode (list, (GtkSelectionMode) (3-i));
4235 static GtkWidget *window = NULL;
4237 static OptionMenuItem items[] =
4239 { "Single", list_toggle_sel_mode },
4240 { "Browse", list_toggle_sel_mode },
4241 { "Multiple", list_toggle_sel_mode },
4242 { "Extended", list_toggle_sel_mode }
4251 GtkWidget *scrolled_win;
4254 GtkWidget *separator;
4257 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
4259 gtk_signal_connect (GTK_OBJECT (window), "destroy",
4260 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
4263 gtk_window_set_title (GTK_WINDOW (window), "list");
4264 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
4266 vbox = gtk_vbox_new (FALSE, 0);
4267 gtk_container_add (GTK_CONTAINER (window), vbox);
4269 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
4270 gtk_container_set_border_width (GTK_CONTAINER (scrolled_win), 5);
4271 gtk_widget_set_usize (scrolled_win, -1, 300);
4272 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
4273 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
4274 GTK_POLICY_AUTOMATIC,
4275 GTK_POLICY_AUTOMATIC);
4277 list = gtk_list_new ();
4278 gtk_list_set_selection_mode (GTK_LIST (list), GTK_SELECTION_EXTENDED);
4279 gtk_scrolled_window_add_with_viewport
4280 (GTK_SCROLLED_WINDOW (scrolled_win), list);
4281 gtk_container_set_focus_vadjustment
4282 (GTK_CONTAINER (list),
4283 gtk_scrolled_window_get_vadjustment
4284 (GTK_SCROLLED_WINDOW (scrolled_win)));
4285 gtk_container_set_focus_hadjustment
4286 (GTK_CONTAINER (list),
4287 gtk_scrolled_window_get_hadjustment
4288 (GTK_SCROLLED_WINDOW (scrolled_win)));
4290 if ((infile = fopen("gtkenums.h", "r")))
4296 while (fgets (buffer, 256, infile))
4298 if ((pos = strchr (buffer, '\n')))
4300 item = gtk_list_item_new_with_label (buffer);
4301 gtk_container_add (GTK_CONTAINER (list), item);
4308 hbox = gtk_hbox_new (TRUE, 5);
4309 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4310 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
4312 button = gtk_button_new_with_label ("Insert Row");
4313 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4314 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4315 GTK_SIGNAL_FUNC (list_add),
4318 button = gtk_button_new_with_label ("Clear List");
4319 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4320 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4321 GTK_SIGNAL_FUNC (list_clear),
4324 button = gtk_button_new_with_label ("Remove Selection");
4325 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4326 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4327 GTK_SIGNAL_FUNC (list_remove),
4330 cbox = gtk_hbox_new (FALSE, 0);
4331 gtk_box_pack_start (GTK_BOX (vbox), cbox, FALSE, TRUE, 0);
4333 hbox = gtk_hbox_new (FALSE, 5);
4334 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4335 gtk_box_pack_start (GTK_BOX (cbox), hbox, TRUE, FALSE, 0);
4337 label = gtk_label_new ("Selection Mode :");
4338 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
4340 list_omenu = build_option_menu (items, 4, 3, list);
4341 gtk_box_pack_start (GTK_BOX (hbox), list_omenu, FALSE, TRUE, 0);
4343 separator = gtk_hseparator_new ();
4344 gtk_box_pack_start (GTK_BOX (vbox), separator, FALSE, TRUE, 0);
4346 cbox = gtk_hbox_new (FALSE, 0);
4347 gtk_box_pack_start (GTK_BOX (vbox), cbox, FALSE, TRUE, 0);
4349 button = gtk_button_new_with_label ("close");
4350 gtk_container_set_border_width (GTK_CONTAINER (button), 10);
4351 gtk_box_pack_start (GTK_BOX (cbox), button, TRUE, TRUE, 0);
4352 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
4353 GTK_SIGNAL_FUNC(gtk_widget_destroy),
4354 GTK_OBJECT (window));
4356 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
4357 gtk_widget_grab_default (button);
4360 if (!GTK_WIDGET_VISIBLE (window))
4361 gtk_widget_show_all (window);
4363 gtk_widget_destroy (window);
4370 static char * book_open_xpm[] = {
4393 static char * book_closed_xpm[] = {
4418 static char * mini_page_xpm[] = {
4441 static char * gtk_mini_xpm[] = {
4481 #define TESTGTK_CLIST_COLUMNS 12
4482 static gint clist_rows = 0;
4483 static GtkWidget *clist_omenu;
4486 add1000_clist (GtkWidget *widget, gpointer data)
4489 char text[TESTGTK_CLIST_COLUMNS][50];
4490 char *texts[TESTGTK_CLIST_COLUMNS];
4495 clist = GTK_CLIST (data);
4497 pixmap = gdk_pixmap_create_from_xpm_d (clist->clist_window,
4499 >K_WIDGET (data)->style->white,
4502 for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++)
4505 sprintf (text[i], "Column %d", i);
4509 sprintf (text[1], "Right");
4510 sprintf (text[2], "Center");
4512 gtk_clist_freeze (GTK_CLIST (data));
4513 for (i = 0; i < 1000; i++)
4515 sprintf (text[0], "CListRow %d", rand() % 10000);
4516 row = gtk_clist_append (clist, texts);
4517 gtk_clist_set_pixtext (clist, row, 3, "gtk+", 5, pixmap, mask);
4520 gtk_clist_thaw (GTK_CLIST (data));
4522 gdk_pixmap_unref (pixmap);
4523 gdk_bitmap_unref (mask);
4527 add10000_clist (GtkWidget *widget, gpointer data)
4530 char text[TESTGTK_CLIST_COLUMNS][50];
4531 char *texts[TESTGTK_CLIST_COLUMNS];
4533 for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++)
4536 sprintf (text[i], "Column %d", i);
4539 sprintf (text[1], "Right");
4540 sprintf (text[2], "Center");
4542 gtk_clist_freeze (GTK_CLIST (data));
4543 for (i = 0; i < 10000; i++)
4545 sprintf (text[0], "CListRow %d", rand() % 10000);
4546 gtk_clist_append (GTK_CLIST (data), texts);
4548 gtk_clist_thaw (GTK_CLIST (data));
4552 clear_clist (GtkWidget *widget, gpointer data)
4554 gtk_clist_clear (GTK_CLIST (data));
4558 void clist_remove_selection (GtkWidget *widget, GtkCList *clist)
4560 gtk_clist_freeze (clist);
4562 while (clist->selection)
4567 row = GPOINTER_TO_INT (clist->selection->data);
4569 gtk_clist_remove (clist, row);
4571 if (clist->selection_mode == GTK_SELECTION_BROWSE)
4575 if (clist->selection_mode == GTK_SELECTION_EXTENDED && !clist->selection &&
4576 clist->focus_row >= 0)
4577 gtk_clist_select_row (clist, clist->focus_row, -1);
4579 gtk_clist_thaw (clist);
4582 void toggle_title_buttons (GtkWidget *widget, GtkCList *clist)
4584 if (GTK_TOGGLE_BUTTON (widget)->active)
4585 gtk_clist_column_titles_show (clist);
4587 gtk_clist_column_titles_hide (clist);
4590 void toggle_reorderable (GtkWidget *widget, GtkCList *clist)
4592 gtk_clist_set_reorderable (clist, GTK_TOGGLE_BUTTON (widget)->active);
4596 insert_row_clist (GtkWidget *widget, gpointer data)
4598 static char *text[] =
4600 "This", "is an", "inserted", "row.",
4601 "This", "is an", "inserted", "row.",
4602 "This", "is an", "inserted", "row."
4605 static GtkStyle *style1 = NULL;
4606 static GtkStyle *style2 = NULL;
4607 static GtkStyle *style3 = NULL;
4610 if (GTK_CLIST (data)->focus_row >= 0)
4611 row = gtk_clist_insert (GTK_CLIST (data), GTK_CLIST (data)->focus_row,
4614 row = gtk_clist_prepend (GTK_CLIST (data), text);
4628 style1 = gtk_style_copy (GTK_WIDGET (data)->style);
4629 style1->base[GTK_STATE_NORMAL] = col1;
4630 style1->base[GTK_STATE_SELECTED] = col2;
4632 style2 = gtk_style_copy (GTK_WIDGET (data)->style);
4633 style2->fg[GTK_STATE_NORMAL] = col1;
4634 style2->fg[GTK_STATE_SELECTED] = col2;
4636 style3 = gtk_style_copy (GTK_WIDGET (data)->style);
4637 style3->fg[GTK_STATE_NORMAL] = col1;
4638 style3->base[GTK_STATE_NORMAL] = col2;
4639 pango_font_description_free (style3->font_desc);
4640 style3->font_desc = pango_font_description_from_string ("courier 12");
4643 gtk_clist_set_cell_style (GTK_CLIST (data), row, 3, style1);
4644 gtk_clist_set_cell_style (GTK_CLIST (data), row, 4, style2);
4645 gtk_clist_set_cell_style (GTK_CLIST (data), row, 0, style3);
4651 clist_warning_test (GtkWidget *button,
4655 static gboolean add_remove = FALSE;
4657 add_remove = !add_remove;
4659 child = gtk_label_new ("Test");
4660 gtk_widget_ref (child);
4661 gtk_object_sink (GTK_OBJECT (child));
4664 gtk_container_add (GTK_CONTAINER (clist), child);
4667 child->parent = clist;
4668 gtk_container_remove (GTK_CONTAINER (clist), child);
4669 child->parent = NULL;
4672 gtk_widget_destroy (child);
4673 gtk_widget_unref (child);
4677 undo_selection (GtkWidget *button, GtkCList *clist)
4679 gtk_clist_undo_selection (clist);
4683 clist_toggle_sel_mode (GtkWidget *widget, GtkCList *clist)
4687 if (!GTK_WIDGET_MAPPED (widget))
4690 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
4691 (((GtkOptionMenu *)clist_omenu)->menu_item), i);
4693 gtk_clist_set_selection_mode (clist, (GtkSelectionMode) (3-i));
4697 clist_click_column (GtkCList *clist, gint column, gpointer data)
4700 gtk_clist_set_column_visibility (clist, column, FALSE);
4701 else if (column == clist->sort_column)
4703 if (clist->sort_type == GTK_SORT_ASCENDING)
4704 clist->sort_type = GTK_SORT_DESCENDING;
4706 clist->sort_type = GTK_SORT_ASCENDING;
4709 gtk_clist_set_sort_column (clist, column);
4711 gtk_clist_sort (clist);
4718 static GtkWidget *window = NULL;
4720 static char *titles[] =
4722 "auto resize", "not resizeable", "max width 100", "min width 50",
4723 "hide column", "Title 5", "Title 6", "Title 7",
4724 "Title 8", "Title 9", "Title 10", "Title 11"
4727 static OptionMenuItem items[] =
4729 { "Single", clist_toggle_sel_mode },
4730 { "Browse", clist_toggle_sel_mode },
4731 { "Multiple", clist_toggle_sel_mode },
4732 { "Extended", clist_toggle_sel_mode }
4735 char text[TESTGTK_CLIST_COLUMNS][50];
4736 char *texts[TESTGTK_CLIST_COLUMNS];
4742 GtkWidget *separator;
4743 GtkWidget *scrolled_win;
4746 GtkWidget *undo_button;
4756 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
4758 gtk_signal_connect (GTK_OBJECT (window), "destroy",
4759 GTK_SIGNAL_FUNC (gtk_widget_destroyed), &window);
4761 gtk_window_set_title (GTK_WINDOW (window), "clist");
4762 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
4764 vbox = gtk_vbox_new (FALSE, 0);
4765 gtk_container_add (GTK_CONTAINER (window), vbox);
4767 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
4768 gtk_container_set_border_width (GTK_CONTAINER (scrolled_win), 5);
4769 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
4770 GTK_POLICY_AUTOMATIC,
4771 GTK_POLICY_AUTOMATIC);
4773 /* create GtkCList here so we have a pointer to throw at the
4774 * button callbacks -- more is done with it later */
4775 clist = gtk_clist_new_with_titles (TESTGTK_CLIST_COLUMNS, titles);
4776 gtk_container_add (GTK_CONTAINER (scrolled_win), clist);
4777 gtk_signal_connect (GTK_OBJECT (clist), "click_column",
4778 (GtkSignalFunc) clist_click_column, NULL);
4780 /* control buttons */
4781 hbox = gtk_hbox_new (FALSE, 5);
4782 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4783 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
4785 button = gtk_button_new_with_label ("Insert Row");
4786 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4787 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4788 (GtkSignalFunc) insert_row_clist, (gpointer) clist);
4790 button = gtk_button_new_with_label ("Add 1,000 Rows With Pixmaps");
4791 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4792 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4793 (GtkSignalFunc) add1000_clist, (gpointer) clist);
4795 button = gtk_button_new_with_label ("Add 10,000 Rows");
4796 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4797 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4798 (GtkSignalFunc) add10000_clist, (gpointer) clist);
4800 /* second layer of buttons */
4801 hbox = gtk_hbox_new (FALSE, 5);
4802 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4803 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
4805 button = gtk_button_new_with_label ("Clear List");
4806 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4807 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4808 (GtkSignalFunc) clear_clist, (gpointer) clist);
4810 button = gtk_button_new_with_label ("Remove Selection");
4811 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4812 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4813 (GtkSignalFunc) clist_remove_selection,
4816 undo_button = gtk_button_new_with_label ("Undo Selection");
4817 gtk_box_pack_start (GTK_BOX (hbox), undo_button, TRUE, TRUE, 0);
4818 gtk_signal_connect (GTK_OBJECT (undo_button), "clicked",
4819 (GtkSignalFunc) undo_selection, (gpointer) clist);
4821 button = gtk_button_new_with_label ("Warning Test");
4822 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4823 gtk_signal_connect (GTK_OBJECT (button), "clicked",
4824 (GtkSignalFunc) clist_warning_test,(gpointer) clist);
4826 /* third layer of buttons */
4827 hbox = gtk_hbox_new (FALSE, 5);
4828 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
4829 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
4831 check = gtk_check_button_new_with_label ("Show Title Buttons");
4832 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
4833 gtk_signal_connect (GTK_OBJECT (check), "clicked",
4834 GTK_SIGNAL_FUNC (toggle_title_buttons), clist);
4835 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE);
4837 check = gtk_check_button_new_with_label ("Reorderable");
4838 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
4839 gtk_signal_connect (GTK_OBJECT (check), "clicked",
4840 GTK_SIGNAL_FUNC (toggle_reorderable), clist);
4841 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE);
4843 label = gtk_label_new ("Selection Mode :");
4844 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
4846 clist_omenu = build_option_menu (items, 4, 3, clist);
4847 gtk_box_pack_start (GTK_BOX (hbox), clist_omenu, FALSE, TRUE, 0);
4850 * the rest of the clist configuration
4853 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
4854 gtk_clist_set_row_height (GTK_CLIST (clist), 18);
4855 gtk_widget_set_usize (clist, -1, 300);
4857 for (i = 1; i < TESTGTK_CLIST_COLUMNS; i++)
4858 gtk_clist_set_column_width (GTK_CLIST (clist), i, 80);
4860 gtk_clist_set_column_auto_resize (GTK_CLIST (clist), 0, TRUE);
4861 gtk_clist_set_column_resizeable (GTK_CLIST (clist), 1, FALSE);
4862 gtk_clist_set_column_max_width (GTK_CLIST (clist), 2, 100);
4863 gtk_clist_set_column_min_width (GTK_CLIST (clist), 3, 50);
4864 gtk_clist_set_selection_mode (GTK_CLIST (clist), GTK_SELECTION_EXTENDED);
4865 gtk_clist_set_column_justification (GTK_CLIST (clist), 1,
4867 gtk_clist_set_column_justification (GTK_CLIST (clist), 2,
4868 GTK_JUSTIFY_CENTER);
4870 for (i = 0; i < TESTGTK_CLIST_COLUMNS; i++)
4873 sprintf (text[i], "Column %d", i);
4876 sprintf (text[1], "Right");
4877 sprintf (text[2], "Center");
4886 style = gtk_style_new ();
4887 style->fg[GTK_STATE_NORMAL] = col1;
4888 style->base[GTK_STATE_NORMAL] = col2;
4890 style->font_desc->size = 14 * PANGO_SCALE;
4891 style->font_desc->weight = PANGO_WEIGHT_BOLD;
4893 for (i = 0; i < 10; i++)
4895 sprintf (text[0], "CListRow %d", clist_rows++);
4896 gtk_clist_append (GTK_CLIST (clist), texts);
4901 gtk_clist_set_row_style (GTK_CLIST (clist), i, style);
4904 gtk_clist_set_cell_style (GTK_CLIST (clist), i, i % 4, style);
4909 gtk_style_unref (style);
4911 separator = gtk_hseparator_new ();
4912 gtk_box_pack_start (GTK_BOX (vbox), separator, FALSE, TRUE, 0);
4914 hbox = gtk_hbox_new (FALSE, 0);
4915 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
4917 button = gtk_button_new_with_label ("close");
4918 gtk_container_set_border_width (GTK_CONTAINER (button), 10);
4919 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
4920 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
4921 GTK_SIGNAL_FUNC(gtk_widget_destroy),
4922 GTK_OBJECT (window));
4924 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
4925 gtk_widget_grab_default (button);
4928 if (!GTK_WIDGET_VISIBLE (window))
4929 gtk_widget_show_all (window);
4933 gtk_widget_destroy (window);
4948 static gint books = 0;
4949 static gint pages = 0;
4951 static GtkWidget *book_label;
4952 static GtkWidget *page_label;
4953 static GtkWidget *sel_label;
4954 static GtkWidget *vis_label;
4955 static GtkWidget *omenu1;
4956 static GtkWidget *omenu2;
4957 static GtkWidget *omenu3;
4958 static GtkWidget *omenu4;
4959 static GtkWidget *spin1;
4960 static GtkWidget *spin2;
4961 static GtkWidget *spin3;
4962 static gint line_style;
4964 void after_press (GtkCTree *ctree, gpointer data)
4968 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->selection));
4969 gtk_label_set_text (GTK_LABEL (sel_label), buf);
4971 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->row_list));
4972 gtk_label_set_text (GTK_LABEL (vis_label), buf);
4974 sprintf (buf, "%d", books);
4975 gtk_label_set_text (GTK_LABEL (book_label), buf);
4977 sprintf (buf, "%d", pages);
4978 gtk_label_set_text (GTK_LABEL (page_label), buf);
4981 void after_move (GtkCTree *ctree, GtkCTreeNode *child, GtkCTreeNode *parent,
4982 GtkCTreeNode *sibling, gpointer data)
4988 gtk_ctree_get_node_info (ctree, child, &source,
4989 NULL, NULL, NULL, NULL, NULL, NULL, NULL);
4991 gtk_ctree_get_node_info (ctree, parent, &target1,
4992 NULL, NULL, NULL, NULL, NULL, NULL, NULL);
4994 gtk_ctree_get_node_info (ctree, sibling, &target2,
4995 NULL, NULL, NULL, NULL, NULL, NULL, NULL);
4997 g_print ("Moving \"%s\" to \"%s\" with sibling \"%s\".\n", source,
4998 (parent) ? target1 : "nil", (sibling) ? target2 : "nil");
5001 void count_items (GtkCTree *ctree, GtkCTreeNode *list)
5003 if (GTK_CTREE_ROW (list)->is_leaf)
5009 void expand_all (GtkWidget *widget, GtkCTree *ctree)
5011 gtk_ctree_expand_recursive (ctree, NULL);
5012 after_press (ctree, NULL);
5015 void collapse_all (GtkWidget *widget, GtkCTree *ctree)
5017 gtk_ctree_collapse_recursive (ctree, NULL);
5018 after_press (ctree, NULL);
5021 void select_all (GtkWidget *widget, GtkCTree *ctree)
5023 gtk_ctree_select_recursive (ctree, NULL);
5024 after_press (ctree, NULL);
5027 void change_style (GtkWidget *widget, GtkCTree *ctree)
5029 static GtkStyle *style1 = NULL;
5030 static GtkStyle *style2 = NULL;
5036 if (GTK_CLIST (ctree)->focus_row >= 0)
5037 node = GTK_CTREE_NODE
5038 (g_list_nth (GTK_CLIST (ctree)->row_list,GTK_CLIST (ctree)->focus_row));
5040 node = GTK_CTREE_NODE (GTK_CLIST (ctree)->row_list);
5054 style1 = gtk_style_new ();
5055 style1->base[GTK_STATE_NORMAL] = col1;
5056 style1->fg[GTK_STATE_SELECTED] = col2;
5058 style2 = gtk_style_new ();
5059 style2->base[GTK_STATE_SELECTED] = col2;
5060 style2->fg[GTK_STATE_NORMAL] = col1;
5061 style2->base[GTK_STATE_NORMAL] = col2;
5062 pango_font_description_free (style2->font_desc);
5063 style2->font_desc = pango_font_description_from_string ("courier 30");
5066 gtk_ctree_node_set_cell_style (ctree, node, 1, style1);
5067 gtk_ctree_node_set_cell_style (ctree, node, 0, style2);
5069 if (GTK_CTREE_ROW (node)->children)
5070 gtk_ctree_node_set_row_style (ctree, GTK_CTREE_ROW (node)->children,
5074 void unselect_all (GtkWidget *widget, GtkCTree *ctree)
5076 gtk_ctree_unselect_recursive (ctree, NULL);
5077 after_press (ctree, NULL);
5080 void remove_selection (GtkWidget *widget, GtkCTree *ctree)
5085 clist = GTK_CLIST (ctree);
5087 gtk_clist_freeze (clist);
5089 while (clist->selection)
5091 node = clist->selection->data;
5093 if (GTK_CTREE_ROW (node)->is_leaf)
5096 gtk_ctree_post_recursive (ctree, node,
5097 (GtkCTreeFunc) count_items, NULL);
5099 gtk_ctree_remove_node (ctree, node);
5101 if (clist->selection_mode == GTK_SELECTION_BROWSE)
5105 if (clist->selection_mode == GTK_SELECTION_EXTENDED && !clist->selection &&
5106 clist->focus_row >= 0)
5108 node = gtk_ctree_node_nth (ctree, clist->focus_row);
5111 gtk_ctree_select (ctree, node);
5114 gtk_clist_thaw (clist);
5115 after_press (ctree, NULL);
5118 struct _ExportStruct {
5124 typedef struct _ExportStruct ExportStruct;
5127 gnode2ctree (GtkCTree *ctree,
5130 GtkCTreeNode *cnode,
5134 GdkPixmap *pixmap_closed;
5135 GdkBitmap *mask_closed;
5136 GdkPixmap *pixmap_opened;
5137 GdkBitmap *mask_opened;
5139 if (!cnode || !gnode || (!(es = gnode->data)))
5144 pixmap_closed = pixmap3;
5145 mask_closed = mask3;
5146 pixmap_opened = NULL;
5151 pixmap_closed = pixmap1;
5152 mask_closed = mask1;
5153 pixmap_opened = pixmap2;
5154 mask_opened = mask2;
5157 gtk_ctree_set_node_info (ctree, cnode, es->tree, 2, pixmap_closed,
5158 mask_closed, pixmap_opened, mask_opened,
5159 es->is_leaf, (depth < 3));
5160 gtk_ctree_node_set_text (ctree, cnode, 1, es->info);
5168 ctree2gnode (GtkCTree *ctree,
5171 GtkCTreeNode *cnode,
5176 if (!cnode || !gnode)
5179 es = g_new (ExportStruct, 1);
5181 es->is_leaf = GTK_CTREE_ROW (cnode)->is_leaf;
5182 es->tree = GTK_CELL_PIXTEXT (GTK_CTREE_ROW (cnode)->row.cell[0])->text;
5183 es->info = GTK_CELL_PIXTEXT (GTK_CTREE_ROW (cnode)->row.cell[1])->text;
5187 void export_ctree (GtkWidget *widget, GtkCTree *ctree)
5189 char *title[] = { "Tree" , "Info" };
5190 static GtkWidget *export_window = NULL;
5191 static GtkCTree *export_ctree;
5193 GtkWidget *scrolled_win;
5201 export_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5203 gtk_signal_connect (GTK_OBJECT (export_window), "destroy",
5204 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
5207 gtk_window_set_title (GTK_WINDOW (export_window), "exported ctree");
5208 gtk_container_set_border_width (GTK_CONTAINER (export_window), 5);
5210 vbox = gtk_vbox_new (FALSE, 0);
5211 gtk_container_add (GTK_CONTAINER (export_window), vbox);
5213 button = gtk_button_new_with_label ("Close");
5214 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, TRUE, 0);
5216 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5217 (GtkSignalFunc) gtk_widget_destroy,
5218 GTK_OBJECT(export_window));
5220 sep = gtk_hseparator_new ();
5221 gtk_box_pack_end (GTK_BOX (vbox), sep, FALSE, TRUE, 10);
5223 export_ctree = GTK_CTREE (gtk_ctree_new_with_titles (2, 0, title));
5224 gtk_ctree_set_line_style (export_ctree, GTK_CTREE_LINES_DOTTED);
5226 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
5227 gtk_container_add (GTK_CONTAINER (scrolled_win),
5228 GTK_WIDGET (export_ctree));
5229 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
5230 GTK_POLICY_AUTOMATIC,
5231 GTK_POLICY_AUTOMATIC);
5232 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
5233 gtk_clist_set_selection_mode (GTK_CLIST (export_ctree),
5234 GTK_SELECTION_EXTENDED);
5235 gtk_clist_set_column_width (GTK_CLIST (export_ctree), 0, 200);
5236 gtk_clist_set_column_width (GTK_CLIST (export_ctree), 1, 200);
5237 gtk_widget_set_usize (GTK_WIDGET (export_ctree), 300, 200);
5240 if (!GTK_WIDGET_VISIBLE (export_window))
5241 gtk_widget_show_all (export_window);
5243 gtk_clist_clear (GTK_CLIST (export_ctree));
5245 node = GTK_CTREE_NODE (g_list_nth (GTK_CLIST (ctree)->row_list,
5246 GTK_CLIST (ctree)->focus_row));
5250 gnode = gtk_ctree_export_to_gnode (ctree, NULL, NULL, node,
5254 gtk_ctree_insert_gnode (export_ctree, NULL, NULL, gnode,
5256 g_node_destroy (gnode);
5260 void change_indent (GtkWidget *widget, GtkCTree *ctree)
5262 gtk_ctree_set_indent (ctree, GTK_ADJUSTMENT (widget)->value);
5265 void change_spacing (GtkWidget *widget, GtkCTree *ctree)
5267 gtk_ctree_set_spacing (ctree, GTK_ADJUSTMENT (widget)->value);
5270 void change_row_height (GtkWidget *widget, GtkCList *clist)
5272 gtk_clist_set_row_height (clist, GTK_ADJUSTMENT (widget)->value);
5275 void set_background (GtkCTree *ctree, GtkCTreeNode *node, gpointer data)
5277 GtkStyle *style = NULL;
5282 if (ctree->line_style != GTK_CTREE_LINES_TABBED)
5284 if (!GTK_CTREE_ROW (node)->is_leaf)
5285 style = GTK_CTREE_ROW (node)->row.data;
5286 else if (GTK_CTREE_ROW (node)->parent)
5287 style = GTK_CTREE_ROW (GTK_CTREE_ROW (node)->parent)->row.data;
5290 gtk_ctree_node_set_row_style (ctree, node, style);
5293 void ctree_toggle_line_style (GtkWidget *widget, GtkCTree *ctree)
5297 if (!GTK_WIDGET_MAPPED (widget))
5300 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
5301 (((GtkOptionMenu *)omenu1)->menu_item), i);
5303 if ((ctree->line_style == GTK_CTREE_LINES_TABBED &&
5304 ((GtkCTreeLineStyle) (3 - i)) != GTK_CTREE_LINES_TABBED) ||
5305 (ctree->line_style != GTK_CTREE_LINES_TABBED &&
5306 ((GtkCTreeLineStyle) (3 - i)) == GTK_CTREE_LINES_TABBED))
5307 gtk_ctree_pre_recursive (ctree, NULL, set_background, NULL);
5308 gtk_ctree_set_line_style (ctree, 3 - i);
5312 void ctree_toggle_expander_style (GtkWidget *widget, GtkCTree *ctree)
5316 if (!GTK_WIDGET_MAPPED (widget))
5319 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
5320 (((GtkOptionMenu *)omenu2)->menu_item), i);
5322 gtk_ctree_set_expander_style (ctree, (GtkCTreeExpanderStyle) (3 - i));
5325 void ctree_toggle_justify (GtkWidget *widget, GtkCTree *ctree)
5329 if (!GTK_WIDGET_MAPPED (widget))
5332 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
5333 (((GtkOptionMenu *)omenu3)->menu_item), i);
5335 gtk_clist_set_column_justification (GTK_CLIST (ctree), ctree->tree_column,
5336 (GtkJustification) (1 - i));
5339 void ctree_toggle_sel_mode (GtkWidget *widget, GtkCTree *ctree)
5343 if (!GTK_WIDGET_MAPPED (widget))
5346 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
5347 (((GtkOptionMenu *)omenu4)->menu_item), i);
5349 gtk_clist_set_selection_mode (GTK_CLIST (ctree), (GtkSelectionMode) (3 - i));
5350 after_press (ctree, NULL);
5353 void build_recursive (GtkCTree *ctree, gint cur_depth, gint depth,
5354 gint num_books, gint num_pages, GtkCTreeNode *parent)
5359 GtkCTreeNode *sibling;
5366 for (i = num_pages + num_books; i > num_books; i--)
5369 sprintf (buf1, "Page %02d", (gint) rand() % 100);
5370 sprintf (buf2, "Item %d-%d", cur_depth, i);
5371 sibling = gtk_ctree_insert_node (ctree, parent, sibling, text, 5,
5372 pixmap3, mask3, NULL, NULL,
5375 if (parent && ctree->line_style == GTK_CTREE_LINES_TABBED)
5376 gtk_ctree_node_set_row_style (ctree, sibling,
5377 GTK_CTREE_ROW (parent)->row.style);
5380 if (cur_depth == depth)
5383 for (i = num_books; i > 0; i--)
5388 sprintf (buf1, "Book %02d", (gint) rand() % 100);
5389 sprintf (buf2, "Item %d-%d", cur_depth, i);
5390 sibling = gtk_ctree_insert_node (ctree, parent, sibling, text, 5,
5391 pixmap1, mask1, pixmap2, mask2,
5394 style = gtk_style_new ();
5395 switch (cur_depth % 3)
5398 style->base[GTK_STATE_NORMAL].red = 10000 * (cur_depth % 6);
5399 style->base[GTK_STATE_NORMAL].green = 0;
5400 style->base[GTK_STATE_NORMAL].blue = 65535 - ((i * 10000) % 65535);
5403 style->base[GTK_STATE_NORMAL].red = 10000 * (cur_depth % 6);
5404 style->base[GTK_STATE_NORMAL].green = 65535 - ((i * 10000) % 65535);
5405 style->base[GTK_STATE_NORMAL].blue = 0;
5408 style->base[GTK_STATE_NORMAL].red = 65535 - ((i * 10000) % 65535);
5409 style->base[GTK_STATE_NORMAL].green = 0;
5410 style->base[GTK_STATE_NORMAL].blue = 10000 * (cur_depth % 6);
5413 gtk_ctree_node_set_row_data_full (ctree, sibling, style,
5414 (GtkDestroyNotify) gtk_style_unref);
5416 if (ctree->line_style == GTK_CTREE_LINES_TABBED)
5417 gtk_ctree_node_set_row_style (ctree, sibling, style);
5419 build_recursive (ctree, cur_depth + 1, depth, num_books, num_pages,
5424 void rebuild_tree (GtkWidget *widget, GtkCTree *ctree)
5427 gchar label1[] = "Root";
5428 gchar label2[] = "";
5429 GtkCTreeNode *parent;
5436 d = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin1));
5437 b = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin2));
5438 p = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin3));
5440 n = ((pow (b, d) - 1) / (b - 1)) * (p + 1);
5444 g_print ("%d total items? Try less\n",n);
5448 gtk_clist_freeze (GTK_CLIST (ctree));
5449 gtk_clist_clear (GTK_CLIST (ctree));
5454 parent = gtk_ctree_insert_node (ctree, NULL, NULL, text, 5, pixmap1,
5455 mask1, pixmap2, mask2, FALSE, TRUE);
5457 style = gtk_style_new ();
5458 style->base[GTK_STATE_NORMAL].red = 0;
5459 style->base[GTK_STATE_NORMAL].green = 45000;
5460 style->base[GTK_STATE_NORMAL].blue = 55000;
5461 gtk_ctree_node_set_row_data_full (ctree, parent, style,
5462 (GtkDestroyNotify) gtk_style_unref);
5464 if (ctree->line_style == GTK_CTREE_LINES_TABBED)
5465 gtk_ctree_node_set_row_style (ctree, parent, style);
5467 build_recursive (ctree, 1, d, b, p, parent);
5468 gtk_clist_thaw (GTK_CLIST (ctree));
5469 after_press (ctree, NULL);
5473 ctree_click_column (GtkCTree *ctree, gint column, gpointer data)
5477 clist = GTK_CLIST (ctree);
5479 if (column == clist->sort_column)
5481 if (clist->sort_type == GTK_SORT_ASCENDING)
5482 clist->sort_type = GTK_SORT_DESCENDING;
5484 clist->sort_type = GTK_SORT_ASCENDING;
5487 gtk_clist_set_sort_column (clist, column);
5489 gtk_ctree_sort_recursive (ctree, NULL);
5492 void create_ctree (void)
5494 static GtkWidget *window = NULL;
5495 GtkTooltips *tooltips;
5497 GtkWidget *scrolled_win;
5509 GdkColor transparent = { 0 };
5511 char *title[] = { "Tree" , "Info" };
5514 static OptionMenuItem items1[] =
5516 { "No lines", ctree_toggle_line_style },
5517 { "Solid", ctree_toggle_line_style },
5518 { "Dotted", ctree_toggle_line_style },
5519 { "Tabbed", ctree_toggle_line_style }
5522 static OptionMenuItem items2[] =
5524 { "None", ctree_toggle_expander_style },
5525 { "Square", ctree_toggle_expander_style },
5526 { "Triangle", ctree_toggle_expander_style },
5527 { "Circular", ctree_toggle_expander_style }
5530 static OptionMenuItem items3[] =
5532 { "Left", ctree_toggle_justify },
5533 { "Right", ctree_toggle_justify }
5536 static OptionMenuItem items4[] =
5538 { "Single", ctree_toggle_sel_mode },
5539 { "Browse", ctree_toggle_sel_mode },
5540 { "Multiple", ctree_toggle_sel_mode },
5541 { "Extended", ctree_toggle_sel_mode }
5546 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
5548 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5549 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
5552 gtk_window_set_title (GTK_WINDOW (window), "GtkCTree");
5553 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
5555 tooltips = gtk_tooltips_new ();
5556 gtk_object_ref (GTK_OBJECT (tooltips));
5557 gtk_object_sink (GTK_OBJECT (tooltips));
5559 gtk_object_set_data_full (GTK_OBJECT (window), "tooltips", tooltips,
5560 (GtkDestroyNotify) gtk_object_unref);
5562 vbox = gtk_vbox_new (FALSE, 0);
5563 gtk_container_add (GTK_CONTAINER (window), vbox);
5565 hbox = gtk_hbox_new (FALSE, 5);
5566 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
5567 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
5569 label = gtk_label_new ("Depth :");
5570 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
5572 adj = (GtkAdjustment *) gtk_adjustment_new (4, 1, 10, 1, 5, 0);
5573 spin1 = gtk_spin_button_new (adj, 0, 0);
5574 gtk_box_pack_start (GTK_BOX (hbox), spin1, FALSE, TRUE, 5);
5576 label = gtk_label_new ("Books :");
5577 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
5579 adj = (GtkAdjustment *) gtk_adjustment_new (3, 1, 20, 1, 5, 0);
5580 spin2 = gtk_spin_button_new (adj, 0, 0);
5581 gtk_box_pack_start (GTK_BOX (hbox), spin2, FALSE, TRUE, 5);
5583 label = gtk_label_new ("Pages :");
5584 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
5586 adj = (GtkAdjustment *) gtk_adjustment_new (5, 1, 20, 1, 5, 0);
5587 spin3 = gtk_spin_button_new (adj, 0, 0);
5588 gtk_box_pack_start (GTK_BOX (hbox), spin3, FALSE, TRUE, 5);
5590 button = gtk_button_new_with_label ("Close");
5591 gtk_box_pack_end (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5593 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
5594 (GtkSignalFunc) gtk_widget_destroy,
5595 GTK_OBJECT(window));
5597 button = gtk_button_new_with_label ("Rebuild Tree");
5598 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5600 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
5601 gtk_container_set_border_width (GTK_CONTAINER (scrolled_win), 5);
5602 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
5603 GTK_POLICY_AUTOMATIC,
5605 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
5607 ctree = GTK_CTREE (gtk_ctree_new_with_titles (2, 0, title));
5608 gtk_container_add (GTK_CONTAINER (scrolled_win), GTK_WIDGET (ctree));
5610 gtk_clist_set_column_auto_resize (GTK_CLIST (ctree), 0, TRUE);
5611 gtk_clist_set_column_width (GTK_CLIST (ctree), 1, 200);
5612 gtk_clist_set_selection_mode (GTK_CLIST (ctree), GTK_SELECTION_EXTENDED);
5613 gtk_ctree_set_line_style (ctree, GTK_CTREE_LINES_DOTTED);
5614 line_style = GTK_CTREE_LINES_DOTTED;
5616 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5617 GTK_SIGNAL_FUNC (rebuild_tree), ctree);
5618 gtk_signal_connect (GTK_OBJECT (ctree), "click_column",
5619 (GtkSignalFunc) ctree_click_column, NULL);
5621 gtk_signal_connect_after (GTK_OBJECT (ctree), "button_press_event",
5622 GTK_SIGNAL_FUNC (after_press), NULL);
5623 gtk_signal_connect_after (GTK_OBJECT (ctree), "button_release_event",
5624 GTK_SIGNAL_FUNC (after_press), NULL);
5625 gtk_signal_connect_after (GTK_OBJECT (ctree), "tree_move",
5626 GTK_SIGNAL_FUNC (after_move), NULL);
5627 gtk_signal_connect_after (GTK_OBJECT (ctree), "end_selection",
5628 GTK_SIGNAL_FUNC (after_press), NULL);
5629 gtk_signal_connect_after (GTK_OBJECT (ctree), "toggle_focus_row",
5630 GTK_SIGNAL_FUNC (after_press), NULL);
5631 gtk_signal_connect_after (GTK_OBJECT (ctree), "select_all",
5632 GTK_SIGNAL_FUNC (after_press), NULL);
5633 gtk_signal_connect_after (GTK_OBJECT (ctree), "unselect_all",
5634 GTK_SIGNAL_FUNC (after_press), NULL);
5635 gtk_signal_connect_after (GTK_OBJECT (ctree), "scroll_vertical",
5636 GTK_SIGNAL_FUNC (after_press), NULL);
5638 bbox = gtk_hbox_new (FALSE, 5);
5639 gtk_container_set_border_width (GTK_CONTAINER (bbox), 5);
5640 gtk_box_pack_start (GTK_BOX (vbox), bbox, FALSE, TRUE, 0);
5642 mbox = gtk_vbox_new (TRUE, 5);
5643 gtk_box_pack_start (GTK_BOX (bbox), mbox, FALSE, TRUE, 0);
5645 label = gtk_label_new ("Row Height :");
5646 gtk_box_pack_start (GTK_BOX (mbox), label, FALSE, FALSE, 0);
5648 label = gtk_label_new ("Indent :");
5649 gtk_box_pack_start (GTK_BOX (mbox), label, FALSE, FALSE, 0);
5651 label = gtk_label_new ("Spacing :");
5652 gtk_box_pack_start (GTK_BOX (mbox), label, FALSE, FALSE, 0);
5654 mbox = gtk_vbox_new (TRUE, 5);
5655 gtk_box_pack_start (GTK_BOX (bbox), mbox, FALSE, TRUE, 0);
5657 adj = (GtkAdjustment *) gtk_adjustment_new (20, 12, 100, 1, 10, 0);
5658 spinner = gtk_spin_button_new (adj, 0, 0);
5659 gtk_box_pack_start (GTK_BOX (mbox), spinner, FALSE, FALSE, 5);
5660 gtk_tooltips_set_tip (tooltips, spinner,
5661 "Row height of list items", NULL);
5662 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
5663 GTK_SIGNAL_FUNC (change_row_height), ctree);
5664 gtk_clist_set_row_height ( GTK_CLIST (ctree), adj->value);
5666 adj = (GtkAdjustment *) gtk_adjustment_new (20, 0, 60, 1, 10, 0);
5667 spinner = gtk_spin_button_new (adj, 0, 0);
5668 gtk_box_pack_start (GTK_BOX (mbox), spinner, FALSE, FALSE, 5);
5669 gtk_tooltips_set_tip (tooltips, spinner, "Tree Indentation.", NULL);
5670 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
5671 GTK_SIGNAL_FUNC (change_indent), ctree);
5673 adj = (GtkAdjustment *) gtk_adjustment_new (5, 0, 60, 1, 10, 0);
5674 spinner = gtk_spin_button_new (adj, 0, 0);
5675 gtk_box_pack_start (GTK_BOX (mbox), spinner, FALSE, FALSE, 5);
5676 gtk_tooltips_set_tip (tooltips, spinner, "Tree Spacing.", NULL);
5677 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
5678 GTK_SIGNAL_FUNC (change_spacing), ctree);
5680 mbox = gtk_vbox_new (TRUE, 5);
5681 gtk_box_pack_start (GTK_BOX (bbox), mbox, FALSE, TRUE, 0);
5683 hbox = gtk_hbox_new (FALSE, 5);
5684 gtk_box_pack_start (GTK_BOX (mbox), hbox, FALSE, FALSE, 0);
5686 button = gtk_button_new_with_label ("Expand All");
5687 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5688 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5689 GTK_SIGNAL_FUNC (expand_all), ctree);
5691 button = gtk_button_new_with_label ("Collapse All");
5692 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5693 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5694 GTK_SIGNAL_FUNC (collapse_all), ctree);
5696 button = gtk_button_new_with_label ("Change Style");
5697 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5698 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5699 GTK_SIGNAL_FUNC (change_style), ctree);
5701 button = gtk_button_new_with_label ("Export Tree");
5702 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5703 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5704 GTK_SIGNAL_FUNC (export_ctree), ctree);
5706 hbox = gtk_hbox_new (FALSE, 5);
5707 gtk_box_pack_start (GTK_BOX (mbox), hbox, FALSE, FALSE, 0);
5709 button = gtk_button_new_with_label ("Select All");
5710 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5711 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5712 GTK_SIGNAL_FUNC (select_all), ctree);
5714 button = gtk_button_new_with_label ("Unselect All");
5715 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5716 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5717 GTK_SIGNAL_FUNC (unselect_all), ctree);
5719 button = gtk_button_new_with_label ("Remove Selection");
5720 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
5721 gtk_signal_connect (GTK_OBJECT (button), "clicked",
5722 GTK_SIGNAL_FUNC (remove_selection), ctree);
5724 check = gtk_check_button_new_with_label ("Reorderable");
5725 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
5726 gtk_tooltips_set_tip (tooltips, check,
5727 "Tree items can be reordered by dragging.", NULL);
5728 gtk_signal_connect (GTK_OBJECT (check), "clicked",
5729 GTK_SIGNAL_FUNC (toggle_reorderable), ctree);
5730 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE);
5732 hbox = gtk_hbox_new (TRUE, 5);
5733 gtk_box_pack_start (GTK_BOX (mbox), hbox, FALSE, FALSE, 0);
5735 omenu1 = build_option_menu (items1, 4, 2, ctree);
5736 gtk_box_pack_start (GTK_BOX (hbox), omenu1, FALSE, TRUE, 0);
5737 gtk_tooltips_set_tip (tooltips, omenu1, "The tree's line style.", NULL);
5739 omenu2 = build_option_menu (items2, 4, 1, ctree);
5740 gtk_box_pack_start (GTK_BOX (hbox), omenu2, FALSE, TRUE, 0);
5741 gtk_tooltips_set_tip (tooltips, omenu2, "The tree's expander style.",
5744 omenu3 = build_option_menu (items3, 2, 0, ctree);
5745 gtk_box_pack_start (GTK_BOX (hbox), omenu3, FALSE, TRUE, 0);
5746 gtk_tooltips_set_tip (tooltips, omenu3, "The tree's justification.",
5749 omenu4 = build_option_menu (items4, 4, 3, ctree);
5750 gtk_box_pack_start (GTK_BOX (hbox), omenu4, FALSE, TRUE, 0);
5751 gtk_tooltips_set_tip (tooltips, omenu4, "The list's selection mode.",
5754 gtk_widget_realize (window);
5757 pixmap1 = gdk_pixmap_create_from_xpm_d (window->window, &mask1,
5758 &transparent, book_closed_xpm);
5760 pixmap2 = gdk_pixmap_create_from_xpm_d (window->window, &mask2,
5761 &transparent, book_open_xpm);
5763 pixmap3 = gdk_pixmap_create_from_xpm_d (window->window, &mask3,
5764 &transparent, mini_page_xpm);
5766 gtk_widget_set_usize (GTK_WIDGET (ctree), 0, 300);
5768 frame = gtk_frame_new (NULL);
5769 gtk_container_set_border_width (GTK_CONTAINER (frame), 0);
5770 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_OUT);
5771 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
5773 hbox = gtk_hbox_new (TRUE, 2);
5774 gtk_container_set_border_width (GTK_CONTAINER (hbox), 2);
5775 gtk_container_add (GTK_CONTAINER (frame), hbox);
5777 frame = gtk_frame_new (NULL);
5778 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
5779 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
5781 hbox2 = gtk_hbox_new (FALSE, 0);
5782 gtk_container_set_border_width (GTK_CONTAINER (hbox2), 2);
5783 gtk_container_add (GTK_CONTAINER (frame), hbox2);
5785 label = gtk_label_new ("Books :");
5786 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
5788 sprintf (buf, "%d", books);
5789 book_label = gtk_label_new (buf);
5790 gtk_box_pack_end (GTK_BOX (hbox2), book_label, FALSE, TRUE, 5);
5792 frame = gtk_frame_new (NULL);
5793 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
5794 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
5796 hbox2 = gtk_hbox_new (FALSE, 0);
5797 gtk_container_set_border_width (GTK_CONTAINER (hbox2), 2);
5798 gtk_container_add (GTK_CONTAINER (frame), hbox2);
5800 label = gtk_label_new ("Pages :");
5801 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
5803 sprintf (buf, "%d", pages);
5804 page_label = gtk_label_new (buf);
5805 gtk_box_pack_end (GTK_BOX (hbox2), page_label, FALSE, TRUE, 5);
5807 frame = gtk_frame_new (NULL);
5808 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
5809 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
5811 hbox2 = gtk_hbox_new (FALSE, 0);
5812 gtk_container_set_border_width (GTK_CONTAINER (hbox2), 2);
5813 gtk_container_add (GTK_CONTAINER (frame), hbox2);
5815 label = gtk_label_new ("Selected :");
5816 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
5818 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->selection));
5819 sel_label = gtk_label_new (buf);
5820 gtk_box_pack_end (GTK_BOX (hbox2), sel_label, FALSE, TRUE, 5);
5822 frame = gtk_frame_new (NULL);
5823 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
5824 gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0);
5826 hbox2 = gtk_hbox_new (FALSE, 0);
5827 gtk_container_set_border_width (GTK_CONTAINER (hbox2), 2);
5828 gtk_container_add (GTK_CONTAINER (frame), hbox2);
5830 label = gtk_label_new ("Visible :");
5831 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0);
5833 sprintf (buf, "%d", g_list_length (GTK_CLIST (ctree)->row_list));
5834 vis_label = gtk_label_new (buf);
5835 gtk_box_pack_end (GTK_BOX (hbox2), vis_label, FALSE, TRUE, 5);
5837 rebuild_tree (NULL, ctree);
5840 if (!GTK_WIDGET_VISIBLE (window))
5841 gtk_widget_show_all (window);
5843 gtk_widget_destroy (window);
5851 color_selection_ok (GtkWidget *w,
5852 GtkColorSelectionDialog *cs)
5854 GtkColorSelection *colorsel;
5857 colorsel=GTK_COLOR_SELECTION(cs->colorsel);
5859 gtk_color_selection_get_color(colorsel,color);
5860 gtk_color_selection_set_color(colorsel,color);
5864 color_selection_changed (GtkWidget *w,
5865 GtkColorSelectionDialog *cs)
5867 GtkColorSelection *colorsel;
5870 colorsel=GTK_COLOR_SELECTION(cs->colorsel);
5871 gtk_color_selection_get_color(colorsel,color);
5875 opacity_toggled_cb (GtkWidget *w,
5876 GtkColorSelectionDialog *cs)
5878 GtkColorSelection *colorsel;
5880 colorsel = GTK_COLOR_SELECTION (cs->colorsel);
5881 gtk_color_selection_set_use_opacity (colorsel,
5882 gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w)));
5886 palette_toggled_cb (GtkWidget *w,
5887 GtkColorSelectionDialog *cs)
5889 GtkColorSelection *colorsel;
5891 colorsel = GTK_COLOR_SELECTION (cs->colorsel);
5892 gtk_color_selection_set_use_palette (colorsel,
5893 gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w)));
5897 create_color_selection (void)
5899 static GtkWidget *window = NULL;
5903 GtkWidget *options_hbox;
5904 GtkWidget *check_button;
5906 window = gtk_color_selection_dialog_new ("color selection dialog");
5908 gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
5910 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5911 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5914 options_hbox = gtk_hbox_new (FALSE, 0);
5915 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), options_hbox, FALSE, FALSE, 0);
5916 gtk_container_set_border_width (GTK_CONTAINER (options_hbox), 10);
5918 check_button = gtk_check_button_new_with_label ("Show Opacity");
5919 gtk_box_pack_start (GTK_BOX (options_hbox), check_button, FALSE, FALSE, 0);
5920 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
5921 GTK_SIGNAL_FUNC (opacity_toggled_cb), window);
5923 check_button = gtk_check_button_new_with_label ("Show Palette");
5924 gtk_box_pack_end (GTK_BOX (options_hbox), check_button, FALSE, FALSE, 0);
5925 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
5926 GTK_SIGNAL_FUNC (palette_toggled_cb), window);
5928 gtk_widget_show_all (options_hbox);
5930 gtk_signal_connect (
5931 GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (window)->colorsel),
5933 GTK_SIGNAL_FUNC(color_selection_changed),
5936 gtk_signal_connect (
5937 GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (window)->ok_button),
5939 GTK_SIGNAL_FUNC(color_selection_ok),
5942 gtk_signal_connect_object (
5943 GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (window)->cancel_button),
5945 GTK_SIGNAL_FUNC(gtk_widget_destroy),
5946 GTK_OBJECT (window));
5949 if (!GTK_WIDGET_VISIBLE (window))
5950 gtk_widget_show (window);
5952 gtk_widget_destroy (window);
5960 file_selection_hide_fileops (GtkWidget *widget,
5961 GtkFileSelection *fs)
5963 gtk_file_selection_hide_fileop_buttons (fs);
5967 file_selection_ok (GtkWidget *w,
5968 GtkFileSelection *fs)
5970 g_print ("%s\n", gtk_file_selection_get_filename (fs));
5971 gtk_widget_destroy (GTK_WIDGET (fs));
5975 create_file_selection (void)
5977 static GtkWidget *window = NULL;
5982 window = gtk_file_selection_new ("file selection dialog");
5984 gtk_file_selection_hide_fileop_buttons (GTK_FILE_SELECTION (window));
5986 gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
5988 gtk_signal_connect (GTK_OBJECT (window), "destroy",
5989 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
5992 gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (window)->ok_button),
5993 "clicked", GTK_SIGNAL_FUNC(file_selection_ok),
5995 gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION (window)->cancel_button),
5996 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
5997 GTK_OBJECT (window));
5999 button = gtk_button_new_with_label ("Hide Fileops");
6000 gtk_signal_connect (GTK_OBJECT (button), "clicked",
6001 (GtkSignalFunc) file_selection_hide_fileops,
6003 gtk_box_pack_start (GTK_BOX (GTK_FILE_SELECTION (window)->action_area),
6004 button, FALSE, FALSE, 0);
6005 gtk_widget_show (button);
6007 button = gtk_button_new_with_label ("Show Fileops");
6008 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6009 (GtkSignalFunc) gtk_file_selection_show_fileop_buttons,
6011 gtk_box_pack_start (GTK_BOX (GTK_FILE_SELECTION (window)->action_area),
6012 button, FALSE, FALSE, 0);
6013 gtk_widget_show (button);
6016 if (!GTK_WIDGET_VISIBLE (window))
6017 gtk_widget_show (window);
6019 gtk_widget_destroy (window);
6023 flipping_toggled_cb (GtkWidget *widget, gpointer data)
6025 int state = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
6026 int new_direction = state ? GTK_TEXT_DIR_RTL : GTK_TEXT_DIR_LTR;
6028 gtk_widget_set_default_direction (new_direction);
6032 create_flipping (void)
6034 static GtkWidget *window = NULL;
6035 GtkWidget *check_button, *button;
6039 window = gtk_dialog_new ();
6041 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6042 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6045 gtk_window_set_title (GTK_WINDOW (window), "Bidirectional Flipping");
6047 check_button = gtk_check_button_new_with_label ("Right-to-left global direction");
6048 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
6049 check_button, TRUE, TRUE, 0);
6051 if (gtk_widget_get_default_direction () == GTK_TEXT_DIR_RTL)
6052 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button), TRUE);
6054 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
6055 flipping_toggled_cb, FALSE);
6057 gtk_container_set_border_width (GTK_CONTAINER (check_button), 10);
6059 button = gtk_button_new_with_label ("Close");
6060 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6061 GTK_SIGNAL_FUNC (gtk_widget_destroy), GTK_OBJECT (window));
6062 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
6063 button, TRUE, TRUE, 0);
6066 if (!GTK_WIDGET_VISIBLE (window))
6067 gtk_widget_show_all (window);
6069 gtk_widget_destroy (window);
6077 font_selection_ok (GtkWidget *w,
6078 GtkFontSelectionDialog *fs)
6080 gchar *s = gtk_font_selection_dialog_get_font_name (fs);
6082 g_print ("%s\n", s);
6084 gtk_widget_destroy (GTK_WIDGET (fs));
6088 create_font_selection (void)
6090 static GtkWidget *window = NULL;
6094 window = gtk_font_selection_dialog_new ("Font Selection Dialog");
6096 gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
6098 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6099 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6102 gtk_signal_connect (GTK_OBJECT (GTK_FONT_SELECTION_DIALOG (window)->ok_button),
6103 "clicked", GTK_SIGNAL_FUNC(font_selection_ok),
6104 GTK_FONT_SELECTION_DIALOG (window));
6105 gtk_signal_connect_object (GTK_OBJECT (GTK_FONT_SELECTION_DIALOG (window)->cancel_button),
6106 "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
6107 GTK_OBJECT (window));
6110 if (!GTK_WIDGET_VISIBLE (window))
6111 gtk_widget_show (window);
6113 gtk_widget_destroy (window);
6120 static GtkWidget *dialog_window = NULL;
6123 label_toggle (GtkWidget *widget,
6128 *label = gtk_label_new ("Dialog Test");
6129 gtk_signal_connect (GTK_OBJECT (*label),
6131 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
6133 gtk_misc_set_padding (GTK_MISC (*label), 10, 10);
6134 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->vbox),
6135 *label, TRUE, TRUE, 0);
6136 gtk_widget_show (*label);
6139 gtk_widget_destroy (*label);
6143 create_dialog (void)
6145 static GtkWidget *label;
6150 dialog_window = gtk_dialog_new ();
6152 gtk_signal_connect (GTK_OBJECT (dialog_window), "destroy",
6153 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6156 gtk_window_set_title (GTK_WINDOW (dialog_window), "GtkDialog");
6157 gtk_container_set_border_width (GTK_CONTAINER (dialog_window), 0);
6158 gtk_widget_set_usize (dialog_window, 200, 110);
6160 button = gtk_button_new_with_label ("OK");
6161 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6162 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->action_area),
6163 button, TRUE, TRUE, 0);
6164 gtk_widget_grab_default (button);
6165 gtk_widget_show (button);
6167 button = gtk_button_new_with_label ("Toggle");
6168 gtk_signal_connect (GTK_OBJECT (button), "clicked",
6169 GTK_SIGNAL_FUNC (label_toggle),
6171 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6172 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->action_area),
6173 button, TRUE, TRUE, 0);
6174 gtk_widget_show (button);
6179 if (!GTK_WIDGET_VISIBLE (dialog_window))
6180 gtk_widget_show (dialog_window);
6182 gtk_widget_destroy (dialog_window);
6187 static gboolean event_watcher_enter_id = 0;
6188 static gboolean event_watcher_leave_id = 0;
6191 event_watcher (GtkObject *object,
6197 g_print ("Watch: \"%s\" emitted for %s\n",
6198 gtk_signal_name (signal_id),
6199 gtk_type_name (GTK_OBJECT_TYPE (object)));
6205 event_watcher_down (void)
6207 if (event_watcher_enter_id)
6211 signal_id = gtk_signal_lookup ("enter_notify_event", GTK_TYPE_WIDGET);
6212 gtk_signal_remove_emission_hook (signal_id, event_watcher_enter_id);
6213 event_watcher_enter_id = 0;
6214 signal_id = gtk_signal_lookup ("leave_notify_event", GTK_TYPE_WIDGET);
6215 gtk_signal_remove_emission_hook (signal_id, event_watcher_leave_id);
6216 event_watcher_leave_id = 0;
6221 event_watcher_toggle (void)
6223 if (event_watcher_enter_id)
6224 event_watcher_down ();
6229 signal_id = gtk_signal_lookup ("enter_notify_event", GTK_TYPE_WIDGET);
6230 event_watcher_enter_id = gtk_signal_add_emission_hook (signal_id, event_watcher, NULL);
6231 signal_id = gtk_signal_lookup ("leave_notify_event", GTK_TYPE_WIDGET);
6232 event_watcher_leave_id = gtk_signal_add_emission_hook (signal_id, event_watcher, NULL);
6237 create_event_watcher (void)
6243 dialog_window = gtk_dialog_new ();
6245 gtk_signal_connect (GTK_OBJECT (dialog_window), "destroy",
6246 GTK_SIGNAL_FUNC (gtk_widget_destroyed),
6248 gtk_signal_connect (GTK_OBJECT (dialog_window),
6250 GTK_SIGNAL_FUNC (event_watcher_down),
6253 gtk_window_set_title (GTK_WINDOW (dialog_window), "Event Watcher");
6254 gtk_container_set_border_width (GTK_CONTAINER (dialog_window), 0);
6255 gtk_widget_set_usize (dialog_window, 200, 110);
6257 button = gtk_toggle_button_new_with_label ("Activate Watch");
6258 gtk_signal_connect (GTK_OBJECT (button), "clicked",
6259 GTK_SIGNAL_FUNC (event_watcher_toggle),
6261 gtk_container_set_border_width (GTK_CONTAINER (button), 10);
6262 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->vbox),
6263 button, TRUE, TRUE, 0);
6264 gtk_widget_show (button);
6266 button = gtk_button_new_with_label ("Close");
6267 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6268 GTK_SIGNAL_FUNC (gtk_widget_destroy),
6269 (GtkObject*) dialog_window);
6270 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6271 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->action_area),
6272 button, TRUE, TRUE, 0);
6273 gtk_widget_grab_default (button);
6274 gtk_widget_show (button);
6277 if (!GTK_WIDGET_VISIBLE (dialog_window))
6278 gtk_widget_show (dialog_window);
6280 gtk_widget_destroy (dialog_window);
6288 create_range_controls (void)
6290 static GtkWidget *window = NULL;
6294 GtkWidget *scrollbar;
6296 GtkWidget *separator;
6297 GtkObject *adjustment;
6302 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6304 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6305 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6308 gtk_window_set_title (GTK_WINDOW (window), "range controls");
6309 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6312 box1 = gtk_vbox_new (FALSE, 0);
6313 gtk_container_add (GTK_CONTAINER (window), box1);
6314 gtk_widget_show (box1);
6317 box2 = gtk_vbox_new (FALSE, 10);
6318 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6319 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
6320 gtk_widget_show (box2);
6323 adjustment = gtk_adjustment_new (0.0, 0.0, 101.0, 0.1, 1.0, 1.0);
6325 scale = gtk_hscale_new (GTK_ADJUSTMENT (adjustment));
6326 gtk_widget_set_usize (GTK_WIDGET (scale), 150, 30);
6327 gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED);
6328 gtk_scale_set_digits (GTK_SCALE (scale), 1);
6329 gtk_scale_set_draw_value (GTK_SCALE (scale), TRUE);
6330 gtk_box_pack_start (GTK_BOX (box2), scale, TRUE, TRUE, 0);
6331 gtk_widget_show (scale);
6333 scrollbar = gtk_hscrollbar_new (GTK_ADJUSTMENT (adjustment));
6334 gtk_range_set_update_policy (GTK_RANGE (scrollbar),
6335 GTK_UPDATE_CONTINUOUS);
6336 gtk_box_pack_start (GTK_BOX (box2), scrollbar, TRUE, TRUE, 0);
6337 gtk_widget_show (scrollbar);
6339 hbox = gtk_hbox_new (FALSE, 0);
6341 scale = gtk_vscale_new (GTK_ADJUSTMENT (adjustment));
6342 gtk_widget_set_usize (scale, -1, 200);
6343 gtk_scale_set_digits (GTK_SCALE (scale), 2);
6344 gtk_scale_set_draw_value (GTK_SCALE (scale), TRUE);
6345 gtk_box_pack_start (GTK_BOX (hbox), scale, TRUE, TRUE, 0);
6346 gtk_widget_show (scale);
6348 scale = gtk_vscale_new (GTK_ADJUSTMENT (adjustment));
6349 gtk_widget_set_usize (scale, -1, 200);
6350 gtk_scale_set_digits (GTK_SCALE (scale), 2);
6351 gtk_scale_set_draw_value (GTK_SCALE (scale), TRUE);
6352 gtk_range_set_inverted (GTK_RANGE (scale), TRUE);
6353 gtk_box_pack_start (GTK_BOX (hbox), scale, TRUE, TRUE, 0);
6354 gtk_widget_show (scale);
6356 gtk_box_pack_start (GTK_BOX (box2), hbox, TRUE, TRUE, 0);
6357 gtk_widget_show (hbox);
6359 separator = gtk_hseparator_new ();
6360 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
6361 gtk_widget_show (separator);
6364 box2 = gtk_vbox_new (FALSE, 10);
6365 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6366 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6367 gtk_widget_show (box2);
6370 button = gtk_button_new_with_label ("close");
6371 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6372 GTK_SIGNAL_FUNC(gtk_widget_destroy),
6373 GTK_OBJECT (window));
6374 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6375 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6376 gtk_widget_grab_default (button);
6377 gtk_widget_show (button);
6380 if (!GTK_WIDGET_VISIBLE (window))
6381 gtk_widget_show (window);
6383 gtk_widget_destroy (window);
6391 create_rulers (void)
6393 static GtkWidget *window = NULL;
6399 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6400 gtk_window_set_policy (GTK_WINDOW (window), TRUE, TRUE, FALSE);
6402 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6403 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6406 gtk_window_set_title (GTK_WINDOW (window), "rulers");
6407 gtk_widget_set_usize (window, 300, 300);
6408 gtk_widget_set_events (window,
6409 GDK_POINTER_MOTION_MASK
6410 | GDK_POINTER_MOTION_HINT_MASK);
6411 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6413 table = gtk_table_new (2, 2, FALSE);
6414 gtk_container_add (GTK_CONTAINER (window), table);
6415 gtk_widget_show (table);
6417 ruler = gtk_hruler_new ();
6418 gtk_ruler_set_metric (GTK_RULER (ruler), GTK_CENTIMETERS);
6419 gtk_ruler_set_range (GTK_RULER (ruler), 100, 0, 0, 20);
6421 gtk_signal_connect_object (GTK_OBJECT (window),
6422 "motion_notify_event",
6423 GTK_SIGNAL_FUNC (GTK_WIDGET_GET_CLASS (ruler)->motion_notify_event),
6424 GTK_OBJECT (ruler));
6426 gtk_table_attach (GTK_TABLE (table), ruler, 1, 2, 0, 1,
6427 GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
6428 gtk_widget_show (ruler);
6431 ruler = gtk_vruler_new ();
6432 gtk_ruler_set_range (GTK_RULER (ruler), 5, 15, 0, 20);
6434 gtk_signal_connect_object (GTK_OBJECT (window),
6435 "motion_notify_event",
6436 GTK_SIGNAL_FUNC (GTK_WIDGET_GET_CLASS (ruler)->motion_notify_event),
6437 GTK_OBJECT (ruler));
6439 gtk_table_attach (GTK_TABLE (table), ruler, 0, 1, 1, 2,
6440 GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
6441 gtk_widget_show (ruler);
6444 if (!GTK_WIDGET_VISIBLE (window))
6445 gtk_widget_show (window);
6447 gtk_widget_destroy (window);
6451 text_toggle_editable (GtkWidget *checkbutton,
6454 gtk_text_set_editable(GTK_TEXT(text),
6455 GTK_TOGGLE_BUTTON(checkbutton)->active);
6459 text_toggle_word_wrap (GtkWidget *checkbutton,
6462 gtk_text_set_word_wrap(GTK_TEXT(text),
6463 GTK_TOGGLE_BUTTON(checkbutton)->active);
6470 { { 0, 0x0000, 0x0000, 0x0000 }, "black" },
6471 { { 0, 0xFFFF, 0xFFFF, 0xFFFF }, "white" },
6472 { { 0, 0xFFFF, 0x0000, 0x0000 }, "red" },
6473 { { 0, 0x0000, 0xFFFF, 0x0000 }, "green" },
6474 { { 0, 0x0000, 0x0000, 0xFFFF }, "blue" },
6475 { { 0, 0x0000, 0xFFFF, 0xFFFF }, "cyan" },
6476 { { 0, 0xFFFF, 0x0000, 0xFFFF }, "magenta" },
6477 { { 0, 0xFFFF, 0xFFFF, 0x0000 }, "yellow" }
6480 int ntext_colors = sizeof(text_colors) / sizeof(text_colors[0]);
6486 text_insert_random (GtkWidget *w, GtkText *text)
6490 for (i=0; i<10; i++)
6492 c = 'A' + rand() % ('Z' - 'A');
6493 gtk_text_set_point (text, rand() % gtk_text_get_length (text));
6494 gtk_text_insert (text, NULL, NULL, NULL, &c, 1);
6503 static GtkWidget *window = NULL;
6509 GtkWidget *separator;
6510 GtkWidget *scrolled_window;
6517 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6518 gtk_widget_set_name (window, "text window");
6519 gtk_widget_set_usize (window, 500, 500);
6520 gtk_window_set_policy (GTK_WINDOW(window), TRUE, TRUE, FALSE);
6522 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6523 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6526 gtk_window_set_title (GTK_WINDOW (window), "test");
6527 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6530 box1 = gtk_vbox_new (FALSE, 0);
6531 gtk_container_add (GTK_CONTAINER (window), box1);
6532 gtk_widget_show (box1);
6535 box2 = gtk_vbox_new (FALSE, 10);
6536 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6537 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
6538 gtk_widget_show (box2);
6541 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
6542 gtk_box_pack_start (GTK_BOX (box2), scrolled_window, TRUE, TRUE, 0);
6543 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
6546 gtk_widget_show (scrolled_window);
6548 text = gtk_text_new (NULL, NULL);
6549 gtk_text_set_editable (GTK_TEXT (text), TRUE);
6550 gtk_container_add (GTK_CONTAINER (scrolled_window), text);
6551 gtk_widget_grab_focus (text);
6552 gtk_widget_show (text);
6555 gtk_text_freeze (GTK_TEXT (text));
6557 for (i=0; i<ntext_colors; i++)
6559 gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL,
6560 text_colors[i].name, -1);
6561 gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL, "\t", -1);
6563 for (j=0; j<ntext_colors; j++)
6565 gtk_text_insert (GTK_TEXT (text), NULL,
6566 &text_colors[j].color, &text_colors[i].color,
6569 gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL, "\n", -1);
6572 infile = fopen("testgtk.c", "r");
6577 int nbytes_read, nbytes_alloc;
6580 nbytes_alloc = 1024;
6581 buffer = g_new (char, nbytes_alloc);
6585 if (nbytes_alloc < nbytes_read + 1024)
6588 buffer = g_realloc (buffer, nbytes_alloc);
6590 len = fread (buffer + nbytes_read, 1, 1024, infile);
6596 gtk_text_insert (GTK_TEXT (text), NULL, NULL,
6597 NULL, buffer, nbytes_read);
6602 gtk_text_thaw (GTK_TEXT (text));
6604 hbox = gtk_hbutton_box_new ();
6605 gtk_box_pack_start (GTK_BOX (box2), hbox, FALSE, FALSE, 0);
6606 gtk_widget_show (hbox);
6608 check = gtk_check_button_new_with_label("Editable");
6609 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, FALSE, 0);
6610 gtk_signal_connect (GTK_OBJECT(check), "toggled",
6611 GTK_SIGNAL_FUNC(text_toggle_editable), text);
6612 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), TRUE);
6613 gtk_widget_show (check);
6615 check = gtk_check_button_new_with_label("Wrap Words");
6616 gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
6617 gtk_signal_connect (GTK_OBJECT(check), "toggled",
6618 GTK_SIGNAL_FUNC(text_toggle_word_wrap), text);
6619 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), FALSE);
6620 gtk_widget_show (check);
6622 separator = gtk_hseparator_new ();
6623 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
6624 gtk_widget_show (separator);
6627 box2 = gtk_vbox_new (FALSE, 10);
6628 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6629 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6630 gtk_widget_show (box2);
6633 button = gtk_button_new_with_label ("insert random");
6634 gtk_signal_connect (GTK_OBJECT (button), "clicked",
6635 GTK_SIGNAL_FUNC(text_insert_random),
6637 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6638 gtk_widget_show (button);
6640 button = gtk_button_new_with_label ("close");
6641 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6642 GTK_SIGNAL_FUNC(gtk_widget_destroy),
6643 GTK_OBJECT (window));
6644 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6645 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
6646 gtk_widget_grab_default (button);
6647 gtk_widget_show (button);
6650 if (!GTK_WIDGET_VISIBLE (window))
6651 gtk_widget_show (window);
6653 gtk_widget_destroy (window);
6660 GdkPixmap *book_open;
6661 GdkPixmap *book_closed;
6662 GdkBitmap *book_open_mask;
6663 GdkBitmap *book_closed_mask;
6664 GtkWidget *sample_notebook;
6667 set_page_pixmaps (GtkNotebook *notebook, gint page_num,
6668 GdkPixmap *pixmap, GdkPixmap *mask)
6670 GtkWidget *page_widget;
6673 page_widget = gtk_notebook_get_nth_page (notebook, page_num);
6675 pixwid = gtk_object_get_data (GTK_OBJECT (page_widget), "tab_pixmap");
6676 gtk_pixmap_set (GTK_PIXMAP (pixwid), pixmap, mask);
6678 pixwid = gtk_object_get_data (GTK_OBJECT (page_widget), "menu_pixmap");
6679 gtk_pixmap_set (GTK_PIXMAP (pixwid), pixmap, mask);
6683 page_switch (GtkWidget *widget, GtkNotebookPage *page, gint page_num)
6685 GtkNotebook *notebook = GTK_NOTEBOOK (widget);
6686 gint old_page_num = gtk_notebook_get_current_page (notebook);
6688 if (page_num == old_page_num)
6691 set_page_pixmaps (notebook, page_num, book_open, book_open_mask);
6693 if (old_page_num != -1)
6694 set_page_pixmaps (notebook, old_page_num, book_closed, book_closed_mask);
6698 tab_fill (GtkToggleButton *button, GtkWidget *child)
6701 GtkPackType pack_type;
6703 gtk_notebook_query_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
6704 &expand, NULL, &pack_type);
6705 gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
6706 expand, button->active, pack_type);
6710 tab_expand (GtkToggleButton *button, GtkWidget *child)
6713 GtkPackType pack_type;
6715 gtk_notebook_query_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
6716 NULL, &fill, &pack_type);
6717 gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
6718 button->active, fill, pack_type);
6722 tab_pack (GtkToggleButton *button, GtkWidget *child)
6728 gtk_notebook_query_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
6729 &expand, &fill, NULL);
6730 gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (sample_notebook), child,
6731 expand, fill, button->active);
6735 create_pages (GtkNotebook *notebook, gint start, gint end)
6737 GtkWidget *child = NULL;
6742 GtkWidget *label_box;
6743 GtkWidget *menu_box;
6748 for (i = start; i <= end; i++)
6750 sprintf (buffer, "Page %d", i);
6752 child = gtk_frame_new (buffer);
6753 gtk_container_set_border_width (GTK_CONTAINER (child), 10);
6755 vbox = gtk_vbox_new (TRUE,0);
6756 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
6757 gtk_container_add (GTK_CONTAINER (child), vbox);
6759 hbox = gtk_hbox_new (TRUE,0);
6760 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5);
6762 button = gtk_check_button_new_with_label ("Fill Tab");
6763 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
6764 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
6765 gtk_signal_connect (GTK_OBJECT (button), "toggled",
6766 GTK_SIGNAL_FUNC (tab_fill), child);
6768 button = gtk_check_button_new_with_label ("Expand Tab");
6769 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
6770 gtk_signal_connect (GTK_OBJECT (button), "toggled",
6771 GTK_SIGNAL_FUNC (tab_expand), child);
6773 button = gtk_check_button_new_with_label ("Pack end");
6774 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
6775 gtk_signal_connect (GTK_OBJECT (button), "toggled",
6776 GTK_SIGNAL_FUNC (tab_pack), child);
6778 button = gtk_button_new_with_label ("Hide Page");
6779 gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 5);
6780 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6781 GTK_SIGNAL_FUNC (gtk_widget_hide),
6782 GTK_OBJECT (child));
6784 gtk_widget_show_all (child);
6786 label_box = gtk_hbox_new (FALSE, 0);
6787 pixwid = gtk_pixmap_new (book_closed, book_closed_mask);
6788 gtk_object_set_data (GTK_OBJECT (child), "tab_pixmap", pixwid);
6790 gtk_box_pack_start (GTK_BOX (label_box), pixwid, FALSE, TRUE, 0);
6791 gtk_misc_set_padding (GTK_MISC (pixwid), 3, 1);
6792 label = gtk_label_new (buffer);
6793 gtk_box_pack_start (GTK_BOX (label_box), label, FALSE, TRUE, 0);
6794 gtk_widget_show_all (label_box);
6797 menu_box = gtk_hbox_new (FALSE, 0);
6798 pixwid = gtk_pixmap_new (book_closed, book_closed_mask);
6799 gtk_object_set_data (GTK_OBJECT (child), "menu_pixmap", pixwid);
6801 gtk_box_pack_start (GTK_BOX (menu_box), pixwid, FALSE, TRUE, 0);
6802 gtk_misc_set_padding (GTK_MISC (pixwid), 3, 1);
6803 label = gtk_label_new (buffer);
6804 gtk_box_pack_start (GTK_BOX (menu_box), label, FALSE, TRUE, 0);
6805 gtk_widget_show_all (menu_box);
6807 gtk_notebook_append_page_menu (notebook, child, label_box, menu_box);
6812 rotate_notebook (GtkButton *button,
6813 GtkNotebook *notebook)
6815 gtk_notebook_set_tab_pos (notebook, (notebook->tab_pos + 1) % 4);
6819 show_all_pages (GtkButton *button,
6820 GtkNotebook *notebook)
6822 gtk_container_foreach (GTK_CONTAINER (notebook),
6823 (GtkCallback) gtk_widget_show, NULL);
6827 standard_notebook (GtkButton *button,
6828 GtkNotebook *notebook)
6832 gtk_notebook_set_show_tabs (notebook, TRUE);
6833 gtk_notebook_set_show_border (notebook, TRUE);
6834 gtk_notebook_set_scrollable (notebook, FALSE);
6835 if (g_list_length (notebook->children) == 15)
6836 for (i = 0; i < 10; i++)
6837 gtk_notebook_remove_page (notebook, 5);
6841 notabs_notebook (GtkButton *button,
6842 GtkNotebook *notebook)
6846 gtk_notebook_set_show_tabs (notebook, FALSE);
6847 gtk_notebook_set_show_border (notebook, TRUE);
6848 if (g_list_length (notebook->children) == 15)
6849 for (i = 0; i < 10; i++)
6850 gtk_notebook_remove_page (notebook, 5);
6854 borderless_notebook (GtkButton *button,
6855 GtkNotebook *notebook)
6859 gtk_notebook_set_show_tabs (notebook, FALSE);
6860 gtk_notebook_set_show_border (notebook, FALSE);
6861 if (g_list_length (notebook->children) == 15)
6862 for (i = 0; i < 10; i++)
6863 gtk_notebook_remove_page (notebook, 5);
6867 scrollable_notebook (GtkButton *button,
6868 GtkNotebook *notebook)
6870 gtk_notebook_set_show_tabs (notebook, TRUE);
6871 gtk_notebook_set_show_border (notebook, TRUE);
6872 gtk_notebook_set_scrollable (notebook, TRUE);
6873 if (g_list_length (notebook->children) == 5)
6874 create_pages (notebook, 6, 15);
6878 notebook_popup (GtkToggleButton *button,
6879 GtkNotebook *notebook)
6882 gtk_notebook_popup_enable (notebook);
6884 gtk_notebook_popup_disable (notebook);
6888 notebook_homogeneous (GtkToggleButton *button,
6889 GtkNotebook *notebook)
6891 gtk_notebook_set_homogeneous_tabs (notebook, button->active);
6895 create_notebook (void)
6897 static GtkWidget *window = NULL;
6901 GtkWidget *separator;
6903 GdkColor *transparent = NULL;
6906 static OptionMenuItem items[] =
6908 { "Standard", standard_notebook },
6909 { "No tabs", notabs_notebook },
6910 { "Borderless", borderless_notebook },
6911 { "Scrollable", scrollable_notebook },
6916 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6918 gtk_signal_connect (GTK_OBJECT (window), "destroy",
6919 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
6922 gtk_window_set_title (GTK_WINDOW (window), "notebook");
6923 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
6925 box1 = gtk_vbox_new (FALSE, 0);
6926 gtk_container_add (GTK_CONTAINER (window), box1);
6928 sample_notebook = gtk_notebook_new ();
6929 gtk_signal_connect (GTK_OBJECT (sample_notebook), "switch_page",
6930 GTK_SIGNAL_FUNC (page_switch), NULL);
6931 gtk_notebook_set_tab_pos (GTK_NOTEBOOK (sample_notebook), GTK_POS_TOP);
6932 gtk_box_pack_start (GTK_BOX (box1), sample_notebook, TRUE, TRUE, 0);
6933 gtk_container_set_border_width (GTK_CONTAINER (sample_notebook), 10);
6935 gtk_widget_realize (sample_notebook);
6937 book_open = gdk_pixmap_create_from_xpm_d (sample_notebook->window,
6942 book_closed = gdk_pixmap_create_from_xpm_d (sample_notebook->window,
6947 create_pages (GTK_NOTEBOOK (sample_notebook), 1, 5);
6949 separator = gtk_hseparator_new ();
6950 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 10);
6952 box2 = gtk_hbox_new (FALSE, 5);
6953 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6954 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6956 button = gtk_check_button_new_with_label ("popup menu");
6957 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, FALSE, 0);
6958 gtk_signal_connect (GTK_OBJECT(button), "clicked",
6959 GTK_SIGNAL_FUNC (notebook_popup),
6960 GTK_OBJECT (sample_notebook));
6962 button = gtk_check_button_new_with_label ("homogeneous tabs");
6963 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, FALSE, 0);
6964 gtk_signal_connect (GTK_OBJECT(button), "clicked",
6965 GTK_SIGNAL_FUNC (notebook_homogeneous),
6966 GTK_OBJECT (sample_notebook));
6968 box2 = gtk_hbox_new (FALSE, 5);
6969 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6970 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6972 label = gtk_label_new ("Notebook Style :");
6973 gtk_box_pack_start (GTK_BOX (box2), label, FALSE, TRUE, 0);
6975 omenu = build_option_menu (items, G_N_ELEMENTS (items), 0, sample_notebook);
6976 gtk_box_pack_start (GTK_BOX (box2), omenu, FALSE, TRUE, 0);
6978 button = gtk_button_new_with_label ("Show all Pages");
6979 gtk_box_pack_start (GTK_BOX (box2), button, FALSE, TRUE, 0);
6980 gtk_signal_connect (GTK_OBJECT (button), "clicked",
6981 GTK_SIGNAL_FUNC (show_all_pages), sample_notebook);
6983 box2 = gtk_hbox_new (TRUE, 10);
6984 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
6985 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
6987 button = gtk_button_new_with_label ("prev");
6988 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6989 GTK_SIGNAL_FUNC (gtk_notebook_prev_page),
6990 GTK_OBJECT (sample_notebook));
6991 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6993 button = gtk_button_new_with_label ("next");
6994 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
6995 GTK_SIGNAL_FUNC (gtk_notebook_next_page),
6996 GTK_OBJECT (sample_notebook));
6997 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
6999 button = gtk_button_new_with_label ("rotate");
7000 gtk_signal_connect (GTK_OBJECT (button), "clicked",
7001 GTK_SIGNAL_FUNC (rotate_notebook), sample_notebook);
7002 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
7004 separator = gtk_hseparator_new ();
7005 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 5);
7007 button = gtk_button_new_with_label ("close");
7008 gtk_container_set_border_width (GTK_CONTAINER (button), 5);
7009 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7010 GTK_SIGNAL_FUNC (gtk_widget_destroy),
7011 GTK_OBJECT (window));
7012 gtk_box_pack_start (GTK_BOX (box1), button, FALSE, FALSE, 0);
7013 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7014 gtk_widget_grab_default (button);
7017 if (!GTK_WIDGET_VISIBLE (window))
7018 gtk_widget_show_all (window);
7020 gtk_widget_destroy (window);
7028 toggle_resize (GtkWidget *widget, GtkWidget *child)
7030 GtkPaned *paned = GTK_PANED (child->parent);
7031 gboolean is_child1 = (child == paned->child1);
7032 gboolean resize, shrink;
7034 resize = is_child1 ? paned->child1_resize : paned->child2_resize;
7035 shrink = is_child1 ? paned->child1_shrink : paned->child2_shrink;
7037 gtk_widget_ref (child);
7038 gtk_container_remove (GTK_CONTAINER (child->parent), child);
7040 gtk_paned_pack1 (paned, child, !resize, shrink);
7042 gtk_paned_pack2 (paned, child, !resize, shrink);
7043 gtk_widget_unref (child);
7047 toggle_shrink (GtkWidget *widget, GtkWidget *child)
7049 GtkPaned *paned = GTK_PANED (child->parent);
7050 gboolean is_child1 = (child == paned->child1);
7051 gboolean resize, shrink;
7053 resize = is_child1 ? paned->child1_resize : paned->child2_resize;
7054 shrink = is_child1 ? paned->child1_shrink : paned->child2_shrink;
7056 gtk_widget_ref (child);
7057 gtk_container_remove (GTK_CONTAINER (child->parent), child);
7059 gtk_paned_pack1 (paned, child, resize, !shrink);
7061 gtk_paned_pack2 (paned, child, resize, !shrink);
7062 gtk_widget_unref (child);
7066 create_pane_options (GtkPaned *paned,
7067 const gchar *frame_label,
7068 const gchar *label1,
7069 const gchar *label2)
7074 GtkWidget *check_button;
7076 frame = gtk_frame_new (frame_label);
7077 gtk_container_set_border_width (GTK_CONTAINER (frame), 4);
7079 table = gtk_table_new (3, 2, 4);
7080 gtk_container_add (GTK_CONTAINER (frame), table);
7082 label = gtk_label_new (label1);
7083 gtk_table_attach_defaults (GTK_TABLE (table), label,
7086 check_button = gtk_check_button_new_with_label ("Resize");
7087 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
7089 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
7090 GTK_SIGNAL_FUNC (toggle_resize),
7093 check_button = gtk_check_button_new_with_label ("Shrink");
7094 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
7096 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
7098 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
7099 GTK_SIGNAL_FUNC (toggle_shrink),
7102 label = gtk_label_new (label2);
7103 gtk_table_attach_defaults (GTK_TABLE (table), label,
7106 check_button = gtk_check_button_new_with_label ("Resize");
7107 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
7109 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
7111 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
7112 GTK_SIGNAL_FUNC (toggle_resize),
7115 check_button = gtk_check_button_new_with_label ("Shrink");
7116 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
7118 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
7120 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
7121 GTK_SIGNAL_FUNC (toggle_shrink),
7130 static GtkWidget *window = NULL;
7139 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7141 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7142 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7145 gtk_window_set_title (GTK_WINDOW (window), "Panes");
7146 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
7148 vbox = gtk_vbox_new (FALSE, 0);
7149 gtk_container_add (GTK_CONTAINER (window), vbox);
7151 vpaned = gtk_vpaned_new ();
7152 gtk_box_pack_start (GTK_BOX (vbox), vpaned, TRUE, TRUE, 0);
7153 gtk_container_set_border_width (GTK_CONTAINER(vpaned), 5);
7155 hpaned = gtk_hpaned_new ();
7156 gtk_paned_add1 (GTK_PANED (vpaned), hpaned);
7158 frame = gtk_frame_new (NULL);
7159 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
7160 gtk_widget_set_usize (frame, 60, 60);
7161 gtk_paned_add1 (GTK_PANED (hpaned), frame);
7163 button = gtk_button_new_with_label ("Hi there");
7164 gtk_container_add (GTK_CONTAINER(frame), button);
7166 frame = gtk_frame_new (NULL);
7167 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
7168 gtk_widget_set_usize (frame, 80, 60);
7169 gtk_paned_add2 (GTK_PANED (hpaned), frame);
7171 frame = gtk_frame_new (NULL);
7172 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
7173 gtk_widget_set_usize (frame, 60, 80);
7174 gtk_paned_add2 (GTK_PANED (vpaned), frame);
7176 /* Now create toggle buttons to control sizing */
7178 gtk_box_pack_start (GTK_BOX (vbox),
7179 create_pane_options (GTK_PANED (hpaned),
7185 gtk_box_pack_start (GTK_BOX (vbox),
7186 create_pane_options (GTK_PANED (vpaned),
7192 gtk_widget_show_all (vbox);
7195 if (!GTK_WIDGET_VISIBLE (window))
7196 gtk_widget_show (window);
7198 gtk_widget_destroy (window);
7207 dnd_drop_destroy_popup (GtkWidget *widget, GtkWindow **window)
7209 if(GTK_IS_BUTTON(widget)) /* I.e. they clicked the close button */
7210 gtk_widget_destroy(GTK_WIDGET(*window));
7212 gtk_grab_remove(GTK_WIDGET(*window));
7220 dnd_drop (GtkWidget *button, GdkEvent *event)
7222 static GtkWidget *window = NULL;
7223 GtkWidget *vbox, *lbl, *btn;
7226 /* DND doesn't obey gtk_grab's, so check if we're already displaying
7227 * drop modal dialog first
7232 window = gtk_window_new(GTK_WINDOW_DIALOG);
7233 gtk_container_set_border_width (GTK_CONTAINER(window), 10);
7235 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7236 GTK_SIGNAL_FUNC(dnd_drop_destroy_popup),
7238 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
7239 GTK_SIGNAL_FUNC(gtk_false),
7242 vbox = gtk_vbox_new(FALSE, 5);
7244 /* Display message that we got from drop source */
7245 msg = g_malloc(strlen(event->dropdataavailable.data)
7246 + strlen(event->dropdataavailable.data_type) + 100);
7247 sprintf(msg, "Drop data of type %s was:\n\n%s",
7248 event->dropdataavailable.data_type,
7249 (char *)event->dropdataavailable.data);
7250 lbl = gtk_label_new(msg);
7251 gtk_label_set_justify(GTK_LABEL(lbl), GTK_JUSTIFY_FILL);
7253 gtk_widget_show(lbl);
7254 gtk_box_pack_start_defaults(GTK_BOX(vbox), lbl);
7256 /* Provide an obvious way out of this heinousness */
7257 btn = gtk_button_new_with_label("Continue with life in\nspite of this oppression");
7258 gtk_signal_connect_object (GTK_OBJECT (btn), "clicked",
7259 GTK_SIGNAL_FUNC(gtk_widget_destroy),
7260 GTK_OBJECT (window));
7261 gtk_widget_show(btn);
7262 gtk_box_pack_start_defaults(GTK_BOX(vbox), btn);
7264 gtk_container_add(GTK_CONTAINER(window), vbox);
7266 gtk_widget_show(vbox);
7267 gtk_grab_add(window);
7268 gtk_widget_show(window);
7272 dnd_drag_request (GtkWidget *button, GdkEvent *event)
7274 #define DND_STRING "Bill Gates demands royalties for\nyour use of his innovation."
7275 gtk_widget_dnd_data_set (button, event, DND_STRING, strlen(DND_STRING) + 1);
7281 static GtkWidget *window = NULL;
7287 GtkWidget *separator;
7289 /* For clarity... */
7290 char *possible_drag_types[] = {"text/plain"};
7291 char *accepted_drop_types[] = {"text/plain"};
7293 static GtkWidget *drag_icon = NULL;
7294 static GtkWidget *drop_icon = NULL;
7298 GdkPoint hotspot = {5,5};
7302 drag_icon = shape_create_icon ("Modeller.xpm",
7303 440, 140, 0,0, GTK_WINDOW_POPUP);
7305 gtk_signal_connect (GTK_OBJECT (drag_icon), "destroy",
7306 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7309 gtk_widget_hide (drag_icon);
7314 drop_icon = shape_create_icon ("3DRings.xpm",
7315 440, 140, 0,0, GTK_WINDOW_POPUP);
7317 gtk_signal_connect (GTK_OBJECT (drop_icon), "destroy",
7318 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7321 gtk_widget_hide (drop_icon);
7324 gdk_dnd_set_drag_shape(drag_icon->window,
7329 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7331 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7332 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7335 gtk_window_set_title (GTK_WINDOW (window), "Drag -N- Drop");
7336 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
7338 box1 = gtk_vbox_new (FALSE, 0);
7339 gtk_container_add (GTK_CONTAINER (window), box1);
7340 gtk_widget_show (box1);
7342 box2 = gtk_hbox_new (FALSE, 5);
7343 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
7344 gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
7345 gtk_widget_show (box2);
7347 frame = gtk_frame_new ("Drag");
7348 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
7349 gtk_widget_show (frame);
7351 box3 = gtk_vbox_new (FALSE, 5);
7352 gtk_container_set_border_width (GTK_CONTAINER (box3), 5);
7353 gtk_container_add (GTK_CONTAINER (frame), box3);
7354 gtk_widget_show (box3);
7359 button = gtk_button_new_with_label ("Drag me!");
7360 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
7361 gtk_widget_show (button);
7364 * currently, the widget has to be realized to
7365 * set dnd on it, this needs to change
7367 gtk_widget_realize (button);
7368 gtk_signal_connect (GTK_OBJECT (button),
7369 "drag_request_event",
7370 GTK_SIGNAL_FUNC(dnd_drag_request),
7373 gtk_widget_dnd_drag_set (button, TRUE, possible_drag_types, 1);
7376 frame = gtk_frame_new ("Drop");
7377 gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0);
7378 gtk_widget_show (frame);
7380 box3 = gtk_vbox_new (FALSE, 5);
7381 gtk_container_set_border_width (GTK_CONTAINER (box3), 5);
7382 gtk_container_add (GTK_CONTAINER (frame), box3);
7383 gtk_widget_show (box3);
7389 button = gtk_button_new_with_label ("To");
7390 gtk_box_pack_start (GTK_BOX (box3), button, FALSE, TRUE, 0);
7391 gtk_widget_show (button);
7393 gtk_widget_realize (button);
7394 gtk_signal_connect (GTK_OBJECT (button),
7395 "drop_data_available_event",
7396 GTK_SIGNAL_FUNC(dnd_drop),
7399 gtk_widget_dnd_drop_set (button, TRUE, accepted_drop_types, 1, FALSE);
7402 separator = gtk_hseparator_new ();
7403 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
7404 gtk_widget_show (separator);
7407 box2 = gtk_vbox_new (FALSE, 10);
7408 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
7409 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
7410 gtk_widget_show (box2);
7413 button = gtk_button_new_with_label ("close");
7415 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7416 GTK_SIGNAL_FUNC(gtk_widget_destroy),
7417 GTK_OBJECT (window));
7419 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
7420 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7421 gtk_widget_grab_default (button);
7422 gtk_widget_show (button);
7425 if (!GTK_WIDGET_VISIBLE (window))
7426 gtk_widget_show (window);
7428 gtk_widget_destroy (window);
7436 typedef struct _cursoroffset {gint x,y;} CursorOffset;
7439 shape_pressed (GtkWidget *widget, GdkEventButton *event)
7443 /* ignore double and triple click */
7444 if (event->type != GDK_BUTTON_PRESS)
7447 p = gtk_object_get_user_data (GTK_OBJECT(widget));
7448 p->x = (int) event->x;
7449 p->y = (int) event->y;
7451 gtk_grab_add (widget);
7452 gdk_pointer_grab (widget->window, TRUE,
7453 GDK_BUTTON_RELEASE_MASK |
7454 GDK_BUTTON_MOTION_MASK |
7455 GDK_POINTER_MOTION_HINT_MASK,
7460 shape_released (GtkWidget *widget)
7462 gtk_grab_remove (widget);
7463 gdk_pointer_ungrab (0);
7467 shape_motion (GtkWidget *widget,
7468 GdkEventMotion *event)
7472 GdkModifierType mask;
7474 p = gtk_object_get_user_data (GTK_OBJECT (widget));
7477 * Can't use event->x / event->y here
7478 * because I need absolute coordinates.
7480 gdk_window_get_pointer (NULL, &xp, &yp, &mask);
7481 gtk_widget_set_uposition (widget, xp - p->x, yp - p->y);
7485 shape_create_icon (char *xpm_file,
7495 CursorOffset* icon_pos;
7497 GdkBitmap *gdk_pixmap_mask;
7498 GdkPixmap *gdk_pixmap;
7501 style = gtk_widget_get_default_style ();
7502 gc = style->black_gc;
7505 * GDK_WINDOW_TOPLEVEL works also, giving you a title border
7507 window = gtk_window_new (window_type);
7509 fixed = gtk_fixed_new ();
7510 gtk_widget_set_usize (fixed, 100,100);
7511 gtk_container_add (GTK_CONTAINER (window), fixed);
7512 gtk_widget_show (fixed);
7514 gtk_widget_set_events (window,
7515 gtk_widget_get_events (window) |
7516 GDK_BUTTON_MOTION_MASK |
7517 GDK_POINTER_MOTION_HINT_MASK |
7518 GDK_BUTTON_PRESS_MASK);
7520 gtk_widget_realize (window);
7521 gdk_pixmap = gdk_pixmap_create_from_xpm (window->window, &gdk_pixmap_mask,
7522 &style->bg[GTK_STATE_NORMAL],
7525 pixmap = gtk_pixmap_new (gdk_pixmap, gdk_pixmap_mask);
7526 gtk_fixed_put (GTK_FIXED (fixed), pixmap, px,py);
7527 gtk_widget_show (pixmap);
7529 gtk_widget_shape_combine_mask (window, gdk_pixmap_mask, px, py);
7531 gdk_drawable_unref (gdk_pixmap_mask);
7532 gdk_drawable_unref (gdk_pixmap);
7534 gtk_signal_connect (GTK_OBJECT (window), "button_press_event",
7535 GTK_SIGNAL_FUNC (shape_pressed),NULL);
7536 gtk_signal_connect (GTK_OBJECT (window), "button_release_event",
7537 GTK_SIGNAL_FUNC (shape_released),NULL);
7538 gtk_signal_connect (GTK_OBJECT (window), "motion_notify_event",
7539 GTK_SIGNAL_FUNC (shape_motion),NULL);
7541 icon_pos = g_new (CursorOffset, 1);
7542 gtk_object_set_user_data(GTK_OBJECT(window), icon_pos);
7544 gtk_widget_set_uposition (window, x, y);
7545 gtk_widget_show (window);
7551 create_shapes (void)
7553 /* Variables used by the Drag/Drop and Shape Window demos */
7554 static GtkWidget *modeller = NULL;
7555 static GtkWidget *sheets = NULL;
7556 static GtkWidget *rings = NULL;
7557 static GtkWidget *with_region = NULL;
7559 if (!(file_exists ("Modeller.xpm") &&
7560 file_exists ("FilesQueue.xpm") &&
7561 file_exists ("3DRings.xpm")))
7567 modeller = shape_create_icon ("Modeller.xpm",
7568 440, 140, 0,0, GTK_WINDOW_POPUP);
7570 gtk_signal_connect (GTK_OBJECT (modeller), "destroy",
7571 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7575 gtk_widget_destroy (modeller);
7579 sheets = shape_create_icon ("FilesQueue.xpm",
7580 580, 170, 0,0, GTK_WINDOW_POPUP);
7582 gtk_signal_connect (GTK_OBJECT (sheets), "destroy",
7583 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7588 gtk_widget_destroy (sheets);
7592 rings = shape_create_icon ("3DRings.xpm",
7593 460, 270, 25,25, GTK_WINDOW_TOPLEVEL);
7595 gtk_signal_connect (GTK_OBJECT (rings), "destroy",
7596 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7600 gtk_widget_destroy (rings);
7607 with_region = shape_create_icon ("3DRings.xpm",
7608 460, 270, 25,25, GTK_WINDOW_TOPLEVEL);
7610 gtk_signal_connect (GTK_OBJECT (with_region), "destroy",
7611 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7614 /* reset shape from mask to a region */
7617 region = gdk_region_new ();
7629 gdk_region_union_with_rect (region, &rect);
7637 gdk_window_shape_combine_region (with_region->window,
7642 gtk_widget_destroy (with_region);
7650 create_wmhints (void)
7652 static GtkWidget *window = NULL;
7654 GtkWidget *separator;
7663 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7665 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7666 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7669 gtk_window_set_title (GTK_WINDOW (window), "WM Hints");
7670 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
7672 gtk_widget_realize (window);
7674 circles = gdk_bitmap_create_from_data (window->window,
7678 gdk_window_set_icon (window->window, NULL,
7681 gdk_window_set_icon_name (window->window, "WMHints Test Icon");
7683 gdk_window_set_decorations (window->window, GDK_DECOR_ALL | GDK_DECOR_MENU);
7684 gdk_window_set_functions (window->window, GDK_FUNC_ALL | GDK_FUNC_RESIZE);
7686 box1 = gtk_vbox_new (FALSE, 0);
7687 gtk_container_add (GTK_CONTAINER (window), box1);
7688 gtk_widget_show (box1);
7690 label = gtk_label_new ("Try iconizing me!");
7691 gtk_widget_set_usize (label, 150, 50);
7692 gtk_box_pack_start (GTK_BOX (box1), label, TRUE, TRUE, 0);
7693 gtk_widget_show (label);
7696 separator = gtk_hseparator_new ();
7697 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
7698 gtk_widget_show (separator);
7701 box2 = gtk_vbox_new (FALSE, 10);
7702 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
7703 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
7704 gtk_widget_show (box2);
7707 button = gtk_button_new_with_label ("close");
7709 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
7710 GTK_SIGNAL_FUNC(gtk_widget_destroy),
7711 GTK_OBJECT (window));
7713 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
7714 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
7715 gtk_widget_grab_default (button);
7716 gtk_widget_show (button);
7719 if (!GTK_WIDGET_VISIBLE (window))
7720 gtk_widget_show (window);
7722 gtk_widget_destroy (window);
7727 * Window state tracking
7731 window_state_callback (GtkWidget *widget,
7732 GdkEventWindowState *event,
7735 GtkWidget *label = data;
7738 msg = g_strconcat (GTK_WINDOW (widget)->title, ": ",
7739 (event->new_window_state & GDK_WINDOW_STATE_WITHDRAWN) ?
7740 "withdrawn" : "not withdrawn", ", ",
7741 (event->new_window_state & GDK_WINDOW_STATE_ICONIFIED) ?
7742 "iconified" : "not iconified", ", ",
7743 (event->new_window_state & GDK_WINDOW_STATE_STICKY) ?
7744 "sticky" : "not sticky", ", ",
7745 (event->new_window_state & GDK_WINDOW_STATE_MAXIMIZED) ?
7746 "maximized" : "not maximized",
7749 gtk_label_set_text (GTK_LABEL (label), msg);
7757 tracking_label (GtkWidget *window)
7763 hbox = gtk_hbox_new (FALSE, 5);
7765 gtk_signal_connect_object (GTK_OBJECT (hbox),
7767 GTK_SIGNAL_FUNC (gtk_widget_destroy),
7768 GTK_OBJECT (window));
7770 label = gtk_label_new ("<no window state events received>");
7771 gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
7772 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
7774 gtk_signal_connect (GTK_OBJECT (window),
7775 "window_state_event",
7776 GTK_SIGNAL_FUNC (window_state_callback),
7779 button = gtk_button_new_with_label ("Deiconify");
7780 gtk_signal_connect_object (GTK_WIDGET (button),
7782 GTK_SIGNAL_FUNC (gtk_window_deiconify),
7783 GTK_OBJECT (window));
7784 gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
7786 button = gtk_button_new_with_label ("Iconify");
7787 gtk_signal_connect_object (GTK_WIDGET (button),
7789 GTK_SIGNAL_FUNC (gtk_window_iconify),
7790 GTK_OBJECT (window));
7791 gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
7793 button = gtk_button_new_with_label ("Present");
7794 gtk_signal_connect_object (GTK_WIDGET (button),
7796 GTK_SIGNAL_FUNC (gtk_window_present),
7797 GTK_OBJECT (window));
7798 gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
7800 button = gtk_button_new_with_label ("Show");
7801 gtk_signal_connect_object (GTK_WIDGET (button),
7803 GTK_SIGNAL_FUNC (gtk_widget_show),
7804 GTK_OBJECT (window));
7805 gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
7807 gtk_widget_show_all (hbox);
7813 get_state_controls (GtkWidget *window)
7818 vbox = gtk_vbox_new (FALSE, 0);
7820 button = gtk_button_new_with_label ("Stick");
7821 gtk_signal_connect_object (GTK_WIDGET (button),
7823 GTK_SIGNAL_FUNC (gtk_window_stick),
7824 GTK_OBJECT (window));
7825 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
7827 button = gtk_button_new_with_label ("Unstick");
7828 gtk_signal_connect_object (GTK_WIDGET (button),
7830 GTK_SIGNAL_FUNC (gtk_window_unstick),
7831 GTK_OBJECT (window));
7832 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
7834 button = gtk_button_new_with_label ("Maximize");
7835 gtk_signal_connect_object (GTK_WIDGET (button),
7837 GTK_SIGNAL_FUNC (gtk_window_maximize),
7838 GTK_OBJECT (window));
7839 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
7841 button = gtk_button_new_with_label ("Unmaximize");
7842 gtk_signal_connect_object (GTK_WIDGET (button),
7844 GTK_SIGNAL_FUNC (gtk_window_unmaximize),
7845 GTK_OBJECT (window));
7846 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
7848 button = gtk_button_new_with_label ("Iconify");
7849 gtk_signal_connect_object (GTK_WIDGET (button),
7851 GTK_SIGNAL_FUNC (gtk_window_iconify),
7852 GTK_OBJECT (window));
7853 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
7855 button = gtk_button_new_with_label ("Hide (withdraw)");
7856 gtk_signal_connect_object (GTK_WIDGET (button),
7858 GTK_SIGNAL_FUNC (gtk_widget_hide),
7859 GTK_OBJECT (window));
7860 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
7862 gtk_widget_show_all (vbox);
7868 create_window_states (void)
7870 static GtkWidget *window = NULL;
7873 GtkWidget *iconified;
7875 GtkWidget *controls;
7879 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7881 gtk_signal_connect (GTK_OBJECT (window), "destroy",
7882 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
7885 gtk_window_set_title (GTK_WINDOW (window), "Window states");
7887 box1 = gtk_vbox_new (FALSE, 0);
7888 gtk_container_add (GTK_CONTAINER (window), box1);
7890 iconified = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7891 gtk_window_iconify (iconified);
7892 gtk_window_set_title (GTK_WINDOW (iconified), "Iconified initially");
7893 controls = get_state_controls (iconified);
7894 gtk_container_add (GTK_CONTAINER (iconified), controls);
7896 normal = gtk_window_new (GTK_WINDOW_TOPLEVEL);
7897 gtk_window_set_title (GTK_WINDOW (normal), "Deiconified initially");
7898 controls = get_state_controls (normal);
7899 gtk_container_add (GTK_CONTAINER (normal), controls);
7901 label = tracking_label (iconified);
7902 gtk_container_add (GTK_CONTAINER (box1), label);
7904 label = tracking_label (normal);
7905 gtk_container_add (GTK_CONTAINER (box1), label);
7907 gtk_widget_show_all (iconified);
7908 gtk_widget_show_all (normal);
7909 gtk_widget_show_all (box1);
7912 if (!GTK_WIDGET_VISIBLE (window))
7913 gtk_widget_show (window);
7915 gtk_widget_destroy (window);
7922 typedef struct _ProgressData {
7925 GtkWidget *block_spin;
7926 GtkWidget *x_align_spin;
7927 GtkWidget *y_align_spin;
7928 GtkWidget *step_spin;
7929 GtkWidget *act_blocks_spin;
7938 progress_timeout (gpointer data)
7943 adj = GTK_PROGRESS (data)->adjustment;
7945 new_val = adj->value + 1;
7946 if (new_val > adj->upper)
7947 new_val = adj->lower;
7949 gtk_progress_set_value (GTK_PROGRESS (data), new_val);
7955 destroy_progress (GtkWidget *widget,
7956 ProgressData **pdata)
7958 gtk_timeout_remove ((*pdata)->timer);
7959 (*pdata)->timer = 0;
7960 (*pdata)->window = NULL;
7966 progressbar_toggle_orientation (GtkWidget *widget, ProgressData *pdata)
7970 if (!GTK_WIDGET_MAPPED (widget))
7973 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
7974 (((GtkOptionMenu *)(pdata->omenu1))->menu_item), i);
7976 gtk_progress_bar_set_orientation (GTK_PROGRESS_BAR (pdata->pbar),
7977 (GtkProgressBarOrientation) (3-i));
7981 toggle_show_text (GtkWidget *widget, ProgressData *pdata)
7983 gtk_progress_set_show_text (GTK_PROGRESS (pdata->pbar),
7984 GTK_TOGGLE_BUTTON (widget)->active);
7985 gtk_widget_set_sensitive (pdata->entry, GTK_TOGGLE_BUTTON (widget)->active);
7986 gtk_widget_set_sensitive (pdata->x_align_spin,
7987 GTK_TOGGLE_BUTTON (widget)->active);
7988 gtk_widget_set_sensitive (pdata->y_align_spin,
7989 GTK_TOGGLE_BUTTON (widget)->active);
7993 progressbar_toggle_bar_style (GtkWidget *widget, ProgressData *pdata)
7997 if (!GTK_WIDGET_MAPPED (widget))
8000 RADIOMENUTOGGLED ((GtkRadioMenuItem *)
8001 (((GtkOptionMenu *)(pdata->omenu2))->menu_item), i);
8006 gtk_widget_set_sensitive (pdata->block_spin, TRUE);
8008 gtk_widget_set_sensitive (pdata->block_spin, FALSE);
8010 gtk_progress_bar_set_bar_style (GTK_PROGRESS_BAR (pdata->pbar),
8011 (GtkProgressBarStyle) i);
8015 progress_value_changed (GtkAdjustment *adj, ProgressData *pdata)
8019 if (GTK_PROGRESS (pdata->pbar)->activity_mode)
8020 sprintf (buf, "???");
8022 sprintf (buf, "%.0f%%", 100 *
8023 gtk_progress_get_current_percentage (GTK_PROGRESS (pdata->pbar)));
8024 gtk_label_set_text (GTK_LABEL (pdata->label), buf);
8028 adjust_blocks (GtkAdjustment *adj, ProgressData *pdata)
8030 gtk_progress_set_percentage (GTK_PROGRESS (pdata->pbar), 0);
8031 gtk_progress_bar_set_discrete_blocks (GTK_PROGRESS_BAR (pdata->pbar),
8032 gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (pdata->block_spin)));
8036 adjust_step (GtkAdjustment *adj, ProgressData *pdata)
8038 gtk_progress_bar_set_activity_step (GTK_PROGRESS_BAR (pdata->pbar),
8039 gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (pdata->step_spin)));
8043 adjust_act_blocks (GtkAdjustment *adj, ProgressData *pdata)
8045 gtk_progress_bar_set_activity_blocks (GTK_PROGRESS_BAR (pdata->pbar),
8046 gtk_spin_button_get_value_as_int
8047 (GTK_SPIN_BUTTON (pdata->act_blocks_spin)));
8051 adjust_align (GtkAdjustment *adj, ProgressData *pdata)
8053 gtk_progress_set_text_alignment (GTK_PROGRESS (pdata->pbar),
8054 gtk_spin_button_get_value_as_float
8055 (GTK_SPIN_BUTTON (pdata->x_align_spin)),
8056 gtk_spin_button_get_value_as_float
8057 (GTK_SPIN_BUTTON (pdata->y_align_spin)));
8061 toggle_activity_mode (GtkWidget *widget, ProgressData *pdata)
8063 gtk_progress_set_activity_mode (GTK_PROGRESS (pdata->pbar),
8064 GTK_TOGGLE_BUTTON (widget)->active);
8065 gtk_widget_set_sensitive (pdata->step_spin,
8066 GTK_TOGGLE_BUTTON (widget)->active);
8067 gtk_widget_set_sensitive (pdata->act_blocks_spin,
8068 GTK_TOGGLE_BUTTON (widget)->active);
8072 entry_changed (GtkWidget *widget, ProgressData *pdata)
8074 gtk_progress_set_format_string (GTK_PROGRESS (pdata->pbar),
8075 gtk_entry_get_text (GTK_ENTRY (pdata->entry)));
8079 create_progress_bar (void)
8091 static ProgressData *pdata = NULL;
8093 static OptionMenuItem items1[] =
8095 { "Left-Right", progressbar_toggle_orientation },
8096 { "Right-Left", progressbar_toggle_orientation },
8097 { "Bottom-Top", progressbar_toggle_orientation },
8098 { "Top-Bottom", progressbar_toggle_orientation }
8101 static OptionMenuItem items2[] =
8103 { "Continuous", progressbar_toggle_bar_style },
8104 { "Discrete", progressbar_toggle_bar_style }
8108 pdata = g_new0 (ProgressData, 1);
8112 pdata->window = gtk_dialog_new ();
8114 gtk_window_set_policy (GTK_WINDOW (pdata->window), FALSE, FALSE, TRUE);
8116 gtk_signal_connect (GTK_OBJECT (pdata->window), "destroy",
8117 GTK_SIGNAL_FUNC (destroy_progress),
8122 gtk_window_set_title (GTK_WINDOW (pdata->window), "GtkProgressBar");
8123 gtk_container_set_border_width (GTK_CONTAINER (pdata->window), 0);
8125 vbox = gtk_vbox_new (FALSE, 5);
8126 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
8127 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (pdata->window)->vbox),
8128 vbox, FALSE, TRUE, 0);
8130 frame = gtk_frame_new ("Progress");
8131 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
8133 vbox2 = gtk_vbox_new (FALSE, 5);
8134 gtk_container_add (GTK_CONTAINER (frame), vbox2);
8136 align = gtk_alignment_new (0.5, 0.5, 0, 0);
8137 gtk_box_pack_start (GTK_BOX (vbox2), align, FALSE, FALSE, 5);
8139 adj = (GtkAdjustment *) gtk_adjustment_new (0, 1, 300, 0, 0, 0);
8140 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
8141 GTK_SIGNAL_FUNC (progress_value_changed), pdata);
8143 pdata->pbar = gtk_progress_bar_new_with_adjustment (adj);
8144 gtk_progress_set_format_string (GTK_PROGRESS (pdata->pbar),
8145 "%v from [%l,%u] (=%p%%)");
8146 gtk_container_add (GTK_CONTAINER (align), pdata->pbar);
8147 pdata->timer = gtk_timeout_add (100, progress_timeout, pdata->pbar);
8149 align = gtk_alignment_new (0.5, 0.5, 0, 0);
8150 gtk_box_pack_start (GTK_BOX (vbox2), align, FALSE, FALSE, 5);
8152 hbox = gtk_hbox_new (FALSE, 5);
8153 gtk_container_add (GTK_CONTAINER (align), hbox);
8154 label = gtk_label_new ("Label updated by user :");
8155 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
8156 pdata->label = gtk_label_new ("");
8157 gtk_box_pack_start (GTK_BOX (hbox), pdata->label, FALSE, TRUE, 0);
8159 frame = gtk_frame_new ("Options");
8160 gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
8162 vbox2 = gtk_vbox_new (FALSE, 5);
8163 gtk_container_add (GTK_CONTAINER (frame), vbox2);
8165 tab = gtk_table_new (7, 2, FALSE);
8166 gtk_box_pack_start (GTK_BOX (vbox2), tab, FALSE, TRUE, 0);
8168 label = gtk_label_new ("Orientation :");
8169 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 0, 1,
8170 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8172 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
8174 pdata->omenu1 = build_option_menu (items1, 4, 0, pdata);
8175 hbox = gtk_hbox_new (FALSE, 0);
8176 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 0, 1,
8177 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8179 gtk_box_pack_start (GTK_BOX (hbox), pdata->omenu1, TRUE, TRUE, 0);
8181 check = gtk_check_button_new_with_label ("Show text");
8182 gtk_signal_connect (GTK_OBJECT (check), "clicked",
8183 GTK_SIGNAL_FUNC (toggle_show_text),
8185 gtk_table_attach (GTK_TABLE (tab), check, 0, 1, 1, 2,
8186 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8189 hbox = gtk_hbox_new (FALSE, 0);
8190 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 1, 2,
8191 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8194 label = gtk_label_new ("Format : ");
8195 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
8197 pdata->entry = gtk_entry_new ();
8198 gtk_signal_connect (GTK_OBJECT (pdata->entry), "changed",
8199 GTK_SIGNAL_FUNC (entry_changed),
8201 gtk_box_pack_start (GTK_BOX (hbox), pdata->entry, TRUE, TRUE, 0);
8202 gtk_entry_set_text (GTK_ENTRY (pdata->entry), "%v from [%l,%u] (=%p%%)");
8203 gtk_widget_set_usize (pdata->entry, 100, -1);
8204 gtk_widget_set_sensitive (pdata->entry, FALSE);
8206 label = gtk_label_new ("Text align :");
8207 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 2, 3,
8208 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8210 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
8212 hbox = gtk_hbox_new (FALSE, 0);
8213 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 2, 3,
8214 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8217 label = gtk_label_new ("x :");
8218 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 5);
8220 adj = (GtkAdjustment *) gtk_adjustment_new (0.5, 0, 1, 0.1, 0.1, 0);
8221 pdata->x_align_spin = gtk_spin_button_new (adj, 0, 1);
8222 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
8223 GTK_SIGNAL_FUNC (adjust_align), pdata);
8224 gtk_box_pack_start (GTK_BOX (hbox), pdata->x_align_spin, FALSE, TRUE, 0);
8225 gtk_widget_set_sensitive (pdata->x_align_spin, FALSE);
8227 label = gtk_label_new ("y :");
8228 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 5);
8230 adj = (GtkAdjustment *) gtk_adjustment_new (0.5, 0, 1, 0.1, 0.1, 0);
8231 pdata->y_align_spin = gtk_spin_button_new (adj, 0, 1);
8232 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
8233 GTK_SIGNAL_FUNC (adjust_align), pdata);
8234 gtk_box_pack_start (GTK_BOX (hbox), pdata->y_align_spin, FALSE, TRUE, 0);
8235 gtk_widget_set_sensitive (pdata->y_align_spin, FALSE);
8237 label = gtk_label_new ("Bar Style :");
8238 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 3, 4,
8239 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8241 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
8243 pdata->omenu2 = build_option_menu (items2, 2, 0, pdata);
8244 hbox = gtk_hbox_new (FALSE, 0);
8245 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 3, 4,
8246 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8248 gtk_box_pack_start (GTK_BOX (hbox), pdata->omenu2, TRUE, TRUE, 0);
8250 label = gtk_label_new ("Block count :");
8251 gtk_table_attach (GTK_TABLE (tab), label, 0, 1, 4, 5,
8252 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8254 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
8256 hbox = gtk_hbox_new (FALSE, 0);
8257 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 4, 5,
8258 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8260 adj = (GtkAdjustment *) gtk_adjustment_new (10, 2, 20, 1, 5, 0);
8261 pdata->block_spin = gtk_spin_button_new (adj, 0, 0);
8262 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
8263 GTK_SIGNAL_FUNC (adjust_blocks), pdata);
8264 gtk_box_pack_start (GTK_BOX (hbox), pdata->block_spin, FALSE, TRUE, 0);
8265 gtk_widget_set_sensitive (pdata->block_spin, FALSE);
8267 check = gtk_check_button_new_with_label ("Activity mode");
8268 gtk_signal_connect (GTK_OBJECT (check), "clicked",
8269 GTK_SIGNAL_FUNC (toggle_activity_mode),
8271 gtk_table_attach (GTK_TABLE (tab), check, 0, 1, 5, 6,
8272 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8275 hbox = gtk_hbox_new (FALSE, 0);
8276 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 5, 6,
8277 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8279 label = gtk_label_new ("Step size : ");
8280 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
8281 adj = (GtkAdjustment *) gtk_adjustment_new (3, 1, 20, 1, 5, 0);
8282 pdata->step_spin = gtk_spin_button_new (adj, 0, 0);
8283 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
8284 GTK_SIGNAL_FUNC (adjust_step), pdata);
8285 gtk_box_pack_start (GTK_BOX (hbox), pdata->step_spin, FALSE, TRUE, 0);
8286 gtk_widget_set_sensitive (pdata->step_spin, FALSE);
8288 hbox = gtk_hbox_new (FALSE, 0);
8289 gtk_table_attach (GTK_TABLE (tab), hbox, 1, 2, 6, 7,
8290 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
8292 label = gtk_label_new ("Blocks : ");
8293 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
8294 adj = (GtkAdjustment *) gtk_adjustment_new (5, 2, 10, 1, 5, 0);
8295 pdata->act_blocks_spin = gtk_spin_button_new (adj, 0, 0);
8296 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
8297 GTK_SIGNAL_FUNC (adjust_act_blocks), pdata);
8298 gtk_box_pack_start (GTK_BOX (hbox), pdata->act_blocks_spin, FALSE, TRUE,
8300 gtk_widget_set_sensitive (pdata->act_blocks_spin, FALSE);
8302 button = gtk_button_new_with_label ("close");
8303 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
8304 GTK_SIGNAL_FUNC (gtk_widget_destroy),
8305 GTK_OBJECT (pdata->window));
8306 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8307 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (pdata->window)->action_area),
8308 button, TRUE, TRUE, 0);
8309 gtk_widget_grab_default (button);
8312 if (!GTK_WIDGET_VISIBLE (pdata->window))
8313 gtk_widget_show_all (pdata->window);
8315 gtk_widget_destroy (pdata->window);
8322 static int color_idle = 0;
8325 color_idle_func (GtkWidget *preview)
8327 static int count = 1;
8331 for (i = 0; i < 256; i++)
8333 for (j = 0, k = 0; j < 256; j++)
8335 buf[k+0] = i + count;
8337 buf[k+2] = j + count;
8341 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
8346 gtk_widget_draw (preview, NULL);
8352 color_preview_destroy (GtkWidget *widget,
8355 gtk_idle_remove (color_idle);
8362 create_color_preview (void)
8364 static GtkWidget *window = NULL;
8371 gtk_widget_push_colormap (gdk_rgb_get_cmap ());
8372 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
8373 gtk_widget_pop_colormap ();
8375 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8376 GTK_SIGNAL_FUNC(color_preview_destroy),
8379 gtk_window_set_title (GTK_WINDOW (window), "test");
8380 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
8382 preview = gtk_preview_new (GTK_PREVIEW_COLOR);
8383 gtk_preview_size (GTK_PREVIEW (preview), 256, 256);
8384 gtk_container_add (GTK_CONTAINER (window), preview);
8386 for (i = 0; i < 256; i++)
8388 for (j = 0, k = 0; j < 256; j++)
8396 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
8399 color_idle = gtk_idle_add ((GtkFunction) color_idle_func, preview);
8402 if (!GTK_WIDGET_VISIBLE (window))
8403 gtk_widget_show_all (window);
8405 gtk_widget_destroy (window);
8412 static int gray_idle = 0;
8415 gray_idle_func (GtkWidget *preview)
8417 static int count = 1;
8421 for (i = 0; i < 256; i++)
8423 for (j = 0; j < 256; j++)
8424 buf[j] = i + j + count;
8426 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
8431 gtk_widget_draw (preview, NULL);
8437 gray_preview_destroy (GtkWidget *widget,
8440 gtk_idle_remove (gray_idle);
8447 create_gray_preview (void)
8449 static GtkWidget *window = NULL;
8456 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
8458 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8459 GTK_SIGNAL_FUNC(gray_preview_destroy),
8462 gtk_window_set_title (GTK_WINDOW (window), "test");
8463 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
8465 preview = gtk_preview_new (GTK_PREVIEW_GRAYSCALE);
8466 gtk_preview_size (GTK_PREVIEW (preview), 256, 256);
8467 gtk_container_add (GTK_CONTAINER (window), preview);
8469 for (i = 0; i < 256; i++)
8471 for (j = 0; j < 256; j++)
8474 gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, 256);
8477 gray_idle = gtk_idle_add ((GtkFunction) gray_idle_func, preview);
8480 if (!GTK_WIDGET_VISIBLE (window))
8481 gtk_widget_show_all (window);
8483 gtk_widget_destroy (window);
8492 selection_test_received (GtkWidget *list, GtkSelectionData *data)
8495 GtkWidget *list_item;
8499 if (data->length < 0)
8501 g_print ("Selection retrieval failed\n");
8504 if (data->type != GDK_SELECTION_TYPE_ATOM)
8506 g_print ("Selection \"TARGETS\" was not returned as atoms!\n");
8510 /* Clear out any current list items */
8512 gtk_list_clear_items (GTK_LIST(list), 0, -1);
8514 /* Add new items to list */
8516 atoms = (GdkAtom *)data->data;
8519 l = data->length / sizeof (GdkAtom);
8520 for (i = 0; i < l; i++)
8523 name = gdk_atom_name (atoms[i]);
8526 list_item = gtk_list_item_new_with_label (name);
8530 list_item = gtk_list_item_new_with_label ("(bad atom)");
8532 gtk_widget_show (list_item);
8533 item_list = g_list_append (item_list, list_item);
8536 gtk_list_append_items (GTK_LIST (list), item_list);
8542 selection_test_get_targets (GtkWidget *widget, GtkWidget *list)
8544 static GdkAtom targets_atom = GDK_NONE;
8546 if (targets_atom == GDK_NONE)
8547 targets_atom = gdk_atom_intern ("TARGETS", FALSE);
8549 gtk_selection_convert (list, GDK_SELECTION_PRIMARY, targets_atom,
8554 create_selection_test (void)
8556 static GtkWidget *window = NULL;
8559 GtkWidget *scrolled_win;
8565 window = gtk_dialog_new ();
8567 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8568 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
8571 gtk_window_set_title (GTK_WINDOW (window), "Selection Test");
8572 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
8574 /* Create the list */
8576 vbox = gtk_vbox_new (FALSE, 5);
8577 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
8578 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), vbox,
8581 label = gtk_label_new ("Gets available targets for current selection");
8582 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
8584 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
8585 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
8586 GTK_POLICY_AUTOMATIC,
8587 GTK_POLICY_AUTOMATIC);
8588 gtk_box_pack_start (GTK_BOX (vbox), scrolled_win, TRUE, TRUE, 0);
8589 gtk_widget_set_usize (scrolled_win, 100, 200);
8591 list = gtk_list_new ();
8592 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_win), list);
8594 gtk_signal_connect (GTK_OBJECT(list), "selection_received",
8595 GTK_SIGNAL_FUNC (selection_test_received), NULL);
8597 /* .. And create some buttons */
8598 button = gtk_button_new_with_label ("Get Targets");
8599 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8600 button, TRUE, TRUE, 0);
8602 gtk_signal_connect (GTK_OBJECT (button), "clicked",
8603 GTK_SIGNAL_FUNC (selection_test_get_targets), list);
8605 button = gtk_button_new_with_label ("Quit");
8606 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8607 button, TRUE, TRUE, 0);
8609 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
8610 GTK_SIGNAL_FUNC (gtk_widget_destroy),
8611 GTK_OBJECT (window));
8614 if (!GTK_WIDGET_VISIBLE (window))
8615 gtk_widget_show_all (window);
8617 gtk_widget_destroy (window);
8625 create_gamma_curve (void)
8627 static GtkWidget *window = NULL, *curve;
8628 static int count = 0;
8635 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
8636 gtk_window_set_title (GTK_WINDOW (window), "test");
8637 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
8639 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8640 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
8643 curve = gtk_gamma_curve_new ();
8644 gtk_container_add (GTK_CONTAINER (window), curve);
8645 gtk_widget_show (curve);
8648 max = 127 + (count % 2)*128;
8649 gtk_curve_set_range (GTK_CURVE (GTK_GAMMA_CURVE (curve)->curve),
8651 for (i = 0; i < max; ++i)
8652 vec[i] = (127 / sqrt (max)) * sqrt (i);
8653 gtk_curve_set_vector (GTK_CURVE (GTK_GAMMA_CURVE (curve)->curve),
8656 if (!GTK_WIDGET_VISIBLE (window))
8657 gtk_widget_show (window);
8658 else if (count % 4 == 3)
8660 gtk_widget_destroy (window);
8671 static int scroll_test_pos = 0.0;
8672 static GdkGC *scroll_test_gc = NULL;
8675 scroll_test_expose (GtkWidget *widget, GdkEventExpose *event,
8679 gint imin, imax, jmin, jmax;
8681 imin = (event->area.x) / 10;
8682 imax = (event->area.x + event->area.width + 9) / 10;
8684 jmin = ((int)adj->value + event->area.y) / 10;
8685 jmax = ((int)adj->value + event->area.y + event->area.height + 9) / 10;
8687 gdk_window_clear_area (widget->window,
8688 event->area.x, event->area.y,
8689 event->area.width, event->area.height);
8691 for (i=imin; i<imax; i++)
8692 for (j=jmin; j<jmax; j++)
8694 gdk_draw_rectangle (widget->window,
8695 widget->style->black_gc,
8697 10*i, 10*j - (int)adj->value, 1+i%10, 1+j%10);
8703 scroll_test_scroll (GtkWidget *widget, GdkEventScroll *event,
8706 gfloat new_value = adj->value + ((event->direction == GDK_SCROLL_UP) ?
8707 -adj->page_increment / 2:
8708 adj->page_increment / 2);
8709 new_value = CLAMP (new_value, adj->lower, adj->upper - adj->page_size);
8710 gtk_adjustment_set_value (adj, new_value);
8716 scroll_test_configure (GtkWidget *widget, GdkEventConfigure *event,
8719 adj->page_increment = 0.9 * widget->allocation.height;
8720 adj->page_size = widget->allocation.height;
8722 gtk_signal_emit_by_name (GTK_OBJECT (adj), "changed");
8726 scroll_test_adjustment_changed (GtkAdjustment *adj, GtkWidget *widget)
8728 gint source_min = (int)adj->value - scroll_test_pos;
8729 gint source_max = source_min + widget->allocation.height;
8731 gint dest_max = widget->allocation.height;
8735 scroll_test_pos = adj->value;
8737 if (!GTK_WIDGET_DRAWABLE (widget))
8744 rect.width = widget->allocation.width;
8745 rect.height = -source_min;
8746 if (rect.height > widget->allocation.height)
8747 rect.height = widget->allocation.height;
8750 dest_min = rect.height;
8755 rect.y = 2*widget->allocation.height - source_max;
8758 rect.width = widget->allocation.width;
8759 rect.height = widget->allocation.height - rect.y;
8761 source_max = widget->allocation.height;
8765 if (source_min != source_max)
8767 if (scroll_test_gc == NULL)
8769 scroll_test_gc = gdk_gc_new (widget->window);
8770 gdk_gc_set_exposures (scroll_test_gc, TRUE);
8773 gdk_draw_pixmap (widget->window,
8778 widget->allocation.width,
8779 source_max - source_min);
8781 /* Make sure graphics expose events are processed before scrolling
8784 while ((event = gdk_event_get_graphics_expose (widget->window)) != NULL)
8786 gtk_widget_event (widget, event);
8787 if (event->expose.count == 0)
8789 gdk_event_free (event);
8792 gdk_event_free (event);
8796 if (rect.height != 0)
8797 gtk_widget_draw (widget, &rect);
8802 create_scroll_test (void)
8804 static GtkWidget *window = NULL;
8806 GtkWidget *drawing_area;
8807 GtkWidget *scrollbar;
8810 GdkGeometry geometry;
8811 GdkWindowHints geometry_mask;
8815 window = gtk_dialog_new ();
8817 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8818 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
8821 gtk_window_set_title (GTK_WINDOW (window), "Scroll Test");
8822 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
8824 hbox = gtk_hbox_new (FALSE, 0);
8825 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), hbox,
8827 gtk_widget_show (hbox);
8829 drawing_area = gtk_drawing_area_new ();
8830 gtk_drawing_area_size (GTK_DRAWING_AREA (drawing_area), 200, 200);
8831 gtk_box_pack_start (GTK_BOX (hbox), drawing_area, TRUE, TRUE, 0);
8832 gtk_widget_show (drawing_area);
8834 gtk_widget_set_events (drawing_area, GDK_EXPOSURE_MASK | GDK_SCROLL_MASK);
8836 adj = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.0, 1000.0, 1.0, 180.0, 200.0));
8837 scroll_test_pos = 0.0;
8839 scrollbar = gtk_vscrollbar_new (adj);
8840 gtk_box_pack_start (GTK_BOX (hbox), scrollbar, FALSE, FALSE, 0);
8841 gtk_widget_show (scrollbar);
8843 gtk_signal_connect (GTK_OBJECT (drawing_area), "expose_event",
8844 GTK_SIGNAL_FUNC (scroll_test_expose), adj);
8845 gtk_signal_connect (GTK_OBJECT (drawing_area), "configure_event",
8846 GTK_SIGNAL_FUNC (scroll_test_configure), adj);
8847 gtk_signal_connect (GTK_OBJECT (drawing_area), "scroll_event",
8848 GTK_SIGNAL_FUNC (scroll_test_scroll), adj);
8850 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
8851 GTK_SIGNAL_FUNC (scroll_test_adjustment_changed),
8854 /* .. And create some buttons */
8856 button = gtk_button_new_with_label ("Quit");
8857 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8858 button, TRUE, TRUE, 0);
8860 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
8861 GTK_SIGNAL_FUNC (gtk_widget_destroy),
8862 GTK_OBJECT (window));
8863 gtk_widget_show (button);
8865 /* Set up gridded geometry */
8867 geometry_mask = GDK_HINT_MIN_SIZE |
8868 GDK_HINT_BASE_SIZE |
8869 GDK_HINT_RESIZE_INC;
8871 geometry.min_width = 20;
8872 geometry.min_height = 20;
8873 geometry.base_width = 0;
8874 geometry.base_height = 0;
8875 geometry.width_inc = 10;
8876 geometry.height_inc = 10;
8878 gtk_window_set_geometry_hints (GTK_WINDOW (window),
8879 drawing_area, &geometry, geometry_mask);
8882 if (!GTK_WIDGET_VISIBLE (window))
8883 gtk_widget_show (window);
8885 gtk_widget_destroy (window);
8892 static int timer = 0;
8895 timeout_test (GtkWidget *label)
8897 static int count = 0;
8898 static char buffer[32];
8900 sprintf (buffer, "count: %d", ++count);
8901 gtk_label_set_text (GTK_LABEL (label), buffer);
8907 start_timeout_test (GtkWidget *widget,
8912 timer = gtk_timeout_add (100, (GtkFunction) timeout_test, label);
8917 stop_timeout_test (GtkWidget *widget,
8922 gtk_timeout_remove (timer);
8928 destroy_timeout_test (GtkWidget *widget,
8931 stop_timeout_test (NULL, NULL);
8937 create_timeout_test (void)
8939 static GtkWidget *window = NULL;
8945 window = gtk_dialog_new ();
8947 gtk_signal_connect (GTK_OBJECT (window), "destroy",
8948 GTK_SIGNAL_FUNC(destroy_timeout_test),
8951 gtk_window_set_title (GTK_WINDOW (window), "Timeout Test");
8952 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
8954 label = gtk_label_new ("count: 0");
8955 gtk_misc_set_padding (GTK_MISC (label), 10, 10);
8956 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
8957 label, TRUE, TRUE, 0);
8958 gtk_widget_show (label);
8960 button = gtk_button_new_with_label ("close");
8961 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
8962 GTK_SIGNAL_FUNC(gtk_widget_destroy),
8963 GTK_OBJECT (window));
8964 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8965 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8966 button, TRUE, TRUE, 0);
8967 gtk_widget_grab_default (button);
8968 gtk_widget_show (button);
8970 button = gtk_button_new_with_label ("start");
8971 gtk_signal_connect (GTK_OBJECT (button), "clicked",
8972 GTK_SIGNAL_FUNC(start_timeout_test),
8974 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8975 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8976 button, TRUE, TRUE, 0);
8977 gtk_widget_show (button);
8979 button = gtk_button_new_with_label ("stop");
8980 gtk_signal_connect (GTK_OBJECT (button), "clicked",
8981 GTK_SIGNAL_FUNC(stop_timeout_test),
8983 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
8984 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
8985 button, TRUE, TRUE, 0);
8986 gtk_widget_show (button);
8989 if (!GTK_WIDGET_VISIBLE (window))
8990 gtk_widget_show (window);
8992 gtk_widget_destroy (window);
8999 static int idle_id = 0;
9002 idle_test (GtkWidget *label)
9004 static int count = 0;
9005 static char buffer[32];
9007 sprintf (buffer, "count: %d", ++count);
9008 gtk_label_set_text (GTK_LABEL (label), buffer);
9014 start_idle_test (GtkWidget *widget,
9019 idle_id = gtk_idle_add ((GtkFunction) idle_test, label);
9024 stop_idle_test (GtkWidget *widget,
9029 gtk_idle_remove (idle_id);
9035 destroy_idle_test (GtkWidget *widget,
9038 stop_idle_test (NULL, NULL);
9044 toggle_idle_container (GtkObject *button,
9045 GtkContainer *container)
9047 gtk_container_set_resize_mode (container, GPOINTER_TO_INT (gtk_object_get_user_data (button)));
9051 create_idle_test (void)
9053 static GtkWidget *window = NULL;
9056 GtkWidget *container;
9063 window = gtk_dialog_new ();
9065 gtk_signal_connect (GTK_OBJECT (window), "destroy",
9066 GTK_SIGNAL_FUNC(destroy_idle_test),
9069 gtk_window_set_title (GTK_WINDOW (window), "Idle Test");
9070 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
9072 label = gtk_label_new ("count: 0");
9073 gtk_misc_set_padding (GTK_MISC (label), 10, 10);
9074 gtk_widget_show (label);
9077 gtk_widget_new (GTK_TYPE_HBOX,
9078 "GtkWidget::visible", TRUE,
9079 /* "GtkContainer::child", gtk_widget_new (GTK_TYPE_HBOX,
9080 * "GtkWidget::visible", TRUE,
9082 "GtkContainer::child", label,
9085 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox),
9086 container, TRUE, TRUE, 0);
9089 gtk_widget_new (GTK_TYPE_FRAME,
9090 "GtkContainer::border_width", 5,
9091 "GtkFrame::label", "Label Container",
9092 "GtkWidget::visible", TRUE,
9093 "GtkWidget::parent", GTK_DIALOG (window)->vbox,
9096 gtk_widget_new (GTK_TYPE_VBOX,
9097 "GtkWidget::visible", TRUE,
9098 "GtkWidget::parent", frame,
9101 gtk_widget_new (GTK_TYPE_RADIO_BUTTON,
9102 "GtkButton::label", "Resize-Parent",
9103 "GtkObject::user_data", (void*)GTK_RESIZE_PARENT,
9104 "GtkObject::signal::clicked", toggle_idle_container, container,
9105 "GtkWidget::visible", TRUE,
9106 "GtkWidget::parent", box,
9109 gtk_widget_new (GTK_TYPE_RADIO_BUTTON,
9110 "GtkButton::label", "Resize-Queue",
9111 "GtkObject::user_data", (void*)GTK_RESIZE_QUEUE,
9112 "GtkObject::signal::clicked", toggle_idle_container, container,
9113 "GtkRadioButton::group", button,
9114 "GtkWidget::visible", TRUE,
9115 "GtkWidget::parent", box,
9118 gtk_widget_new (GTK_TYPE_RADIO_BUTTON,
9119 "GtkButton::label", "Resize-Immediate",
9120 "GtkObject::user_data", (void*)GTK_RESIZE_IMMEDIATE,
9121 "GtkObject::signal::clicked", toggle_idle_container, container,
9122 "GtkRadioButton::group", button,
9123 "GtkWidget::visible", TRUE,
9124 "GtkWidget::parent", box,
9128 button = gtk_button_new_with_label ("close");
9129 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
9130 GTK_SIGNAL_FUNC(gtk_widget_destroy),
9131 GTK_OBJECT (window));
9132 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
9133 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
9134 button, TRUE, TRUE, 0);
9135 gtk_widget_grab_default (button);
9136 gtk_widget_show (button);
9138 button = gtk_button_new_with_label ("start");
9139 gtk_signal_connect (GTK_OBJECT (button), "clicked",
9140 GTK_SIGNAL_FUNC(start_idle_test),
9142 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
9143 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
9144 button, TRUE, TRUE, 0);
9145 gtk_widget_show (button);
9147 button = gtk_button_new_with_label ("stop");
9148 gtk_signal_connect (GTK_OBJECT (button), "clicked",
9149 GTK_SIGNAL_FUNC(stop_idle_test),
9151 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
9152 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
9153 button, TRUE, TRUE, 0);
9154 gtk_widget_show (button);
9157 if (!GTK_WIDGET_VISIBLE (window))
9158 gtk_widget_show (window);
9160 gtk_widget_destroy (window);
9168 reload_rc_file (void)
9172 if (gtk_rc_reparse_all ())
9174 toplevels = gdk_window_get_toplevels();
9178 gdk_window_get_user_data (toplevels->data, (gpointer *)&widget);
9181 gtk_widget_reset_rc_styles (widget);
9183 toplevels = toplevels->next;
9185 g_list_free (toplevels);
9190 reload_all_rc_files (void)
9192 static GdkAtom atom_rcfiles = GDK_NONE;
9198 atom_rcfiles = gdk_atom_intern("_GTK_READ_RCFILES", FALSE);
9200 for(i = 0; i < 5; i++)
9202 sev.data_format = 32;
9203 sev.message_type = atom_rcfiles;
9204 gdk_event_send_clientmessage_toall ((GdkEvent *) &sev);
9208 create_rc_file (void)
9210 static GtkWidget *window = NULL;
9215 window = gtk_dialog_new ();
9217 gtk_signal_connect (GTK_OBJECT (window), "destroy",
9218 GTK_SIGNAL_FUNC(destroy_idle_test),
9221 gtk_window_set_title (GTK_WINDOW (window), "Reload Rc file");
9222 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
9224 button = gtk_button_new_with_label ("Reload");
9225 gtk_signal_connect (GTK_OBJECT (button), "clicked",
9226 GTK_SIGNAL_FUNC(reload_rc_file), NULL);
9227 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
9228 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
9229 button, TRUE, TRUE, 0);
9230 gtk_widget_grab_default (button);
9231 gtk_widget_show (button);
9233 button = gtk_button_new_with_label ("Reload All");
9234 gtk_signal_connect (GTK_OBJECT (button), "clicked",
9235 GTK_SIGNAL_FUNC(reload_all_rc_files), NULL);
9236 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
9237 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
9238 button, TRUE, TRUE, 0);
9239 gtk_widget_show (button);
9241 button = gtk_button_new_with_label ("Close");
9242 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
9243 GTK_SIGNAL_FUNC(gtk_widget_destroy),
9244 GTK_OBJECT (window));
9245 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
9246 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
9247 button, TRUE, TRUE, 0);
9248 gtk_widget_show (button);
9252 if (!GTK_WIDGET_VISIBLE (window))
9253 gtk_widget_show (window);
9255 gtk_widget_destroy (window);
9259 * Test of recursive mainloop
9263 mainloop_destroyed (GtkWidget *w, GtkWidget **window)
9270 create_mainloop (void)
9272 static GtkWidget *window = NULL;
9278 window = gtk_dialog_new ();
9280 gtk_window_set_title (GTK_WINDOW (window), "Test Main Loop");
9282 gtk_signal_connect (GTK_OBJECT (window), "destroy",
9283 GTK_SIGNAL_FUNC(mainloop_destroyed),
9286 label = gtk_label_new ("In recursive main loop...");
9287 gtk_misc_set_padding (GTK_MISC(label), 20, 20);
9289 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), label,
9291 gtk_widget_show (label);
9293 button = gtk_button_new_with_label ("Leave");
9294 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area), button,
9297 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
9298 GTK_SIGNAL_FUNC (gtk_widget_destroy),
9299 GTK_OBJECT (window));
9301 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
9302 gtk_widget_grab_default (button);
9304 gtk_widget_show (button);
9307 if (!GTK_WIDGET_VISIBLE (window))
9309 gtk_widget_show (window);
9311 g_print ("create_mainloop: start\n");
9313 g_print ("create_mainloop: done\n");
9316 gtk_widget_destroy (window);
9320 layout_expose_handler (GtkWidget *widget, GdkEventExpose *event)
9325 gint imin, imax, jmin, jmax;
9327 layout = GTK_LAYOUT (widget);
9329 imin = (layout->xoffset + event->area.x) / 10;
9330 imax = (layout->xoffset + event->area.x + event->area.width + 9) / 10;
9332 jmin = (layout->yoffset + event->area.y) / 10;
9333 jmax = (layout->yoffset + event->area.y + event->area.height + 9) / 10;
9335 gdk_window_clear_area (widget->window,
9336 event->area.x, event->area.y,
9337 event->area.width, event->area.height);
9339 for (i=imin; i<imax; i++)
9340 for (j=jmin; j<jmax; j++)
9342 gdk_draw_rectangle (layout->bin_window,
9343 widget->style->black_gc,
9345 10*i - layout->xoffset, 10*j - layout->yoffset,
9351 void create_layout (void)
9353 static GtkWidget *window = NULL;
9355 GtkWidget *scrolledwindow;
9364 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
9365 gtk_signal_connect (GTK_OBJECT (window), "destroy",
9366 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
9369 gtk_window_set_title (GTK_WINDOW (window), "Layout");
9370 gtk_widget_set_usize (window, 200, 200);
9372 scrolledwindow = gtk_scrolled_window_new (NULL, NULL);
9373 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow),
9375 gtk_scrolled_window_set_placement (GTK_SCROLLED_WINDOW (scrolledwindow),
9376 GTK_CORNER_TOP_RIGHT);
9378 gtk_container_add (GTK_CONTAINER (window), scrolledwindow);
9380 layout = gtk_layout_new (NULL, NULL);
9381 gtk_container_add (GTK_CONTAINER (scrolledwindow), layout);
9383 /* We set step sizes here since GtkLayout does not set
9386 GTK_LAYOUT (layout)->hadjustment->step_increment = 10.0;
9387 GTK_LAYOUT (layout)->vadjustment->step_increment = 10.0;
9389 gtk_widget_set_events (layout, GDK_EXPOSURE_MASK);
9390 gtk_signal_connect (GTK_OBJECT (layout), "expose_event",
9391 GTK_SIGNAL_FUNC (layout_expose_handler), NULL);
9393 gtk_layout_set_size (GTK_LAYOUT (layout), 1600, 128000);
9395 for (i=0 ; i < 16 ; i++)
9396 for (j=0 ; j < 16 ; j++)
9398 sprintf(buf, "Button %d, %d", i, j);
9400 button = gtk_button_new_with_label (buf);
9402 button = gtk_label_new (buf);
9404 gtk_layout_put (GTK_LAYOUT (layout), button,
9408 for (i=16; i < 1280; i++)
9410 sprintf(buf, "Button %d, %d", i, 0);
9412 button = gtk_button_new_with_label (buf);
9414 button = gtk_label_new (buf);
9416 gtk_layout_put (GTK_LAYOUT (layout), button,
9421 if (!GTK_WIDGET_VISIBLE (window))
9422 gtk_widget_show_all (window);
9424 gtk_widget_destroy (window);
9428 create_styles (void)
9430 static GtkWidget *window = NULL;
9435 static GdkColor red = { 0, 0xffff, 0, 0 };
9436 static GdkColor green = { 0, 0, 0xffff, 0 };
9437 static GdkColor blue = { 0, 0, 0, 0xffff };
9438 static GdkColor yellow = { 0, 0xffff, 0xffff, 0 };
9439 static GdkColor cyan = { 0, 0 , 0xffff, 0xffff };
9440 PangoFontDescription *font_desc;
9442 GtkRcStyle *rc_style;
9446 window = gtk_dialog_new ();
9447 gtk_signal_connect (GTK_OBJECT (window), "destroy",
9448 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
9452 button = gtk_button_new_with_label ("Close");
9453 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
9454 GTK_SIGNAL_FUNC(gtk_widget_destroy),
9455 GTK_OBJECT (window));
9456 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
9457 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
9458 button, TRUE, TRUE, 0);
9459 gtk_widget_show (button);
9461 vbox = gtk_vbox_new (FALSE, 5);
9462 gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
9463 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), vbox, FALSE, FALSE, 0);
9465 label = gtk_label_new ("Font:");
9466 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
9467 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9469 font_desc = pango_font_description_from_string ("Helvetica,Sans Oblique 18");
9471 button = gtk_button_new_with_label ("Some Text");
9472 gtk_widget_modify_font (GTK_BIN (button)->child, font_desc);
9473 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
9475 label = gtk_label_new ("Foreground:");
9476 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
9477 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9479 button = gtk_button_new_with_label ("Some Text");
9480 gtk_widget_modify_fg (GTK_BIN (button)->child, GTK_STATE_NORMAL, &red);
9481 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
9483 label = gtk_label_new ("Background:");
9484 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
9485 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9487 button = gtk_button_new_with_label ("Some Text");
9488 gtk_widget_modify_bg (button, GTK_STATE_NORMAL, &green);
9489 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
9491 label = gtk_label_new ("Text:");
9492 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
9493 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9495 entry = gtk_entry_new ();
9496 gtk_entry_set_text (GTK_ENTRY (entry), "Some Text");
9497 gtk_widget_modify_text (entry, GTK_STATE_NORMAL, &blue);
9498 gtk_box_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 0);
9500 label = gtk_label_new ("Base:");
9501 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
9502 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9504 entry = gtk_entry_new ();
9505 gtk_entry_set_text (GTK_ENTRY (entry), "Some Text");
9506 gtk_widget_modify_base (entry, GTK_STATE_NORMAL, &yellow);
9507 gtk_box_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 0);
9509 label = gtk_label_new ("Multiple:");
9510 gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
9511 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
9513 button = gtk_button_new_with_label ("Some Text");
9515 rc_style = gtk_rc_style_new ();
9517 rc_style->font_desc = font_desc;
9518 rc_style->color_flags[GTK_STATE_NORMAL] = GTK_RC_FG | GTK_RC_BG;
9519 rc_style->color_flags[GTK_STATE_PRELIGHT] = GTK_RC_FG | GTK_RC_BG;
9520 rc_style->color_flags[GTK_STATE_ACTIVE] = GTK_RC_FG | GTK_RC_BG;
9521 rc_style->fg[GTK_STATE_NORMAL] = yellow;
9522 rc_style->bg[GTK_STATE_NORMAL] = blue;
9523 rc_style->fg[GTK_STATE_PRELIGHT] = blue;
9524 rc_style->bg[GTK_STATE_PRELIGHT] = yellow;
9525 rc_style->fg[GTK_STATE_ACTIVE] = red;
9526 rc_style->bg[GTK_STATE_ACTIVE] = cyan;
9527 rc_style->xthickness = 5;
9528 rc_style->ythickness = 5;
9530 gtk_widget_modify_style (button, rc_style);
9531 gtk_widget_modify_style (GTK_BIN (button)->child, rc_style);
9533 g_object_unref (G_OBJECT (rc_style));
9535 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
9538 if (!GTK_WIDGET_VISIBLE (window))
9539 gtk_widget_show_all (window);
9541 gtk_widget_destroy (window);
9545 * Main Window and Exit
9549 do_exit (GtkWidget *widget, GtkWidget *window)
9551 gtk_widget_destroy (window);
9556 create_main_window (void)
9563 { "button box", create_button_box },
9564 { "buttons", create_buttons },
9565 { "check buttons", create_check_buttons },
9566 { "clist", create_clist},
9567 { "color selection", create_color_selection },
9568 { "ctree", create_ctree },
9569 { "cursors", create_cursors },
9570 { "dialog", create_dialog },
9571 /* { "dnd", create_dnd }, */
9572 { "entry", create_entry },
9573 { "event watcher", create_event_watcher },
9574 { "file selection", create_file_selection },
9575 { "flipping", create_flipping },
9576 { "font selection", create_font_selection },
9577 { "gamma curve", create_gamma_curve },
9578 { "handle box", create_handle_box },
9579 { "image from drawable", create_get_image },
9580 { "image", create_image },
9581 { "item factory", create_item_factory },
9582 { "labels", create_labels },
9583 { "layout", create_layout },
9584 { "list", create_list },
9585 { "menus", create_menus },
9586 { "message dialog", create_message_dialog },
9587 { "modal window", create_modal_window },
9588 { "notebook", create_notebook },
9589 { "panes", create_panes },
9590 { "pixmap", create_pixmap },
9591 { "preview color", create_color_preview },
9592 { "preview gray", create_gray_preview },
9593 { "progress bar", create_progress_bar },
9594 { "radio buttons", create_radio_buttons },
9595 { "range controls", create_range_controls },
9596 { "rc file", create_rc_file },
9597 { "reparent", create_reparent },
9598 { "rulers", create_rulers },
9599 { "saved position", create_saved_position },
9600 { "scrolled windows", create_scrolled_windows },
9601 { "shapes", create_shapes },
9602 { "spinbutton", create_spins },
9603 { "statusbar", create_statusbar },
9604 { "styles", create_styles },
9605 { "test idle", create_idle_test },
9606 { "test mainloop", create_mainloop },
9607 { "test scrolling", create_scroll_test },
9608 { "test selection", create_selection_test },
9609 { "test timeout", create_timeout_test },
9610 { "text", create_text },
9611 { "toggle buttons", create_toggle_buttons },
9612 { "toolbar", create_toolbar },
9613 { "tooltips", create_tooltips },
9614 { "tree", create_tree_mode_window},
9615 { "WM hints", create_wmhints },
9616 { "window states", create_window_states }
9618 int nbuttons = sizeof (buttons) / sizeof (buttons[0]);
9622 GtkWidget *scrolled_window;
9626 GtkWidget *separator;
9627 GdkGeometry geometry;
9630 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
9631 gtk_widget_set_name (window, "main window");
9632 gtk_widget_set_uposition (window, 20, 20);
9633 gtk_window_set_default_size (GTK_WINDOW (window), -1, 400);
9635 geometry.min_width = -1;
9636 geometry.min_height = -1;
9637 geometry.max_width = -1;
9638 geometry.max_height = G_MAXSHORT;
9639 gtk_window_set_geometry_hints (GTK_WINDOW (window), NULL,
9641 GDK_HINT_MIN_SIZE | GDK_HINT_MAX_SIZE);
9643 gtk_signal_connect (GTK_OBJECT (window), "destroy",
9644 GTK_SIGNAL_FUNC(gtk_main_quit),
9646 gtk_signal_connect (GTK_OBJECT (window), "delete-event",
9647 GTK_SIGNAL_FUNC (gtk_false),
9650 box1 = gtk_vbox_new (FALSE, 0);
9651 gtk_container_add (GTK_CONTAINER (window), box1);
9653 if (gtk_micro_version > 0)
9665 label = gtk_label_new (buffer);
9666 gtk_box_pack_start (GTK_BOX (box1), label, FALSE, FALSE, 0);
9668 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
9669 gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10);
9670 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
9672 GTK_POLICY_AUTOMATIC);
9673 gtk_box_pack_start (GTK_BOX (box1), scrolled_window, TRUE, TRUE, 0);
9675 box2 = gtk_vbox_new (FALSE, 0);
9676 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
9677 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), box2);
9678 gtk_container_set_focus_vadjustment (GTK_CONTAINER (box2),
9679 gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrolled_window)));
9680 gtk_widget_show (box2);
9682 for (i = 0; i < nbuttons; i++)
9684 button = gtk_button_new_with_label (buttons[i].label);
9685 if (buttons[i].func)
9686 gtk_signal_connect (GTK_OBJECT (button),
9688 GTK_SIGNAL_FUNC(buttons[i].func),
9691 gtk_widget_set_sensitive (button, FALSE);
9692 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
9695 separator = gtk_hseparator_new ();
9696 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
9698 box2 = gtk_vbox_new (FALSE, 10);
9699 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
9700 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
9702 button = gtk_button_new_with_label ("close");
9703 gtk_signal_connect (GTK_OBJECT (button), "clicked",
9704 GTK_SIGNAL_FUNC (do_exit),
9706 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
9707 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
9708 gtk_widget_grab_default (button);
9710 gtk_widget_show_all (window);
9716 if (file_exists ("../gdk-pixbuf/.libs/libpixbufloader-pnm.so"))
9718 putenv ("GDK_PIXBUF_MODULEDIR=../gdk-pixbuf/.libs");
9719 putenv ("GTK_IM_MODULE_FILE=./gtk.immodules");
9724 main (int argc, char *argv[])
9726 GtkBindingSet *binding_set;
9728 srand (time (NULL));
9733 /* Check to see if we are being run from the correct
9736 if (file_exists ("testgtkrc"))
9737 gtk_rc_add_default_file ("testgtkrc");
9739 gtk_init (&argc, &argv);
9743 binding_set = gtk_binding_set_by_class (gtk_type_class (GTK_TYPE_WIDGET));
9744 gtk_binding_entry_add_signal (binding_set,
9745 '9', GDK_CONTROL_MASK | GDK_RELEASE_MASK,
9748 GTK_TYPE_STRING, "GtkWidgetClass <ctrl><release>9 test");
9750 create_main_window ();
9756 while (g_main_pending ())
9757 g_main_iteration (FALSE);
9759 while (g_main_pending ())
9760 g_main_iteration (FALSE);