Blame tests/testassistant.c

Packit Service fb6fa5
/* 
Packit Service fb6fa5
 * GTK - The GIMP Toolkit
Packit Service fb6fa5
 * Copyright (C) 1999  Red Hat, Inc.
Packit Service fb6fa5
 * Copyright (C) 2002  Anders Carlsson <andersca@gnu.org>
Packit Service fb6fa5
 * Copyright (C) 2003  Matthias Clasen <mclasen@redhat.com>
Packit Service fb6fa5
 * Copyright (C) 2005  Carlos Garnacho Parro <carlosg@gnome.org>
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * All rights reserved.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * This library is free software; you can redistribute it and/or
Packit Service fb6fa5
 * modify it under the terms of the GNU Lesser General Public
Packit Service fb6fa5
 * License as published by the Free Software Foundation; either
Packit Service fb6fa5
 * version 2 of the License, or (at your option) any later version.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * This library is distributed in the hope that it will be useful,
Packit Service fb6fa5
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service fb6fa5
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service fb6fa5
 * Lesser General Public License for more details.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * You should have received a copy of the GNU Lesser General Public
Packit Service fb6fa5
 * License along with this library; if not, write to the
Packit Service fb6fa5
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Packit Service fb6fa5
 * Boston, MA 02111-1307, USA.
Packit Service fb6fa5
 */
Packit Service fb6fa5
Packit Service fb6fa5
#include <gtk/gtk.h>
Packit Service fb6fa5
Packit Service fb6fa5
static GtkWidget*
Packit Service fb6fa5
get_test_page (const gchar *text)
Packit Service fb6fa5
{
Packit Service fb6fa5
  return gtk_label_new (text);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
typedef struct {
Packit Service fb6fa5
  GtkAssistant *assistant;
Packit Service fb6fa5
  GtkWidget    *page;
Packit Service fb6fa5
} PageData;
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
complete_cb (GtkWidget *check, 
Packit Service fb6fa5
	     gpointer   data)
Packit Service fb6fa5
{
Packit Service fb6fa5
  PageData *pdata = data;
Packit Service fb6fa5
  gboolean complete;
Packit Service fb6fa5
Packit Service fb6fa5
  complete = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (check));
Packit Service fb6fa5
Packit Service fb6fa5
  gtk_assistant_set_page_complete (pdata->assistant,
Packit Service fb6fa5
				   pdata->page,
Packit Service fb6fa5
				   complete);
Packit Service fb6fa5
}
Packit Service fb6fa5
	     
Packit Service fb6fa5
static GtkWidget *
Packit Service fb6fa5
add_completion_test_page (GtkWidget   *assistant,
Packit Service fb6fa5
			  const gchar *text, 
Packit Service fb6fa5
			  gboolean     visible,
Packit Service fb6fa5
			  gboolean     complete)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GtkWidget *page;
Packit Service fb6fa5
  GtkWidget *check;
Packit Service fb6fa5
  PageData *pdata;
Packit Service fb6fa5
Packit Service fb6fa5
  page = gtk_vbox_new (0, FALSE);
Packit Service fb6fa5
  check = gtk_check_button_new_with_label ("Complete");
Packit Service fb6fa5
Packit Service fb6fa5
  gtk_container_add (GTK_CONTAINER (page), gtk_label_new (text));
Packit Service fb6fa5
  gtk_container_add (GTK_CONTAINER (page), check);
Packit Service fb6fa5
  
Packit Service fb6fa5
  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), complete);
Packit Service fb6fa5
Packit Service fb6fa5
  pdata = g_new (PageData, 1);
Packit Service fb6fa5
  pdata->assistant = GTK_ASSISTANT (assistant);
Packit Service fb6fa5
  pdata->page = page;
Packit Service fb6fa5
  g_signal_connect (G_OBJECT (check), "toggled", 
Packit Service fb6fa5
		    G_CALLBACK (complete_cb), pdata);
Packit Service fb6fa5
Packit Service fb6fa5
Packit Service fb6fa5
  if (visible)
Packit Service fb6fa5
    gtk_widget_show_all (page);
Packit Service fb6fa5
Packit Service fb6fa5
  gtk_assistant_append_page (GTK_ASSISTANT (assistant), page);
Packit Service fb6fa5
  gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, text);
Packit Service fb6fa5
  gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, complete);
Packit Service fb6fa5
Packit Service fb6fa5
  return page;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
cancel_callback (GtkWidget *widget)
Packit Service fb6fa5
{
Packit Service fb6fa5
  g_print ("cancel\n");
Packit Service fb6fa5
Packit Service fb6fa5
  gtk_widget_hide (widget);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
close_callback (GtkWidget *widget)
Packit Service fb6fa5
{
Packit Service fb6fa5
  g_print ("close\n");
Packit Service fb6fa5
Packit Service fb6fa5
  gtk_widget_hide (widget);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
apply_callback (GtkWidget *widget)
Packit Service fb6fa5
{
Packit Service fb6fa5
  g_print ("apply\n");
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static gboolean
Packit Service fb6fa5
progress_timeout (GtkWidget *assistant)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GtkWidget *page, *progress;
Packit Service fb6fa5
  gint current_page;
Packit Service fb6fa5
  gdouble value;
Packit Service fb6fa5
Packit Service fb6fa5
  current_page = gtk_assistant_get_current_page (GTK_ASSISTANT (assistant));
Packit Service fb6fa5
  page = gtk_assistant_get_nth_page (GTK_ASSISTANT (assistant), current_page);
Packit Service fb6fa5
  progress = GTK_BIN (page)->child;
Packit Service fb6fa5
Packit Service fb6fa5
  value  = gtk_progress_bar_get_fraction (GTK_PROGRESS_BAR (progress));
Packit Service fb6fa5
  value += 0.1;
Packit Service fb6fa5
  gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progress), value);
Packit Service fb6fa5
Packit Service fb6fa5
  if (value >= 1.0)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, TRUE);
Packit Service fb6fa5
      return FALSE;
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  return TRUE;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
prepare_callback (GtkWidget *widget, GtkWidget *page)
Packit Service fb6fa5
{
Packit Service fb6fa5
  if (GTK_IS_LABEL (page))
Packit Service fb6fa5
    g_print ("prepare: %s\n", gtk_label_get_text (GTK_LABEL (page)));
Packit Service fb6fa5
  else if (gtk_assistant_get_page_type (GTK_ASSISTANT (widget), page) == GTK_ASSISTANT_PAGE_PROGRESS)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      GtkWidget *progress;
Packit Service fb6fa5
Packit Service fb6fa5
      progress = GTK_BIN (page)->child;
Packit Service fb6fa5
      gtk_assistant_set_page_complete (GTK_ASSISTANT (widget), page, FALSE);
Packit Service fb6fa5
      gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progress), 0.0);
Packit Service fb6fa5
      gdk_threads_add_timeout (300, (GSourceFunc) progress_timeout, widget);
Packit Service fb6fa5
    }
Packit Service fb6fa5
  else
Packit Service fb6fa5
    g_print ("prepare: %d\n", gtk_assistant_get_current_page (GTK_ASSISTANT (widget)));
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
create_simple_assistant (GtkWidget *widget)
Packit Service fb6fa5
{
Packit Service fb6fa5
  static GtkWidget *assistant = NULL;
Packit Service fb6fa5
Packit Service fb6fa5
  if (!assistant)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      GtkWidget *page;
Packit Service fb6fa5
Packit Service fb6fa5
      assistant = gtk_assistant_new ();
Packit Service fb6fa5
      gtk_window_set_default_size (GTK_WINDOW (assistant), 400, 300);
Packit Service fb6fa5
Packit Service fb6fa5
      g_signal_connect (G_OBJECT (assistant), "cancel",
Packit Service fb6fa5
			G_CALLBACK (cancel_callback), NULL);
Packit Service fb6fa5
      g_signal_connect (G_OBJECT (assistant), "close",
Packit Service fb6fa5
			G_CALLBACK (close_callback), NULL);
Packit Service fb6fa5
      g_signal_connect (G_OBJECT (assistant), "apply",
Packit Service fb6fa5
			G_CALLBACK (apply_callback), NULL);
Packit Service fb6fa5
      g_signal_connect (G_OBJECT (assistant), "prepare",
Packit Service fb6fa5
			G_CALLBACK (prepare_callback), NULL);
Packit Service fb6fa5
Packit Service fb6fa5
      page = get_test_page ("Page 1");
Packit Service fb6fa5
      gtk_widget_show (page);
Packit Service fb6fa5
      gtk_assistant_append_page (GTK_ASSISTANT (assistant), page);
Packit Service fb6fa5
      gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "Page 1");
Packit Service fb6fa5
      gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, TRUE);
Packit Service fb6fa5
Packit Service fb6fa5
      page = get_test_page ("Page 2");
Packit Service fb6fa5
      gtk_widget_show (page);
Packit Service fb6fa5
      gtk_assistant_append_page (GTK_ASSISTANT (assistant), page);
Packit Service fb6fa5
      gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "Page 2");
Packit Service fb6fa5
      gtk_assistant_set_page_type  (GTK_ASSISTANT (assistant), page, GTK_ASSISTANT_PAGE_CONFIRM);
Packit Service fb6fa5
      gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, TRUE);
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  if (!gtk_widget_get_visible (assistant))
Packit Service fb6fa5
    gtk_widget_show (assistant);
Packit Service fb6fa5
  else
Packit Service fb6fa5
    {
Packit Service fb6fa5
      gtk_widget_destroy (assistant);
Packit Service fb6fa5
      assistant = NULL;
Packit Service fb6fa5
    }
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
visible_cb (GtkWidget *check, 
Packit Service fb6fa5
	    gpointer   data)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GtkWidget *page = data;
Packit Service fb6fa5
  gboolean visible;
Packit Service fb6fa5
Packit Service fb6fa5
  visible = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (check));
Packit Service fb6fa5
Packit Service fb6fa5
  g_object_set (G_OBJECT (page), "visible", visible, NULL);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
create_generous_assistant (GtkWidget *widget)
Packit Service fb6fa5
{
Packit Service fb6fa5
  static GtkWidget *assistant = NULL;
Packit Service fb6fa5
Packit Service fb6fa5
  if (!assistant)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      GtkWidget *page, *next, *check;
Packit Service fb6fa5
      PageData  *pdata;
Packit Service fb6fa5
Packit Service fb6fa5
      assistant = gtk_assistant_new ();
Packit Service fb6fa5
      gtk_window_set_default_size (GTK_WINDOW (assistant), 400, 300);
Packit Service fb6fa5
Packit Service fb6fa5
      g_signal_connect (G_OBJECT (assistant), "cancel",
Packit Service fb6fa5
			G_CALLBACK (cancel_callback), NULL);
Packit Service fb6fa5
      g_signal_connect (G_OBJECT (assistant), "close",
Packit Service fb6fa5
			G_CALLBACK (close_callback), NULL);
Packit Service fb6fa5
      g_signal_connect (G_OBJECT (assistant), "apply",
Packit Service fb6fa5
			G_CALLBACK (apply_callback), NULL);
Packit Service fb6fa5
      g_signal_connect (G_OBJECT (assistant), "prepare",
Packit Service fb6fa5
			G_CALLBACK (prepare_callback), NULL);
Packit Service fb6fa5
Packit Service fb6fa5
      page = get_test_page ("Introduction");
Packit Service fb6fa5
      gtk_widget_show (page);
Packit Service fb6fa5
      gtk_assistant_append_page (GTK_ASSISTANT (assistant), page);
Packit Service fb6fa5
      gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "Introduction");
Packit Service fb6fa5
      gtk_assistant_set_page_type  (GTK_ASSISTANT (assistant), page, GTK_ASSISTANT_PAGE_INTRO);
Packit Service fb6fa5
      gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, TRUE);
Packit Service fb6fa5
Packit Service fb6fa5
      page = add_completion_test_page (assistant, "Content", TRUE, FALSE);
Packit Service fb6fa5
      next = add_completion_test_page (assistant, "More Content", TRUE, TRUE);
Packit Service fb6fa5
Packit Service fb6fa5
      check = gtk_check_button_new_with_label ("Next page visible");
Packit Service fb6fa5
      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE);
Packit Service fb6fa5
      g_signal_connect (G_OBJECT (check), "toggled", 
Packit Service fb6fa5
			G_CALLBACK (visible_cb), next);
Packit Service fb6fa5
      gtk_widget_show (check);
Packit Service fb6fa5
      gtk_container_add (GTK_CONTAINER (page), check);
Packit Service fb6fa5
      
Packit Service fb6fa5
      add_completion_test_page (assistant, "Even More Content", TRUE, TRUE);
Packit Service fb6fa5
Packit Service fb6fa5
      page = get_test_page ("Confirmation");
Packit Service fb6fa5
      gtk_widget_show (page);
Packit Service fb6fa5
      gtk_assistant_append_page (GTK_ASSISTANT (assistant), page);
Packit Service fb6fa5
      gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "Confirmation");
Packit Service fb6fa5
      gtk_assistant_set_page_type  (GTK_ASSISTANT (assistant), page, GTK_ASSISTANT_PAGE_CONFIRM);
Packit Service fb6fa5
      gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, TRUE);
Packit Service fb6fa5
Packit Service fb6fa5
      page = gtk_alignment_new (0.5, 0.5, 0.9, 0.0);
Packit Service fb6fa5
      gtk_container_add (GTK_CONTAINER (page), gtk_progress_bar_new ());
Packit Service fb6fa5
      gtk_widget_show_all (page);
Packit Service fb6fa5
      gtk_assistant_append_page (GTK_ASSISTANT (assistant), page);
Packit Service fb6fa5
      gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "Progress");
Packit Service fb6fa5
      gtk_assistant_set_page_type  (GTK_ASSISTANT (assistant), page, GTK_ASSISTANT_PAGE_PROGRESS);
Packit Service fb6fa5
Packit Service fb6fa5
      page = gtk_check_button_new_with_label ("Summary complete");
Packit Service fb6fa5
      gtk_widget_show (page);
Packit Service fb6fa5
      gtk_assistant_append_page (GTK_ASSISTANT (assistant), page);
Packit Service fb6fa5
      gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "Summary");
Packit Service fb6fa5
      gtk_assistant_set_page_type  (GTK_ASSISTANT (assistant), page, GTK_ASSISTANT_PAGE_SUMMARY);
Packit Service fb6fa5
Packit Service fb6fa5
      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (page),
Packit Service fb6fa5
                                    gtk_assistant_get_page_complete (GTK_ASSISTANT (assistant),
Packit Service fb6fa5
                                                                     page));
Packit Service fb6fa5
Packit Service fb6fa5
      pdata = g_new (PageData, 1);
Packit Service fb6fa5
      pdata->assistant = GTK_ASSISTANT (assistant);
Packit Service fb6fa5
      pdata->page = page;
Packit Service fb6fa5
      g_signal_connect (page, "toggled",
Packit Service fb6fa5
                      G_CALLBACK (complete_cb), pdata);
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  if (!gtk_widget_get_visible (assistant))
Packit Service fb6fa5
    gtk_widget_show (assistant);
Packit Service fb6fa5
  else
Packit Service fb6fa5
    {
Packit Service fb6fa5
      gtk_widget_destroy (assistant);
Packit Service fb6fa5
      assistant = NULL;
Packit Service fb6fa5
    }
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static gchar selected_branch = 'A';
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
select_branch (GtkWidget *widget, gchar branch)
Packit Service fb6fa5
{
Packit Service fb6fa5
  selected_branch = branch;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static gint
Packit Service fb6fa5
nonlinear_assistant_forward_page (gint current_page, gpointer data)
Packit Service fb6fa5
{
Packit Service fb6fa5
  switch (current_page)
Packit Service fb6fa5
    {
Packit Service fb6fa5
    case 0:
Packit Service fb6fa5
      if (selected_branch == 'A')
Packit Service fb6fa5
	return 1;
Packit Service fb6fa5
      else
Packit Service fb6fa5
	return 2;
Packit Service fb6fa5
    case 1:
Packit Service fb6fa5
    case 2:
Packit Service fb6fa5
      return 3;
Packit Service fb6fa5
    default:
Packit Service fb6fa5
      return -1;
Packit Service fb6fa5
    }
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
create_nonlinear_assistant (GtkWidget *widget)
Packit Service fb6fa5
{
Packit Service fb6fa5
  static GtkWidget *assistant = NULL;
Packit Service fb6fa5
Packit Service fb6fa5
  if (!assistant)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      GtkWidget *page, *button;
Packit Service fb6fa5
Packit Service fb6fa5
      assistant = gtk_assistant_new ();
Packit Service fb6fa5
      gtk_window_set_default_size (GTK_WINDOW (assistant), 400, 300);
Packit Service fb6fa5
Packit Service fb6fa5
      g_signal_connect (G_OBJECT (assistant), "cancel",
Packit Service fb6fa5
			G_CALLBACK (cancel_callback), NULL);
Packit Service fb6fa5
      g_signal_connect (G_OBJECT (assistant), "close",
Packit Service fb6fa5
			G_CALLBACK (close_callback), NULL);
Packit Service fb6fa5
      g_signal_connect (G_OBJECT (assistant), "apply",
Packit Service fb6fa5
			G_CALLBACK (apply_callback), NULL);
Packit Service fb6fa5
      g_signal_connect (G_OBJECT (assistant), "prepare",
Packit Service fb6fa5
			G_CALLBACK (prepare_callback), NULL);
Packit Service fb6fa5
Packit Service fb6fa5
      gtk_assistant_set_forward_page_func (GTK_ASSISTANT (assistant),
Packit Service fb6fa5
					   nonlinear_assistant_forward_page,
Packit Service fb6fa5
					   NULL, NULL);
Packit Service fb6fa5
Packit Service fb6fa5
      page = gtk_vbox_new (FALSE, 6);
Packit Service fb6fa5
Packit Service fb6fa5
      button = gtk_radio_button_new_with_label (NULL, "branch A");
Packit Service fb6fa5
      gtk_box_pack_start (GTK_BOX (page), button, FALSE, FALSE, 0);
Packit Service fb6fa5
      g_signal_connect (G_OBJECT (button), "toggled", G_CALLBACK (select_branch), GINT_TO_POINTER ('A'));
Packit Service fb6fa5
      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
Packit Service fb6fa5
      
Packit Service fb6fa5
      button = gtk_radio_button_new_with_label (gtk_radio_button_get_group (GTK_RADIO_BUTTON (button)),
Packit Service fb6fa5
						"branch B");
Packit Service fb6fa5
      gtk_box_pack_start (GTK_BOX (page), button, FALSE, FALSE, 0);
Packit Service fb6fa5
      g_signal_connect (G_OBJECT (button), "toggled", G_CALLBACK (select_branch), GINT_TO_POINTER ('B'));
Packit Service fb6fa5
Packit Service fb6fa5
      gtk_widget_show_all (page);
Packit Service fb6fa5
      gtk_assistant_append_page (GTK_ASSISTANT (assistant), page);
Packit Service fb6fa5
      gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "Page 1");
Packit Service fb6fa5
      gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, TRUE);
Packit Service fb6fa5
      
Packit Service fb6fa5
      page = get_test_page ("Page 2A");
Packit Service fb6fa5
      gtk_widget_show (page);
Packit Service fb6fa5
      gtk_assistant_append_page (GTK_ASSISTANT (assistant), page);
Packit Service fb6fa5
      gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "Page 2A");
Packit Service fb6fa5
      gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, TRUE);
Packit Service fb6fa5
Packit Service fb6fa5
      page = get_test_page ("Page 2B");
Packit Service fb6fa5
      gtk_widget_show (page);
Packit Service fb6fa5
      gtk_assistant_append_page (GTK_ASSISTANT (assistant), page);
Packit Service fb6fa5
      gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "Page 2B");
Packit Service fb6fa5
      gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, TRUE);
Packit Service fb6fa5
Packit Service fb6fa5
      page = get_test_page ("Confirmation");
Packit Service fb6fa5
      gtk_widget_show (page);
Packit Service fb6fa5
      gtk_assistant_append_page (GTK_ASSISTANT (assistant), page);
Packit Service fb6fa5
      gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "Confirmation");
Packit Service fb6fa5
      gtk_assistant_set_page_type  (GTK_ASSISTANT (assistant), page, GTK_ASSISTANT_PAGE_CONFIRM);
Packit Service fb6fa5
      gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, TRUE);
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  if (!gtk_widget_get_visible (assistant))
Packit Service fb6fa5
    gtk_widget_show (assistant);
Packit Service fb6fa5
  else
Packit Service fb6fa5
    {
Packit Service fb6fa5
      gtk_widget_destroy (assistant);
Packit Service fb6fa5
      assistant = NULL;
Packit Service fb6fa5
    }
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static gint
Packit Service fb6fa5
looping_assistant_forward_page (gint current_page, gpointer data)
Packit Service fb6fa5
{
Packit Service fb6fa5
  switch (current_page)
Packit Service fb6fa5
    {
Packit Service fb6fa5
    case 0:
Packit Service fb6fa5
      return 1;
Packit Service fb6fa5
    case 1:
Packit Service fb6fa5
      return 2;
Packit Service fb6fa5
    case 2:
Packit Service fb6fa5
      return 3;
Packit Service fb6fa5
    case 3:
Packit Service fb6fa5
      {
Packit Service fb6fa5
	GtkAssistant *assistant;
Packit Service fb6fa5
	GtkWidget *page;
Packit Service fb6fa5
Packit Service fb6fa5
	assistant = (GtkAssistant*) data;
Packit Service fb6fa5
	page = gtk_assistant_get_nth_page (assistant, current_page);
Packit Service fb6fa5
Packit Service fb6fa5
	if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (page)))
Packit Service fb6fa5
	  return 0;
Packit Service fb6fa5
	else
Packit Service fb6fa5
	  return 4;
Packit Service fb6fa5
      }
Packit Service fb6fa5
    case 4:
Packit Service fb6fa5
    default:
Packit Service fb6fa5
      return -1;
Packit Service fb6fa5
    }
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
create_looping_assistant (GtkWidget *widget)
Packit Service fb6fa5
{
Packit Service fb6fa5
  static GtkWidget *assistant = NULL;
Packit Service fb6fa5
Packit Service fb6fa5
  if (!assistant)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      GtkWidget *page;
Packit Service fb6fa5
Packit Service fb6fa5
      assistant = gtk_assistant_new ();
Packit Service fb6fa5
      gtk_window_set_default_size (GTK_WINDOW (assistant), 400, 300);
Packit Service fb6fa5
Packit Service fb6fa5
      g_signal_connect (G_OBJECT (assistant), "cancel",
Packit Service fb6fa5
			G_CALLBACK (cancel_callback), NULL);
Packit Service fb6fa5
      g_signal_connect (G_OBJECT (assistant), "close",
Packit Service fb6fa5
			G_CALLBACK (close_callback), NULL);
Packit Service fb6fa5
      g_signal_connect (G_OBJECT (assistant), "apply",
Packit Service fb6fa5
			G_CALLBACK (apply_callback), NULL);
Packit Service fb6fa5
      g_signal_connect (G_OBJECT (assistant), "prepare",
Packit Service fb6fa5
			G_CALLBACK (prepare_callback), NULL);
Packit Service fb6fa5
Packit Service fb6fa5
      gtk_assistant_set_forward_page_func (GTK_ASSISTANT (assistant),
Packit Service fb6fa5
					   looping_assistant_forward_page,
Packit Service fb6fa5
					   assistant, NULL);
Packit Service fb6fa5
Packit Service fb6fa5
      page = get_test_page ("Introduction");
Packit Service fb6fa5
      gtk_widget_show (page);
Packit Service fb6fa5
      gtk_assistant_append_page (GTK_ASSISTANT (assistant), page);
Packit Service fb6fa5
      gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "Introduction");
Packit Service fb6fa5
      gtk_assistant_set_page_type  (GTK_ASSISTANT (assistant), page, GTK_ASSISTANT_PAGE_INTRO);
Packit Service fb6fa5
      gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, TRUE);
Packit Service fb6fa5
Packit Service fb6fa5
      page = get_test_page ("Content");
Packit Service fb6fa5
      gtk_widget_show (page);
Packit Service fb6fa5
      gtk_assistant_append_page (GTK_ASSISTANT (assistant), page);
Packit Service fb6fa5
      gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "Content");
Packit Service fb6fa5
      gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, TRUE);
Packit Service fb6fa5
Packit Service fb6fa5
      page = get_test_page ("More content");
Packit Service fb6fa5
      gtk_widget_show (page);
Packit Service fb6fa5
      gtk_assistant_append_page (GTK_ASSISTANT (assistant), page);
Packit Service fb6fa5
      gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "More content");
Packit Service fb6fa5
      gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, TRUE);
Packit Service fb6fa5
Packit Service fb6fa5
      page = gtk_check_button_new_with_label ("Loop?");
Packit Service fb6fa5
      gtk_widget_show (page);
Packit Service fb6fa5
      gtk_assistant_append_page (GTK_ASSISTANT (assistant), page);
Packit Service fb6fa5
      gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "Loop?");
Packit Service fb6fa5
      gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, TRUE);
Packit Service fb6fa5
      
Packit Service fb6fa5
      page = get_test_page ("Confirmation");
Packit Service fb6fa5
      gtk_widget_show (page);
Packit Service fb6fa5
      gtk_assistant_append_page (GTK_ASSISTANT (assistant), page);
Packit Service fb6fa5
      gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "Confirmation");
Packit Service fb6fa5
      gtk_assistant_set_page_type  (GTK_ASSISTANT (assistant), page, GTK_ASSISTANT_PAGE_CONFIRM);
Packit Service fb6fa5
      gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, TRUE);
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  if (!gtk_widget_get_visible (assistant))
Packit Service fb6fa5
    gtk_widget_show (assistant);
Packit Service fb6fa5
  else
Packit Service fb6fa5
    {
Packit Service fb6fa5
      gtk_widget_destroy (assistant);
Packit Service fb6fa5
      assistant = NULL;
Packit Service fb6fa5
    }
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
create_full_featured_assistant (GtkWidget *widget)
Packit Service fb6fa5
{
Packit Service fb6fa5
  static GtkWidget *assistant = NULL;
Packit Service fb6fa5
Packit Service fb6fa5
  if (!assistant)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      GtkWidget *page, *button;
Packit Service fb6fa5
	 GdkPixbuf *pixbuf;
Packit Service fb6fa5
Packit Service fb6fa5
      assistant = gtk_assistant_new ();
Packit Service fb6fa5
      gtk_window_set_default_size (GTK_WINDOW (assistant), 400, 300);
Packit Service fb6fa5
Packit Service fb6fa5
	 button = gtk_button_new_from_stock (GTK_STOCK_STOP);
Packit Service fb6fa5
	 gtk_widget_show (button);
Packit Service fb6fa5
	 gtk_assistant_add_action_widget (GTK_ASSISTANT (assistant), button);
Packit Service fb6fa5
Packit Service fb6fa5
      g_signal_connect (G_OBJECT (assistant), "cancel",
Packit Service fb6fa5
			G_CALLBACK (cancel_callback), NULL);
Packit Service fb6fa5
      g_signal_connect (G_OBJECT (assistant), "close",
Packit Service fb6fa5
			G_CALLBACK (close_callback), NULL);
Packit Service fb6fa5
      g_signal_connect (G_OBJECT (assistant), "apply",
Packit Service fb6fa5
			G_CALLBACK (apply_callback), NULL);
Packit Service fb6fa5
      g_signal_connect (G_OBJECT (assistant), "prepare",
Packit Service fb6fa5
			G_CALLBACK (prepare_callback), NULL);
Packit Service fb6fa5
Packit Service fb6fa5
      page = get_test_page ("Page 1");
Packit Service fb6fa5
      gtk_widget_show (page);
Packit Service fb6fa5
      gtk_assistant_append_page (GTK_ASSISTANT (assistant), page);
Packit Service fb6fa5
      gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "Page 1");
Packit Service fb6fa5
      gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, TRUE);
Packit Service fb6fa5
Packit Service fb6fa5
	 /* set a side image */
Packit Service fb6fa5
	 pixbuf = gtk_widget_render_icon (page, GTK_STOCK_DIALOG_WARNING, GTK_ICON_SIZE_DIALOG, NULL);
Packit Service fb6fa5
	 gtk_assistant_set_page_side_image (GTK_ASSISTANT (assistant), page, pixbuf);
Packit Service fb6fa5
Packit Service fb6fa5
	 /* set a header image */
Packit Service fb6fa5
	 pixbuf = gtk_widget_render_icon (page, GTK_STOCK_DIALOG_INFO, GTK_ICON_SIZE_DIALOG, NULL);
Packit Service fb6fa5
	 gtk_assistant_set_page_header_image (GTK_ASSISTANT (assistant), page, pixbuf);
Packit Service fb6fa5
Packit Service fb6fa5
      page = get_test_page ("Invisible page");
Packit Service fb6fa5
      gtk_assistant_append_page (GTK_ASSISTANT (assistant), page);
Packit Service fb6fa5
Packit Service fb6fa5
      page = get_test_page ("Page 3");
Packit Service fb6fa5
      gtk_widget_show (page);
Packit Service fb6fa5
      gtk_assistant_append_page (GTK_ASSISTANT (assistant), page);
Packit Service fb6fa5
      gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "Page 3");
Packit Service fb6fa5
      gtk_assistant_set_page_type  (GTK_ASSISTANT (assistant), page, GTK_ASSISTANT_PAGE_CONFIRM);
Packit Service fb6fa5
      gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, TRUE);
Packit Service fb6fa5
Packit Service fb6fa5
	 /* set a header image */
Packit Service fb6fa5
	 pixbuf = gtk_widget_render_icon (page, GTK_STOCK_DIALOG_INFO, GTK_ICON_SIZE_DIALOG, NULL);
Packit Service fb6fa5
	 gtk_assistant_set_page_header_image (GTK_ASSISTANT (assistant), page, pixbuf);
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  if (!gtk_widget_get_visible (assistant))
Packit Service fb6fa5
    gtk_widget_show (assistant);
Packit Service fb6fa5
  else
Packit Service fb6fa5
    {
Packit Service fb6fa5
      gtk_widget_destroy (assistant);
Packit Service fb6fa5
      assistant = NULL;
Packit Service fb6fa5
    }
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
struct {
Packit Service fb6fa5
  gchar *text;
Packit Service fb6fa5
  void  (*func) (GtkWidget *widget);
Packit Service fb6fa5
} buttons[] =
Packit Service fb6fa5
  {
Packit Service fb6fa5
    { "simple assistant",        create_simple_assistant },
Packit Service fb6fa5
    { "generous assistant",      create_generous_assistant },
Packit Service fb6fa5
    { "nonlinear assistant",     create_nonlinear_assistant },
Packit Service fb6fa5
    { "looping assistant",       create_looping_assistant },
Packit Service fb6fa5
    { "full featured assistant", create_full_featured_assistant },
Packit Service fb6fa5
  };
Packit Service fb6fa5
Packit Service fb6fa5
int
Packit Service fb6fa5
main (int argc, gchar *argv[])
Packit Service fb6fa5
{
Packit Service fb6fa5
  GtkWidget *window, *box, *button;
Packit Service fb6fa5
  gint i;
Packit Service fb6fa5
Packit Service fb6fa5
  gtk_init (&argc, &argv);
Packit Service fb6fa5
Packit Service fb6fa5
  if (g_getenv ("RTL"))
Packit Service fb6fa5
    gtk_widget_set_default_direction (GTK_TEXT_DIR_RTL);
Packit Service fb6fa5
Packit Service fb6fa5
  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
Packit Service fb6fa5
Packit Service fb6fa5
  g_signal_connect (G_OBJECT (window), "destroy",
Packit Service fb6fa5
		    G_CALLBACK (gtk_main_quit), NULL);
Packit Service fb6fa5
  g_signal_connect (G_OBJECT (window), "delete-event",
Packit Service fb6fa5
		    G_CALLBACK (gtk_false), NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  box = gtk_vbox_new (FALSE, 6);
Packit Service fb6fa5
  gtk_container_add (GTK_CONTAINER (window), box);
Packit Service fb6fa5
Packit Service fb6fa5
  for (i = 0; i < G_N_ELEMENTS (buttons); i++)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      button = gtk_button_new_with_label (buttons[i].text);
Packit Service fb6fa5
Packit Service fb6fa5
      if (buttons[i].func)
Packit Service fb6fa5
	g_signal_connect (G_OBJECT (button), "clicked",
Packit Service fb6fa5
			  G_CALLBACK (buttons[i].func), NULL);
Packit Service fb6fa5
Packit Service fb6fa5
      gtk_box_pack_start (GTK_BOX (box), button, TRUE, TRUE, 0);
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  gtk_widget_show_all (window);
Packit Service fb6fa5
  gtk_main ();
Packit Service fb6fa5
Packit Service fb6fa5
  return 0;
Packit Service fb6fa5
}