1 files changed, 174 insertions, 0 deletions
diff --git a/src/MainWindow.h b/src/MainWindow.h
new file mode 100644
index 00000000..92040191
--- /dev/null
+++ b/src/MainWindow.h
@@ -0,0 +1,174 @@
+/*
+ * nheko Copyright (C) 2017 Konstantinos Sideris <siderisk@auth.gr>
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include <functional>
+
+#include <QMainWindow>
+#include <QSharedPointer>
+#include <QStackedWidget>
+#include <QSystemTrayIcon>
+
+#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);
+
+ 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(std::function<void()> callback);
+ void openRoomSettings(const QString &room_id = "");
+ void openMemberListDialog(const QString &room_id = "");
+
+protected:
+ void closeEvent(QCloseEvent *event) override;
+ void resizeEvent(QResizeEvent *event) override;
+ void showEvent(QShowEvent *event) override;
+
+private slots:
+ //! 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.
+ void showWelcomePage()
+ {
+ removeOverlayProgressBar();
+ pageStack_->addWidget(welcome_page_);
+ pageStack_->setCurrentWidget(welcome_page_);
+ }
+
+ //! Show the login page in the main window.
+ void showLoginPage()
+ {
+ pageStack_->addWidget(login_page_);
+ pageStack_->setCurrentWidget(login_page_);
+ }
+
+ //! Show the register page in the main window.
+ void showRegisterPage()
+ {
+ pageStack_->addWidget(register_page_);
+ 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;
+ //! 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_;
+ //! Used to hide undefined states between page transitions.
+ QSharedPointer<OverlayModal> progressModal_;
+ QSharedPointer<LoadingIndicator> spinner_;
+ //! Tray icon that shows the unread message count.
+ TrayIcon *trayIcon_;
+ //! Notifications display.
+ QSharedPointer<SnackBar> snackBar_;
+ //! Leave room modal.
+ QSharedPointer<OverlayModal> leaveRoomModal_;
+ //! Leave room dialog.
+ QSharedPointer<dialogs::LeaveRoom> leaveRoomDialog_;
+ //! Invite users modal.
+ QSharedPointer<OverlayModal> inviteUsersModal_;
+ //! Invite users dialog.
+ QSharedPointer<dialogs::InviteUsers> inviteUsersDialog_;
+ //! Join room modal.
+ QSharedPointer<OverlayModal> joinRoomModal_;
+ //! Join room dialog.
+ QSharedPointer<dialogs::JoinRoom> joinRoomDialog_;
+ //! Create room modal.
+ QSharedPointer<OverlayModal> createRoomModal_;
+ //! Create room dialog.
+ QSharedPointer<dialogs::CreateRoom> createRoomDialog_;
+ //! Logout modal.
+ QSharedPointer<OverlayModal> logoutModal_;
+ //! Logout dialog.
+ QSharedPointer<dialogs::Logout> logoutDialog_;
+ //! Room settings modal.
+ QSharedPointer<OverlayModal> roomSettingsModal_;
+ //! Room settings dialog.
+ QSharedPointer<dialogs::RoomSettings> roomSettingsDialog_;
+ //! Member list modal.
+ QSharedPointer<OverlayModal> memberListModal_;
+ //! Member list dialog.
+ QSharedPointer<dialogs::MemberList> memberListDialog_;
+};
|