124 lines
4.4 KiB
C++
124 lines
4.4 KiB
C++
//
|
|
// Created by selim on 03.01.2022.
|
|
//
|
|
|
|
#include "LoginWindow.h"
|
|
#include "MainWindow.h"
|
|
#include "../services/Api.h"
|
|
#include "../coro/GLibMainContextExecutor.h"
|
|
|
|
#include <iostream>
|
|
#include <folly/experimental/coro/Task.h>
|
|
#include <folly/executors/IOThreadPoolExecutor.h>
|
|
|
|
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<Gtk::MessageDialog>("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);
|
|
}
|