update to new examples
Mon Feb 1 13:35:14 GMT 1999 Tony Gale <gale@gtk.org> * examples/Makefile: update to new examples * examples/menu/itemfactory.c: I must have forgotten to 'cvs add' this file
This commit is contained in:
parent
5ef056ea94
commit
7402d68c8f
@ -1,3 +1,10 @@
|
||||
Mon Feb 1 13:35:14 GMT 1999 Tony Gale <gale@gtk.org>
|
||||
|
||||
* examples/Makefile: update to new examples
|
||||
|
||||
* examples/menu/itemfactory.c: I must have forgotten to
|
||||
'cvs add' this file
|
||||
|
||||
Mon Feb 1 09:16:03 GMT 1999 Tony Gale <gale@gtk.org>
|
||||
|
||||
* docs/gtk_tut.sgml:
|
||||
|
@ -1,3 +1,10 @@
|
||||
Mon Feb 1 13:35:14 GMT 1999 Tony Gale <gale@gtk.org>
|
||||
|
||||
* examples/Makefile: update to new examples
|
||||
|
||||
* examples/menu/itemfactory.c: I must have forgotten to
|
||||
'cvs add' this file
|
||||
|
||||
Mon Feb 1 09:16:03 GMT 1999 Tony Gale <gale@gtk.org>
|
||||
|
||||
* docs/gtk_tut.sgml:
|
||||
|
@ -1,3 +1,10 @@
|
||||
Mon Feb 1 13:35:14 GMT 1999 Tony Gale <gale@gtk.org>
|
||||
|
||||
* examples/Makefile: update to new examples
|
||||
|
||||
* examples/menu/itemfactory.c: I must have forgotten to
|
||||
'cvs add' this file
|
||||
|
||||
Mon Feb 1 09:16:03 GMT 1999 Tony Gale <gale@gtk.org>
|
||||
|
||||
* docs/gtk_tut.sgml:
|
||||
|
@ -1,3 +1,10 @@
|
||||
Mon Feb 1 13:35:14 GMT 1999 Tony Gale <gale@gtk.org>
|
||||
|
||||
* examples/Makefile: update to new examples
|
||||
|
||||
* examples/menu/itemfactory.c: I must have forgotten to
|
||||
'cvs add' this file
|
||||
|
||||
Mon Feb 1 09:16:03 GMT 1999 Tony Gale <gale@gtk.org>
|
||||
|
||||
* docs/gtk_tut.sgml:
|
||||
|
@ -1,3 +1,10 @@
|
||||
Mon Feb 1 13:35:14 GMT 1999 Tony Gale <gale@gtk.org>
|
||||
|
||||
* examples/Makefile: update to new examples
|
||||
|
||||
* examples/menu/itemfactory.c: I must have forgotten to
|
||||
'cvs add' this file
|
||||
|
||||
Mon Feb 1 09:16:03 GMT 1999 Tony Gale <gale@gtk.org>
|
||||
|
||||
* docs/gtk_tut.sgml:
|
||||
|
@ -1,3 +1,10 @@
|
||||
Mon Feb 1 13:35:14 GMT 1999 Tony Gale <gale@gtk.org>
|
||||
|
||||
* examples/Makefile: update to new examples
|
||||
|
||||
* examples/menu/itemfactory.c: I must have forgotten to
|
||||
'cvs add' this file
|
||||
|
||||
Mon Feb 1 09:16:03 GMT 1999 Tony Gale <gale@gtk.org>
|
||||
|
||||
* docs/gtk_tut.sgml:
|
||||
|
@ -1,3 +1,10 @@
|
||||
Mon Feb 1 13:35:14 GMT 1999 Tony Gale <gale@gtk.org>
|
||||
|
||||
* examples/Makefile: update to new examples
|
||||
|
||||
* examples/menu/itemfactory.c: I must have forgotten to
|
||||
'cvs add' this file
|
||||
|
||||
Mon Feb 1 09:16:03 GMT 1999 Tony Gale <gale@gtk.org>
|
||||
|
||||
* docs/gtk_tut.sgml:
|
||||
|
@ -1,9 +1,40 @@
|
||||
|
||||
SUBDIRS = aspectframe eventbox gtkdial notebook progressbar scrolledwin tictactoe \
|
||||
clist filesel list paned rulers table \
|
||||
entry menu pixmap scribble-simple text \
|
||||
base helloworld packbox radiobuttons selection tree \
|
||||
buttons helloworld2 packer rangewidgets statusbar wheelbarrow
|
||||
SUBDIRS = arrow \
|
||||
aspectframe \
|
||||
base \
|
||||
buttonbox \
|
||||
buttons \
|
||||
calendar \
|
||||
clist \
|
||||
entry \
|
||||
eventbox \
|
||||
filesel \
|
||||
fixed \
|
||||
frame \
|
||||
gtkdial \
|
||||
helloworld \
|
||||
helloworld2 \
|
||||
label \
|
||||
list \
|
||||
menu \
|
||||
notebook \
|
||||
packbox \
|
||||
packer \
|
||||
paned \
|
||||
pixmap \
|
||||
progressbar \
|
||||
radiobuttons \
|
||||
rangewidgets \
|
||||
rulers \
|
||||
scribble-simple \
|
||||
scrolledwin \
|
||||
selection \
|
||||
statusbar \
|
||||
table \
|
||||
text \
|
||||
tictactoe \
|
||||
tree \
|
||||
wheelbarrow
|
||||
|
||||
all:
|
||||
list='$(SUBDIRS)'; \
|
||||
|
108
examples/menu/itemfactory.c
Normal file
108
examples/menu/itemfactory.c
Normal file
@ -0,0 +1,108 @@
|
||||
/* 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
|
||||
"<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) {
|
||||
int nmenu_items = sizeof(menu_items) / sizeof(menu_items[0]);
|
||||
GtkItemFactory *item_factory;
|
||||
GtkAccelGroup *accel_group;
|
||||
|
||||
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_accel_group_attach (accel_group, GTK_OBJECT (window));
|
||||
|
||||
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 */
|
Loading…
Reference in New Issue
Block a user