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>
|
Mon Feb 1 09:16:03 GMT 1999 Tony Gale <gale@gtk.org>
|
||||||
|
|
||||||
* docs/gtk_tut.sgml:
|
* 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>
|
Mon Feb 1 09:16:03 GMT 1999 Tony Gale <gale@gtk.org>
|
||||||
|
|
||||||
* docs/gtk_tut.sgml:
|
* 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>
|
Mon Feb 1 09:16:03 GMT 1999 Tony Gale <gale@gtk.org>
|
||||||
|
|
||||||
* docs/gtk_tut.sgml:
|
* 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>
|
Mon Feb 1 09:16:03 GMT 1999 Tony Gale <gale@gtk.org>
|
||||||
|
|
||||||
* docs/gtk_tut.sgml:
|
* 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>
|
Mon Feb 1 09:16:03 GMT 1999 Tony Gale <gale@gtk.org>
|
||||||
|
|
||||||
* docs/gtk_tut.sgml:
|
* 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>
|
Mon Feb 1 09:16:03 GMT 1999 Tony Gale <gale@gtk.org>
|
||||||
|
|
||||||
* docs/gtk_tut.sgml:
|
* 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>
|
Mon Feb 1 09:16:03 GMT 1999 Tony Gale <gale@gtk.org>
|
||||||
|
|
||||||
* docs/gtk_tut.sgml:
|
* docs/gtk_tut.sgml:
|
||||||
|
@ -1,9 +1,40 @@
|
|||||||
|
|
||||||
SUBDIRS = aspectframe eventbox gtkdial notebook progressbar scrolledwin tictactoe \
|
SUBDIRS = arrow \
|
||||||
clist filesel list paned rulers table \
|
aspectframe \
|
||||||
entry menu pixmap scribble-simple text \
|
base \
|
||||||
base helloworld packbox radiobuttons selection tree \
|
buttonbox \
|
||||||
buttons helloworld2 packer rangewidgets statusbar wheelbarrow
|
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:
|
all:
|
||||||
list='$(SUBDIRS)'; \
|
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