Skip to content
Snippets Groups Projects
MainWindow.h 4.35 KiB
Newer Older
  • Learn to ignore specific revisions
  • Nicolas Werner's avatar
    Nicolas Werner committed
    // SPDX-FileCopyrightText: 2017 Konstantinos Sideris <siderisk@auth.gr>
    // SPDX-FileCopyrightText: 2021 Nheko Contributors
    //
    // SPDX-License-Identifier: GPL-3.0-or-later
    
    #include <functional>
    
    
    Konstantinos Sideris's avatar
    Konstantinos Sideris committed
    #include <QMainWindow>
    
    #include <QSharedPointer>
    
    Konstantinos Sideris's avatar
    Konstantinos Sideris committed
    #include <QStackedWidget>
    #include <QSystemTrayIcon>
    
    #include "UserSettingsPage.h"
    
    #include "ui/OverlayModal.h"
    
    #include "jdenticoninterface.h"
    
    
    Konstantinos Sideris's avatar
    Konstantinos Sideris committed
    class ChatPage;
    
    Nicolas Werner's avatar
    Nicolas Werner committed
    class RegisterPage;
    class LoginPage;
    class WelcomePage;
    
    
    Konstantinos Sideris's avatar
    Konstantinos Sideris committed
    class LoadingIndicator;
    class OverlayModal;
    class SnackBar;
    class TrayIcon;
    
    class UserSettings;
    
    namespace mtx {
    namespace requests {
    struct CreateRoom;
    }
    }
    
    
    namespace dialogs {
    
    class CreateRoom;
    class InviteUsers;
    class JoinRoom;
    
    Konstantinos Sideris's avatar
    Konstantinos Sideris committed
    class MemberList;
    
    Konstantinos Sideris's avatar
    Konstantinos Sideris committed
    class MainWindow : public QMainWindow
    {
    
            Q_PROPERTY(int x READ x CONSTANT)
            Q_PROPERTY(int y READ y CONSTANT)
            Q_PROPERTY(int width READ width CONSTANT)
            Q_PROPERTY(int height READ height CONSTANT)
    
    Konstantinos Sideris's avatar
    Konstantinos Sideris committed
    public:
    
            explicit MainWindow(QWidget *parent = nullptr);
    
            static MainWindow *instance() { return instance_; }
    
            void saveCurrentWindowSize();
    
            void openLeaveRoomDialog(const QString &room_id);
    
            void openInviteUsersDialog(std::function<void(const QStringList &invitees)> callback);
            void openCreateRoomDialog(
              std::function<void(const mtx::requests::CreateRoom &request)> callback);
            void openJoinRoomDialog(std::function<void(const QString &room_id)> callback);
    
            void openLogoutDialog();
    
            void openMemberListDialog(const QString &room_id);
    
            void openReadReceiptsDialog(const QString &event_id);
    
            void hideOverlay();
            void showSolidOverlayModal(QWidget *content,
                                       QFlags<Qt::AlignmentFlag> flags = Qt::AlignCenter);
            void showTransparentOverlayModal(QWidget *content,
                                             QFlags<Qt::AlignmentFlag> flags = Qt::AlignTop |
                                                                               Qt::AlignHCenter);
    
    Konstantinos Sideris's avatar
    Konstantinos Sideris committed
    protected:
    
            void closeEvent(QCloseEvent *event) override;
            void resizeEvent(QResizeEvent *event) override;
            void showEvent(QShowEvent *event) override;
    
    Joe Donofry's avatar
    Joe Donofry committed
            bool event(QEvent *event) override;
    
            //! Show or hide the sidebars based on window's size.
            void adjustSideBars();
    
            //! Handle interaction with the tray icon.
    
            void iconActivated(QSystemTrayIcon::ActivationReason reason);
    
            //! Show the welcome page in the main window.
    
    Nicolas Werner's avatar
    Nicolas Werner committed
            void showWelcomePage();
    
    
            //! Show the login page in the main window.
    
    Nicolas Werner's avatar
    Nicolas Werner committed
            void showLoginPage();
    
            //! Show the register page in the main window.
    
    Nicolas Werner's avatar
    Nicolas Werner committed
            void showRegisterPage();
    
            //! Show user settings page.
    
    Nicolas Werner's avatar
    Nicolas Werner committed
            void showUserSettingsPage();
    
            //! Show the chat page and start communicating with the given access token.
    
            void showChatPage();
    
            void showOverlayProgressBar();
    
            void removeOverlayProgressBar();
    
            virtual void setWindowTitle(int notificationCount);
    
    
    Joe Donofry's avatar
    Joe Donofry committed
    signals:
            void focusChanged(const bool focused);
    
    
    Konstantinos Sideris's avatar
    Konstantinos Sideris committed
    private:
    
            bool loadJdenticonPlugin();
    
    
            void showDialog(QWidget *dialog);
    
            bool hasActiveUser();
            void restoreWindowSize();
    
            //! Check if there is an open dialog.
            bool hasActiveDialogs() const;
    
            //! Check if the current page supports the "minimize to tray" functionality.
            bool pageSupportsTray() 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> userSettings_;
    
            //! Tray icon that shows the unread message count.
    
            TrayIcon *trayIcon_;
    
            //! Notifications display.
    
            SnackBar *snackBar_ = nullptr;
            //! Overlay modal used to project other widgets.
            OverlayModal *modal_       = nullptr;
            LoadingIndicator *spinner_ = nullptr;
    
    
            JdenticonInterface *jdenticonInteface_ = nullptr;
    
    Konstantinos Sideris's avatar
    Konstantinos Sideris committed
    };