X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=tests%2Ftestassistant.c;h=8360400387f58aa5504315da36d861c61e6b0903;hb=8874a06ba0b213e87ac5b16f50cd822935e67ffd;hp=231d13a856a186086f9f4aabcb13ec41dc82f3c4;hpb=fc6e3928aecc10a6c91d5c97b43407d4d788acb0;p=~andy%2Fgtk diff --git a/tests/testassistant.c b/tests/testassistant.c index 231d13a85..836040038 100644 --- a/tests/testassistant.c +++ b/tests/testassistant.c @@ -18,9 +18,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. + * License along with this library. If not, see . */ #include @@ -31,6 +29,60 @@ get_test_page (const gchar *text) return gtk_label_new (text); } +typedef struct { + GtkAssistant *assistant; + GtkWidget *page; +} PageData; + +static void +complete_cb (GtkWidget *check, + gpointer data) +{ + PageData *pdata = data; + gboolean complete; + + complete = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (check)); + + gtk_assistant_set_page_complete (pdata->assistant, + pdata->page, + complete); +} + +static GtkWidget * +add_completion_test_page (GtkWidget *assistant, + const gchar *text, + gboolean visible, + gboolean complete) +{ + GtkWidget *page; + GtkWidget *check; + PageData *pdata; + + page = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); + check = gtk_check_button_new_with_label ("Complete"); + + gtk_container_add (GTK_CONTAINER (page), gtk_label_new (text)); + gtk_container_add (GTK_CONTAINER (page), check); + + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), complete); + + pdata = g_new (PageData, 1); + pdata->assistant = GTK_ASSISTANT (assistant); + pdata->page = page; + g_signal_connect (G_OBJECT (check), "toggled", + G_CALLBACK (complete_cb), pdata); + + + if (visible) + gtk_widget_show_all (page); + + gtk_assistant_append_page (GTK_ASSISTANT (assistant), page); + gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, text); + gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, complete); + + return page; +} + static void cancel_callback (GtkWidget *widget) { @@ -62,7 +114,7 @@ progress_timeout (GtkWidget *assistant) current_page = gtk_assistant_get_current_page (GTK_ASSISTANT (assistant)); page = gtk_assistant_get_nth_page (GTK_ASSISTANT (assistant), current_page); - progress = GTK_BIN (page)->child; + progress = gtk_bin_get_child (GTK_BIN (page)); value = gtk_progress_bar_get_fraction (GTK_PROGRESS_BAR (progress)); value += 0.1; @@ -86,10 +138,10 @@ prepare_callback (GtkWidget *widget, GtkWidget *page) { GtkWidget *progress; - progress = GTK_BIN (page)->child; + progress = gtk_bin_get_child (GTK_BIN (page)); gtk_assistant_set_page_complete (GTK_ASSISTANT (widget), page, FALSE); gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progress), 0.0); - g_timeout_add (300, (GSourceFunc) progress_timeout, widget); + gdk_threads_add_timeout (300, (GSourceFunc) progress_timeout, widget); } else g_print ("prepare: %d\n", gtk_assistant_get_current_page (GTK_ASSISTANT (widget))); @@ -130,7 +182,7 @@ create_simple_assistant (GtkWidget *widget) gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, TRUE); } - if (!GTK_WIDGET_VISIBLE (assistant)) + if (!gtk_widget_get_visible (assistant)) gtk_widget_show (assistant); else { @@ -140,7 +192,7 @@ create_simple_assistant (GtkWidget *widget) } static void -create_generous_assistant (GtkWidget *widget) +create_anonymous_assistant (GtkWidget *widget) { static GtkWidget *assistant = NULL; @@ -160,25 +212,80 @@ create_generous_assistant (GtkWidget *widget) g_signal_connect (G_OBJECT (assistant), "prepare", G_CALLBACK (prepare_callback), NULL); - page = get_test_page ("Introduction"); + page = get_test_page ("Page 1"); gtk_widget_show (page); gtk_assistant_append_page (GTK_ASSISTANT (assistant), page); - gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "Introduction"); - gtk_assistant_set_page_type (GTK_ASSISTANT (assistant), page, GTK_ASSISTANT_PAGE_INTRO); gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, TRUE); - page = get_test_page ("Content"); + page = get_test_page ("Page 2"); gtk_widget_show (page); gtk_assistant_append_page (GTK_ASSISTANT (assistant), page); - gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "Content"); + gtk_assistant_set_page_type (GTK_ASSISTANT (assistant), page, GTK_ASSISTANT_PAGE_CONFIRM); gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, TRUE); + } - page = get_test_page ("More content"); + if (!gtk_widget_get_visible (assistant)) + gtk_widget_show (assistant); + else + { + gtk_widget_destroy (assistant); + assistant = NULL; + } +} + +static void +visible_cb (GtkWidget *check, + gpointer data) +{ + GtkWidget *page = data; + gboolean visible; + + visible = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (check)); + + g_object_set (G_OBJECT (page), "visible", visible, NULL); +} + +static void +create_generous_assistant (GtkWidget *widget) +{ + static GtkWidget *assistant = NULL; + + if (!assistant) + { + GtkWidget *page, *next, *check; + PageData *pdata; + + assistant = gtk_assistant_new (); + gtk_window_set_default_size (GTK_WINDOW (assistant), 400, 300); + + g_signal_connect (G_OBJECT (assistant), "cancel", + G_CALLBACK (cancel_callback), NULL); + g_signal_connect (G_OBJECT (assistant), "close", + G_CALLBACK (close_callback), NULL); + g_signal_connect (G_OBJECT (assistant), "apply", + G_CALLBACK (apply_callback), NULL); + g_signal_connect (G_OBJECT (assistant), "prepare", + G_CALLBACK (prepare_callback), NULL); + + page = get_test_page ("Introduction"); gtk_widget_show (page); gtk_assistant_append_page (GTK_ASSISTANT (assistant), page); - gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "More content"); + gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "Introduction"); + gtk_assistant_set_page_type (GTK_ASSISTANT (assistant), page, GTK_ASSISTANT_PAGE_INTRO); gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, TRUE); + + page = add_completion_test_page (assistant, "Content", TRUE, FALSE); + next = add_completion_test_page (assistant, "More Content", TRUE, TRUE); + + check = gtk_check_button_new_with_label ("Next page visible"); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE); + g_signal_connect (G_OBJECT (check), "toggled", + G_CALLBACK (visible_cb), next); + gtk_widget_show (check); + gtk_container_add (GTK_CONTAINER (page), check); + add_completion_test_page (assistant, "Even More Content", TRUE, TRUE); + page = get_test_page ("Confirmation"); gtk_widget_show (page); gtk_assistant_append_page (GTK_ASSISTANT (assistant), page); @@ -193,15 +300,24 @@ create_generous_assistant (GtkWidget *widget) gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "Progress"); gtk_assistant_set_page_type (GTK_ASSISTANT (assistant), page, GTK_ASSISTANT_PAGE_PROGRESS); - page = get_test_page ("Summary"); + page = gtk_check_button_new_with_label ("Summary complete"); gtk_widget_show (page); gtk_assistant_append_page (GTK_ASSISTANT (assistant), page); gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "Summary"); gtk_assistant_set_page_type (GTK_ASSISTANT (assistant), page, GTK_ASSISTANT_PAGE_SUMMARY); - gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, TRUE); + + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (page), + gtk_assistant_get_page_complete (GTK_ASSISTANT (assistant), + page)); + + pdata = g_new (PageData, 1); + pdata->assistant = GTK_ASSISTANT (assistant); + pdata->page = page; + g_signal_connect (page, "toggled", + G_CALLBACK (complete_cb), pdata); } - if (!GTK_WIDGET_VISIBLE (assistant)) + if (!gtk_widget_get_visible (assistant)) gtk_widget_show (assistant); else { @@ -261,7 +377,7 @@ create_nonlinear_assistant (GtkWidget *widget) nonlinear_assistant_forward_page, NULL, NULL); - page = gtk_vbox_new (FALSE, 6); + page = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); button = gtk_radio_button_new_with_label (NULL, "branch A"); gtk_box_pack_start (GTK_BOX (page), button, FALSE, FALSE, 0); @@ -281,13 +397,13 @@ create_nonlinear_assistant (GtkWidget *widget) page = get_test_page ("Page 2A"); gtk_widget_show (page); gtk_assistant_append_page (GTK_ASSISTANT (assistant), page); - gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "Page 2A"); + gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "Page 2"); gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, TRUE); page = get_test_page ("Page 2B"); gtk_widget_show (page); gtk_assistant_append_page (GTK_ASSISTANT (assistant), page); - gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "Page 2B"); + gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "Page 2"); gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, TRUE); page = get_test_page ("Confirmation"); @@ -298,7 +414,7 @@ create_nonlinear_assistant (GtkWidget *widget) gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, TRUE); } - if (!GTK_WIDGET_VISIBLE (assistant)) + if (!gtk_widget_get_visible (assistant)) gtk_widget_show (assistant); else { @@ -395,7 +511,72 @@ create_looping_assistant (GtkWidget *widget) gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, TRUE); } - if (!GTK_WIDGET_VISIBLE (assistant)) + if (!gtk_widget_get_visible (assistant)) + gtk_widget_show (assistant); + else + { + gtk_widget_destroy (assistant); + assistant = NULL; + } +} + +static void +toggle_invisible (GtkButton *button, GtkAssistant *assistant) +{ + GtkWidget *page; + + page = gtk_assistant_get_nth_page (assistant, 1); + + gtk_widget_set_visible (page, !gtk_widget_get_visible (page)); +} + +static void +create_full_featured_assistant (GtkWidget *widget) +{ + static GtkWidget *assistant = NULL; + + if (!assistant) + { + GtkWidget *page, *button; + + assistant = gtk_assistant_new (); + gtk_window_set_default_size (GTK_WINDOW (assistant), 400, 300); + + button = gtk_button_new_from_stock (GTK_STOCK_STOP); + gtk_widget_show (button); + gtk_assistant_add_action_widget (GTK_ASSISTANT (assistant), button); + g_signal_connect (button, "clicked", + G_CALLBACK (toggle_invisible), assistant); + + g_signal_connect (G_OBJECT (assistant), "cancel", + G_CALLBACK (cancel_callback), NULL); + g_signal_connect (G_OBJECT (assistant), "close", + G_CALLBACK (close_callback), NULL); + g_signal_connect (G_OBJECT (assistant), "apply", + G_CALLBACK (apply_callback), NULL); + g_signal_connect (G_OBJECT (assistant), "prepare", + G_CALLBACK (prepare_callback), NULL); + + page = get_test_page ("Page 1"); + gtk_widget_show (page); + gtk_assistant_append_page (GTK_ASSISTANT (assistant), page); + gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "Page 1"); + gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, TRUE); + + page = get_test_page ("Invisible page"); + gtk_assistant_append_page (GTK_ASSISTANT (assistant), page); + gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "Page 2"); + gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, TRUE); + + page = get_test_page ("Page 3"); + gtk_widget_show (page); + gtk_assistant_append_page (GTK_ASSISTANT (assistant), page); + gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "Page 3"); + gtk_assistant_set_page_type (GTK_ASSISTANT (assistant), page, GTK_ASSISTANT_PAGE_CONFIRM); + gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, TRUE); + } + + if (!gtk_widget_get_visible (assistant)) gtk_widget_show (assistant); else { @@ -409,10 +590,12 @@ struct { void (*func) (GtkWidget *widget); } buttons[] = { - { "simple assistant", create_simple_assistant }, - { "generous assistant", create_generous_assistant }, - { "nonlinear assistant", create_nonlinear_assistant }, - { "looping assistant", create_looping_assistant }, + { "simple assistant", create_simple_assistant }, + { "anonymous assistant", create_anonymous_assistant }, + { "generous assistant", create_generous_assistant }, + { "nonlinear assistant", create_nonlinear_assistant }, + { "looping assistant", create_looping_assistant }, + { "full featured assistant", create_full_featured_assistant }, }; int @@ -433,7 +616,7 @@ main (int argc, gchar *argv[]) g_signal_connect (G_OBJECT (window), "delete-event", G_CALLBACK (gtk_false), NULL); - box = gtk_vbox_new (FALSE, 6); + box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); gtk_container_add (GTK_CONTAINER (window), box); for (i = 0; i < G_N_ELEMENTS (buttons); i++)