149 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			149 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/*
 | 
						|
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
 | 
						|
 | 
						|
#include "ui/effects/round_checkbox.h"
 | 
						|
 | 
						|
namespace style {
 | 
						|
struct PremiumLimits;
 | 
						|
} // namespace style
 | 
						|
 | 
						|
namespace tr {
 | 
						|
template <typename ...>
 | 
						|
struct phrase;
 | 
						|
} // namespace tr
 | 
						|
 | 
						|
enum lngtag_count : int;
 | 
						|
 | 
						|
namespace Data {
 | 
						|
struct SubscriptionOption;
 | 
						|
} // namespace Data
 | 
						|
 | 
						|
namespace style {
 | 
						|
struct RoundImageCheckbox;
 | 
						|
struct PremiumOption;
 | 
						|
struct TextStyle;
 | 
						|
struct PremiumBubble;
 | 
						|
} // namespace style
 | 
						|
 | 
						|
namespace Ui {
 | 
						|
 | 
						|
class GenericBox;
 | 
						|
class RadiobuttonGroup;
 | 
						|
class VerticalLayout;
 | 
						|
 | 
						|
namespace Premium {
 | 
						|
 | 
						|
inline constexpr auto kLimitRowRatio = 0.5;
 | 
						|
 | 
						|
void AddBubbleRow(
 | 
						|
	not_null<Ui::VerticalLayout*> parent,
 | 
						|
	const style::PremiumBubble &st,
 | 
						|
	rpl::producer<> showFinishes,
 | 
						|
	int min,
 | 
						|
	int current,
 | 
						|
	int max,
 | 
						|
	bool premiumPossible,
 | 
						|
	std::optional<tr::phrase<lngtag_count>> phrase,
 | 
						|
	const style::icon *icon);
 | 
						|
 | 
						|
struct BubbleRowState {
 | 
						|
	int counter = 0;
 | 
						|
	float64 ratio = 0.;
 | 
						|
	bool animateFromZero = false;
 | 
						|
	bool dynamic = false;
 | 
						|
};
 | 
						|
void AddBubbleRow(
 | 
						|
	not_null<Ui::VerticalLayout*> parent,
 | 
						|
	const style::PremiumBubble &st,
 | 
						|
	rpl::producer<> showFinishes,
 | 
						|
	rpl::producer<BubbleRowState> state,
 | 
						|
	bool premiumPossible,
 | 
						|
	Fn<QString(int)> text,
 | 
						|
	const style::icon *icon,
 | 
						|
	const style::margins &outerPadding);
 | 
						|
 | 
						|
void AddLimitRow(
 | 
						|
	not_null<Ui::VerticalLayout*> parent,
 | 
						|
	const style::PremiumLimits &st,
 | 
						|
	QString max,
 | 
						|
	QString min = {},
 | 
						|
	float64 ratio = kLimitRowRatio);
 | 
						|
 | 
						|
void AddLimitRow(
 | 
						|
	not_null<Ui::VerticalLayout*> parent,
 | 
						|
	const style::PremiumLimits &st,
 | 
						|
	int max,
 | 
						|
	std::optional<tr::phrase<lngtag_count>> phrase,
 | 
						|
	int min = 0,
 | 
						|
	float64 ratio = kLimitRowRatio);
 | 
						|
 | 
						|
struct LimitRowLabels {
 | 
						|
	rpl::producer<QString> leftLabel;
 | 
						|
	rpl::producer<QString> leftCount;
 | 
						|
	rpl::producer<QString> rightLabel;
 | 
						|
	rpl::producer<QString> rightCount;
 | 
						|
};
 | 
						|
 | 
						|
struct LimitRowState {
 | 
						|
	float64 ratio = 0.;
 | 
						|
	bool animateFromZero = false;
 | 
						|
	bool dynamic = false;
 | 
						|
};
 | 
						|
 | 
						|
void AddLimitRow(
 | 
						|
	not_null<Ui::VerticalLayout*> parent,
 | 
						|
	const style::PremiumLimits &st,
 | 
						|
	LimitRowLabels labels,
 | 
						|
	rpl::producer<LimitRowState> state,
 | 
						|
	const style::margins &padding);
 | 
						|
 | 
						|
struct AccountsRowArgs final {
 | 
						|
	std::shared_ptr<Ui::RadiobuttonGroup> group;
 | 
						|
	const style::RoundImageCheckbox &st;
 | 
						|
	const style::TextStyle &stName;
 | 
						|
	const style::color &stNameFg;
 | 
						|
	struct Entry final {
 | 
						|
		QString name;
 | 
						|
		Ui::RoundImageCheckbox::PaintRoundImage paintRoundImage;
 | 
						|
	};
 | 
						|
	std::vector<Entry> entries;
 | 
						|
};
 | 
						|
 | 
						|
void AddAccountsRow(
 | 
						|
	not_null<Ui::VerticalLayout*> parent,
 | 
						|
	AccountsRowArgs &&args);
 | 
						|
 | 
						|
[[nodiscard]] QGradientStops LimitGradientStops();
 | 
						|
[[nodiscard]] QGradientStops ButtonGradientStops();
 | 
						|
[[nodiscard]] QGradientStops LockGradientStops();
 | 
						|
[[nodiscard]] QGradientStops FullHeightGradientStops();
 | 
						|
[[nodiscard]] QGradientStops GiftGradientStops();
 | 
						|
 | 
						|
struct ListEntry final {
 | 
						|
	rpl::producer<QString> title;
 | 
						|
	rpl::producer<TextWithEntities> about;
 | 
						|
	int leftNumber = 0;
 | 
						|
	int rightNumber = 0;
 | 
						|
	std::optional<QString> customRightText;
 | 
						|
	const style::icon *icon = nullptr;
 | 
						|
};
 | 
						|
void ShowListBox(
 | 
						|
	not_null<Ui::GenericBox*> box,
 | 
						|
	const style::PremiumLimits &st,
 | 
						|
	std::vector<ListEntry> entries);
 | 
						|
 | 
						|
void AddGiftOptions(
 | 
						|
	not_null<Ui::VerticalLayout*> parent,
 | 
						|
	std::shared_ptr<Ui::RadiobuttonGroup> group,
 | 
						|
	std::vector<Data::SubscriptionOption> gifts,
 | 
						|
	const style::PremiumOption &st,
 | 
						|
	bool topBadges = false);
 | 
						|
 | 
						|
} // namespace Premium
 | 
						|
} // namespace Ui
 |