Move LeaveRoom dialog to MainWindow (#87)

This commit is contained in:
Konstantinos Sideris 2018-02-10 16:05:31 +02:00
parent 3fd257243c
commit 26f221ec23
8 changed files with 37 additions and 86 deletions

View file

@ -66,6 +66,7 @@ public:
void bootstrap(QString userid, QString homeserver, QString token); void bootstrap(QString userid, QString homeserver, QString token);
void showQuickSwitcher(); void showQuickSwitcher();
void showReadReceipts(const QString &event_id); void showReadReceipts(const QString &event_id);
QString currentRoom() const { return current_room_; }
static ChatPage *instance() { return instance_; } static ChatPage *instance() { return instance_; }

View file

@ -35,17 +35,22 @@ class SnackBar;
class TrayIcon; class TrayIcon;
class UserSettings; class UserSettings;
namespace dialogs {
class LeaveRoom;
}
class MainWindow : public QMainWindow class MainWindow : public QMainWindow
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit MainWindow(QWidget *parent = 0); explicit MainWindow(QWidget *parent = 0);
~MainWindow();
static MainWindow *instance() { return instance_; }; static MainWindow *instance() { return instance_; };
void saveCurrentWindowSize(); void saveCurrentWindowSize();
void openLeaveRoomDialog(const QString &room_id = "");
protected: protected:
void closeEvent(QCloseEvent *event); void closeEvent(QCloseEvent *event);
@ -78,31 +83,27 @@ private:
//! The initial welcome screen. //! The initial welcome screen.
WelcomePage *welcome_page_; WelcomePage *welcome_page_;
//! The login screen. //! The login screen.
LoginPage *login_page_; LoginPage *login_page_;
//! The register page. //! The register page.
RegisterPage *register_page_; RegisterPage *register_page_;
//! A stacked widget that handles the transitions between widgets. //! A stacked widget that handles the transitions between widgets.
QStackedWidget *pageStack_; QStackedWidget *pageStack_;
//! The main chat area. //! The main chat area.
ChatPage *chat_page_; ChatPage *chat_page_;
UserSettingsPage *userSettingsPage_; UserSettingsPage *userSettingsPage_;
QSharedPointer<UserSettings> userSettings_; QSharedPointer<UserSettings> userSettings_;
//! Used to hide undefined states between page transitions. //! Used to hide undefined states between page transitions.
QSharedPointer<OverlayModal> progressModal_; QSharedPointer<OverlayModal> progressModal_;
QSharedPointer<LoadingIndicator> spinner_; QSharedPointer<LoadingIndicator> spinner_;
//! Matrix Client API provider. //! Matrix Client API provider.
QSharedPointer<MatrixClient> client_; QSharedPointer<MatrixClient> client_;
//! Tray icon that shows the unread message count. //! Tray icon that shows the unread message count.
TrayIcon *trayIcon_; TrayIcon *trayIcon_;
//! Notifications display. //! Notifications display.
QSharedPointer<SnackBar> snackBar_; QSharedPointer<SnackBar> snackBar_;
//! Leave room modal.
QSharedPointer<OverlayModal> leaveRoomModal_;
//! Leave room dialog.
QSharedPointer<dialogs::LeaveRoom> leaveRoomDialog_;
}; };

View file

@ -25,8 +25,6 @@
#include <mtx.hpp> #include <mtx.hpp>
#include "dialogs/LeaveRoom.h"
class LeaveRoomDialog; class LeaveRoomDialog;
class MatrixClient; class MatrixClient;
class Cache; class Cache;
@ -79,8 +77,6 @@ public slots:
void updateUnreadMessageCount(const QString &roomid, int count); void updateUnreadMessageCount(const QString &roomid, int count);
void updateRoomDescription(const QString &roomid, const DescInfo &info); void updateRoomDescription(const QString &roomid, const DescInfo &info);
void closeJoinRoomDialog(bool isJoining, QString roomAlias); void closeJoinRoomDialog(bool isJoining, QString roomAlias);
void openLeaveRoomDialog(const QString &room_id);
void closeLeaveRoomDialog(bool leaving, const QString &room_id);
void clearRoomMessageCount(const QString &room_id); void clearRoomMessageCount(const QString &room_id);
protected: protected:
@ -109,9 +105,6 @@ private:
OverlayModal *joinRoomModal_; OverlayModal *joinRoomModal_;
QSharedPointer<OverlayModal> leaveRoomModal_;
QSharedPointer<dialogs::LeaveRoom> leaveRoomDialog_;
std::map<QString, QSharedPointer<RoomInfoListItem>> rooms_; std::map<QString, QSharedPointer<RoomInfoListItem>> rooms_;
QString selectedRoom_; QString selectedRoom_;

View file

@ -53,16 +53,12 @@ public:
void reset(); void reset();
signals: signals:
void leaveRoom();
void inviteUsers(QStringList users); void inviteUsers(QStringList users);
protected: protected:
void paintEvent(QPaintEvent *event) override; void paintEvent(QPaintEvent *event) override;
void mousePressEvent(QMouseEvent *event) override; void mousePressEvent(QMouseEvent *event) override;
private slots:
void closeLeaveRoomDialog(bool leaving);
private: private:
QHBoxLayout *topLayout_; QHBoxLayout *topLayout_;
QVBoxLayout *textLayout_; QVBoxLayout *textLayout_;
@ -79,9 +75,6 @@ private:
FlatButton *settingsBtn_; FlatButton *settingsBtn_;
QSharedPointer<OverlayModal> leaveRoomModal_;
QSharedPointer<dialogs::LeaveRoom> leaveRoomDialog_;
QSharedPointer<OverlayModal> inviteUsersModal_; QSharedPointer<OverlayModal> inviteUsersModal_;
QSharedPointer<dialogs::InviteUsers> inviteUsersDialog_; QSharedPointer<dialogs::InviteUsers> inviteUsersDialog_;

View file

@ -144,8 +144,6 @@ ChatPage::ChatPage(QSharedPointer<MatrixClient> client,
connect(user_info_widget_, SIGNAL(logout()), client_.data(), SLOT(logout())); connect(user_info_widget_, SIGNAL(logout()), client_.data(), SLOT(logout()));
connect(client_.data(), SIGNAL(loggedOut()), this, SLOT(logout())); connect(client_.data(), SIGNAL(loggedOut()), this, SLOT(logout()));
connect(
top_bar_, &TopRoomBar::leaveRoom, this, [=]() { client_->leaveRoom(current_room_); });
connect(top_bar_, &TopRoomBar::inviteUsers, this, [=](QStringList users) { connect(top_bar_, &TopRoomBar::inviteUsers, this, [=](QStringList users) {
for (int ii = 0; ii < users.size(); ++ii) { for (int ii = 0; ii < users.size(); ++ii) {
QTimer::singleShot(ii * 1000, this, [=]() { QTimer::singleShot(ii * 1000, this, [=]() {

View file

@ -33,6 +33,7 @@
#include "TrayIcon.h" #include "TrayIcon.h"
#include "UserSettingsPage.h" #include "UserSettingsPage.h"
#include "WelcomePage.h" #include "WelcomePage.h"
#include "dialogs/LeaveRoom.h"
MainWindow *MainWindow::instance_ = nullptr; MainWindow *MainWindow::instance_ = nullptr;
@ -262,4 +263,24 @@ MainWindow::hasActiveUser()
settings.contains("auth/user_id"); settings.contains("auth/user_id");
} }
MainWindow::~MainWindow() {} void
MainWindow::openLeaveRoomDialog(const QString &room_id)
{
auto roomToLeave = room_id.isEmpty() ? chat_page_->currentRoom() : room_id;
leaveRoomDialog_ = QSharedPointer<dialogs::LeaveRoom>(new dialogs::LeaveRoom(this));
connect(leaveRoomDialog_.data(), &dialogs::LeaveRoom::closing, this, [=](bool leaving) {
leaveRoomModal_->fadeOut();
if (leaving)
client_->leaveRoom(roomToLeave);
});
leaveRoomModal_ =
QSharedPointer<OverlayModal>(new OverlayModal(this, leaveRoomDialog_.data()));
leaveRoomModal_->setDuration(0);
leaveRoomModal_->setColor(QColor(30, 30, 30, 170));
leaveRoomModal_->fadeIn();
}

View file

@ -88,7 +88,9 @@ RoomList::addRoom(const QSharedPointer<RoomSettings> &settings,
{ {
auto room_item = new RoomInfoListItem(settings, state, room_id, scrollArea_); auto room_item = new RoomInfoListItem(settings, state, room_id, scrollArea_);
connect(room_item, &RoomInfoListItem::clicked, this, &RoomList::highlightSelectedRoom); connect(room_item, &RoomInfoListItem::clicked, this, &RoomList::highlightSelectedRoom);
connect(room_item, &RoomInfoListItem::leaveRoom, this, &RoomList::openLeaveRoomDialog); connect(room_item, &RoomInfoListItem::leaveRoom, this, [=](const QString &room_id) {
MainWindow::instance()->openLeaveRoomDialog(room_id);
});
rooms_.emplace(room_id, QSharedPointer<RoomInfoListItem>(room_item)); rooms_.emplace(room_id, QSharedPointer<RoomInfoListItem>(room_item));
@ -189,28 +191,6 @@ RoomList::setInitialRooms(const std::map<QString, QSharedPointer<RoomSettings>>
emit roomChanged(room.first); emit roomChanged(room.first);
} }
void
RoomList::openLeaveRoomDialog(const QString &room_id)
{
if (leaveRoomDialog_.isNull()) {
leaveRoomDialog_ = QSharedPointer<dialogs::LeaveRoom>(new dialogs::LeaveRoom(this));
connect(leaveRoomDialog_.data(),
&dialogs::LeaveRoom::closing,
this,
[=](bool leaving) { closeLeaveRoomDialog(leaving, room_id); });
}
if (leaveRoomModal_.isNull()) {
leaveRoomModal_ = QSharedPointer<OverlayModal>(
new OverlayModal(MainWindow::instance(), leaveRoomDialog_.data()));
leaveRoomModal_->setDuration(0);
leaveRoomModal_->setColor(QColor(30, 30, 30, 170));
}
leaveRoomModal_->fadeIn();
}
void void
RoomList::sync(const std::map<QString, QSharedPointer<RoomState>> &states, RoomList::sync(const std::map<QString, QSharedPointer<RoomState>> &states,
const std::map<QString, QSharedPointer<RoomSettings>> &settings) const std::map<QString, QSharedPointer<RoomSettings>> &settings)
@ -362,15 +342,6 @@ RoomList::closeJoinRoomDialog(bool isJoining, QString roomAlias)
client_->joinRoom(roomAlias); client_->joinRoom(roomAlias);
} }
void
RoomList::closeLeaveRoomDialog(bool leaving, const QString &room_id)
{
leaveRoomModal_->fadeOut();
if (leaving)
client_->leaveRoom(room_id);
}
void void
RoomList::setFilterRooms(bool isFilteringEnabled) RoomList::setFilterRooms(bool isFilteringEnabled)
{ {

View file

@ -119,24 +119,7 @@ TopRoomBar::TopRoomBar(QWidget *parent)
leaveRoom_ = new QAction(tr("Leave room"), this); leaveRoom_ = new QAction(tr("Leave room"), this);
connect(leaveRoom_, &QAction::triggered, this, [=]() { connect(leaveRoom_, &QAction::triggered, this, [=]() {
if (leaveRoomDialog_.isNull()) { MainWindow::instance()->openLeaveRoomDialog();
leaveRoomDialog_ =
QSharedPointer<dialogs::LeaveRoom>(new dialogs::LeaveRoom(this));
connect(leaveRoomDialog_.data(),
SIGNAL(closing(bool)),
this,
SLOT(closeLeaveRoomDialog(bool)));
}
if (leaveRoomModal_.isNull()) {
leaveRoomModal_ = QSharedPointer<OverlayModal>(
new OverlayModal(MainWindow::instance(), leaveRoomDialog_.data()));
leaveRoomModal_->setDuration(0);
leaveRoomModal_->setColor(QColor(30, 30, 30, 170));
}
leaveRoomModal_->fadeIn();
}); });
menu_->addAction(toggleNotifications_); menu_->addAction(toggleNotifications_);
@ -160,16 +143,6 @@ TopRoomBar::TopRoomBar(QWidget *parent)
setLayout(topLayout_); setLayout(topLayout_);
} }
void
TopRoomBar::closeLeaveRoomDialog(bool leaving)
{
leaveRoomModal_->fadeOut();
if (leaving) {
emit leaveRoom();
}
}
void void
TopRoomBar::updateRoomAvatarFromName(const QString &name) TopRoomBar::updateRoomAvatarFromName(const QString &name)
{ {