#include <gtk/gtk.h>
#include <stdlib.h>
#include <string.h>
//##########################
// Pages functions & var #
//##########################
static GtkWidget *assistant = NULL;
static GtkWidget *progress_bar = NULL;
static gboolean apply_changes_gradually (gpointer data) {
gdouble fraction;
/* Work, work, work... */
fraction = gtk_progress_bar_get_fraction (GTK_PROGRESS_BAR (progress_bar));
fraction += 0.05;
if (fraction < 1.0) {
gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progress_bar), fraction);
return TRUE;
}
else {
/* Close automatically once changes are fully applied. */
g_print ("Exiting\n");
gtk_main_quit ();
assistant = NULL;
return FALSE;
}
}
static void on_assistant_apply (GtkWidget *widget, gpointer data) {
/* Start a timer to simulate changes taking a few seconds to apply. */
g_timeout_add (100, apply_changes_gradually, NULL);
}
static void on_assistant_close_cancel (GtkWidget *widget, gpointer data) {
GtkWidget **assistant = (GtkWidget **) data;
gtk_widget_destroy (*assistant);
*assistant = NULL;
}
static void on_assistant_prepare (GtkWidget *widget, GtkWidget *page, gpointer data) {
gint current_page, n_pages;
gchar *title;
current_page = gtk_assistant_get_current_page (GTK_ASSISTANT (widget));
n_pages = gtk_assistant_get_n_pages (GTK_ASSISTANT (widget));
g_print ("page :%d\n",current_page);
title = g_strdup_printf ("ShowBook client (%d/%d)", current_page + 1, n_pages);
gtk_window_set_title (GTK_WINDOW (widget), title);
g_free (title);
/* The fourth page (counting from zero) is the progress page. The
* user clicked Apply to get here so we tell the assistant to commit,
* which means the changes up to this point are permanent and cannot
* be cancelled or revisited. */
if (current_page == 4)
gtk_assistant_commit (GTK_ASSISTANT (widget));
}
static void on_entry_changed (GtkWidget *widget, gpointer data) {
GtkAssistant *assistant = GTK_ASSISTANT (data);
GtkWidget *current_page;
gint page_number;
const gchar *text;
page_number = gtk_assistant_get_current_page (assistant);
current_page = gtk_assistant_get_nth_page (assistant, page_number);
text = gtk_entry_get_text (GTK_ENTRY (widget));
if (text && *text)
gtk_assistant_set_page_complete (assistant, current_page, TRUE);
else
gtk_assistant_set_page_complete (assistant, current_page, FALSE);
}
//######################
// Pages #
//######################
static void create_page1 (GtkWidget *assistant) {
GtkWidget *box, *label, *image, *current_page;
box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12);
gtk_container_set_border_width (GTK_CONTAINER (box), 12);
label = gtk_label_new ("Bienvenue dans l'assistant de réservation en ligne ShowBook.\n" "Cliquez sur le bouton en bas à droite pour continuer.");
//gtk_label_get_layout_offsets (GTK_LABEL(label), NULL, NULL);
gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 0);
image = gtk_image_new_from_file ("show.jpg");
gtk_box_pack_start (GTK_BOX (box), image, FALSE, FALSE, 0);
gtk_widget_show_all (box);
gtk_assistant_append_page (GTK_ASSISTANT (assistant), box);
gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), box, "Bienvenue");
gtk_assistant_set_page_type (GTK_ASSISTANT (assistant), box, GTK_ASSISTANT_PAGE_INTRO);
gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), box, TRUE);
}
static void create_page2 (GtkWidget *assistant) {
GtkWidget *box, *label, *image, *current_page;
box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);
gtk_container_set_border_width (GTK_CONTAINER (box), 12);
label = gtk_label_new ("Nom du spectacle");
//gtk_label_get_layout_offsets (GTK_LABEL(label), NULL, NULL);
gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 0);
image = gtk_image_new_from_file ("title.jpg");
gtk_box_pack_start (GTK_BOX (box), image, FALSE, FALSE, 0);
gtk_widget_show_all (box);
gtk_assistant_append_page (GTK_ASSISTANT (assistant), box);
gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), box, "Choix");
gtk_assistant_set_page_type (GTK_ASSISTANT (assistant), box, GTK_ASSISTANT_PAGE_INTRO);
current_page = gtk_assistant_get_nth_page (GTK_ASSISTANT (assistant), 0);
gtk_assistant_set_page_complete (GTK_ASSISTANT(assistant), current_page, TRUE);
}
static void create_page3 (GtkWidget *assistant) {
GtkWidget *label;
label = gtk_label_new ("This is a confirmation page, press 'Apply' to apply changes");
gtk_widget_show (label);
gtk_assistant_append_page (GTK_ASSISTANT (assistant), label);
gtk_assistant_set_page_type (GTK_ASSISTANT (assistant), label, GTK_ASSISTANT_PAGE_CONFIRM);
gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), label, TRUE);
gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), label, "Confirmation");
}
//######################
// Window functions #
//######################
static gboolean delete_event( GtkWidget *widget, GdkEvent *event, gpointer data )
{
return FALSE;
}
static void destroy( GtkWidget *widget, gpointer data )
{
g_print ("Exiting\n");
gtk_main_quit ();
}
//######################
// Main #
//######################
int main( int argc, char *argv[] ) {
/* Declarations */
GtkWidget *window;
GtkWidget *mainbox;
GtkUIManager *ui;
GtkActionGroup *actions;
GError *error = NULL;
gtk_init (&argc, &argv);
/* Create a new window and set proprieties */
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
assistant = gtk_assistant_new();
gtk_window_set_title (GTK_WINDOW(assistant), "ShowBook client");
gtk_window_set_default_size(GTK_WINDOW(assistant),800,600);
gtk_window_set_screen (GTK_WINDOW (window),gtk_widget_get_screen (assistant));
create_page1 (assistant);
create_page2 (assistant);
create_page3 (assistant);
/* Define the main window box */
// mainbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
// gtk_container_add (GTK_CONTAINER (assistant), mainbox);
/* Define window signals */
g_signal_connect (assistant, "delete-event",G_CALLBACK (delete_event), NULL);
g_signal_connect (assistant, "destroy",G_CALLBACK (destroy), NULL);
g_signal_connect (G_OBJECT (assistant), "cancel",
G_CALLBACK (on_assistant_close_cancel), &assistant);
g_signal_connect (G_OBJECT (assistant), "close",
G_CALLBACK (on_assistant_close_cancel), &assistant);
g_signal_connect (G_OBJECT (assistant), "apply",
G_CALLBACK (on_assistant_apply), NULL);
g_signal_connect (G_OBJECT (assistant), "prepare",
G_CALLBACK (on_assistant_prepare), NULL);
//gtk_container_set_border_width (GTK_CONTAINER (window), 10);
/* Display the window */
gtk_widget_show_all (assistant);
/* Launch gtk */
gtk_main ();
//g_object_unref (ui);
return 0;
}