/* * nheko Copyright (C) 2017 Konstantinos Sideris * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include #include #include #include #include "LoginPage.h" #include "RegisterPage.h" #include "UserSettingsPage.h" #include "WelcomePage.h" class ChatPage; class LoadingIndicator; class OverlayModal; class SnackBar; class TrayIcon; class UserSettings; namespace mtx { namespace requests { struct CreateRoom; } } namespace dialogs { class CreateRoom; class InviteUsers; class JoinRoom; class LeaveRoom; class Logout; class MemberList; class ReCaptcha; class RoomSettings; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); static MainWindow *instance() { return instance_; }; void saveCurrentWindowSize(); void openLeaveRoomDialog(const QString &room_id = ""); void openInviteUsersDialog(std::function callback); void openCreateRoomDialog( std::function callback); void openJoinRoomDialog(std::function callback); void openLogoutDialog(std::function callback); void openRoomSettings(const QString &room_id = ""); void openMemberListDialog(const QString &room_id = ""); protected: void closeEvent(QCloseEvent *event); private slots: //! Handle interaction with the tray icon. void iconActivated(QSystemTrayIcon::ActivationReason reason); //! Show the welcome page in the main window. void showWelcomePage() { removeOverlayProgressBar(); pageStack_->setCurrentWidget(welcome_page_); } //! Show the login page in the main window. void showLoginPage() { pageStack_->setCurrentWidget(login_page_); } //! Show the register page in the main window. void showRegisterPage() { pageStack_->setCurrentWidget(register_page_); } //! Show user settings page. void showUserSettingsPage() { pageStack_->setCurrentWidget(userSettingsPage_); } //! Show the chat page and start communicating with the given access token. void showChatPage(); void showOverlayProgressBar(); void removeOverlayProgressBar(); private: bool hasActiveUser(); void restoreWindowSize(); //! Check if there is an open dialog. bool hasActiveDialogs() const; static MainWindow *instance_; //! The initial welcome screen. WelcomePage *welcome_page_; //! The login screen. LoginPage *login_page_; //! The register page. RegisterPage *register_page_; //! A stacked widget that handles the transitions between widgets. QStackedWidget *pageStack_; //! The main chat area. ChatPage *chat_page_; UserSettingsPage *userSettingsPage_; QSharedPointer userSettings_; //! Used to hide undefined states between page transitions. QSharedPointer progressModal_; QSharedPointer spinner_; //! Tray icon that shows the unread message count. TrayIcon *trayIcon_; //! Notifications display. QSharedPointer snackBar_; //! Leave room modal. QSharedPointer leaveRoomModal_; //! Leave room dialog. QSharedPointer leaveRoomDialog_; //! Invite users modal. QSharedPointer inviteUsersModal_; //! Invite users dialog. QSharedPointer inviteUsersDialog_; //! Join room modal. QSharedPointer joinRoomModal_; //! Join room dialog. QSharedPointer joinRoomDialog_; //! Create room modal. QSharedPointer createRoomModal_; //! Create room dialog. QSharedPointer createRoomDialog_; //! Logout modal. QSharedPointer logoutModal_; //! Logout dialog. QSharedPointer logoutDialog_; //! Room settings modal. QSharedPointer roomSettingsModal_; //! Room settings dialog. QSharedPointer roomSettingsDialog_; //! Member list modal. QSharedPointer memberListModal_; //! Member list dialog. QSharedPointer memberListDialog_; };