diff options
Diffstat (limited to 'gtk_win.c')
-rw-r--r-- | gtk_win.c | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/gtk_win.c b/gtk_win.c index e45edbd950e4..2c635a8933c3 100644 --- a/gtk_win.c +++ b/gtk_win.c @@ -121,6 +121,92 @@ void on_load_button_clicked(GtkButton* button) { api_info_array_store_check_data(app.portfolio_data); check_list_add_api_data(); } + + GtkButton* lock_button = GTK_BUTTON(gtk_builder_get_object(app.builder, "lock_button")); + gtk_widget_set_sensitive(GTK_WIDGET(lock_button), TRUE); + if (app.password[0] == '\0') // Plaintext + gtk_button_set_label(lock_button, "Encrypt"); + else gtk_button_set_label(lock_button, "Decrypt"); +} + +void on_lock_button_clicked(GtkButton* button) { + if (strcmp(gtk_button_get_label(button), "Encrypt") == 0) { + gtk_entry_set_text(GTK_ENTRY(gtk_builder_get_object(app.builder, "set_password_entry1")), + ""); + gtk_entry_set_text(GTK_ENTRY(gtk_builder_get_object(app.builder, "set_password_entry2")), + ""); + gtk_widget_show(GTK_WIDGET(gtk_builder_get_object(app.builder, "set_password_dialog"))); + } else { + gtk_entry_set_text(GTK_ENTRY(gtk_builder_get_object(app.builder, "decrypt_password_entry")), + ""); + gtk_widget_show(GTK_WIDGET(gtk_builder_get_object(app.builder, "decrypt_dialog"))); + } +} + +void on_set_password_dialog_response(GtkDialog* dialog, gint response_id) { + if (response_id == GTK_RESPONSE_CANCEL) + gtk_widget_hide(GTK_WIDGET(dialog)); + else on_set_password_entry_activate(NULL); +} + +void on_set_password_entry_activate(GtkEntry* entry) { + gtk_widget_hide(GTK_WIDGET(gtk_builder_get_object(app.builder, "set_password_dialog"))); + GtkEntry* pass = GTK_ENTRY(gtk_builder_get_object(app.builder, "set_password_entry1")); + GtkEntry* pass_check = GTK_ENTRY(gtk_builder_get_object(app.builder, "set_password_entry2")); + const gchar* pass_str = gtk_entry_get_text(pass); + GValue gtext = G_VALUE_INIT; + g_value_init(>ext, G_TYPE_STRING); + GtkWidget* dialog = GTK_WIDGET(gtk_builder_get_object( + app.builder, "generic_check_window_error_dialog")); + if (strlen(pass_str) < 6 || strlen(pass_str) > 30) + g_value_set_string(>ext, "Your password must be between 6 and 30 characters."); + else if (strcmp(pass_str, gtk_entry_get_text(pass_check)) != 0) + g_value_set_string(>ext, "Your passwords did not match."); + else { // If passwords match + sprintf(app.password, "%s\n", pass_str); + g_value_set_string(>ext, "Success! Your portfolio will be encrypted when you close the " + "program."); + dialog = GTK_WIDGET(gtk_builder_get_object( + app.builder, "generic_check_window_success_dialog")); + + gtk_button_set_label(GTK_BUTTON(gtk_builder_get_object(app.builder, "lock_button")), + "Decrypt"); + } + + g_object_set_property(G_OBJECT(dialog), "text", >ext); + gtk_widget_show(dialog); +} + +void on_decrypt_dialog_response(GtkDialog* dialog, gint response_id) { + if (response_id == GTK_RESPONSE_CANCEL) + gtk_widget_hide(GTK_WIDGET(dialog)); + else on_decrypt_password_entry_activate(NULL); +} + +void on_decrypt_password_entry_activate(GtkEntry* entry) { + gtk_widget_hide(GTK_WIDGET(gtk_builder_get_object(app.builder, "decrypt_dialog"))); + GValue gtext = G_VALUE_INIT; + g_value_init(>ext, G_TYPE_STRING); + GtkDialog* dialog; + const gchar* pass = gtk_entry_get_text(GTK_ENTRY( + gtk_builder_get_object(app.builder, "decrypt_password_entry"))); + gchar mod_pass[strlen(pass) + 1]; + sprintf(mod_pass, "%s\n", pass); + if (strcmp(app.password, mod_pass) == 0) { // Success + memset(app.password, '\0', PASS_MAX); + g_value_set_string(>ext, "Successfully decrypted."); + dialog = GTK_DIALOG(gtk_builder_get_object(app.builder, + "generic_check_window_success_dialog")); + + gtk_button_set_label(GTK_BUTTON(gtk_builder_get_object(app.builder, "lock_button")), + "Encrypt"); + } else { + g_value_set_string(>ext, "Wrong password!."); + dialog = GTK_DIALOG(gtk_builder_get_object(app.builder, + "generic_check_window_error_dialog")); + } + g_object_set_property(G_OBJECT(dialog), "text", >ext); + gtk_widget_show(GTK_WIDGET(dialog)); } void on_modify_button_clicked(GtkButton* button) { |