From 8824c6e4541841e7343023cb1cfeab0b9b23452e Mon Sep 17 00:00:00 2001 From: Michail Vourlakos Date: Thu, 8 Apr 2021 14:39:29 +0300 Subject: [PATCH] dialogs:support multiple information widgets --- app/settings/generic/genericdialog.cpp | 98 ++++++------------- app/settings/generic/genericdialog.h | 19 +--- app/settings/generic/generichandler.cpp | 6 -- app/settings/generic/generichandler.h | 2 - .../settingsdialog/tablayoutshandler.cpp | 2 - 5 files changed, 29 insertions(+), 98 deletions(-) diff --git a/app/settings/generic/genericdialog.cpp b/app/settings/generic/genericdialog.cpp index 272d39232..1967e5f7a 100644 --- a/app/settings/generic/genericdialog.cpp +++ b/app/settings/generic/genericdialog.cpp @@ -42,59 +42,27 @@ namespace Dialog { GenericDialog::GenericDialog(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f) { - m_hideInlineMessageTimer.setSingleShot(true); - m_hideInlineMessageTimer.setInterval(2000); - } GenericDialog::~GenericDialog() { } -void GenericDialog::initMessageWidget() +KMessageWidget *GenericDialog::initMessageWidget() { - if (m_messageWidget) { - return; - } - QVBoxLayout *vLayout = qobject_cast(layout()); if (!vLayout) { - return; + return nullptr; } - m_messageWidget = new KMessageWidget(this); - vLayout->insertWidget(vLayout->count()-1, m_messageWidget); - connect(&m_hideInlineMessageTimer, &QTimer::timeout, this, [&]() { - m_messageWidget->animatedHide(); - }); + auto messagewidget = new KMessageWidget(this); + messagewidget->setVisible(false); + vLayout->insertWidget(vLayout->count()-1, messagewidget); - connect(m_messageWidget, &KMessageWidget::hideAnimationFinished, this, [&]() { - clearCurrentMessageActions(); - }); -} + connect(messagewidget, &KMessageWidget::hideAnimationFinished, messagewidget, &QObject::deleteLater); -void GenericDialog::keyPressEvent(QKeyEvent *event) -{ - if (event && event->key() == Qt::Key_Escape) { - if (m_messageWidget && m_messageWidget->isVisible()) { - m_hideInlineMessageTimer.stop(); - m_messageWidget->animatedHide(); - clearCurrentMessageActions(); - return; - } - } - - QDialog::keyPressEvent(event); -} - -void GenericDialog::clearCurrentMessageActions() -{ - while(m_currentMessageActions.count() > 0) { - QAction *action = m_currentMessageActions.takeAt(0); - m_messageWidget->removeAction(action); - action->deleteLater(); - } + return messagewidget; } int GenericDialog::saveChangesConfirmation(const QString &text) @@ -122,8 +90,10 @@ void GenericDialog::showInlineMessage(const QString &msg, const KMessageWidget:: return; } - if (!m_messageWidget) { - initMessageWidget(); + auto messagewidget = initMessageWidget(); + + if (!messagewidget) { + return; } int hideInterval = 0; @@ -139,47 +109,35 @@ void GenericDialog::showInlineMessage(const QString &msg, const KMessageWidget:: } } - if (!m_currentMessageActions.isEmpty()) { - clearCurrentMessageActions(); - } - - m_messageWidget->setCloseButtonVisible(!isPersistent || actions.count()==0); - - m_currentMessageActions = actions; + messagewidget->setCloseButtonVisible(!isPersistent || actions.count()==0); for (int i=0; iaddAction(actions[i]); + connect(actions[i], &QAction::triggered, messagewidget, &KMessageWidget::animatedHide); + messagewidget->addAction(actions[i]); } - m_hideInlineMessageTimer.stop(); - - if (m_messageWidget->isVisible()) { - m_messageWidget->animatedHide(); - } - - m_messageWidget->setText(msg); + messagewidget->setText(msg); // TODO: wrap at arbitrary character positions once QLabel can do this // https://bugreports.qt.io/browse/QTBUG-1276 - m_messageWidget->setWordWrap(true); - m_messageWidget->setMessageType(type); - m_messageWidget->setWordWrap(false); + messagewidget->setWordWrap(true); + messagewidget->setMessageType(type); + messagewidget->setWordWrap(false); - const int unwrappedWidth = m_messageWidget->sizeHint().width(); - m_messageWidget->setWordWrap(unwrappedWidth > size().width()); + const int unwrappedWidth = messagewidget->sizeHint().width(); + messagewidget->setWordWrap(unwrappedWidth > size().width()); - m_messageWidget->animatedShow(); + messagewidget->animatedShow(); if (hideInterval > 0) { - m_hideInlineMessageTimer.setInterval(hideInterval); - m_hideInlineMessageTimer.start(); - } -} + QTimer *hidetimer = new QTimer(messagewidget); + hidetimer->setInterval(hideInterval); -void GenericDialog::hideInlineMessage() -{ - if (m_messageWidget) { - m_messageWidget->animatedHide(); + connect(hidetimer, &QTimer::timeout, this, [&, messagewidget]() { + messagewidget->animatedHide(); + }); + + hidetimer->start(); } } diff --git a/app/settings/generic/genericdialog.h b/app/settings/generic/genericdialog.h index e3aec147e..b517c812c 100644 --- a/app/settings/generic/genericdialog.h +++ b/app/settings/generic/genericdialog.h @@ -48,25 +48,8 @@ public: int saveChangesConfirmation(const QString &text); -protected: - void keyPressEvent(QKeyEvent *event) override; - private slots: - void initMessageWidget(); - -private: - void clearCurrentMessageActions(); - -private: - KMessageWidget *m_messageWidget{nullptr}; - - //! Current shown KMessageActions - QList m_currentMessageActions; - - //! Timer to hide the inline message widget - QTimer m_hideInlineMessageTimer; - - + KMessageWidget *initMessageWidget(); }; } diff --git a/app/settings/generic/generichandler.cpp b/app/settings/generic/generichandler.cpp index 4dfcf8dd8..8234b6d2a 100644 --- a/app/settings/generic/generichandler.cpp +++ b/app/settings/generic/generichandler.cpp @@ -77,12 +77,6 @@ void Generic::showInlineMessage(const QString &msg, const KMessageWidget::Messag m_dialog->showInlineMessage(msg, type, isPersistent, actions); } -void Generic::hideInlineMessage() -{ - m_dialog->hideInlineMessage(); -} - } - } } diff --git a/app/settings/generic/generichandler.h b/app/settings/generic/generichandler.h index 672bc9772..83ec858d8 100644 --- a/app/settings/generic/generichandler.h +++ b/app/settings/generic/generichandler.h @@ -67,8 +67,6 @@ public slots: virtual void resetDefaults() = 0; virtual void save() = 0; - void hideInlineMessage(); - signals: void dataChanged(); diff --git a/app/settings/settingsdialog/tablayoutshandler.cpp b/app/settings/settingsdialog/tablayoutshandler.cpp index 59c503cb7..13fe00aa5 100644 --- a/app/settings/settingsdialog/tablayoutshandler.cpp +++ b/app/settings/settingsdialog/tablayoutshandler.cpp @@ -456,10 +456,8 @@ void TabLayouts::installLayoutTemplate(Latte::Data::Layout importedLayout, QStri actions << yesAction; actions << noAction; - connect(noAction, &QAction::triggered, this, &Generic::hideInlineMessage); connect(yesAction, &QAction::triggered, this, [&, templateFilePath]() { m_corona->templatesManager()->installCustomLayoutTemplate(templateFilePath); - hideInlineMessage(); }); showInlineMessage(informationText,