⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 migrating-gtkaction.sgml

📁 This GTK+ version 2.12.3. GTK+ is a multi-platform toolkit for creating graphical user interfaces.
💻 SGML
📖 第 1 页 / 共 2 页
字号:
    low_quality_callback, NULL, NULL, GNOME_APP_PIXMAP_FILENAME, "low-quality.png",    0, 0, NULL },  { GNOME_APP_UI_ENDOFINFO }};static GnomeUIInfo view_menu_items[] = {  { GNOME_APP_UI_ITEM, "Zoom _In", "Zoom into the image",    zoom_in_callback, NULL, NULL, GNOME_APP_PIXMAP_STOCK, GTK_STOCK_ZOOM_IN,    GDK_PLUS, 0, NULL },  { GNOME_APP_UI_ITEM, "Zoom _Out", "Zoom away from the image",    zoom_out_callback, NULL, NULL, GNOME_APP_PIXMAP_STOCK, GTK_STOCK_ZOOM_OUT,    GDK_MINUS, 0, NULL },  { GNOME_APP_UI_SEPARATOR },  { GNOME_APP_UI_TOGGLEITEM, "_Full Screen", "Switch between full screen and windowed mode",    full_screen_callback, NULL, NULL, GNOME_APP_PIXMAP_NONE, NULL,    GDK_F11, 0, NULL },  { GNOME_APP_UI_SEPARATOR },  { GNOME_APP_UI_RADIOITEMS, NULL, NULL, view_radio_items },  { GNOME_APP_UI_ENDOFINFO }};static GnomeUIInfo menubar[] = {  { GNOME_APP_UI_SUBTREE, "_File", NULL, file_menu_items },  { GNOME_APP_UI_SUBTREE, "_View", NULL, view_menu_items },  { GNOME_APP_UI_ENDOFINFO }}      </programlisting>    </example>    <example id="gnomeuiinfo-action-entries">      <title><structname>GtkActionEntry</structname> Structures</title>      <para>	The following code is the set of actions that are present in	the <link linkend="gnomeuiinfo-example">previous	example</link>.  Note that the toggle and radio entries are	separate from normal actions.  Also, note that #GtkActionEntry         structures take key names in the format of gdk_accelerator_parse()         rather than key values plus modifiers; you will have to convert these	values by hand.  For example, %GDK_F11 with no modifiers is equivalent         to a key name of <literal>"F11"</literal>.  Likewise, <literal>"o"</literal>	with %GDK_CONTROL_MASK is equivalent to <literal>"&lt;ontrol&gt;O"</literal>.      </para>      <programlisting>/* Normal items */static const GtkActionEntry entries[] = {  { "FileMenu", NULL, "_File" },  { "ViewMenu", NULL, "_View" },  { "Open", GTK_STOCK_OPEN, "_Open", "&lt;control&gt;O", "Open a file", open_action_callback },  { "Exit", GTK_STOCK_QUIT, "E_xit", "&lt;control&gt;Q", "Exit the program", exit_action_callback },  { "ZoomIn", GTK_STOCK_ZOOM_IN, "Zoom _In", "plus", "Zoom into the image", zoom_in_action_callback },  { "ZoomOut", GTK_STOCK_ZOOM_OUT, "Zoom _Out", "minus", "Zoom away from the image", zoom_out_action_callback },};/* Toggle items */static const GtkToggleActionEntry toggle_entries[] = {  { "FullScreen", NULL, "_Full Screen", "F11", "Switch between full screen and windowed mode", full_screen_action_callback, FALSE }};/* Radio items */static const GtkRadioActionEntry radio_entries[] = {  { "HighQuality", "my-stock-high-quality", "_High Quality", NULL, "Display images in high quality, slow mode", 0 },  { "NormalQuality", "my-stock-normal-quality", "_Normal Quality", NULL, "Display images in normal quality", 1 },  { "LowQuality", "my-stock-low-quality", "_Low Quality", NULL, "Display images in low quality, fast mode", 2 }};      </programlisting>    </example>    <example id="gnomeuiinfo-xml">      <title>XML Description</title>      <para>	After extracting the actions, you will need to create an XML	description of the actual layout of your menus and toolbars	for use with #GtkUIManager. The following code shows a simple         menu bar that corresponds to the <link linkend="gnomeuiinfo-example">previous	example</link>.  Note that the <guimenu>File</guimenu> and	<guimenu>View</guimenu> menus have their names specified in	the <link linkend="gnomeuiinfo-action-entries">action	entries</link>, not in the XML itself.  This is because the	XML description only contains <emphasis>identifiers</emphasis>	for the items in the GUI, rather than human-readable names.      </para>      <programlisting>static const char *ui_description ="&lt;ui&gt;""  &lt;menubar name='MainMenu'&gt;""    &lt;menu action='FileMenu'&gt;""      &lt;menuitem action='Open'/&gt;""      &lt;menuitem action='Exit'/&gt;""    &lt;/menu&gt;""    &lt;menu action='ViewMenu'&gt;""      &lt;menuitem action='ZoomIn'/&gt;""      &lt;menuitem action='ZoomOut'/&gt;""      &lt;separator/&gt;""      &lt;menuitem action='FullScreen'/&gt;""      &lt;separator/&gt;""      &lt;menuitem action='HighQuality'/&gt;""      &lt;menuitem action='NormalQuality'/&gt;""      &lt;menuitem action='LowQuality'/&gt;""    &lt;/menu&gt;""  &lt;/menubar&gt;""&lt;/ui&gt;";      </programlisting>    </example>    <example id="gnomeuiinfo-code">      <title>Creating the Menu Bar</title>      <para>	In this last example, we will create a #GtkActionGroup based on the	<link linkend="gnomeuiinfo-action-entries">action entries</link>         we created above.  We will then create a #GtkUIManager with the <link	linkend="gnomeuiinfo-xml">XML description</link> of the menu	layout.  We will also extract the accelerator group and the	widgets from the #GtkUIManager put them into a window.      </para>      <programlisting>GtkWidget *window;GtkWidget *vbox;GtkWidget *menubar;GtkActionGroup *action_group;GtkUIManager *ui_manager;GtkAccelGroup *accel_group;GError *error;register_my_stock_icons (<!-- -->);window = gtk_window_new (GTK_WINDOW_TOPLEVEL);vbox = gtk_vbox_new (FALSE, 0);gtk_container_add (GTK_CONTAINER (window), vbox);action_group = gtk_action_group_new ("MenuActions");gtk_action_group_add_actions (action_group, entries, G_N_ELEMENTS (entries), window);gtk_action_group_add_toggle_actions (action_group, toggle_entries, G_N_ELEMENTS (toggle_entries), window);gtk_action_group_add_radio_actions (action_group, radio_entries, G_N_ELEMENTS (radio_entries), 0, radio_action_callback, window);ui_manager = gtk_ui_manager_new (<!-- -->);gtk_ui_manager_insert_action_group (ui_manager, action_group, 0);accel_group = gtk_ui_manager_get_accel_group (ui_manager);gtk_window_add_accel_group (GTK_WINDOW (window), accel_group);error = NULL;if (!gtk_ui_manager_add_ui_from_string (ui_manager, ui_description, -1, &amp;error))  {    g_message ("building menus failed: %s", error-&gt;message);    g_error_free (error);    exit (EXIT_FAILURE);  }menubar = gtk_ui_manager_get_widget (ui_manager, "/MainMenu");gtk_box_pack_start (GTK_BOX (vbox), menubar, FALSE, FALSE, 0);gtk_widget_show_all (window);      </programlisting>    </example>    <example id="gnomeuiinfo-icons">      <title>Registering the icons</title>      <para>	Here we show how the register_my_stock_icons() function        used in the previous example could look like.      </para>      <programlisting>static struct {   gchar *filename;  gchar *stock_id;} stock_icons[] = {  { "high-quality.png", "my-stock-high-quality" },  { "normal-quality.png", "my-stock-normal-quality" },  { "low-quality.png", "my-stock-low-quality" },}; static gint n_stock_icons = G_N_ELEMENTS (stock_icons);static voidregister_my_stock_icons (void){   GtkIconFactory *icon_factory;   GtkIconSet *icon_set;    GtkIconSource *icon_source;   gint i;   icon_factory = gtk_icon_factory_new (<!-- -->);      for (i = 0; i &lt; n_stock_icons; i++)     {      icon_set = gtk_icon_set_new (<!-- -->);      icon_source = gtk_icon_source_new (<!-- -->);      gtk_icon_source_set_filename (icon_source, stock_icons[i].filename);      gtk_icon_set_add_source (icon_set, icon_source);      gtk_icon_source_free (icon_source);      gtk_icon_factory_add (icon_factory, stock_icons[i].stock_id, icon_set);      gtk_icon_set_unref (icon_set);    }   gtk_icon_factory_add_default (icon_factory);    g_object_unref (icon_factory);}      </programlisting>    </example>  </section></chapter><!--Local variables:mode: sgmlsgml-parent-document: ("gtk-docs.sgml" "book" "part" "chapter")End:-->

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -