📄 migrating-gtkassistant.sgml
字号:
<chapter id="gtk-migrating-GtkAssistant"> <chapterinfo> <author> <firstname>Carlos</firstname> <surname>Garnacho</surname> <affiliation> <address> <email>carlosg@gnome.org</email> </address> </affiliation> </author> </chapterinfo> <title>Migrating from GnomeDruid to GtkAssistant</title> <para> Since version 2.10, GTK+ provides the GtkAssistant widget as a replacement for the <structname>GnomeDruid</structname> widget in the libgnomeui library. </para> <para> Conceptually, both <structname>GtkAssistant</structname> and <structname>GnomeDruid</structname> do the same task, but there are several areas where the API has been completely redesigned, so this chapter covers the main changes between both widgets. </para> <section id="inserting-pages"> <title>Inserting pages</title> <para> <structname>GnomeDruid</structname> was implemented as a container for <structname>GnomeDruidPage</structname> abstract objects, which are implemented by the <structname>GnomeDruidPageEdge</structname> and <structname>GnomeDruidPageStandard</structname> widgets. Instead, <structname>GtkAssistant</structname> allows any widget to be a page, and implements per-page settings (such as page type or title) as child properties. So instead of: </para> <programlisting>/* Page 1 */page = gnome_druid_page_edge_new (GNOME_EDGE_START);gnome_druid_page_edge_set_test (GNOME_DRUID_PAGE_EDGE (page), "Welcome to the assistant, it will make your life easier");gtk_widget_show (page);gnome_druid_append_page (GNOME_DRUID (druid), GNOME_DRUID_PAGE (page));/* Page 2 */page = gnome_druid_page_standard_new ();gtk_container_add (GTK_CONTAINER (GNOME_DRUID_PAGE_STANDARD (page)->vbox, create_page1 ());gtk_widget_show_all (page);gnome_druid_append_page (GNOME_DRUID (druid), GNOME_DRUID_PAGE (page));/* Page 3 */page = gnome_druid_page_edge_new (GNOME_EDGE_FINISH);gnome_druid_page_edge_set_test (GNOME_DRUID_PAGE_EDGE (page), "Now you are done, your life is easier");gtk_widget_show (page);gnome_druid_append_page (GNOME_DRUID (druid), GNOME_DRUID_PAGE (page)); </programlisting> <para> You have to write: </para> <programlisting>gtk_assistant_append_page (GTK_ASSISTANT (assistant), gtk_label_new ("Welcome to the assistant, it will make your life easier"));gtk_assistant_append_page (GTK_ASSISTANT (assistant), create_page1 ());gtk_assistant_append_page (GTK_ASSISTANT (assistant), gtk_label_new ("Now you are done, your life is easier"); </programlisting> </section> <section id="decorating-the-assistant-pages"> <title>Decorating the assistant pages</title> <para> To decorate your assistant pages, <structname>GtkAssistant</structname> provides similar functions to <structname>GnomeDruid</structname>, so you have to transform code like this: </para> <programlisting>gnome_druid_page_edge_set_title (GNOME_DRUID_PAGE_EDGE (page), "Welcome");gnome_druid_page_edge_set_logo (GNOME_DRUID_PAGE_EDGE (page), logo_pixbuf);gnome_druid_page_edge_set_watermark (GNOME_DRUID_PAGE_EDGE (page), watermark_pixbuf); </programlisting> <para> Into this: </para> <programlisting>gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page_widget, "Welcome");gtk_assistant_set_page_header_image (GTK_ASSISTANT (assistant), page_widget, logo_pixbuf);gtk_assistant_set_page_side_image (GTK_ASSISTANT (assistant), page_widget, watermark_pixbuf); </programlisting> <para> Where page_widget is the widget used as a page. </para> </section> <section id="setting-the-page-flow"> <title>Setting the page flow</title> <para> Here is the area where <structname>GtkAssistant</structname> and <structname>GnomeDruid</structname> differ the most. While <structname>GnomeDruid</structname> used the "next" and "back" signals from the <structname>GnomeDruidPage</structname>, <structname>GtkAssistant</structname> uses the following techniques: </para> <itemizedlist> <listitem> <para>gtk_assistant_set_forward_page_func (): Allows to define a GtkAssistantPageFunc to let the assistant know which will be the following page given the current page.</para> </listitem> <listitem> <para>gtk_assistant_set_page_complete (): Lets the assistant know whether the specified page is complete or not, updating buttons state accordingly.</para> </listitem> <listitem> <para>gtk_assistant_set_page_type (): Lets the assistant know the page role and update the buttons state accordingly. Pages can have the following roles:</para> <simplelist> <member>Intro</member> <member>Content</member> <member>Progress</member> <member>Confirmation</member> <member>Summary</member> </simplelist> </listitem> </itemizedlist> <para> A sample GtkAssistantPageFunc could look like this: </para> <programlisting>static gintforward_page_function (gint current_page, gpointer data){ switch (current_page) { case 0: return 1; case 1: if (check_page1_data ()) return 2; else return 3; case 2: return 3; default: return -1; }} </programlisting> </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 + -