2
0
mirror of https://github.com/telegramdesktop/tdesktop synced 2025-08-24 19:27:17 +00:00

177 lines
4.3 KiB
C
Raw Normal View History

/*
This file is part of Telegram Desktop,
the official desktop application for the Telegram messaging service.
For license and copyright information please follow this link:
https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
*/
#pragma once
2017-04-06 17:38:10 +03:00
#include "boxes/abstract_box.h"
2015-10-03 13:09:09 +03:00
class InformBox;
2019-09-18 14:19:05 +03:00
class ConfirmBox : public Ui::BoxContent, public ClickHandlerHost {
public:
using ConfirmedCallback = std::variant<
v::null_t,
FnMut<void()>,
FnMut<void(Fn<void()>)>>;
ConfirmBox(
QWidget*,
const QString &text,
ConfirmedCallback confirmedCallback = FnMut<void()>(),
FnMut<void()> cancelledCallback = FnMut<void()>());
ConfirmBox(
QWidget*,
const QString &text,
const QString &confirmText,
ConfirmedCallback confirmedCallback = FnMut<void()>(),
FnMut<void()> cancelledCallback = FnMut<void()>());
ConfirmBox(
QWidget*,
const QString &text,
const QString &confirmText,
const style::RoundButton &confirmStyle,
ConfirmedCallback confirmedCallback = FnMut<void()>(),
FnMut<void()> cancelledCallback = FnMut<void()>());
ConfirmBox(
QWidget*,
const QString &text,
const QString &confirmText,
const QString &cancelText,
ConfirmedCallback confirmedCallback = FnMut<void()>(),
FnMut<void()> cancelledCallback = FnMut<void()>());
ConfirmBox(
QWidget*,
const QString &text,
const QString &confirmText,
const style::RoundButton &confirmStyle,
const QString &cancelText,
ConfirmedCallback confirmedCallback = FnMut<void()>(),
FnMut<void()> cancelledCallback = FnMut<void()>());
ConfirmBox(
QWidget*,
const TextWithEntities &text,
const QString &confirmText,
ConfirmedCallback confirmedCallback = v::null,
FnMut<void()> cancelledCallback = nullptr);
void updateLink();
2021-10-19 00:36:55 +03:00
// If strict cancel is set the cancelledCallback is only called
// if the cancel button was pressed.
void setStrictCancel(bool strictCancel) {
_strictCancel = strictCancel;
}
2018-05-30 18:08:12 +03:00
void setMaxLineCount(int count);
// ClickHandlerHost interface
2021-10-19 00:36:55 +03:00
void clickHandlerActiveChanged(
const ClickHandlerPtr &p,
bool active) override;
void clickHandlerPressedChanged(
const ClickHandlerPtr &p,
bool pressed) override;
protected:
void prepare() override;
void keyPressEvent(QKeyEvent *e) override;
void paintEvent(QPaintEvent *e) override;
void mouseMoveEvent(QMouseEvent *e) override;
void mousePressEvent(QMouseEvent *e) override;
void mouseReleaseEvent(QMouseEvent *e) override;
void leaveEventHook(QEvent *e) override;
private:
struct InformBoxTag {
};
2021-10-19 00:36:55 +03:00
ConfirmBox(
const InformBoxTag &,
const QString &text,
const QString &doneText,
Fn<void()> closedCallback);
ConfirmBox(
const InformBoxTag &,
const TextWithEntities &text,
const QString &doneText,
Fn<void()> closedCallback);
FnMut<void()> generateInformCallback(Fn<void()> closedCallback);
2015-10-03 13:09:09 +03:00
friend class InformBox;
void confirmed();
void init(const QString &text);
void init(const TextWithEntities &text);
void textUpdated();
2018-05-30 18:08:12 +03:00
void updateHover();
QString _confirmText;
QString _cancelText;
const style::RoundButton &_confirmStyle;
bool _informative = false;
2019-06-12 15:26:04 +02:00
Ui::Text::String _text;
int _textWidth = 0;
int _textHeight = 0;
2018-05-30 18:08:12 +03:00
int _maxLineCount = 16;
QPoint _lastMousePos;
2015-10-03 13:09:09 +03:00
bool _confirmed = false;
bool _cancelled = false;
bool _strictCancel = false;
ConfirmBox::ConfirmedCallback _confirmedCallback;
FnMut<void()> _cancelledCallback;
2015-10-03 13:09:09 +03:00
};
class InformBox : public ConfirmBox {
public:
2021-10-19 00:36:55 +03:00
InformBox(
QWidget*,
const QString &text,
Fn<void()> closedCallback = nullptr);
InformBox(
QWidget*,
const QString &text,
const QString &doneText,
Fn<void()> closedCallback = nullptr);
InformBox(
QWidget*,
const TextWithEntities &text,
Fn<void()> closedCallback = nullptr);
InformBox(
QWidget*,
const TextWithEntities &text,
const QString &doneText,
Fn<void()> closedCallback = nullptr);
};
2015-09-10 14:20:28 +03:00
2019-09-18 14:19:05 +03:00
class ConfirmDontWarnBox : public Ui::BoxContent {
2018-12-05 12:07:17 +04:00
public:
ConfirmDontWarnBox(
QWidget*,
rpl::producer<TextWithEntities> text,
2018-12-05 12:07:17 +04:00
const QString &checkbox,
rpl::producer<QString> confirm,
2018-12-05 12:07:17 +04:00
FnMut<void(bool)> callback);
protected:
void prepare() override;
private:
not_null<Ui::RpWidget*> setupContent(
rpl::producer<TextWithEntities> text,
2018-12-05 12:07:17 +04:00
const QString &checkbox,
FnMut<void(bool)> callback);
rpl::producer<QString> _confirm;
2018-12-05 12:07:17 +04:00
FnMut<void()> _callback;
not_null<Ui::RpWidget*> _content;
};