3 * The GtkItemFactory object allows the easy creation of menus
4 * from an array of descriptions of menu items.
10 gtk_ifactory_cb (gpointer callback_data,
11 guint callback_action,
14 g_message ("ItemFactory: activated \"%s\"",
15 gtk_item_factory_path_from_widget (widget));
18 static GtkItemFactoryEntry menu_items[] =
20 { "/_File", NULL, 0, 0, "<Branch>" },
21 { "/File/tearoff1", NULL, gtk_ifactory_cb, 0, "<Tearoff>" },
22 { "/File/_New", "<control>N", gtk_ifactory_cb, 0 },
23 { "/File/_Open", "<control>O", gtk_ifactory_cb, 0 },
24 { "/File/_Save", "<control>S", gtk_ifactory_cb, 0 },
25 { "/File/Save _As...", NULL, gtk_ifactory_cb, 0 },
26 { "/File/sep1", NULL, gtk_ifactory_cb, 0, "<Separator>" },
27 { "/File/_Quit", "<control>Q", gtk_ifactory_cb, 0 },
29 { "/_Preferences", NULL, 0, 0, "<Branch>" },
30 { "/_Preferences/_Color", NULL, 0, 0, "<Branch>" },
31 { "/_Preferences/Color/_Red", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
32 { "/_Preferences/Color/_Green", NULL, gtk_ifactory_cb, 0, "/Preferences/Color/Red" },
33 { "/_Preferences/Color/_Blue", NULL, gtk_ifactory_cb, 0, "/Preferences/Color/Red" },
34 { "/_Preferences/_Shape", NULL, 0, 0, "<Branch>" },
35 { "/_Preferences/Shape/_Square", NULL, gtk_ifactory_cb, 0, "<RadioItem>" },
36 { "/_Preferences/Shape/_Rectangle", NULL, gtk_ifactory_cb, 0, "/Preferences/Shape/Square" },
37 { "/_Preferences/Shape/_Oval", NULL, gtk_ifactory_cb, 0, "/Preferences/Shape/Rectangle" },
39 { "/_Help", NULL, 0, 0, "<LastBranch>" },
40 { "/Help/_About", NULL, gtk_ifactory_cb, 0 },
43 static int nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]);
46 do_item_factory (void)
48 static GtkWidget *window = NULL;
57 GtkAccelGroup *accel_group;
58 GtkItemFactory *item_factory;
60 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
62 g_signal_connect (window, "destroy",
63 G_CALLBACK (gtk_widget_destroyed), &window);
64 g_signal_connect (window, "delete-event",
65 G_CALLBACK (gtk_true), NULL);
67 accel_group = gtk_accel_group_new ();
68 item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>", accel_group);
69 g_object_set_data_full (G_OBJECT (window), "<main>",
70 item_factory, (GDestroyNotify) g_object_unref);
71 gtk_window_add_accel_group (GTK_WINDOW (window), accel_group);
72 gtk_window_set_title (GTK_WINDOW (window), "Item Factory");
73 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
74 gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL);
76 /* preselect /Preferences/Shape/Oval over the other radios
78 gtk_check_menu_item_set_active
79 (GTK_CHECK_MENU_ITEM (gtk_item_factory_get_item (item_factory,
80 "/Preferences/Shape/Oval")),
83 box1 = gtk_vbox_new (FALSE, 0);
84 gtk_container_add (GTK_CONTAINER (window), box1);
86 gtk_box_pack_start (GTK_BOX (box1),
87 gtk_item_factory_get_widget (item_factory, "<main>"),
90 label = gtk_label_new ("Type\n<alt>\nto start");
91 gtk_widget_set_size_request (label, 200, 200);
92 gtk_misc_set_alignment (GTK_MISC (label), 0.5, 0.5);
93 gtk_box_pack_start (GTK_BOX (box1), label, TRUE, TRUE, 0);
96 separator = gtk_hseparator_new ();
97 gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
100 box2 = gtk_vbox_new (FALSE, 10);
101 gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
102 gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
104 button = gtk_button_new_with_label ("close");
105 g_signal_connect_swapped (button, "clicked",
106 G_CALLBACK (gtk_widget_destroy), window);
107 gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
108 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
109 gtk_widget_grab_default (button);
111 gtk_widget_show_all (window);
115 gtk_widget_destroy (window);