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.cc122
1 files changed, 120 insertions, 2 deletions
diff --git a/src/MainWindow.cc b/src/MainWindow.cc

index ea30b694..4bdd7819 100644 --- a/src/MainWindow.cc +++ b/src/MainWindow.cc
@@ -21,6 +21,8 @@ #include <QSettings> #include <QShortcut> +#include <mtx/requests.hpp> + #include "ChatPage.h" #include "Config.h" #include "LoadingIndicator.h" @@ -33,7 +35,12 @@ #include "TrayIcon.h" #include "UserSettingsPage.h" #include "WelcomePage.h" + +#include "dialogs/CreateRoom.h" +#include "dialogs/InviteUsers.h" +#include "dialogs/JoinRoom.h" #include "dialogs/LeaveRoom.h" +#include "dialogs/Logout.h" MainWindow *MainWindow::instance_ = nullptr; @@ -255,7 +262,7 @@ MainWindow::openLeaveRoomDialog(const QString &room_id) connect(leaveRoomDialog_.data(), &dialogs::LeaveRoom::closing, this, - [this, &roomToLeave](bool leaving) { + [this, roomToLeave](bool leaving) { leaveRoomModal_->hide(); if (leaving) @@ -291,9 +298,120 @@ MainWindow::showOverlayProgressBar() } } +void +MainWindow::openInviteUsersDialog(std::function<void(const QStringList &invitees)> callback) +{ + if (inviteUsersDialog_.isNull()) { + inviteUsersDialog_ = + QSharedPointer<dialogs::InviteUsers>(new dialogs::InviteUsers(this)); + + connect(inviteUsersDialog_.data(), + &dialogs::InviteUsers::closing, + this, + [this, callback](bool isSending, QStringList invitees) { + inviteUsersModal_->hide(); + + if (isSending && !invitees.isEmpty()) + callback(invitees); + }); + } + + if (inviteUsersModal_.isNull()) { + inviteUsersModal_ = QSharedPointer<OverlayModal>( + new OverlayModal(MainWindow::instance(), inviteUsersDialog_.data())); + inviteUsersModal_->setColor(QColor(30, 30, 30, 170)); + } + + inviteUsersModal_->show(); +} + +void +MainWindow::openJoinRoomDialog(std::function<void(const QString &room_id)> callback) +{ + if (joinRoomDialog_.isNull()) { + joinRoomDialog_ = QSharedPointer<dialogs::JoinRoom>(new dialogs::JoinRoom(this)); + + connect(joinRoomDialog_.data(), + &dialogs::JoinRoom::closing, + this, + [this, callback](bool isJoining, const QString &room) { + joinRoomModal_->hide(); + + if (isJoining && !room.isEmpty()) + callback(room); + }); + } + + if (joinRoomModal_.isNull()) { + joinRoomModal_ = QSharedPointer<OverlayModal>( + new OverlayModal(MainWindow::instance(), joinRoomDialog_.data())); + joinRoomModal_->setColor(QColor(30, 30, 30, 170)); + } + + joinRoomModal_->show(); +} + +void +MainWindow::openCreateRoomDialog( + std::function<void(const mtx::requests::CreateRoom &request)> callback) +{ + if (createRoomDialog_.isNull()) { + createRoomDialog_ = + QSharedPointer<dialogs::CreateRoom>(new dialogs::CreateRoom(this)); + + connect( + createRoomDialog_.data(), + &dialogs::CreateRoom::closing, + this, + [this, callback](bool isCreating, const mtx::requests::CreateRoom &request) { + createRoomModal_->hide(); + + if (isCreating) + callback(request); + }); + } + + if (createRoomModal_.isNull()) { + createRoomModal_ = QSharedPointer<OverlayModal>( + new OverlayModal(MainWindow::instance(), createRoomDialog_.data())); + createRoomModal_->setColor(QColor(30, 30, 30, 170)); + } + + createRoomModal_->show(); +} + +void +MainWindow::openLogoutDialog(std::function<void()> callback) +{ + if (logoutDialog_.isNull()) { + logoutDialog_ = QSharedPointer<dialogs::Logout>(new dialogs::Logout(this)); + connect(logoutDialog_.data(), + &dialogs::Logout::closing, + this, + [this, callback](bool logging_out) { + logoutModal_->hide(); + + if (logging_out) + callback(); + }); + } + + if (logoutModal_.isNull()) { + logoutModal_ = QSharedPointer<OverlayModal>( + new OverlayModal(MainWindow::instance(), logoutDialog_.data())); + logoutModal_->setColor(QColor(30, 30, 30, 170)); + } + + logoutModal_->show(); +} + bool MainWindow::hasActiveDialogs() const { return (!leaveRoomModal_.isNull() && leaveRoomModal_->isVisible()) || - (!progressModal_.isNull() && progressModal_->isVisible()); + (!progressModal_.isNull() && progressModal_->isVisible()) || + (!inviteUsersModal_.isNull() && inviteUsersModal_->isVisible()) || + (!joinRoomModal_.isNull() && joinRoomModal_->isVisible()) || + (!createRoomModal_.isNull() && createRoomModal_->isVisible()) || + (!logoutModal_.isNull() && logoutModal_->isVisible()); }