From b84bfb390728db35c4c74660d15e3b9751f700bd Mon Sep 17 00:00:00 2001 From: Skycoder42 Date: Thu, 28 Jun 2018 21:56:41 +0200 Subject: [PATCH] allow any btn --- src/imports/mvvmcore/plugins.qmltypes | 10 +++++-- src/mvvmcore/message.cpp | 4 +-- src/mvvmcore/message.h | 4 +-- src/mvvmwidgets/progressdialog.cpp | 41 ++++++++++++--------------- src/mvvmwidgets/progressdialog_p.h | 7 ++--- src/mvvmwidgets/widgetspresenter.cpp | 2 +- 6 files changed, 33 insertions(+), 35 deletions(-) diff --git a/src/imports/mvvmcore/plugins.qmltypes b/src/imports/mvvmcore/plugins.qmltypes index 431f2fe..9a85034 100644 --- a/src/imports/mvvmcore/plugins.qmltypes +++ b/src/imports/mvvmcore/plugins.qmltypes @@ -126,7 +126,10 @@ Module { Parameter { name: "text"; type: "string" } } Signal { name: "closeRequested" } - Signal { name: "canceled" } + Signal { + name: "canceled" + Parameter { name: "btn"; type: "MessageConfig::StandardButton" } + } Signal { name: "closed" } Method { name: "close" } Method { @@ -157,7 +160,10 @@ Module { name: "setProgress" Parameter { name: "progressPercent"; type: "double" } } - Method { name: "requestCancel" } + Method { + name: "requestCancel" + Parameter { name: "btn"; type: "MessageConfig::StandardButton" } + } Method { name: "notifyClosed" } } Component { diff --git a/src/mvvmcore/message.cpp b/src/mvvmcore/message.cpp index 3c69cc9..84b1a3b 100644 --- a/src/mvvmcore/message.cpp +++ b/src/mvvmcore/message.cpp @@ -329,9 +329,9 @@ int ProgressControl::progress() const return d->progress; } -void ProgressControl::requestCancel() +void ProgressControl::requestCancel(MessageConfig::StandardButton btn) { - emit canceled({}); + emit canceled(btn, {}); } void ProgressControl::notifyClosed() diff --git a/src/mvvmcore/message.h b/src/mvvmcore/message.h index 8b6dfe4..9d8526a 100644 --- a/src/mvvmcore/message.h +++ b/src/mvvmcore/message.h @@ -263,7 +263,7 @@ public: int maximum() const; int progress() const; - Q_INVOKABLE void requestCancel(); + Q_INVOKABLE void requestCancel(MessageConfig::StandardButton btn); Q_INVOKABLE void notifyClosed(); public Q_SLOTS: @@ -287,7 +287,7 @@ Q_SIGNALS: void changeLabel(const QString &text, QPrivateSignal); void closeRequested(QPrivateSignal); - void canceled(QPrivateSignal); + void canceled(MessageConfig::StandardButton btn, QPrivateSignal); void closed(QPrivateSignal); private: diff --git a/src/mvvmwidgets/progressdialog.cpp b/src/mvvmwidgets/progressdialog.cpp index f5c39dd..df778db 100644 --- a/src/mvvmwidgets/progressdialog.cpp +++ b/src/mvvmwidgets/progressdialog.cpp @@ -42,18 +42,20 @@ ProgressDialog::ProgressDialog(const MessageConfig &config, QPointeraddWidget(_progress); //add the cancel button, in case it was requested - if(config.buttons().testFlag(MessageConfig::Cancel)) { + if(config.buttons() != MessageConfig::NoButton) { _btnBox = new QDialogButtonBox{this}; - _btnBox->setStandardButtons(QDialogButtonBox::Cancel); //is ok, as the buttons are the same - auto btnTexts = config.buttonTexts(); - if(btnTexts.contains(MessageConfig::Cancel)) - _btnBox->button(QDialogButtonBox::Cancel)->setText(btnTexts.value(MessageConfig::Cancel)); + _btnBox->setStandardButtons(static_cast(static_cast(config.buttons()))); //is ok, as the buttons are the same + auto btns = config.buttonTexts(); + for(auto it = btns.constBegin(); it != btns.constEnd(); it++){ + auto sBtn = static_cast(it.key()); + Q_ASSERT(_btnBox->standardButtons().testFlag(sBtn)); //Must be the case now because of the change in MessageConfig + _btnBox->button(sBtn)->setText(it.value()); + } layout->addWidget(_btnBox); // connect the box connect(_btnBox, &QDialogButtonBox::clicked, this, [this](QAbstractButton *btn) { - if(_btnBox->standardButton(btn) == QDialogButtonBox::Cancel) - tryCancel(); + tryCancel(_btnBox->standardButton(btn)); }); } @@ -75,9 +77,6 @@ ProgressDialog::ProgressDialog(const MessageConfig &config, QPointernotifyClosed(); - if(_result) { - if(_wasCanceled) - _result->complete(MessageConfig::Cancel); - else - _result->complete(MessageConfig::Close); - } + if(_result) + _result->complete(_cancelAction); } void ProgressDialog::closeEvent(QCloseEvent *event) { event->ignore(); - tryCancel(); + tryCancel(QDialogButtonBox::Cancel); } -void ProgressDialog::tryCancel() +void ProgressDialog::tryCancel(QDialogButtonBox::StandardButton btn) { - if(!_wasCanceled && _btnBox) { - _wasCanceled = true; - _btnBox->button(QDialogButtonBox::Cancel)->setEnabled(false); + if(_cancelAction == MessageConfig::NoButton && _btnBox) { + _cancelAction = static_cast(btn); + _btnBox->setEnabled(false); if(_control) - _control->requestCancel(); + _control->requestCancel(_cancelAction); else - done(QDialogButtonBox::Cancel); + done(btn); } } diff --git a/src/mvvmwidgets/progressdialog_p.h b/src/mvvmwidgets/progressdialog_p.h index 7418dcc..e94f6ce 100644 --- a/src/mvvmwidgets/progressdialog_p.h +++ b/src/mvvmwidgets/progressdialog_p.h @@ -27,14 +27,11 @@ public: public Q_SLOTS: void done(int code) override; -Q_SIGNALS: - void canceled(); - protected: void closeEvent(QCloseEvent *event) override; private Q_SLOTS: - void tryCancel(); + void tryCancel(QDialogButtonBox::StandardButton btn); void updateLabel(const QString &text); void setIndetem(bool indetem); @@ -49,7 +46,7 @@ private: QLabel *_label; QProgressBar *_progress; QDialogButtonBox *_btnBox = nullptr; - bool _wasCanceled = false; + MessageConfig::StandardButton _cancelAction = MessageConfig::NoButton; }; } diff --git a/src/mvvmwidgets/widgetspresenter.cpp b/src/mvvmwidgets/widgetspresenter.cpp index fd4acde..5038e15 100644 --- a/src/mvvmwidgets/widgetspresenter.cpp +++ b/src/mvvmwidgets/widgetspresenter.cpp @@ -357,7 +357,7 @@ void WidgetsPresenter::presentInputDialog(const MessageConfig &config, QPointer< //connect stuff connect(btnBox, &QDialogButtonBox::clicked, - dialog, [dialog, btnBox](QAbstractButton *btn){ + dialog, [dialog, btnBox](QAbstractButton *btn){ dialog->done(btnBox->standardButton(btn)); }); connect(dialog, &QDialog::finished,