Blame tests/testassistant.c

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