/* This file is part of Kotatogram Desktop, the unofficial app based on Telegram Desktop. For license and copyright information please follow this link: https://github.com/kotatogram/kotatogram-desktop/blob/dev/LEGAL */ #pragma once #include "boxes/abstract_box.h" namespace Ui { class FlatLabel; } // namespace Ui namespace Kotato { class InformBox; class ConfirmBox : public Ui::BoxContent { 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); // If strict cancel is set the cancelledCallback is only called if the cancel button was pressed. void setStrictCancel(bool strictCancel) { _strictCancel = strictCancel; } protected: void prepare() override; void resizeEvent(QResizeEvent *e) override; void keyPressEvent(QKeyEvent *e) override; private: struct InformBoxTag { }; ConfirmBox(const InformBoxTag &, const QString &text, const QString &doneText, Fn closedCallback); ConfirmBox(const InformBoxTag &, const TextWithEntities &text, const QString &doneText, Fn closedCallback); FnMut generateInformCallback(Fn closedCallback); friend class InformBox; void confirmed(); void init(const QString &text); void init(const TextWithEntities &text); QString _confirmText; QString _cancelText; const style::RoundButton &_confirmStyle; bool _informative = false; object_ptr _text; bool _confirmed = false; bool _cancelled = false; bool _strictCancel = false; FnMut _confirmedCallback; FnMut _cancelledCallback; }; class InformBox : public ConfirmBox { public: InformBox(QWidget*, const QString &text, Fn closedCallback = nullptr); InformBox(QWidget*, const QString &text, const QString &doneText, Fn closedCallback = nullptr); InformBox(QWidget*, const TextWithEntities &text, Fn closedCallback = nullptr); InformBox(QWidget*, const TextWithEntities &text, const QString &doneText, Fn closedCallback = nullptr); }; } // namespace Kotato