/* 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 template class object_ptr; class PeerData; namespace Api { struct UserStarGift; } // namespace Api namespace Data { struct Boost; struct CreditsHistoryEntry; struct SubscriptionEntry; struct GiftCode; } // namespace Data namespace Main { class Session; class SessionShow; } // namespace Main namespace Window { class SessionController; } // namespace Window namespace style { struct PeerListItem; } // namespace style namespace Ui { class GenericBox; class RpWidget; class VerticalLayout; } // namespace Ui namespace Settings { struct SubscriptionRightLabel { Fn draw; QSize size; }; SubscriptionRightLabel PaintSubscriptionRightLabelCallback( not_null session, const style::PeerListItem &st, int amount); void FillCreditOptions( std::shared_ptr show, not_null container, not_null peer, int minCredits, Fn paid); [[nodiscard]] not_null AddBalanceWidget( not_null parent, rpl::producer balanceValue, bool rightAlign); void AddWithdrawalWidget( not_null container, not_null controller, not_null peer, rpl::producer secondButtonUrl, rpl::producer availableBalanceValue, rpl::producer dateValue, rpl::producer lockedValue, rpl::producer usdValue); void ReceiptCreditsBox( not_null box, not_null controller, const Data::CreditsHistoryEntry &e, const Data::SubscriptionEntry &s); void BoostCreditsBox( not_null box, not_null controller, const Data::Boost &b); void GiftedCreditsBox( not_null box, not_null controller, not_null from, not_null to, int count, TimeId date); void CreditsPrizeBox( not_null box, not_null controller, const Data::GiftCode &data, TimeId date); void UserStarGiftBox( not_null box, not_null controller, const Api::UserStarGift &data); void StarGiftViewBox( not_null box, not_null controller, const Data::GiftCode &data, not_null item); void ShowRefundInfoBox( not_null controller, FullMsgId refundItemId); [[nodiscard]] object_ptr GenericEntryPhoto( not_null parent, Fn(Fn update)> callback, int photoSize); [[nodiscard]] object_ptr HistoryEntryPhoto( not_null parent, not_null photo, int photoSize); [[nodiscard]] object_ptr PaidMediaThumbnail( not_null parent, not_null photo, PhotoData *second, int totalCount, int photoSize); [[nodiscard]] object_ptr SubscriptionUserpic( not_null parent, not_null peer, int photoSize); struct SmallBalanceBot { UserId botId = 0; }; struct SmallBalanceReaction { ChannelId channelId = 0; }; struct SmallBalanceSubscription { QString name; }; struct SmallBalanceDeepLink { QString purpose; }; struct SmallBalanceStarGift { UserId userId = 0; }; struct SmallBalanceSource : std::variant< SmallBalanceBot, SmallBalanceReaction, SmallBalanceSubscription, SmallBalanceDeepLink, SmallBalanceStarGift> { using variant::variant; }; void SmallBalanceBox( not_null box, std::shared_ptr show, uint64 credits, SmallBalanceSource source, Fn paid); enum class SmallBalanceResult { Already, Success, Blocked, Cancelled, }; void MaybeRequestBalanceIncrease( std::shared_ptr show, uint64 credits, SmallBalanceSource source, Fn done); } // namespace Settings