// // Created by selim on 03.01.2022. // #include "LoginWindow.h" #include "MainWindow.h" #include "../services/Api.h" #include "../coro/GLibMainContextExecutor.h" #include #include #include LoginWindow::LoginWindow() { setDefaultSize(640, 480); auto header = adw_header_bar_new(); adw_header_bar_set_title_widget(ADW_HEADER_BAR(header), gtk_label_new("Login")); auto loginField = gtk_entry_new(); gtk_entry_set_placeholder_text(GTK_ENTRY(loginField), "Email"); gtk_entry_set_input_purpose(GTK_ENTRY(loginField), GTK_INPUT_PURPOSE_EMAIL); auto passwordField = gtk_entry_new(); gtk_entry_set_placeholder_text(GTK_ENTRY(passwordField), "Password"); gtk_entry_set_input_purpose(GTK_ENTRY(passwordField), GTK_INPUT_PURPOSE_PASSWORD); gtk_entry_set_visibility(GTK_ENTRY(passwordField), false); auto loginButton = gtk_button_new(); gtk_button_set_label(GTK_BUTTON(loginButton), "Log in"); gtk_widget_set_margin_top(loginButton, 8); gtk_widget_set_margin_bottom(loginButton, 8); gtk_widget_set_sensitive(loginButton, false); auto spinner = gtk_spinner_new(); auto contentBox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 8); gtk_box_append(GTK_BOX(contentBox), loginField); gtk_box_append(GTK_BOX(contentBox), passwordField); gtk_box_append(GTK_BOX(contentBox), loginButton); gtk_box_append(GTK_BOX(contentBox), spinner); gtk_widget_set_margin_start(contentBox, 48); gtk_widget_set_margin_end(contentBox, 48); gtk_widget_set_valign(contentBox, GTK_ALIGN_CENTER); gtk_widget_set_vexpand(contentBox, true); auto rootBox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_box_append(GTK_BOX(rootBox), header); gtk_box_append(GTK_BOX(rootBox), contentBox); adw_window_set_content(ADW_WINDOW(_window), rootBox); // _emailField.set_placeholder_text("Email"); // _passwordField.set_placeholder_text("Password"); // _passwordField.set_input_purpose(Gtk::InputPurpose::PASSWORD); // _passwordField.set_visibility(false); // // _emailField.signal_changed().connect(sigc::mem_fun(*this, &LoginWindow::validateFields)); // _passwordField.signal_changed().connect(sigc::mem_fun(*this, &LoginWindow::validateFields)); // // _loginButton.set_margin_top(8); // _loginButton.set_margin_bottom(8); // _loginButton.set_label("Log in"); // _loginButton.signal_clicked().connect(sigc::mem_fun(*this, &LoginWindow::loginClicked)); // _loginButton.set_sensitive(false); // // Gtk::Box box(Gtk::Orientation::VERTICAL, 8); // box.set_margin(48); // box.set_valign(Gtk::Align::CENTER); // // box.append(_emailField); // box.append(_passwordField); // box.append(_loginButton); // box.append(_spinner); // // set_child(box); } void LoginWindow::loginClicked() { // auto email = _emailField.get_text(); // auto password = _passwordField.get_text(); // // enableControls(false); // _spinner.start(); // // try { // User user = co_await Api::login(email, password).scheduleOn(GLibMainContextExecutor::instance()); // auto app = this->get_application(); // auto mainWindow = new MainWindow(); // mainWindow->show(); // hide(); // app->add_window(*mainWindow); // app->remove_window(*this); // } catch (std::exception& ex) { // enableControls(true); // _spinner.stop(); // showError(ex.what()); // } } void LoginWindow::validateFields() { // bool buttonEnabled = _emailField.get_text_length() > 0 && _passwordField.get_text_length() > 0; // _loginButton.set_sensitive(buttonEnabled); } void LoginWindow::showError(const std::string& message) { // _dialog = std::make_unique("Error", // false, // Gtk::MessageType::ERROR, // Gtk::ButtonsType::OK, // true); // _dialog->set_secondary_text(message); // _dialog->set_transient_for(*this); // _dialog->set_hide_on_close(true); // _dialog->signal_response().connect(sigc::hide(sigc::mem_fun(*_dialog, &Gtk::Widget::hide))); // _dialog->show(); } void LoginWindow::enableControls(bool enable) { // _loginButton.set_sensitive(enable); // _emailField.set_sensitive(enable); // _passwordField.set_sensitive(enable); }