Use shared pointer for the modals

This commit is contained in:
Konstantinos Sideris 2017-10-07 20:09:34 +03:00
parent 800d9ecff3
commit bc4b47a5e3
12 changed files with 85 additions and 62 deletions

View File

@ -110,8 +110,8 @@ private:
// Keeps track of the users currently typing on each room.
QMap<QString, QList<QString>> typingUsers_;
QuickSwitcher *quickSwitcher_ = nullptr;
OverlayModal *quickSwitcherModal_ = nullptr;
QSharedPointer<QuickSwitcher> quickSwitcher_;
QSharedPointer<OverlayModal> quickSwitcherModal_;
// Matrix Client API provider.
QSharedPointer<MatrixClient> client_;

View File

@ -43,5 +43,5 @@ private:
// Horizontal distance from panel's bottom right corner.
int horizontal_distance_ = 70;
EmojiPanel *panel_;
QSharedPointer<EmojiPanel> panel_;
};

View File

@ -83,8 +83,8 @@ private:
ChatPage *chat_page_;
// Used to hide undefined states between page transitions.
OverlayModal *progress_modal_;
LoadingIndicator *spinner_;
QSharedPointer<OverlayModal> progressModal_;
QSharedPointer<LoadingIndicator> spinner_;
// Matrix Client API provider.
QSharedPointer<MatrixClient> client_;

View File

@ -76,8 +76,8 @@ private:
OverlayModal *joinRoomModal_;
JoinRoomDialog *joinRoomDialog_;
OverlayModal *leaveRoomModal;
LeaveRoomDialog *leaveRoomDialog_;
QSharedPointer<OverlayModal> leaveRoomModal_;
QSharedPointer<LeaveRoomDialog> leaveRoomDialog_;
QMap<QString, QSharedPointer<RoomInfoListItem>> rooms_;

View File

@ -77,8 +77,8 @@ private:
FlatButton *settingsBtn_;
OverlayModal *leaveRoomModal;
LeaveRoomDialog *leaveRoomDialog_;
QSharedPointer<OverlayModal> leaveRoomModal_;
QSharedPointer<LeaveRoomDialog> leaveRoomDialog_;
Avatar *avatar_;

View File

@ -68,8 +68,8 @@ private:
QImage avatar_image_;
OverlayModal *logoutModal_;
LogoutDialog *logoutDialog_;
QSharedPointer<OverlayModal> logoutModal_;
QSharedPointer<LogoutDialog> logoutDialog_;
int logoutButtonSize_;
};

View File

@ -572,21 +572,26 @@ ChatPage::keyPressEvent(QKeyEvent *event)
void
ChatPage::showQuickSwitcher()
{
if (quickSwitcher_ == nullptr) {
quickSwitcher_ = new QuickSwitcher(this);
if (quickSwitcher_.isNull()) {
quickSwitcher_ = QSharedPointer<QuickSwitcher>(
new QuickSwitcher(this),
[=](QuickSwitcher *switcher) { switcher->deleteLater(); });
connect(quickSwitcher_,
connect(quickSwitcher_.data(),
&QuickSwitcher::roomSelected,
room_list_,
&RoomList::highlightSelectedRoom);
connect(quickSwitcher_, &QuickSwitcher::closing, this, [=]() {
if (this->quickSwitcherModal_ != nullptr)
connect(quickSwitcher_.data(), &QuickSwitcher::closing, this, [=]() {
if (!this->quickSwitcherModal_.isNull())
this->quickSwitcherModal_->fadeOut();
});
}
if (quickSwitcherModal_ == nullptr) {
quickSwitcherModal_ = new OverlayModal(MainWindow::instance(), quickSwitcher_);
if (quickSwitcherModal_.isNull()) {
quickSwitcherModal_ = QSharedPointer<OverlayModal>(
new OverlayModal(MainWindow::instance(), quickSwitcher_.data()),
[=](OverlayModal *modal) { modal->deleteLater(); });
quickSwitcherModal_->setDuration(0);
quickSwitcherModal_->setColor(QColor(30, 30, 30, 170));
}

View File

@ -30,9 +30,10 @@ EmojiPickButton::enterEvent(QEvent *e)
{
Q_UNUSED(e);
if (panel_ == nullptr) {
panel_ = new EmojiPanel(this);
connect(panel_, &EmojiPanel::emojiSelected, this, &EmojiPickButton::emojiSelected);
if (panel_.isNull()) {
panel_ = QSharedPointer<EmojiPanel>(new EmojiPanel(this));
connect(
panel_.data(), &EmojiPanel::emojiSelected, this, &EmojiPickButton::emojiSelected);
}
QPoint pos(rect().x(), rect().y());

View File

@ -15,8 +15,8 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "MainWindow.h"
#include "Config.h"
#include "MainWindow.h"
#include <QApplication>
#include <QLayout>
@ -29,7 +29,7 @@ MainWindow *MainWindow::instance_ = nullptr;
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, progress_modal_{ nullptr }
, progressModal_{ nullptr }
, spinner_{ nullptr }
{
QSizePolicy sizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
@ -132,18 +132,14 @@ MainWindow::removeOverlayProgressBar()
connect(timer, &QTimer::timeout, [=]() {
timer->deleteLater();
if (progress_modal_ != nullptr) {
progress_modal_->deleteLater();
progress_modal_->fadeOut();
}
if (!progressModal_.isNull())
progressModal_->fadeOut();
if (spinner_ != nullptr)
spinner_->deleteLater();
if (!spinner_.isNull())
spinner_->stop();
spinner_->stop();
progress_modal_ = nullptr;
spinner_ = nullptr;
progressModal_.reset();
spinner_.reset();
});
timer->start(500);
@ -166,18 +162,22 @@ MainWindow::showChatPage(QString userid, QString homeserver, QString token)
QTimer::singleShot(
modalOpacityDuration + 100, this, [=]() { pageStack_->setCurrentWidget(chat_page_); });
if (spinner_ == nullptr) {
spinner_ = new LoadingIndicator(this);
if (spinner_.isNull()) {
spinner_ = QSharedPointer<LoadingIndicator>(
new LoadingIndicator(this),
[=](LoadingIndicator *indicator) { indicator->deleteLater(); });
spinner_->setColor("#acc7dc");
spinner_->setFixedHeight(120);
spinner_->setFixedWidth(120);
spinner_->start();
}
if (progress_modal_ == nullptr) {
progress_modal_ = new OverlayModal(this, spinner_);
progress_modal_->fadeIn();
progress_modal_->setDuration(modalOpacityDuration);
if (progressModal_.isNull()) {
progressModal_ =
QSharedPointer<OverlayModal>(new OverlayModal(this, spinner_.data()),
[=](OverlayModal *modal) { modal->deleteLater(); });
progressModal_->fadeIn();
progressModal_->setDuration(modalOpacityDuration);
}
login_page_->reset();

View File

@ -168,16 +168,23 @@ RoomList::setInitialRooms(const QMap<QString, QSharedPointer<RoomSettings>> &set
void
RoomList::openLeaveRoomDialog(const QString &room_id)
{
leaveRoomDialog_ = new LeaveRoomDialog(this);
connect(leaveRoomDialog_, &LeaveRoomDialog::closing, this, [=](bool leaving) {
closeLeaveRoomDialog(leaving, room_id);
});
if (leaveRoomDialog_.isNull()) {
leaveRoomDialog_ = QSharedPointer<LeaveRoomDialog>(new LeaveRoomDialog(this));
leaveRoomModal = new OverlayModal(MainWindow::instance(), leaveRoomDialog_);
leaveRoomModal->setDuration(0);
leaveRoomModal->setColor(QColor(55, 55, 55, 170));
connect(leaveRoomDialog_.data(),
&LeaveRoomDialog::closing,
this,
[=](bool leaving) { closeLeaveRoomDialog(leaving, room_id); });
}
leaveRoomModal->fadeIn();
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
@ -266,7 +273,7 @@ RoomList::closeJoinRoomDialog(bool isJoining, QString roomAlias)
void
RoomList::closeLeaveRoomDialog(bool leaving, const QString &room_id)
{
leaveRoomModal->fadeOut();
leaveRoomModal_->fadeOut();
if (leaving) {
client_->leaveRoom(room_id);

View File

@ -86,15 +86,24 @@ TopRoomBar::TopRoomBar(QWidget *parent)
leaveRoom_ = new QAction(tr("Leave room"), this);
connect(leaveRoom_, &QAction::triggered, this, [=]() {
leaveRoomDialog_ = new LeaveRoomDialog(this);
connect(
leaveRoomDialog_, SIGNAL(closing(bool)), this, SLOT(closeLeaveRoomDialog(bool)));
if (leaveRoomDialog_.isNull()) {
leaveRoomDialog_ =
QSharedPointer<LeaveRoomDialog>(new LeaveRoomDialog(this));
leaveRoomModal = new OverlayModal(MainWindow::instance(), leaveRoomDialog_);
leaveRoomModal->setDuration(100);
leaveRoomModal->setColor(QColor(55, 55, 55, 170));
connect(leaveRoomDialog_.data(),
SIGNAL(closing(bool)),
this,
SLOT(closeLeaveRoomDialog(bool)));
}
leaveRoomModal->fadeIn();
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_);
@ -117,7 +126,7 @@ TopRoomBar::TopRoomBar(QWidget *parent)
void
TopRoomBar::closeLeaveRoomDialog(bool leaving)
{
leaveRoomModal->fadeOut();
leaveRoomModal_->fadeOut();
if (leaving) {
emit leaveRoom();

View File

@ -93,18 +93,19 @@ UserInfoWidget::UserInfoWidget(QWidget *parent)
// Show the confirmation dialog.
connect(logoutButton_, &QPushButton::clicked, this, [=]() {
if (logoutDialog_ == nullptr) {
logoutDialog_ = new LogoutDialog(this);
connect(logoutDialog_,
if (logoutDialog_.isNull()) {
logoutDialog_ = QSharedPointer<LogoutDialog>(new LogoutDialog(this));
connect(logoutDialog_.data(),
SIGNAL(closing(bool)),
this,
SLOT(closeLogoutDialog(bool)));
}
if (logoutModal_ == nullptr) {
logoutModal_ = new OverlayModal(MainWindow::instance(), logoutDialog_);
if (logoutModal_.isNull()) {
logoutModal_ = QSharedPointer<OverlayModal>(
new OverlayModal(MainWindow::instance(), logoutDialog_.data()));
logoutModal_->setDuration(0);
logoutModal_->setColor(QColor(55, 55, 55, 170));
logoutModal_->setColor(QColor(30, 30, 30, 170));
}
logoutModal_->fadeIn();