131 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			131 lines
		
	
	
	
		
			2.6 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 "base/object_ptr.h"
 | |
| 
 | |
| namespace Ui {
 | |
| 
 | |
| void StartFireworks(not_null<QWidget*> parent);
 | |
| 
 | |
| class Show;
 | |
| class RpWidget;
 | |
| class GenericBox;
 | |
| class VerticalLayout;
 | |
| 
 | |
| struct BoostCounters {
 | |
| 	int level = 0;
 | |
| 	int boosts = 0;
 | |
| 	int thisLevelBoosts = 0;
 | |
| 	int nextLevelBoosts = 0; // Zero means no next level is available.
 | |
| 	int mine = 0;
 | |
| 
 | |
| 	friend inline constexpr bool operator==(
 | |
| 		BoostCounters,
 | |
| 		BoostCounters) = default;
 | |
| };
 | |
| 
 | |
| struct BoostFeatures {
 | |
| 	base::flat_map<int, int> nameColorsByLevel;
 | |
| 	base::flat_map<int, int> linkStylesByLevel;
 | |
| 	int linkLogoLevel = 0;
 | |
| 	int transcribeLevel = 0;
 | |
| 	int emojiPackLevel = 0;
 | |
| 	int emojiStatusLevel = 0;
 | |
| 	int wallpaperLevel = 0;
 | |
| 	int wallpapersCount = 0;
 | |
| 	int customWallpaperLevel = 0;
 | |
| };
 | |
| 
 | |
| struct BoostBoxData {
 | |
| 	QString name;
 | |
| 	BoostCounters boost;
 | |
| 	BoostFeatures features;
 | |
| 	bool allowMulti = false;
 | |
| 	bool group = false;
 | |
| };
 | |
| 
 | |
| void BoostBox(
 | |
| 	not_null<GenericBox*> box,
 | |
| 	BoostBoxData data,
 | |
| 	Fn<void(Fn<void(BoostCounters)>)> boost);
 | |
| 
 | |
| void BoostBoxAlready(not_null<GenericBox*> box, bool group);
 | |
| void GiftForBoostsBox(
 | |
| 	not_null<GenericBox*> box,
 | |
| 	QString channel,
 | |
| 	int receive,
 | |
| 	bool again);
 | |
| void GiftedNoBoostsBox(not_null<GenericBox*> box, bool group);
 | |
| void PremiumForBoostsBox(
 | |
| 	not_null<GenericBox*> box,
 | |
| 	bool group,
 | |
| 	Fn<void()> buyPremium);
 | |
| 
 | |
| struct AskBoostChannelColor {
 | |
| 	int requiredLevel = 0;
 | |
| };
 | |
| 
 | |
| struct AskBoostWallpaper {
 | |
| 	int requiredLevel = 0;
 | |
| 	bool group = false;
 | |
| };
 | |
| 
 | |
| struct AskBoostEmojiStatus {
 | |
| 	int requiredLevel = 0;
 | |
| 	bool group = false;
 | |
| };
 | |
| 
 | |
| struct AskBoostEmojiPack {
 | |
| 	int requiredLevel = 0;
 | |
| };
 | |
| 
 | |
| struct AskBoostCustomReactions {
 | |
| 	int count = 0;
 | |
| };
 | |
| 
 | |
| struct AskBoostCpm {
 | |
| 	int requiredLevel = 0;
 | |
| };
 | |
| 
 | |
| struct AskBoostReason {
 | |
| 	std::variant<
 | |
| 		AskBoostChannelColor,
 | |
| 		AskBoostWallpaper,
 | |
| 		AskBoostEmojiStatus,
 | |
| 		AskBoostEmojiPack,
 | |
| 		AskBoostCustomReactions,
 | |
| 		AskBoostCpm> data;
 | |
| };
 | |
| 
 | |
| struct AskBoostBoxData {
 | |
| 	QString link;
 | |
| 	BoostCounters boost;
 | |
| 	AskBoostReason reason;
 | |
| };
 | |
| 
 | |
| void AskBoostBox(
 | |
| 	not_null<GenericBox*> box,
 | |
| 	AskBoostBoxData data,
 | |
| 	Fn<void()> openStatistics,
 | |
| 	Fn<void()> startGiveaway);
 | |
| 
 | |
| [[nodiscard]] object_ptr<RpWidget> MakeLinkLabel(
 | |
| 	not_null<QWidget*> parent,
 | |
| 	rpl::producer<QString> text,
 | |
| 	rpl::producer<QString> link,
 | |
| 	std::shared_ptr<Show> show,
 | |
| 	object_ptr<RpWidget> right);
 | |
| 
 | |
| void FillBoostLimit(
 | |
| 	rpl::producer<> showFinished,
 | |
| 	not_null<VerticalLayout*> container,
 | |
| 	rpl::producer<BoostCounters> data,
 | |
| 	style::margins limitLinePadding);
 | |
| 
 | |
| } // namespace Ui
 | 
