]> Pileus Git - ~andy/gtk/commitdiff
GtkAssistant: Add custom page type
authorBastien Nocera <hadess@hadess.net>
Sat, 30 Oct 2010 19:12:58 +0000 (20:12 +0100)
committerBastien Nocera <hadess@hadess.net>
Sun, 31 Oct 2010 16:08:46 +0000 (16:08 +0000)
The custom page type will not show any buttons by default, and
it is left to the application to add its own buttons instead.

The _next_page() and _previous_page() functions can be used
for the back and forward buttons used by the application.

https://bugzilla.gnome.org/show_bug.cgi?id=576498

gtk/gtk.symbols
gtk/gtkassistant.c
gtk/gtkassistant.h

index 26b99be38e2d9db7e33980a9b901fcbd525575be..cd88fdaf0b7c2538edeec655eda173b26f5db6d9 100644 (file)
@@ -262,6 +262,8 @@ gtk_application_remove_window
 #if IN_FILE(__GTK_ASSISTANT_C__)
 gtk_assistant_get_type G_GNUC_CONST
 gtk_assistant_new
+gtk_assistant_next_page
+gtk_assistant_previous_page
 gtk_assistant_get_current_page
 gtk_assistant_set_current_page
 gtk_assistant_get_n_pages
index 10241a399f18cbbd30f8ec38127756203bb7a101..d5ceb8286ccf666d128ac072a6d63c6f2a872cbf 100644 (file)
@@ -590,13 +590,22 @@ set_assistant_buttons_state (GtkAssistant *assistant)
       gtk_widget_hide (priv->last);
       compute_progress_state (assistant);
       break;
+    case GTK_ASSISTANT_PAGE_CUSTOM:
+      gtk_widget_hide (priv->cancel);
+      gtk_widget_hide (priv->back);
+      gtk_widget_hide (priv->forward);
+      gtk_widget_hide (priv->apply);
+      gtk_widget_hide (priv->last);
+      gtk_widget_hide (priv->close);
+      break;
     default:
       g_assert_not_reached ();
     }
 
   if (priv->committed)
     gtk_widget_hide (priv->cancel);
-  else if (priv->current_page->type == GTK_ASSISTANT_PAGE_SUMMARY)
+  else if (priv->current_page->type == GTK_ASSISTANT_PAGE_SUMMARY ||
+           priv->current_page->type == GTK_ASSISTANT_PAGE_CUSTOM)
     gtk_widget_hide (priv->cancel);
   else
     gtk_widget_show (priv->cancel);
@@ -720,34 +729,14 @@ static void
 on_assistant_forward (GtkWidget    *widget,
                       GtkAssistant *assistant)
 {
-  if (!compute_next_step (assistant))
-    g_critical ("Page flow is broken, you may want to end it with a page of "
-               "type GTK_ASSISTANT_PAGE_CONFIRM or GTK_ASSISTANT_PAGE_SUMMARY");
+  gtk_assistant_next_page (assistant);
 }
 
 static void
 on_assistant_back (GtkWidget    *widget,
                    GtkAssistant *assistant)
 {
-  GtkAssistantPrivate *priv = assistant->priv;
-  GtkAssistantPage *page_info;
-  GSList *page_node;
-
-  /* skip the progress pages when going back */
-  do
-    {
-      page_node = priv->visited_pages;
-
-      g_return_if_fail (page_node != NULL);
-
-      priv->visited_pages = priv->visited_pages->next;
-      page_info = (GtkAssistantPage *) page_node->data;
-      g_slist_free_1 (page_node);
-    }
-  while (page_info->type == GTK_ASSISTANT_PAGE_PROGRESS ||
-        !gtk_widget_get_visible (page_info->page));
-
-  set_current_page (assistant, page_info);
+  gtk_assistant_previous_page (assistant);
 }
 
 static void
@@ -1684,6 +1673,73 @@ gtk_assistant_set_current_page (GtkAssistant *assistant,
   set_current_page (assistant, page);
 }
 
+/**
+ * gtk_assistant_next_page:
+ * @assistant: a #GtkAssistant
+ *
+ * Navigate to the next page. It is a programming
+ *  error to call this function if there is no next page.
+ *
+ * This function is for use when creating pages of the
+ *  #GTK_ASSISTANT_PAGE_CUSTOM type.
+ *
+ * Since: 3.0
+ **/
+void
+gtk_assistant_next_page (GtkAssistant *assistant)
+{
+  GtkAssistantPrivate *priv;
+
+  g_return_if_fail (GTK_IS_ASSISTANT (assistant));
+
+  priv = assistant->priv;
+
+  if (!compute_next_step (assistant))
+    g_critical ("Page flow is broken, you may want to end it with a page of "
+               "type GTK_ASSISTANT_PAGE_CONFIRM or GTK_ASSISTANT_PAGE_SUMMARY");
+}
+
+/**
+ * gtk_assistant_previous_page:
+ * @assistant: a #GtkAssistant
+ *
+ * Navigate to the previous visited page. It is a programming
+ *  error to call this function if no previous page is
+ *  available.
+ *
+ * This function is for use when creating pages of the
+ *  #GTK_ASSISTANT_PAGE_CUSTOM type.
+ *
+ * Since: 3.0
+ **/
+void
+gtk_assistant_previous_page (GtkAssistant *assistant)
+{
+  GtkAssistantPrivate *priv;
+  GtkAssistantPage *page_info;
+  GSList *page_node;
+
+  g_return_if_fail (GTK_IS_ASSISTANT (assistant));
+
+  priv = assistant->priv;
+
+  /* skip the progress pages when going back */
+  do
+    {
+      page_node = priv->visited_pages;
+
+      g_return_if_fail (page_node != NULL);
+
+      priv->visited_pages = priv->visited_pages->next;
+      page_info = (GtkAssistantPage *) page_node->data;
+      g_slist_free_1 (page_node);
+    }
+  while (page_info->type == GTK_ASSISTANT_PAGE_PROGRESS ||
+        !gtk_widget_get_visible (page_info->page));
+
+  set_current_page (assistant, page_info);
+}
+
 /**
  * gtk_assistant_get_n_pages:
  * @assistant: a #GtkAssistant
index d745b50cca02ace70f53b52f7553f05f07774401..ea3ae8168da5f28c02481a5566bada1a8f463f42 100644 (file)
@@ -55,6 +55,9 @@ G_BEGIN_DECLS
  * @GTK_ASSISTANT_PAGE_PROGRESS: Used for tasks that take a long time to
  *  complete, blocks the assistant until the page is marked as complete.
  *   Only the back button will be shown.
+ * @GTK_ASSISTANT_PAGE_CUSTOM: Used for when other page types are not
+ *  appropriate. No buttons will be shown, and the application must
+ *  add its own buttons through gtk_assistant_add_action_widget().
  *
  * An enum for determining the page role inside the #GtkAssistant. It's
  * used to handle buttons sensitivity and visibility.
@@ -72,7 +75,8 @@ typedef enum
   GTK_ASSISTANT_PAGE_INTRO,
   GTK_ASSISTANT_PAGE_CONFIRM,
   GTK_ASSISTANT_PAGE_SUMMARY,
-  GTK_ASSISTANT_PAGE_PROGRESS
+  GTK_ASSISTANT_PAGE_PROGRESS,
+  GTK_ASSISTANT_PAGE_CUSTOM
 } GtkAssistantPageType;
 
 typedef struct _GtkAssistant        GtkAssistant;
@@ -120,6 +124,8 @@ typedef gint (*GtkAssistantPageFunc) (gint current_page, gpointer data);
 
 GType                 gtk_assistant_get_type              (void) G_GNUC_CONST;
 GtkWidget            *gtk_assistant_new                   (void);
+void                  gtk_assistant_next_page             (GtkAssistant         *assistant);
+void                  gtk_assistant_previous_page         (GtkAssistant         *assistant);
 gint                  gtk_assistant_get_current_page      (GtkAssistant         *assistant);
 void                  gtk_assistant_set_current_page      (GtkAssistant         *assistant,
                                                           gint                  page_num);