From a351e61c0bc7a8157c51fc0bc2cd1742e439e94a Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Mon, 30 Jan 2006 04:53:53 +0000 Subject: [PATCH] GtkAssistant stuff --- ChangeLog | 11 ++ ChangeLog.pre-2-10 | 11 ++ docs/reference/ChangeLog | 10 ++ docs/reference/gtk/Makefile.am | 3 + docs/reference/gtk/images/assistant.png | Bin 0 -> 11051 bytes docs/reference/gtk/tmpl/gtkassistant.sgml | 35 ++++-- docs/reference/gtk/visual_index.xml | 3 + docs/tools/widgets.c | 29 +++++ gtk/gtkassistant.c | 22 ++-- tests/testassistant.c | 140 +++++++++++++++++++--- 10 files changed, 229 insertions(+), 35 deletions(-) create mode 100644 docs/reference/gtk/images/assistant.png diff --git a/ChangeLog b/ChangeLog index a464d4199d..5e01b21c8f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2006-01-29 Matthias Clasen + + More GtkAssistant work, by Carlos Garnacho. + + * tests/testassistant.c: Additions. + + * gtk/gtkassistant.c: Handle page visibility, other + small fixes. + + * docs/tools/widgets.c: Add GtkAssistant. + 2006-01-28 Behdad Esfahbod * configure.in: If major.minor of required and available glib versions diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index a464d4199d..5e01b21c8f 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,14 @@ +2006-01-29 Matthias Clasen + + More GtkAssistant work, by Carlos Garnacho. + + * tests/testassistant.c: Additions. + + * gtk/gtkassistant.c: Handle page visibility, other + small fixes. + + * docs/tools/widgets.c: Add GtkAssistant. + 2006-01-28 Behdad Esfahbod * configure.in: If major.minor of required and available glib versions diff --git a/docs/reference/ChangeLog b/docs/reference/ChangeLog index 0474f0f78e..6ca23389d1 100644 --- a/docs/reference/ChangeLog +++ b/docs/reference/ChangeLog @@ -1,3 +1,13 @@ +2006-01-29 Matthias Clasen + + * gtk/visual_index.xml: Add GtkAssistant + + * gtk/images/assistant.png: New image. + + * gtk/tmpl/gtkassistant.sgml: More docs, by Carlos Garnacho. + + * gtk/Makefile.am: Add new files. + 2006-01-28 Matthias Clasen * gtk/gtk-sections.txt: Add gtk_link_button_set_uri_hook diff --git a/docs/reference/gtk/Makefile.am b/docs/reference/gtk/Makefile.am index 42d8833932..9bba1a116b 100644 --- a/docs/reference/gtk/Makefile.am +++ b/docs/reference/gtk/Makefile.am @@ -106,6 +106,7 @@ content_files = \ migrating-GtkIconView.sgml \ migrating-GtkAboutDialog.sgml \ migrating-GtkColorButton.sgml \ + migrating-GtkAssistant.sgml \ objects_grouped.sgml \ question_index.sgml \ resources.sgml \ @@ -126,6 +127,7 @@ expand_content_files = \ migrating-GtkIconView.sgml \ migrating-GtkAboutDialog.sgml \ migrating-GtkColorButton.sgml \ + migrating-GtkAssistant.sgml \ tree_widget.sgml \ text_widget.sgml \ question_index.sgml @@ -243,6 +245,7 @@ HTML_IMAGES = \ $(top_srcdir)/gtk/stock-icons/24/gtk-leave-fullscreen.png \ $(top_srcdir)/gtk/stock-icons/24/gtk-info.png \ $(srcdir)/images/accel-label.png \ + $(srcdir)/images/assistant.png \ $(srcdir)/images/button.png \ $(srcdir)/images/check-button.png \ $(srcdir)/images/color-button.png \ diff --git a/docs/reference/gtk/images/assistant.png b/docs/reference/gtk/images/assistant.png new file mode 100644 index 0000000000000000000000000000000000000000..30c9e16caf86382c75863036556af9f91c6f4c37 GIT binary patch literal 11051 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 literal 0 HcmV?d00001 diff --git a/docs/reference/gtk/tmpl/gtkassistant.sgml b/docs/reference/gtk/tmpl/gtkassistant.sgml index 6a1a77e75f..6696e287d4 100644 --- a/docs/reference/gtk/tmpl/gtkassistant.sgml +++ b/docs/reference/gtk/tmpl/gtkassistant.sgml @@ -2,11 +2,13 @@ GtkAssistant -guiding users through multi-step operations +A widget used to guide users through multi-step operations - +A #GtkAssistant is a widget used to represent a generally complex +operation splitted in several steps, guiding the user through its pages +and controlling the page flow to collect the necessary data. @@ -165,12 +167,15 @@ guiding users through multi-step operations - +A function used by gtk_assistant_set_forward_page_func() to know which +is the next page given a current one. It's called both for computing the +next page when the user presses the "forward" button and for handling +the behavior of the "last" button. -@current_page: -@data: -@Returns: +@current_page: The page number used to calculate the next page. +@data: user data. +@Returns: The next page number. @@ -186,14 +191,20 @@ guiding users through multi-step operations - +An enum for determining the page role inside the #GtkAssistant. It's used to +handle buttons sensitivity and visibility. -@GTK_ASSISTANT_PAGE_CONTENT: -@GTK_ASSISTANT_PAGE_INTRO: -@GTK_ASSISTANT_PAGE_CONFIRM: -@GTK_ASSISTANT_PAGE_SUMMARY: -@GTK_ASSISTANT_PAGE_PROGRESS: + +Note that an assistant needs to end its page flow with a page of type GTK_ASSISTANT_PAGE_CONFIRM +or GTK_ASSISTANT_PAGE_SUMMARY to be correct. + + +@GTK_ASSISTANT_PAGE_CONTENT: The page has regular contents. +@GTK_ASSISTANT_PAGE_INTRO: The page contains an introduction to the assistant task. +@GTK_ASSISTANT_PAGE_CONFIRM: The page lets the user confirm or deny the changes. +@GTK_ASSISTANT_PAGE_SUMMARY: The page informs the user of the changes done. +@GTK_ASSISTANT_PAGE_PROGRESS: Used for tasks that take a long time to complete, blocks the assistant until the page is marked as complete. diff --git a/docs/reference/gtk/visual_index.xml b/docs/reference/gtk/visual_index.xml index 48ea8692c5..a8033d3216 100644 --- a/docs/reference/gtk/visual_index.xml +++ b/docs/reference/gtk/visual_index.xml @@ -86,6 +86,9 @@ + + + diff --git a/docs/tools/widgets.c b/docs/tools/widgets.c index a902c4ff3b..f271ccdf04 100644 --- a/docs/tools/widgets.c +++ b/docs/tools/widgets.c @@ -839,6 +839,34 @@ create_image (void) return new_widget_info ("image", vbox, SMALL); } +static WidgetInfo * +create_assistant (void) +{ + GtkWidget *widget; + GtkWidget *page1, *page2; + WidgetInfo *info; + + widget = gtk_assistant_new (); + gtk_window_set_title (GTK_WINDOW (widget), "Assistant"); + + page1 = gtk_label_new ("Assistant"); + gtk_widget_show (page1); + gtk_widget_set_size_request (page1, 300, 140); + gtk_assistant_prepend_page (GTK_ASSISTANT (widget), page1); + gtk_assistant_set_page_title (GTK_ASSISTANT (widget), page1, "Assistant page"); + gtk_assistant_set_page_complete (GTK_ASSISTANT (widget), page1, TRUE); + + page2 = gtk_label_new (NULL); + gtk_widget_show (page2); + gtk_assistant_append_page (GTK_ASSISTANT (widget), page2); + gtk_assistant_set_page_type (GTK_ASSISTANT (widget), page2, GTK_ASSISTANT_PAGE_CONFIRM); + + info = new_widget_info ("assistant", widget, ASIS); + info->include_decorations = TRUE; + + return info; +} + GList * get_all_widgets (void) { @@ -876,6 +904,7 @@ get_all_widgets (void) retval = g_list_prepend (retval, create_colorsel ()); retval = g_list_prepend (retval, create_filesel ()); retval = g_list_prepend (retval, create_fontsel ()); + retval = g_list_prepend (retval, create_assistant ()); return retval; } diff --git a/gtk/gtkassistant.c b/gtk/gtkassistant.c index 1100456166..d13200a7e5 100644 --- a/gtk/gtkassistant.c +++ b/gtk/gtkassistant.c @@ -537,12 +537,14 @@ _set_current_page (GtkAssistant *assistant, if (GTK_WIDGET_VISIBLE (priv->current_page->page) && GTK_WIDGET_MAPPED (assistant)) { + gtk_widget_set_child_visible (priv->current_page->page, TRUE); gtk_widget_map (priv->current_page->page); gtk_widget_map (priv->current_page->title); } if (old_page && GTK_WIDGET_MAPPED (old_page->page)) { + gtk_widget_set_child_visible (old_page->page, FALSE); gtk_widget_unmap (old_page->page); gtk_widget_unmap (old_page->title); } @@ -1161,6 +1163,7 @@ gtk_assistant_map (GtkWidget *widget) _set_assistant_sidebar_image ((GtkAssistant*) widget); g_signal_emit (widget, signals [PREPARE], 0, priv->current_page->page); + gtk_widget_set_child_visible (priv->current_page->page, TRUE); gtk_widget_map (priv->current_page->page); gtk_widget_map (priv->current_page->title); } @@ -1214,13 +1217,14 @@ assistant_paint_colored_box (GtkWidget *widget) { GtkAssistant *assistant = GTK_ASSISTANT (widget); GtkAssistantPrivate *priv = assistant->priv; - gint header_padding, content_padding; + gint border_width, header_padding, content_padding; cairo_t *cr; gint content_x, content_width; gboolean rtl; cr = gdk_cairo_create (widget->window); rtl = (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL); + border_width = gtk_container_get_border_width (GTK_CONTAINER (widget)); gtk_widget_style_get (widget, "header-padding", &header_padding, @@ -1230,14 +1234,15 @@ assistant_paint_colored_box (GtkWidget *widget) /* colored box */ gdk_cairo_set_source_color (cr, &widget->style->bg[GTK_STATE_SELECTED]); cairo_rectangle (cr, - 0, 0, - widget->allocation.width, - widget->allocation.height - priv->action_area->allocation.height); + border_width, + border_width, + widget->allocation.width - 2 * border_width, + widget->allocation.height - priv->action_area->allocation.height - 2 * border_width); cairo_fill (cr); /* content box */ - content_x = content_padding; - content_width = widget->allocation.width - 2 * content_padding; + content_x = content_padding + border_width; + content_width = widget->allocation.width - 2 * content_padding - 2 * border_width; if (GTK_WIDGET_VISIBLE (priv->sidebar_image)) { @@ -1250,9 +1255,9 @@ assistant_paint_colored_box (GtkWidget *widget) cairo_rectangle (cr, content_x, - priv->header_image->allocation.height + content_padding + 2 * header_padding, + priv->header_image->allocation.height + content_padding + 2 * header_padding + border_width, content_width, - widget->allocation.height - priv->action_area->allocation.height - + widget->allocation.height - 2 * border_width - priv->action_area->allocation.height - priv->header_image->allocation.height - 2 * content_padding - 2 * header_padding); cairo_fill (cr); @@ -1616,6 +1621,7 @@ gtk_assistant_insert_page (GtkAssistant *assistant, priv->pages = g_list_insert (priv->pages, page_info, position); + gtk_widget_set_child_visible (page_info->page, FALSE); gtk_widget_set_parent (page_info->page, GTK_WIDGET (assistant)); gtk_widget_set_parent (page_info->title, GTK_WIDGET (assistant)); diff --git a/tests/testassistant.c b/tests/testassistant.c index 231d13a856..c6340e68d4 100644 --- a/tests/testassistant.c +++ b/tests/testassistant.c @@ -31,6 +31,59 @@ get_test_page (const gchar *text) return gtk_label_new (text); } +typedef struct { + GtkAssistant *assistant; + GtkWidget *page; +} PageData; + +static void +complete_cb (GtkWidget *check, + gpointer data) +{ + PageData *pdata = data; + gboolean complete; + + complete = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (check)); + + gtk_assistant_set_page_complete (pdata->assistant, + pdata->page, + complete); +} + + +static void +add_completion_test_page (GtkWidget *assistant, + const gchar *text, + gboolean visible, + gboolean complete) +{ + GtkWidget *page; + GtkWidget *check; + PageData *pdata; + + page = gtk_vbox_new (0, FALSE); + check = gtk_check_button_new_with_label ("Complete"); + + gtk_container_add (GTK_CONTAINER (page), gtk_label_new (text)); + gtk_container_add (GTK_CONTAINER (page), check); + + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), complete); + + pdata = g_new (PageData, 1); + pdata->assistant = GTK_ASSISTANT (assistant); + pdata->page = page; + g_signal_connect (G_OBJECT (check), "toggled", + G_CALLBACK (complete_cb), pdata); + + + if (visible) + gtk_widget_show_all (page); + + gtk_assistant_append_page (GTK_ASSISTANT (assistant), page); + gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, text); + gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, complete); +} + static void cancel_callback (GtkWidget *widget) { @@ -167,18 +220,10 @@ create_generous_assistant (GtkWidget *widget) gtk_assistant_set_page_type (GTK_ASSISTANT (assistant), page, GTK_ASSISTANT_PAGE_INTRO); gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, TRUE); - page = get_test_page ("Content"); - gtk_widget_show (page); - gtk_assistant_append_page (GTK_ASSISTANT (assistant), page); - gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "Content"); - gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, TRUE); + add_completion_test_page (assistant, "Content", TRUE, FALSE); + add_completion_test_page (assistant, "More Content", TRUE, TRUE); + add_completion_test_page (assistant, "Even More Content", TRUE, TRUE); - page = get_test_page ("More content"); - gtk_widget_show (page); - gtk_assistant_append_page (GTK_ASSISTANT (assistant), page); - gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "More content"); - gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, TRUE); - page = get_test_page ("Confirmation"); gtk_widget_show (page); gtk_assistant_append_page (GTK_ASSISTANT (assistant), page); @@ -404,15 +449,80 @@ create_looping_assistant (GtkWidget *widget) } } +static void +create_full_featured_assistant (GtkWidget *widget) +{ + static GtkWidget *assistant = NULL; + + if (!assistant) + { + GtkWidget *page, *button; + GdkPixbuf *pixbuf; + + assistant = gtk_assistant_new (); + gtk_window_set_default_size (GTK_WINDOW (assistant), 400, 300); + + button = gtk_button_new_from_stock (GTK_STOCK_STOP); + gtk_widget_show (button); + gtk_assistant_add_action_widget (GTK_ASSISTANT (assistant), button); + + g_signal_connect (G_OBJECT (assistant), "cancel", + G_CALLBACK (cancel_callback), NULL); + g_signal_connect (G_OBJECT (assistant), "close", + G_CALLBACK (close_callback), NULL); + g_signal_connect (G_OBJECT (assistant), "apply", + G_CALLBACK (apply_callback), NULL); + g_signal_connect (G_OBJECT (assistant), "prepare", + G_CALLBACK (prepare_callback), NULL); + + page = get_test_page ("Page 1"); + gtk_widget_show (page); + gtk_assistant_append_page (GTK_ASSISTANT (assistant), page); + gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "Page 1"); + gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, TRUE); + + /* set a side image */ + pixbuf = gtk_widget_render_icon (page, GTK_STOCK_DIALOG_WARNING, GTK_ICON_SIZE_DIALOG, NULL); + gtk_assistant_set_page_side_image (GTK_ASSISTANT (assistant), page, pixbuf); + + /* set a header image */ + pixbuf = gtk_widget_render_icon (page, GTK_STOCK_DIALOG_INFO, GTK_ICON_SIZE_DIALOG, NULL); + gtk_assistant_set_page_header_image (GTK_ASSISTANT (assistant), page, pixbuf); + + page = get_test_page ("Invisible page"); + gtk_assistant_append_page (GTK_ASSISTANT (assistant), page); + + page = get_test_page ("Page 3"); + gtk_widget_show (page); + gtk_assistant_append_page (GTK_ASSISTANT (assistant), page); + gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "Page 3"); + gtk_assistant_set_page_type (GTK_ASSISTANT (assistant), page, GTK_ASSISTANT_PAGE_CONFIRM); + gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, TRUE); + + /* set a header image */ + pixbuf = gtk_widget_render_icon (page, GTK_STOCK_DIALOG_INFO, GTK_ICON_SIZE_DIALOG, NULL); + gtk_assistant_set_page_header_image (GTK_ASSISTANT (assistant), page, pixbuf); + } + + if (!GTK_WIDGET_VISIBLE (assistant)) + gtk_widget_show (assistant); + else + { + gtk_widget_destroy (assistant); + assistant = NULL; + } +} + struct { gchar *text; void (*func) (GtkWidget *widget); } buttons[] = { - { "simple assistant", create_simple_assistant }, - { "generous assistant", create_generous_assistant }, - { "nonlinear assistant", create_nonlinear_assistant }, - { "looping assistant", create_looping_assistant }, + { "simple assistant", create_simple_assistant }, + { "generous assistant", create_generous_assistant }, + { "nonlinear assistant", create_nonlinear_assistant }, + { "looping assistant", create_looping_assistant }, + { "full featured assistant", create_full_featured_assistant }, }; int