From 9f3af7234e5175c726675e5e8ad832559744b83e Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Wed, 23 Sep 2020 19:06:09 +0300 Subject: [PATCH] Added ability to pass confirm callback with close to ConfirmBox. --- Telegram/SourceFiles/boxes/confirm_box.cpp | 24 ++++++---- Telegram/SourceFiles/boxes/confirm_box.h | 53 +++++++++++++++++++--- 2 files changed, 62 insertions(+), 15 deletions(-) diff --git a/Telegram/SourceFiles/boxes/confirm_box.cpp b/Telegram/SourceFiles/boxes/confirm_box.cpp index b7c196c89..fb13a8d5d 100644 --- a/Telegram/SourceFiles/boxes/confirm_box.cpp +++ b/Telegram/SourceFiles/boxes/confirm_box.cpp @@ -74,7 +74,7 @@ TextParseOptions kMarkedTextBoxOptions = { ConfirmBox::ConfirmBox( QWidget*, const QString &text, - FnMut confirmedCallback, + ConfirmBox::ConfirmedCallback confirmedCallback, FnMut cancelledCallback) : _confirmText(tr::lng_box_ok(tr::now)) , _cancelText(tr::lng_cancel(tr::now)) @@ -89,7 +89,7 @@ ConfirmBox::ConfirmBox( QWidget*, const QString &text, const QString &confirmText, - FnMut confirmedCallback, + ConfirmBox::ConfirmedCallback confirmedCallback, FnMut cancelledCallback) : _confirmText(confirmText) , _cancelText(tr::lng_cancel(tr::now)) @@ -104,7 +104,7 @@ ConfirmBox::ConfirmBox( QWidget*, const TextWithEntities &text, const QString &confirmText, - FnMut confirmedCallback, + ConfirmBox::ConfirmedCallback confirmedCallback, FnMut cancelledCallback) : _confirmText(confirmText) , _cancelText(tr::lng_cancel(tr::now)) @@ -120,7 +120,7 @@ ConfirmBox::ConfirmBox( const QString &text, const QString &confirmText, const style::RoundButton &confirmStyle, - FnMut confirmedCallback, + ConfirmBox::ConfirmedCallback confirmedCallback, FnMut cancelledCallback) : _confirmText(confirmText) , _cancelText(tr::lng_cancel(tr::now)) @@ -136,7 +136,7 @@ ConfirmBox::ConfirmBox( const QString &text, const QString &confirmText, const QString &cancelText, - FnMut confirmedCallback, + ConfirmBox::ConfirmedCallback confirmedCallback, FnMut cancelledCallback) : _confirmText(confirmText) , _cancelText(cancelText) @@ -153,7 +153,7 @@ ConfirmBox::ConfirmBox( const QString &confirmText, const style::RoundButton &confirmStyle, const QString &cancelText, - FnMut confirmedCallback, + ConfirmBox::ConfirmedCallback confirmedCallback, FnMut cancelledCallback) : _confirmText(confirmText) , _cancelText(cancelText) @@ -256,8 +256,16 @@ void ConfirmBox::textUpdated() { void ConfirmBox::confirmed() { if (!_confirmed) { _confirmed = true; - if (auto callback = std::move(_confirmedCallback)) { - callback(); + + const auto confirmed = &_confirmedCallback; + if (const auto callbackPtr = std::get_if<1>(confirmed)) { + if (auto callback = base::take(*callbackPtr)) { + callback(); + } + } else if (const auto callbackPtr = std::get_if<2>(confirmed)) { + if (auto callback = base::take(*callbackPtr)) { + callback([=] { closeBox(); }); + } } } } diff --git a/Telegram/SourceFiles/boxes/confirm_box.h b/Telegram/SourceFiles/boxes/confirm_box.h index bfa9ca13a..3b8f80e05 100644 --- a/Telegram/SourceFiles/boxes/confirm_box.h +++ b/Telegram/SourceFiles/boxes/confirm_box.h @@ -28,12 +28,51 @@ class EmptyUserpic; class InformBox; class ConfirmBox : public Ui::BoxContent, public ClickHandlerHost { public: - ConfirmBox(QWidget*, const QString &text, FnMut confirmedCallback = FnMut(), FnMut cancelledCallback = FnMut()); - ConfirmBox(QWidget*, const QString &text, const QString &confirmText, FnMut confirmedCallback = FnMut(), FnMut cancelledCallback = FnMut()); - ConfirmBox(QWidget*, const QString &text, const QString &confirmText, const style::RoundButton &confirmStyle, FnMut confirmedCallback = FnMut(), FnMut cancelledCallback = FnMut()); - ConfirmBox(QWidget*, const QString &text, const QString &confirmText, const QString &cancelText, FnMut confirmedCallback = FnMut(), FnMut cancelledCallback = FnMut()); - ConfirmBox(QWidget*, const QString &text, const QString &confirmText, const style::RoundButton &confirmStyle, const QString &cancelText, FnMut confirmedCallback = FnMut(), FnMut cancelledCallback = FnMut()); - ConfirmBox(QWidget*, const TextWithEntities &text, const QString &confirmText, FnMut confirmedCallback = nullptr, FnMut cancelledCallback = nullptr); + + using ConfirmedCallback = std::variant< + v::null_t, + FnMut, + FnMut)>>; + + ConfirmBox( + QWidget*, + const QString &text, + ConfirmedCallback confirmedCallback = FnMut(), + FnMut cancelledCallback = FnMut()); + ConfirmBox( + QWidget*, + const QString &text, + const QString &confirmText, + ConfirmedCallback confirmedCallback = FnMut(), + FnMut cancelledCallback = FnMut()); + ConfirmBox( + QWidget*, + const QString &text, + const QString &confirmText, + const style::RoundButton &confirmStyle, + ConfirmedCallback confirmedCallback = FnMut(), + FnMut cancelledCallback = FnMut()); + ConfirmBox( + QWidget*, + const QString &text, + const QString &confirmText, + const QString &cancelText, + ConfirmedCallback confirmedCallback = FnMut(), + FnMut cancelledCallback = FnMut()); + ConfirmBox( + QWidget*, + const QString &text, + const QString &confirmText, + const style::RoundButton &confirmStyle, + const QString &cancelText, + ConfirmedCallback confirmedCallback = FnMut(), + FnMut cancelledCallback = FnMut()); + ConfirmBox( + QWidget*, + const TextWithEntities &text, + const QString &confirmText, + ConfirmedCallback confirmedCallback = v::null, + FnMut cancelledCallback = nullptr); void updateLink(); @@ -87,7 +126,7 @@ private: bool _confirmed = false; bool _cancelled = false; bool _strictCancel = false; - FnMut _confirmedCallback; + ConfirmBox::ConfirmedCallback _confirmedCallback; FnMut _cancelledCallback; };