📄 migrating-gnomeuiinfo.html
字号:
{ 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 }} </pre></div></div><br class="example-break"><div class="example"><a name="gnomeuiinfo-action-entries"></a><p class="title"><b>Example 57. <span class="structname">GtkActionEntry</span> Structures</b></p><div class="example-contents"><p> The following code is the set of actions that are present in the <a class="link" href="migrating-gnomeuiinfo.html#gnomeuiinfo-example" title="Example 56. GnomeUIInfo Example">previous example</a>. Note that the toggle and radio entries are separate from normal actions. Also, note that <a class="link" href="GtkActionGroup.html#GtkActionEntry"><span class="type">GtkActionEntry</span></a> structures take key names in the format of <code class="function">gdk_accelerator_parse()</code> rather than key values plus modifiers; you will have to convert these values by hand. For example, <code class="literal">GDK_F11</code> with no modifiers is equivalent to a key name of <code class="literal">"F11"</code>. Likewise, <code class="literal">"o"</code> with <ahref="/usr/share/gtk-doc/html/gdk/gdk-Windows.html#GDK-CONTROL-MASK:CAPS"><code class="literal">GDK_CONTROL_MASK</code></a> is equivalent to <code class="literal">"<ontrol>O"</code>. </p><pre class="programlisting">/* Normal items */static const GtkActionEntry entries[] = { { "FileMenu", NULL, "_File" }, { "ViewMenu", NULL, "_View" }, { "Open", GTK_STOCK_OPEN, "_Open", "<control>O", "Open a file", open_action_callback }, { "Exit", GTK_STOCK_QUIT, "E_xit", "<control>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 }}; </pre></div></div><br class="example-break"><div class="example"><a name="gnomeuiinfo-xml"></a><p class="title"><b>Example 58. XML Description</b></p><div class="example-contents"><p> After extracting the actions, you will need to create an XML description of the actual layout of your menus and toolbars for use with <a class="link" href="GtkUIManager.html" title="GtkUIManager"><span class="type">GtkUIManager</span></a>. The following code shows a simple menu bar that corresponds to the <a class="link" href="migrating-gnomeuiinfo.html#gnomeuiinfo-example" title="Example 56. GnomeUIInfo Example">previous example</a>. Note that the <span class="guimenu">File</span> and <span class="guimenu">View</span> menus have their names specified in the <a class="link" href="migrating-gnomeuiinfo.html#gnomeuiinfo-action-entries" title="Example 57. GtkActionEntry Structures">action entries</a>, not in the XML itself. This is because the XML description only contains <span class="emphasis"><em>identifiers</em></span> for the items in the GUI, rather than human-readable names. </p><pre class="programlisting">static const char *ui_description ="<ui>"" <menubar name='MainMenu'>"" <menu action='FileMenu'>"" <menuitem action='Open'/>"" <menuitem action='Exit'/>"" </menu>"" <menu action='ViewMenu'>"" <menuitem action='ZoomIn'/>"" <menuitem action='ZoomOut'/>"" <separator/>"" <menuitem action='FullScreen'/>"" <separator/>"" <menuitem action='HighQuality'/>"" <menuitem action='NormalQuality'/>"" <menuitem action='LowQuality'/>"" </menu>"" </menubar>""</ui>"; </pre></div></div><br class="example-break"><div class="example"><a name="gnomeuiinfo-code"></a><p class="title"><b>Example 59. Creating the Menu Bar</b></p><div class="example-contents"><p> In this last example, we will create a <a class="link" href="GtkActionGroup.html" title="GtkActionGroup"><span class="type">GtkActionGroup</span></a> based on the <a class="link" href="migrating-gnomeuiinfo.html#gnomeuiinfo-action-entries" title="Example 57. GtkActionEntry Structures">action entries</a> we created above. We will then create a <a class="link" href="GtkUIManager.html" title="GtkUIManager"><span class="type">GtkUIManager</span></a> with the <a class="link" href="migrating-gnomeuiinfo.html#gnomeuiinfo-xml" title="Example 58. XML Description">XML description</a> of the menu layout. We will also extract the accelerator group and the widgets from the <a class="link" href="GtkUIManager.html" title="GtkUIManager"><span class="type">GtkUIManager</span></a> put them into a window. </p><pre class="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, &error)) { g_message ("building menus failed: %s", error->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); </pre></div></div><br class="example-break"><div class="example"><a name="gnomeuiinfo-icons"></a><p class="title"><b>Example 60. Registering the icons</b></p><div class="example-contents"><p> Here we show how the <code class="function">register_my_stock_icons()</code> function used in the previous example could look like. </p><pre class="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 < 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);} </pre></div></div><br class="example-break"></div></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -