summary refs log tree commit diff
path: root/src/MainWindow.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/MainWindow.cc')
-rw-r--r--src/MainWindow.cc278
1 files changed, 143 insertions, 135 deletions
diff --git a/src/MainWindow.cc b/src/MainWindow.cc

index 1567e8ba..c76657d7 100644 --- a/src/MainWindow.cc +++ b/src/MainWindow.cc
@@ -15,8 +15,8 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ -#include "MainWindow.h" #include "Config.h" +#include "MainWindow.h" #include <QLayout> #include <QNetworkReply> @@ -30,217 +30,225 @@ MainWindow::MainWindow(QWidget *parent) , progress_modal_{ nullptr } , spinner_{ nullptr } { - QSizePolicy sizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); - setSizePolicy(sizePolicy); - setWindowTitle("nheko"); - setObjectName("MainWindow"); - setStyleSheet("QWidget#MainWindow {background-color: #f9f9f9}"); + QSizePolicy sizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); + setSizePolicy(sizePolicy); + setWindowTitle("nheko"); + setObjectName("MainWindow"); + setStyleSheet("QWidget#MainWindow {background-color: #f9f9f9}"); - restoreWindowSize(); - setMinimumSize(QSize(conf::window::minWidth, conf::window::minHeight)); + restoreWindowSize(); + setMinimumSize(QSize(conf::window::minWidth, conf::window::minHeight)); - QFont font("Open Sans"); - font.setPixelSize(conf::fontSize); - font.setStyleStrategy(QFont::PreferAntialias); - setFont(font); + QFont font("Open Sans"); + font.setPixelSize(conf::fontSize); + font.setStyleStrategy(QFont::PreferAntialias); + setFont(font); - client_ = QSharedPointer<MatrixClient>(new MatrixClient("matrix.org")); - trayIcon_ = new TrayIcon(":/logos/nheko-32.png", this); + client_ = QSharedPointer<MatrixClient>(new MatrixClient("matrix.org")); + trayIcon_ = new TrayIcon(":/logos/nheko-32.png", this); - welcome_page_ = new WelcomePage(this); - login_page_ = new LoginPage(client_, this); - register_page_ = new RegisterPage(client_, this); - chat_page_ = new ChatPage(client_, this); + welcome_page_ = new WelcomePage(this); + login_page_ = new LoginPage(client_, this); + register_page_ = new RegisterPage(client_, this); + chat_page_ = new ChatPage(client_, this); - // Initialize sliding widget manager. - sliding_stack_ = new SlidingStackWidget(this); - sliding_stack_->addWidget(welcome_page_); - sliding_stack_->addWidget(login_page_); - sliding_stack_->addWidget(register_page_); - sliding_stack_->addWidget(chat_page_); + // Initialize sliding widget manager. + sliding_stack_ = new SlidingStackWidget(this); + sliding_stack_->addWidget(welcome_page_); + sliding_stack_->addWidget(login_page_); + sliding_stack_->addWidget(register_page_); + sliding_stack_->addWidget(chat_page_); - setCentralWidget(sliding_stack_); + setCentralWidget(sliding_stack_); - connect(welcome_page_, SIGNAL(userLogin()), this, SLOT(showLoginPage())); - connect(welcome_page_, SIGNAL(userRegister()), this, SLOT(showRegisterPage())); + connect(welcome_page_, SIGNAL(userLogin()), this, SLOT(showLoginPage())); + connect(welcome_page_, SIGNAL(userRegister()), this, SLOT(showRegisterPage())); - connect(login_page_, SIGNAL(backButtonClicked()), this, SLOT(showWelcomePage())); - connect(register_page_, SIGNAL(backButtonClicked()), this, SLOT(showWelcomePage())); + connect(login_page_, SIGNAL(backButtonClicked()), this, SLOT(showWelcomePage())); + connect(register_page_, SIGNAL(backButtonClicked()), this, SLOT(showWelcomePage())); - connect(chat_page_, SIGNAL(close()), this, SLOT(showWelcomePage())); - connect(chat_page_, SIGNAL(changeWindowTitle(QString)), this, SLOT(setWindowTitle(QString))); - connect(chat_page_, SIGNAL(unreadMessages(int)), trayIcon_, SLOT(setUnreadCount(int))); + connect(chat_page_, SIGNAL(close()), this, SLOT(showWelcomePage())); + connect( + chat_page_, SIGNAL(changeWindowTitle(QString)), this, SLOT(setWindowTitle(QString))); + connect(chat_page_, SIGNAL(unreadMessages(int)), trayIcon_, SLOT(setUnreadCount(int))); - connect(trayIcon_, - SIGNAL(activated(QSystemTrayIcon::ActivationReason)), - this, - SLOT(iconActivated(QSystemTrayIcon::ActivationReason))); + connect(trayIcon_, + SIGNAL(activated(QSystemTrayIcon::ActivationReason)), + this, + SLOT(iconActivated(QSystemTrayIcon::ActivationReason))); - connect(chat_page_, SIGNAL(contentLoaded()), this, SLOT(removeOverlayProgressBar())); + connect(chat_page_, SIGNAL(contentLoaded()), this, SLOT(removeOverlayProgressBar())); - connect(client_.data(), - SIGNAL(loginSuccess(QString, QString, QString)), - this, - SLOT(showChatPage(QString, QString, QString))); + connect(client_.data(), + SIGNAL(loginSuccess(QString, QString, QString)), + this, + SLOT(showChatPage(QString, QString, QString))); - QSettings settings; + QSettings settings; - if (hasActiveUser()) { - QString token = settings.value("auth/access_token").toString(); - QString home_server = settings.value("auth/home_server").toString(); - QString user_id = settings.value("auth/user_id").toString(); + if (hasActiveUser()) { + QString token = settings.value("auth/access_token").toString(); + QString home_server = settings.value("auth/home_server").toString(); + QString user_id = settings.value("auth/user_id").toString(); - showChatPage(user_id, home_server, token); - } + showChatPage(user_id, home_server, token); + } } void MainWindow::restoreWindowSize() { - QSettings settings; - int savedWidth = settings.value("window/width").toInt(); - int savedheight = settings.value("window/height").toInt(); - - if (savedWidth == 0 || savedheight == 0) - resize(conf::window::width, conf::window::height); - else - resize(savedWidth, savedheight); + QSettings settings; + int savedWidth = settings.value("window/width").toInt(); + int savedheight = settings.value("window/height").toInt(); + + if (savedWidth == 0 || savedheight == 0) + resize(conf::window::width, conf::window::height); + else + resize(savedWidth, savedheight); } void MainWindow::saveCurrentWindowSize() { - QSettings settings; - QSize current = size(); + QSettings settings; + QSize current = size(); - settings.setValue("window/width", current.width()); - settings.setValue("window/height", current.height()); + settings.setValue("window/width", current.width()); + settings.setValue("window/height", current.height()); } void MainWindow::removeOverlayProgressBar() { - QTimer *timer = new QTimer(this); - timer->setSingleShot(true); + QTimer *timer = new QTimer(this); + timer->setSingleShot(true); - connect(timer, &QTimer::timeout, [=]() { - timer->deleteLater(); + connect(timer, &QTimer::timeout, [=]() { + timer->deleteLater(); - if (progress_modal_ != nullptr) { - progress_modal_->deleteLater(); - progress_modal_->fadeOut(); - } + if (progress_modal_ != nullptr) { + progress_modal_->deleteLater(); + progress_modal_->fadeOut(); + } - if (spinner_ != nullptr) - spinner_->deleteLater(); + if (spinner_ != nullptr) + spinner_->deleteLater(); - progress_modal_ = nullptr; - spinner_ = nullptr; - }); + spinner_->stop(); - timer->start(500); + progress_modal_ = nullptr; + spinner_ = nullptr; + }); + + timer->start(500); } void MainWindow::showChatPage(QString userid, QString homeserver, QString token) { - QSettings settings; - settings.setValue("auth/access_token", token); - settings.setValue("auth/home_server", homeserver); - settings.setValue("auth/user_id", userid); - - int index = sliding_stack_->getWidgetIndex(chat_page_); - int modalOpacityDuration = 300; - - // If we go directly from the welcome page don't show an animation. - if (sliding_stack_->currentIndex() == 0) { - sliding_stack_->setCurrentIndex(index); - modalOpacityDuration = 0; - } else { - sliding_stack_->slideInIndex(index, SlidingStackWidget::AnimationDirection::LEFT_TO_RIGHT); - } - - if (spinner_ == nullptr) { - spinner_ = new CircularProgress(this); - spinner_->setColor("#acc7dc"); - spinner_->setSize(100); - } - - if (progress_modal_ == nullptr) { - progress_modal_ = new OverlayModal(this, spinner_); - progress_modal_->fadeIn(); - progress_modal_->setDuration(modalOpacityDuration); - } - - login_page_->reset(); - chat_page_->bootstrap(userid, homeserver, token); - - instance_ = this; + QSettings settings; + settings.setValue("auth/access_token", token); + settings.setValue("auth/home_server", homeserver); + settings.setValue("auth/user_id", userid); + + int index = sliding_stack_->getWidgetIndex(chat_page_); + int modalOpacityDuration = 300; + + // If we go directly from the welcome page don't show an animation. + if (sliding_stack_->currentIndex() == 0) { + sliding_stack_->setCurrentIndex(index); + modalOpacityDuration = 0; + } else { + sliding_stack_->slideInIndex(index, + SlidingStackWidget::AnimationDirection::LEFT_TO_RIGHT); + } + + if (spinner_ == nullptr) { + spinner_ = new LoadingIndicator(this); + spinner_->setColor("#acc7dc"); + spinner_->setFixedHeight(120); + spinner_->setFixedWidth(120); + spinner_->start(); + } + + if (progress_modal_ == nullptr) { + progress_modal_ = new OverlayModal(this, spinner_); + progress_modal_->fadeIn(); + progress_modal_->setDuration(modalOpacityDuration); + } + + login_page_->reset(); + chat_page_->bootstrap(userid, homeserver, token); + + instance_ = this; } void MainWindow::showWelcomePage() { - int index = sliding_stack_->getWidgetIndex(welcome_page_); - - if (sliding_stack_->currentIndex() == sliding_stack_->getWidgetIndex(login_page_)) - sliding_stack_->slideInIndex(index, SlidingStackWidget::AnimationDirection::RIGHT_TO_LEFT); - else - sliding_stack_->slideInIndex(index, SlidingStackWidget::AnimationDirection::LEFT_TO_RIGHT); + int index = sliding_stack_->getWidgetIndex(welcome_page_); + + if (sliding_stack_->currentIndex() == sliding_stack_->getWidgetIndex(login_page_)) + sliding_stack_->slideInIndex(index, + SlidingStackWidget::AnimationDirection::RIGHT_TO_LEFT); + else + sliding_stack_->slideInIndex(index, + SlidingStackWidget::AnimationDirection::LEFT_TO_RIGHT); } void MainWindow::showLoginPage() { - int index = sliding_stack_->getWidgetIndex(login_page_); - sliding_stack_->slideInIndex(index, SlidingStackWidget::AnimationDirection::LEFT_TO_RIGHT); + int index = sliding_stack_->getWidgetIndex(login_page_); + sliding_stack_->slideInIndex(index, SlidingStackWidget::AnimationDirection::LEFT_TO_RIGHT); } void MainWindow::showRegisterPage() { - int index = sliding_stack_->getWidgetIndex(register_page_); - sliding_stack_->slideInIndex(index, SlidingStackWidget::AnimationDirection::RIGHT_TO_LEFT); + int index = sliding_stack_->getWidgetIndex(register_page_); + sliding_stack_->slideInIndex(index, SlidingStackWidget::AnimationDirection::RIGHT_TO_LEFT); } void MainWindow::closeEvent(QCloseEvent *event) { - if (isVisible()) { - event->ignore(); - hide(); - } + if (isVisible()) { + event->ignore(); + hide(); + } } void MainWindow::iconActivated(QSystemTrayIcon::ActivationReason reason) { - switch (reason) { - case QSystemTrayIcon::Trigger: - if (!isVisible()) { - show(); - } else { - hide(); - } - break; - default: - break; - } + switch (reason) { + case QSystemTrayIcon::Trigger: + if (!isVisible()) { + show(); + } else { + hide(); + } + break; + default: + break; + } } bool MainWindow::hasActiveUser() { - QSettings settings; + QSettings settings; - return settings.contains("auth/access_token") && settings.contains("auth/home_server") && - settings.contains("auth/user_id"); + return settings.contains("auth/access_token") && settings.contains("auth/home_server") && + settings.contains("auth/user_id"); } MainWindow * MainWindow::instance() { - return instance_; + return instance_; } MainWindow::~MainWindow()