diff options
author | nirav <nirav@teisuu.com> | 2019-03-10 07:44:01 +0530 |
---|---|---|
committer | Dandelion <nirav@teisuu.com> | 2019-03-10 07:44:01 +0530 |
commit | bd7b0be8978cfd30ac72cf36021153b2a7d68051 (patch) | |
tree | a6393364162428b614b79729903d4ac24cf32b38 | |
parent | c14d6af39dbf2353134ba8c99ce95a52207a2b45 (diff) | |
download | ap_client-bd7b0be8978cfd30ac72cf36021153b2a7d68051.tar.gz ap_client-bd7b0be8978cfd30ac72cf36021153b2a7d68051.zip |
Add form validation and loading animation
-rw-r--r-- | src/main.c | 55 |
1 files changed, 52 insertions, 3 deletions
@@ -13,20 +13,24 @@ static GtkWidget *window; static GtkWidget *box; static GtkWidget *instance_name_box, *email_box, *password_box; static GtkWidget *submit_button; +static GtkWidget *spinner; static void login_callback(bool success) { if (!success) { fprintf(stderr, "login_callback(): login failed\n"); + gtk_spinner_stop(GTK_SPINNER(spinner)); return; } printf("login success\n"); + gtk_spinner_stop(GTK_SPINNER(spinner)); } static void register_callback(bool success) { if (!success) { + gtk_spinner_stop(GTK_SPINNER(spinner)); fprintf(stderr, "register_callback(): register failed\n"); return; } @@ -36,16 +40,19 @@ static void register_callback(bool success) email = gtk_entry_get_text(GTK_ENTRY(email_box)); password = gtk_entry_get_text(GTK_ENTRY(password_box)); - if(login(email, password, &login_callback)) { + if (login(email, password, &login_callback)) { + gtk_spinner_stop(GTK_SPINNER(spinner)); return; } } -static void submit_login_form() +static void submit_login_form() { + gtk_spinner_start(GTK_SPINNER(spinner)); const char *instance_name; instance_name = gtk_entry_get_text(GTK_ENTRY(instance_name_box)); - if(register_app(instance_name, ®ister_callback)) { + if (register_app(instance_name, ®ister_callback)) { + gtk_spinner_stop(GTK_SPINNER(spinner)); return; } } @@ -55,6 +62,28 @@ static void submit_button_clicked(GtkButton *button, gpointer user_data) submit_login_form(); } +static void form_on_activate(GtkEntry *entry, gpointer user_data) +{ + submit_login_form(); +} + +static bool is_form_valid() +{ + if (strlen(gtk_entry_get_text(GTK_ENTRY(instance_name_box))) < 1 || + strlen(gtk_entry_get_text(GTK_ENTRY(email_box))) < 1 || + strlen(gtk_entry_get_text(GTK_ENTRY(password_box))) < 1) + return false; + return true; +} + +static void on_form_changed(GtkWidget *widget, gpointer data) +{ + if (is_form_valid()) + gtk_widget_set_sensitive(GTK_WIDGET(submit_button), true); + else + gtk_widget_set_sensitive(GTK_WIDGET(submit_button), false); +} + static void activate(GtkApplication *app, gpointer user_data) { window = gtk_application_window_new(app); @@ -69,23 +98,43 @@ static void activate(GtkApplication *app, gpointer user_data) instance_name_box = gtk_entry_new(); gtk_entry_set_placeholder_text( GTK_ENTRY(instance_name_box), "Instance domain"); + g_signal_connect(GTK_ENTRY(instance_name_box), "activate", + G_CALLBACK(form_on_activate), NULL); + g_signal_connect(G_OBJECT(instance_name_box), "changed", + G_CALLBACK(on_form_changed), NULL); email_box = gtk_entry_new(); gtk_entry_set_placeholder_text(GTK_ENTRY(email_box), "Email"); + gtk_entry_set_input_purpose(GTK_ENTRY(email_box), GTK_INPUT_PURPOSE_EMAIL); + g_signal_connect(GTK_ENTRY(email_box), "activate", + G_CALLBACK(form_on_activate), NULL); + g_signal_connect(G_OBJECT(email_box), "changed", + G_CALLBACK(on_form_changed), NULL); password_box = gtk_entry_new(); gtk_entry_set_placeholder_text(GTK_ENTRY(password_box), "Password"); + gtk_entry_set_input_purpose( + GTK_ENTRY(password_box), GTK_INPUT_PURPOSE_PASSWORD); + gtk_entry_set_visibility(GTK_ENTRY(password_box), false); + g_signal_connect(GTK_ENTRY(password_box), "activate", + G_CALLBACK(form_on_activate), NULL); + g_signal_connect(G_OBJECT(password_box), "changed", + G_CALLBACK(on_form_changed), NULL); submit_button = gtk_button_new(); g_signal_connect(GTK_BUTTON(submit_button), "clicked", G_CALLBACK(submit_button_clicked), G_OBJECT(window)); gtk_button_set_label(GTK_BUTTON(submit_button), "Submit"); + gtk_widget_set_sensitive(GTK_WIDGET(submit_button), false); + + spinner = gtk_spinner_new(); gtk_container_add(GTK_CONTAINER(window), box); gtk_container_add(GTK_CONTAINER(box), instance_name_box); gtk_container_add(GTK_CONTAINER(box), email_box); gtk_container_add(GTK_CONTAINER(box), password_box); gtk_container_add(GTK_CONTAINER(box), submit_button); + gtk_container_add(GTK_CONTAINER(box), spinner); gtk_widget_show_all(window); } |