mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-12-30 15:31:34 +00:00
ee3d137660
Sat Nov 13 22:30:29 GMT 1999 Tony Gale <gale@gtk.org> * docs/gtkfaq.sgml: threads example from Erik Mouw. New question on GtkLabel background colors. * docs/gtk_tut.sgml: - Correct the example code callback function definitions. - Update the gtkdial example code, from Frans van Schaik. - Update setselection.c to current API. * examples/Makefile examples/*/*.c: Update to code listed in tutorial.
115 lines
4.0 KiB
C
115 lines
4.0 KiB
C
/* example-start menu itemfactory.c */
|
|
|
|
#include <gtk/gtk.h>
|
|
#include <strings.h>
|
|
|
|
/* Obligatory basic callback */
|
|
static void print_hello( GtkWidget *w,
|
|
gpointer data )
|
|
{
|
|
g_message ("Hello, World!\n");
|
|
}
|
|
|
|
/* This is the GtkItemFactoryEntry structure used to generate new menus.
|
|
Item 1: The menu path. The letter after the underscore indicates an
|
|
accelerator key once the menu is open.
|
|
Item 2: The accelerator key for the entry
|
|
Item 3: The callback function.
|
|
Item 4: The callback action. This changes the parameters with
|
|
which the function is called. The default is 0.
|
|
Item 5: The item type, used to define what kind of an item it is.
|
|
Here are the possible values:
|
|
|
|
NULL -> "<Item>"
|
|
"" -> "<Item>"
|
|
"<Title>" -> create a title item
|
|
"<Item>" -> create a simple item
|
|
"<CheckItem>" -> create a check item
|
|
"<ToggleItem>" -> create a toggle item
|
|
"<RadioItem>" -> create a radio item
|
|
<path> -> path of a radio item to link against
|
|
"<Separator>" -> create a separator
|
|
"<Branch>" -> create an item to hold sub items (optional)
|
|
"<LastBranch>" -> create a right justified branch
|
|
*/
|
|
|
|
static GtkItemFactoryEntry menu_items[] = {
|
|
{ "/_File", NULL, NULL, 0, "<Branch>" },
|
|
{ "/File/_New", "<control>N", print_hello, 0, NULL },
|
|
{ "/File/_Open", "<control>O", print_hello, 0, NULL },
|
|
{ "/File/_Save", "<control>S", print_hello, 0, NULL },
|
|
{ "/File/Save _As", NULL, NULL, 0, NULL },
|
|
{ "/File/sep1", NULL, NULL, 0, "<Separator>" },
|
|
{ "/File/Quit", "<control>Q", gtk_main_quit, 0, NULL },
|
|
{ "/_Options", NULL, NULL, 0, "<Branch>" },
|
|
{ "/Options/Test", NULL, NULL, 0, NULL },
|
|
{ "/_Help", NULL, NULL, 0, "<LastBranch>" },
|
|
{ "/_Help/About", NULL, NULL, 0, NULL },
|
|
};
|
|
|
|
|
|
void get_main_menu( GtkWidget *window,
|
|
GtkWidget **menubar )
|
|
{
|
|
GtkItemFactory *item_factory;
|
|
GtkAccelGroup *accel_group;
|
|
gint nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]);
|
|
|
|
accel_group = gtk_accel_group_new ();
|
|
|
|
/* This function initializes the item factory.
|
|
Param 1: The type of menu - can be GTK_TYPE_MENU_BAR, GTK_TYPE_MENU,
|
|
or GTK_TYPE_OPTION_MENU.
|
|
Param 2: The path of the menu.
|
|
Param 3: A pointer to a gtk_accel_group. The item factory sets up
|
|
the accelerator table while generating menus.
|
|
*/
|
|
|
|
item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>",
|
|
accel_group);
|
|
|
|
/* This function generates the menu items. Pass the item factory,
|
|
the number of items in the array, the array itself, and any
|
|
callback data for the the menu items. */
|
|
gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL);
|
|
|
|
/* Attach the new accelerator group to the window. */
|
|
gtk_window_add_accel_group (GTK_WINDOW (window), accel_group);
|
|
|
|
if (menubar)
|
|
/* Finally, return the actual menu bar created by the item factory. */
|
|
*menubar = gtk_item_factory_get_widget (item_factory, "<main>");
|
|
}
|
|
|
|
int main( int argc,
|
|
char *argv[] )
|
|
{
|
|
GtkWidget *window;
|
|
GtkWidget *main_vbox;
|
|
GtkWidget *menubar;
|
|
|
|
gtk_init (&argc, &argv);
|
|
|
|
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
|
gtk_signal_connect (GTK_OBJECT (window), "destroy",
|
|
GTK_SIGNAL_FUNC (gtk_main_quit),
|
|
"WM destroy");
|
|
gtk_window_set_title (GTK_WINDOW(window), "Item Factory");
|
|
gtk_widget_set_usize (GTK_WIDGET(window), 300, 200);
|
|
|
|
main_vbox = gtk_vbox_new (FALSE, 1);
|
|
gtk_container_border_width (GTK_CONTAINER (main_vbox), 1);
|
|
gtk_container_add (GTK_CONTAINER (window), main_vbox);
|
|
gtk_widget_show (main_vbox);
|
|
|
|
get_main_menu (window, &menubar);
|
|
gtk_box_pack_start (GTK_BOX (main_vbox), menubar, FALSE, TRUE, 0);
|
|
gtk_widget_show (menubar);
|
|
|
|
gtk_widget_show (window);
|
|
gtk_main ();
|
|
|
|
return(0);
|
|
}
|
|
/* example-end */
|