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

📄 migrating-gtkcombobox.sgml

📁 linux下电话本所依赖的一些图形库
💻 SGML
字号:
<chapter id="gtk-migrating-GtkComboBox">  <title>Migrating from GtkOptionMenu and GtkCombo to GtkComboBox and GtkComboBoxEntry</title>  <para>    Prior to 2.4, GTK+ offered two widgets for the task of selecting one    item from a list of options.     <link linkend="GtkOptionMenu">GtkOptionMenu</link> presents the list of     options as a menu while <link linkend="GtkCombo">GtkCombo</link> presents     them in a Windows-style list popup. The only difference between the two     is that a <link linkend="GtkCombo">GtkCombo</link> allows to manually    edit the selected value, while the     <link linkend="GtkOptionMenu">GtkOptionMenu</link> does not.  </para>   <para>    In GTK+ 2.4, a unified API for list selection was introduced, with     <link linkend="GtkComboBox">GtkComboBox</link> for the non-editable case     and <link linkend="GtkComboBoxEntry">GtkComboBoxEntry</link> for the     editable case.     The selection of the display style &mdash; menu or list &mdash;    is no longer done at the API level, but has been made themeable via    the style property     <link linkend="GtkComboBox--appearance">GtkComboBox::appearance</link>.  </para>  <section id="migrating-GtkOptionMenu">    <title>Migrating from GtkOptionMenu to GtkComboBox</title>        <para>      Here is an example of a simple, but typical use of       <link linkend="GtkOptionMenu">GtkOptionMenu</link>:      <informalexample><programlisting>GtkWidget *option_menu, *menu, *menu_item;option_menu = gtk_option_menu_new ();      menu = gtk_menu_new ();menu_item = gtk_menu_item_new_with_label ("First Item");gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);gtk_widget_show (menu_item);menu_item = gtk_menu_item_new_with_label ("Second Item");gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);gtk_widget_show (menu_item);menu_item = gtk_menu_item_new_with_label ("Third Item");gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);gtk_widget_show (menu_item);gtk_option_menu_set_menu (GTK_OPTION_MENU (option_menu), menu);      </programlisting></informalexample>      In order to react to the user's selection, connect to the "changed"      signal on the option menu and use <link linkend="gtk-option-menu-get-history"><function>gtk_option_menu_get_history()</function></link>      to retrieve the index of the selected item.    </para>    <para>      And here is how it would be done with a       <link linkend="GtkComboBox">GtkComboBox</link>:      <informalexample><programlisting>GtkWidget *combo_box;combo_box = gtk_combo_box_new_text ();gtk_combo_box_append_text (GTK_COMBO_BOX (combo_box), "First Item");gtk_combo_box_append_text (GTK_COMBO_BOX (combo_box), "Second Item");gtk_combo_box_append_text (GTK_COMBO_BOX (combo_box), "Third Item");      </programlisting></informalexample>      In order to react to the user's selection, connect to the "changed"      signal on the combo box and use <link linkend="gtk-combo-box-get-active"><function>gtk_combo_box_get_active()</function></link>      to retrieve the index of the selected item.    </para>    <para>      A slightly more complex example involving images:      <informalexample><programlisting>GtkWidget *option_menu, *menu, *menu_item;option_menu = gtk_option_menu_new ();      menu = gtk_menu_new ();menu_item = gtk_image_menu_item_new_with_label ("First Item");gtk_image_menu_item_set_image (gtk_image_new_from_pixbuf (pixbuf1));gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);gtk_widget_show (menu_item);menu_item = gtk_image_menu_item_new_with_label ("Second Item");gtk_image_menu_item_set_image (gtk_image_new_from_pixbuf (pixbuf2));gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);gtk_widget_show (menu_item);menu_item = gtk_image_menu_item_new_with_label ("Third Item");gtk_image_menu_item_set_image (gtk_image_new_from_pixbuf (pixbuf3));gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);gtk_widget_show (menu_item);gtk_option_menu_set_menu (GTK_OPTION_MENU (option_menu), menu);      </programlisting></informalexample>    </para>    <para>      can be done using a <link linkend="GtkComboBox">GtkComboBox</link>      as follows:      <informalexample><programlisting>GtkListStore *store;GtkTreeIter iter;GtkCellRenderer *renderer;GtkWidget *combo_box;store = gtk_list_store_new (2, GDK_TYPE_PIXBUF, G_TYPE_STRING);gtk_list_store_append (store, &amp;iter);gtk_list_store_set (store, &amp;iter, 0, pixbuf1, 1, "First Item", -1);gtk_list_store_append (store, &amp;iter);gtk_list_store_set (store, &amp;iter, 0, pixbuf2, 1, "Second Item", -1);gtk_list_store_append (store, &amp;iter);gtk_list_store_set (store, &amp;iter, 0, pixbuf3, 1, "Third Item", -1);combo_box = gtk_combo_box_new_with_model (GTK_TREE_MODEL (store));renderer = gtk_cell_renderer_pixbuf_new ();gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo_box), renderer, FALSE);gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo_box), renderer,                                "pixbuf", 0,                                NULL);renderer = gtk_cell_renderer_text_new ();gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo_box), renderer, TRUE);gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo_box), renderer,                                "text", 1,                                NULL);      </programlisting></informalexample>    </para>  </section>  <section id="migrating-GtkCombo">    <title>Migrating from GtkCombo to GtkComboBoxEntry</title>    <para>      Here is an example of a simple, but typical use of a      <link linkend="GtkCombo">GtkCombo</link>:      <informalexample><programlisting>GtkWidget *combo;GList *items = NULL;items = g_list_append (items, "First Item");items = g_list_append (items, "Second Item");items = g_list_append (items, "Third Item");combo = gtk_combo_new ();gtk_combo_set_popdown_strings (GTK_COMBO (combo), items);      </programlisting></informalexample>      In order to react to the user's selection, connect to the "changed"      signal on the combo and use       <literal>gtk_entry_get_text (GTK_ENTRY (combo->entry))</literal>      to retrieve the selected text.    </para>    <para>      And here is how it would be done using <link linkend="GtkComboBoxEntry">GtkComboBoxEntry</link>:      <informalexample><programlisting>combo_box = gtk_combo_box_entry_new_text ();gtk_combo_box_append_text (GTK_COMBO_BOX (combo_box), "First Item");gtk_combo_box_append_text (GTK_COMBO_BOX (combo_box), "Second Item");gtk_combo_box_append_text (GTK_COMBO_BOX (combo_box), "Third Item");      </programlisting></informalexample>      In order to react to the user's selection, connect to the "changed"      signal on the combo and use       <literal>gtk_entry_get_text (GTK_ENTRY (GTK_BIN (combo_box)->child))</literal>      to retrieve the selected text.    </para>  </section>  <section id="new-features-GtkComboBox">    <title>New features</title>    <para>      The new widgets have more to offer than a mere combination of the      features of <link linkend="GtkOptionMenu">GtkOptionMenu</link> and       <link linkend="GtkCombo">GtkCombo</link>. Notable new features       include:      <variablelist>        <varlistentry>          <term>Grid mode</term>          <listitem><para>Sometimes it is preferable to display the available            options not in a linear list, but in a grid. A typical example             would be a "color combo" where the individual items are small 	    square color swatches. The new widgets support gridded display             with the functions             <link linkend="gtk-combo-box-set-wrap-width"><function>gtk_combo_box_set_wrap_width()</function></link>,             <link linkend="gtk-combo-box-set-row-span-column"><function>gtk_combo_box_set_row_span_column()</function></link> and             <link linkend ="gtk-combo-box-set-column-span-column"><function>gtk_combo_box_set_column_span_column()</function></link>.          </para></listitem>        </varlistentry>        <varlistentry>          <term>Display of icons</term>          <listitem><para>An often-heard complaint about           <link linkend="GtkOptionMenu">GtkOptionMenu</link> is that the          icons which appear in the image menu items in its menu are not	  displayed in the button showing the selected item. This limitation          has been removed in <link linkend="GtkComboBox">GtkComboBox</link>;          the selected item appears in the same way as the options in           the popup.          </para></listitem>        </varlistentry>        <varlistentry>          <term>Full tree model power</term>          <listitem><para>            Since the new widgets are built around the same models that are            used for <link linkend="GtkTreeView">GtkTreeView</link>, all of            the powerful machinery of tree models and cell renderers can be             used.          </para></listitem>        </varlistentry>      </variablelist>    </para>  </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 + -