#include #include #include //########################## // 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; }