|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>Menu Widget
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
NAME="GENERATOR"
|
|
Packit Service |
fb6fa5 |
CONTENT="Modular DocBook HTML Stylesheet Version 1.79">
|
|
Packit Service |
fb6fa5 |
REL="HOME"
|
|
Packit Service |
fb6fa5 |
TITLE="GTK+ 2.0 Tutorial"
|
|
Packit Service |
fb6fa5 |
HREF="book1.html">
|
|
Packit Service |
fb6fa5 |
REL="PREVIOUS"
|
|
Packit Service |
fb6fa5 |
TITLE="Notebooks"
|
|
Packit Service |
fb6fa5 |
HREF="x1450.html">
|
|
Packit Service |
fb6fa5 |
REL="NEXT"
|
|
Packit Service |
fb6fa5 |
TITLE="Manual Menu Example"
|
|
Packit Service |
fb6fa5 |
HREF="x1577.html">
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
CLASS="CHAPTER"
|
|
Packit Service |
fb6fa5 |
BGCOLOR="#FFFFFF"
|
|
Packit Service |
fb6fa5 |
TEXT="#000000"
|
|
Packit Service |
fb6fa5 |
LINK="#0000FF"
|
|
Packit Service |
fb6fa5 |
VLINK="#840084"
|
|
Packit Service |
fb6fa5 |
ALINK="#0000FF"
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
CLASS="NAVHEADER"
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
SUMMARY="Header navigation table"
|
|
Packit Service |
fb6fa5 |
WIDTH="100%"
|
|
Packit Service |
fb6fa5 |
BORDER="0"
|
|
Packit Service |
fb6fa5 |
CELLPADDING="0"
|
|
Packit Service |
fb6fa5 |
CELLSPACING="0"
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
COLSPAN="3"
|
|
Packit Service |
fb6fa5 |
ALIGN="center"
|
|
Packit Service |
fb6fa5 |
>GTK+ 2.0 Tutorial
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
WIDTH="10%"
|
|
Packit Service |
fb6fa5 |
ALIGN="left"
|
|
Packit Service |
fb6fa5 |
VALIGN="bottom"
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
HREF="x1450.html"
|
|
Packit Service |
fb6fa5 |
ACCESSKEY="P"
|
|
Packit Service |
fb6fa5 |
><<< Previous
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
WIDTH="80%"
|
|
Packit Service |
fb6fa5 |
ALIGN="center"
|
|
Packit Service |
fb6fa5 |
VALIGN="bottom"
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
WIDTH="10%"
|
|
Packit Service |
fb6fa5 |
ALIGN="right"
|
|
Packit Service |
fb6fa5 |
VALIGN="bottom"
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
HREF="x1577.html"
|
|
Packit Service |
fb6fa5 |
ACCESSKEY="N"
|
|
Packit Service |
fb6fa5 |
>Next >>>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
ALIGN="LEFT"
|
|
Packit Service |
fb6fa5 |
WIDTH="100%">
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
CLASS="CHAPTER"
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
NAME="CH-MENUWIDGET"
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>Menu Widget
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>There are two ways to create menus: there's the easy way, and there's
|
|
Packit Service |
fb6fa5 |
the hard way. Both have their uses, but you can usually use the
|
|
Packit Service |
fb6fa5 |
Itemfactory (the easy way). The "hard" way is to create all the menus
|
|
Packit Service |
fb6fa5 |
using the calls directly. The easy way is to use the gtk_item_factory
|
|
Packit Service |
fb6fa5 |
calls. This is much simpler, but there are advantages and
|
|
Packit Service |
fb6fa5 |
disadvantages to each approach.
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>The Itemfactory is much easier to use, and to add new menus to,
|
|
Packit Service |
fb6fa5 |
although writing a few wrapper functions to create menus using the
|
|
Packit Service |
fb6fa5 |
manual method could go a long way towards usability. With the
|
|
Packit Service |
fb6fa5 |
Itemfactory, it is not possible to add images or the character '/' to
|
|
Packit Service |
fb6fa5 |
the menus.
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
CLASS="SECT1"
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
CLASS="SECT1"
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
NAME="SEC-MANUALMENUCREATION"
|
|
Packit Service |
fb6fa5 |
>Manual Menu Creation
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>In the true tradition of teaching, we'll show you the hard way
|
|
Packit Service |
fb6fa5 |
first.
|
|
Packit Service |
fb6fa5 |
CLASS="LITERAL"
|
|
Packit Service |
fb6fa5 |
>:)
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>There are three widgets that go into making a menubar and submenus:
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>a menu item, which is what the user wants to select, e.g.,
|
|
Packit Service |
fb6fa5 |
"Save"
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>a menu, which acts as a container for the menu items, and
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>a menubar, which is a container for each of the individual
|
|
Packit Service |
fb6fa5 |
menus.
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>This is slightly complicated by the fact that menu item widgets are
|
|
Packit Service |
fb6fa5 |
used for two different things. They are both the widgets that are
|
|
Packit Service |
fb6fa5 |
packed into the menu, and the widget that is packed into the menubar,
|
|
Packit Service |
fb6fa5 |
which, when selected, activates the menu.
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>Let's look at the functions that are used to create menus and
|
|
Packit Service |
fb6fa5 |
menubars. This first function is used to create a new menubar.
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
BORDER="0"
|
|
Packit Service |
fb6fa5 |
BGCOLOR="#E0E0E0"
|
|
Packit Service |
fb6fa5 |
WIDTH="100%"
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
CLASS="PROGRAMLISTING"
|
|
Packit Service |
fb6fa5 |
>GtkWidget *gtk_menu_bar_new( void );
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>This rather self explanatory function creates a new menubar. You use
|
|
Packit Service |
fb6fa5 |
gtk_container_add() to pack this into a window, or the box_pack
|
|
Packit Service |
fb6fa5 |
functions to pack it into a box - the same as buttons.
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
BORDER="0"
|
|
Packit Service |
fb6fa5 |
BGCOLOR="#E0E0E0"
|
|
Packit Service |
fb6fa5 |
WIDTH="100%"
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
CLASS="PROGRAMLISTING"
|
|
Packit Service |
fb6fa5 |
>GtkWidget *gtk_menu_new( void );
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>This function returns a pointer to a new menu; it is never actually
|
|
Packit Service |
fb6fa5 |
shown (with gtk_widget_show()), it is just a container for the menu
|
|
Packit Service |
fb6fa5 |
items. I hope this will become more clear when you look at the
|
|
Packit Service |
fb6fa5 |
example below.
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>The next three calls are used to create menu items that are packed into
|
|
Packit Service |
fb6fa5 |
the menu (and menubar).
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
BORDER="0"
|
|
Packit Service |
fb6fa5 |
BGCOLOR="#E0E0E0"
|
|
Packit Service |
fb6fa5 |
WIDTH="100%"
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
CLASS="PROGRAMLISTING"
|
|
Packit Service |
fb6fa5 |
>GtkWidget *gtk_menu_item_new( void );
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
GtkWidget *gtk_menu_item_new_with_label( const char *label );
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
GtkWidget *gtk_menu_item_new_with_mnemonic( const char *label );
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>These calls are used to create the menu items that are to be
|
|
Packit Service |
fb6fa5 |
displayed. Remember to differentiate between a "menu" as created with
|
|
Packit Service |
fb6fa5 |
gtk_menu_new() and a "menu item" as created by the gtk_menu_item_new()
|
|
Packit Service |
fb6fa5 |
functions. The menu item will be an actual button with an associated
|
|
Packit Service |
fb6fa5 |
action, whereas a menu will be a container holding menu items.
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>The gtk_menu_item_new_with_label() and gtk_menu_item_new() functions are just as
|
|
Packit Service |
fb6fa5 |
you'd expect after reading about the buttons. One creates a new menu
|
|
Packit Service |
fb6fa5 |
item with a label already packed into it, and the other just creates a
|
|
Packit Service |
fb6fa5 |
blank menu item.
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>Once you've created a menu item you have to put it into a menu. This
|
|
Packit Service |
fb6fa5 |
is done using the function gtk_menu_shelll_append. In order to capture when
|
|
Packit Service |
fb6fa5 |
the item is selected by the user, we need to connect to the
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
CLASS="LITERAL"
|
|
Packit Service |
fb6fa5 |
>activate
|
|
Packit Service |
fb6fa5 |
> signal in the usual way. So, if we wanted to create a
|
|
Packit Service |
fb6fa5 |
standard
|
|
Packit Service |
fb6fa5 |
CLASS="LITERAL"
|
|
Packit Service |
fb6fa5 |
>File
|
|
Packit Service |
fb6fa5 |
> menu, with the options
|
|
Packit Service |
fb6fa5 |
CLASS="LITERAL"
|
|
Packit Service |
fb6fa5 |
>Open
|
|
Packit Service |
fb6fa5 |
>,
|
|
Packit Service |
fb6fa5 |
CLASS="LITERAL"
|
|
Packit Service |
fb6fa5 |
>Save
|
|
Packit Service |
fb6fa5 |
>, and
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
CLASS="LITERAL"
|
|
Packit Service |
fb6fa5 |
>Quit
|
|
Packit Service |
fb6fa5 |
>, the code would look something like:
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
BORDER="0"
|
|
Packit Service |
fb6fa5 |
BGCOLOR="#E0E0E0"
|
|
Packit Service |
fb6fa5 |
WIDTH="100%"
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
CLASS="PROGRAMLISTING"
|
|
Packit Service |
fb6fa5 |
> file_menu = gtk_menu_new (); /* Don't need to show menus */
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
/* Create the menu items */
|
|
Packit Service |
fb6fa5 |
open_item = gtk_menu_item_new_with_label ("Open");
|
|
Packit Service |
fb6fa5 |
save_item = gtk_menu_item_new_with_label ("Save");
|
|
Packit Service |
fb6fa5 |
quit_item = gtk_menu_item_new_with_label ("Quit");
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
/* Add them to the menu */
|
|
Packit Service |
fb6fa5 |
gtk_menu_shell_append (GTK_MENU_SHELL (file_menu), open_item);
|
|
Packit Service |
fb6fa5 |
gtk_menu_shell_append (GTK_MENU_SHELL (file_menu), save_item);
|
|
Packit Service |
fb6fa5 |
gtk_menu_shell_append (GTK_MENU_SHELL (file_menu), quit_item);
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
/* Attach the callback functions to the activate signal */
|
|
Packit Service |
fb6fa5 |
g_signal_connect_swapped (open_item, "activate",
|
|
Packit Service |
fb6fa5 |
G_CALLBACK (menuitem_response),
|
|
Packit Service |
fb6fa5 |
(gpointer) "file.open");
|
|
Packit Service |
fb6fa5 |
g_signal_connect_swapped (save_item, "activate",
|
|
Packit Service |
fb6fa5 |
G_CALLBACK (menuitem_response),
|
|
Packit Service |
fb6fa5 |
(gpointer) "file.save");
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
/* We can attach the Quit menu item to our exit function */
|
|
Packit Service |
fb6fa5 |
g_signal_connect_swapped (quit_item, "activate",
|
|
Packit Service |
fb6fa5 |
G_CALLBACK (destroy),
|
|
Packit Service |
fb6fa5 |
(gpointer) "file.quit");
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
/* We do need to show menu items */
|
|
Packit Service |
fb6fa5 |
gtk_widget_show (open_item);
|
|
Packit Service |
fb6fa5 |
gtk_widget_show (save_item);
|
|
Packit Service |
fb6fa5 |
gtk_widget_show (quit_item);
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>At this point we have our menu. Now we need to create a menubar and a
|
|
Packit Service |
fb6fa5 |
menu item for the
|
|
Packit Service |
fb6fa5 |
CLASS="LITERAL"
|
|
Packit Service |
fb6fa5 |
>File
|
|
Packit Service |
fb6fa5 |
> entry, to which we add our menu. The code
|
|
Packit Service |
fb6fa5 |
looks like this:
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
BORDER="0"
|
|
Packit Service |
fb6fa5 |
BGCOLOR="#E0E0E0"
|
|
Packit Service |
fb6fa5 |
WIDTH="100%"
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
CLASS="PROGRAMLISTING"
|
|
Packit Service |
fb6fa5 |
> menu_bar = gtk_menu_bar_new ();
|
|
Packit Service |
fb6fa5 |
gtk_container_add (GTK_CONTAINER (window), menu_bar);
|
|
Packit Service |
fb6fa5 |
gtk_widget_show (menu_bar);
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
file_item = gtk_menu_item_new_with_label ("File");
|
|
Packit Service |
fb6fa5 |
gtk_widget_show (file_item);
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>Now we need to associate the menu with
|
|
Packit Service |
fb6fa5 |
CLASS="LITERAL"
|
|
Packit Service |
fb6fa5 |
>file_item
|
|
Packit Service |
fb6fa5 |
>. This is done
|
|
Packit Service |
fb6fa5 |
with the function
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
BORDER="0"
|
|
Packit Service |
fb6fa5 |
BGCOLOR="#E0E0E0"
|
|
Packit Service |
fb6fa5 |
WIDTH="100%"
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
CLASS="PROGRAMLISTING"
|
|
Packit Service |
fb6fa5 |
>void gtk_menu_item_set_submenu( GtkMenuItem *menu_item,
|
|
Packit Service |
fb6fa5 |
GtkWidget *submenu );
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>So, our example would continue with
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
BORDER="0"
|
|
Packit Service |
fb6fa5 |
BGCOLOR="#E0E0E0"
|
|
Packit Service |
fb6fa5 |
WIDTH="100%"
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
CLASS="PROGRAMLISTING"
|
|
Packit Service |
fb6fa5 |
> gtk_menu_item_set_submenu (GTK_MENU_ITEM (file_item), file_menu);
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>All that is left to do is to add the menu to the menubar, which is
|
|
Packit Service |
fb6fa5 |
accomplished using the function
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
BORDER="0"
|
|
Packit Service |
fb6fa5 |
BGCOLOR="#E0E0E0"
|
|
Packit Service |
fb6fa5 |
WIDTH="100%"
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
CLASS="PROGRAMLISTING"
|
|
Packit Service |
fb6fa5 |
>void gtk_menu_bar_append( GtkMenuBar *menu_bar,
|
|
Packit Service |
fb6fa5 |
GtkWidget *menu_item );
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>which in our case looks like this:
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
BORDER="0"
|
|
Packit Service |
fb6fa5 |
BGCOLOR="#E0E0E0"
|
|
Packit Service |
fb6fa5 |
WIDTH="100%"
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
CLASS="PROGRAMLISTING"
|
|
Packit Service |
fb6fa5 |
> gtk_menu_bar_append (GTK_MENU_BAR (menu_bar), file_item);
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>If we wanted the menu right justified on the menubar, such as help
|
|
Packit Service |
fb6fa5 |
menus often are, we can use the following function (again on
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
CLASS="LITERAL"
|
|
Packit Service |
fb6fa5 |
>file_item
|
|
Packit Service |
fb6fa5 |
> in the current example) before attaching it to the
|
|
Packit Service |
fb6fa5 |
menubar.
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
BORDER="0"
|
|
Packit Service |
fb6fa5 |
BGCOLOR="#E0E0E0"
|
|
Packit Service |
fb6fa5 |
WIDTH="100%"
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
CLASS="PROGRAMLISTING"
|
|
Packit Service |
fb6fa5 |
>void gtk_menu_item_right_justify( GtkMenuItem *menu_item );
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>Here is a summary of the steps needed to create a menu bar with menus
|
|
Packit Service |
fb6fa5 |
attached:
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
> Create a new menu using gtk_menu_new()
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
> Use multiple calls to gtk_menu_item_new() for each item you
|
|
Packit Service |
fb6fa5 |
wish to have on your menu. And use gtk_menu_shell_append() to put each of
|
|
Packit Service |
fb6fa5 |
these new items on to the menu.
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
> Create a menu item using gtk_menu_item_new(). This will be the
|
|
Packit Service |
fb6fa5 |
root of the menu, the text appearing here will be on the menubar
|
|
Packit Service |
fb6fa5 |
itself.
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>Use gtk_menu_item_set_submenu() to attach the menu to the root
|
|
Packit Service |
fb6fa5 |
menu item (the one created in the above step).
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
> Create a new menubar using gtk_menu_bar_new. This step only
|
|
Packit Service |
fb6fa5 |
needs to be done once when creating a series of menus on one menu bar.
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
> Use gtk_menu_bar_append() to put the root menu onto the menubar.
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>Creating a popup menu is nearly the same. The difference is that the
|
|
Packit Service |
fb6fa5 |
menu is not posted "automatically" by a menubar, but explicitly by
|
|
Packit Service |
fb6fa5 |
calling the function gtk_menu_popup() from a button-press event, for
|
|
Packit Service |
fb6fa5 |
example. Take these steps:
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>Create an event handling function. It needs to have the
|
|
Packit Service |
fb6fa5 |
prototype
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
BORDER="0"
|
|
Packit Service |
fb6fa5 |
BGCOLOR="#E0E0E0"
|
|
Packit Service |
fb6fa5 |
WIDTH="90%"
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
CLASS="PROGRAMLISTING"
|
|
Packit Service |
fb6fa5 |
>static gboolean handler( GtkWidget *widget,
|
|
Packit Service |
fb6fa5 |
GdkEvent *event );
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>and it will use the event to find out where to pop up the menu.
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>In the event handler, if the event is a mouse button press,
|
|
Packit Service |
fb6fa5 |
treat
|
|
Packit Service |
fb6fa5 |
CLASS="LITERAL"
|
|
Packit Service |
fb6fa5 |
>event
|
|
Packit Service |
fb6fa5 |
> as a button event (which it is) and use it as
|
|
Packit Service |
fb6fa5 |
shown in the sample code to pass information to gtk_menu_popup().
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>Bind that event handler to a widget with
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
BORDER="0"
|
|
Packit Service |
fb6fa5 |
BGCOLOR="#E0E0E0"
|
|
Packit Service |
fb6fa5 |
WIDTH="90%"
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
CLASS="PROGRAMLISTING"
|
|
Packit Service |
fb6fa5 |
> g_signal_connect_swapped (widget, "event",
|
|
Packit Service |
fb6fa5 |
G_CALLBACK (handler),
|
|
Packit Service |
fb6fa5 |
menu);
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>where
|
|
Packit Service |
fb6fa5 |
CLASS="LITERAL"
|
|
Packit Service |
fb6fa5 |
>widget
|
|
Packit Service |
fb6fa5 |
> is the widget you are binding to,
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
CLASS="LITERAL"
|
|
Packit Service |
fb6fa5 |
>handler
|
|
Packit Service |
fb6fa5 |
> is the handling function, and
|
|
Packit Service |
fb6fa5 |
CLASS="LITERAL"
|
|
Packit Service |
fb6fa5 |
>menu
|
|
Packit Service |
fb6fa5 |
> is a menu
|
|
Packit Service |
fb6fa5 |
created with gtk_menu_new(). This can be a menu which is also posted
|
|
Packit Service |
fb6fa5 |
by a menu bar, as shown in the sample code.
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
CLASS="NAVFOOTER"
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
ALIGN="LEFT"
|
|
Packit Service |
fb6fa5 |
WIDTH="100%">
|
|
Packit Service |
fb6fa5 |
SUMMARY="Footer navigation table"
|
|
Packit Service |
fb6fa5 |
WIDTH="100%"
|
|
Packit Service |
fb6fa5 |
BORDER="0"
|
|
Packit Service |
fb6fa5 |
CELLPADDING="0"
|
|
Packit Service |
fb6fa5 |
CELLSPACING="0"
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
WIDTH="33%"
|
|
Packit Service |
fb6fa5 |
ALIGN="left"
|
|
Packit Service |
fb6fa5 |
VALIGN="top"
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
HREF="x1450.html"
|
|
Packit Service |
fb6fa5 |
ACCESSKEY="P"
|
|
Packit Service |
fb6fa5 |
><<< Previous
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
WIDTH="34%"
|
|
Packit Service |
fb6fa5 |
ALIGN="center"
|
|
Packit Service |
fb6fa5 |
VALIGN="top"
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
HREF="book1.html"
|
|
Packit Service |
fb6fa5 |
ACCESSKEY="H"
|
|
Packit Service |
fb6fa5 |
>Home
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
WIDTH="33%"
|
|
Packit Service |
fb6fa5 |
ALIGN="right"
|
|
Packit Service |
fb6fa5 |
VALIGN="top"
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
HREF="x1577.html"
|
|
Packit Service |
fb6fa5 |
ACCESSKEY="N"
|
|
Packit Service |
fb6fa5 |
>Next >>>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
WIDTH="33%"
|
|
Packit Service |
fb6fa5 |
ALIGN="left"
|
|
Packit Service |
fb6fa5 |
VALIGN="top"
|
|
Packit Service |
fb6fa5 |
>Notebooks
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
WIDTH="34%"
|
|
Packit Service |
fb6fa5 |
ALIGN="center"
|
|
Packit Service |
fb6fa5 |
VALIGN="top"
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
WIDTH="33%"
|
|
Packit Service |
fb6fa5 |
ALIGN="right"
|
|
Packit Service |
fb6fa5 |
VALIGN="top"
|
|
Packit Service |
fb6fa5 |
>Manual Menu Example
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|
|
Packit Service |
fb6fa5 |
>
|