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
 |