/* 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 */ #include "boxes/star_gift_resale_box.h" #include "boxes/star_gift_box.h" #include "chat_helpers/compose/compose_show.h" #include "core/ui_integration.h" #include "data/stickers/data_custom_emoji.h" #include "data/data_peer.h" #include "data/data_session.h" #include "data/data_star_gift.h" #include "lang/lang_keys.h" #include "info/peer_gifts/info_peer_gifts_common.h" #include "main/main_session.h" #include "menu/gift_resale_filter.h" #include "ui/layers/generic_box.h" #include "ui/text/text_utilities.h" #include "ui/toast/toast.h" #include "ui/widgets/buttons.h" #include "ui/widgets/popup_menu.h" #include "ui/painter.h" #include "ui/ui_utility.h" #include "window/window_session_controller.h" #include "styles/style_chat_helpers.h" #include "styles/style_credits.h" #include "styles/style_layers.h" #include "styles/style_menu_icons.h" #include namespace Ui { namespace { constexpr auto kFiltersCount = 4; constexpr auto kResaleBoughtToastDuration = 4 * crl::time(1000); using Data::GiftAttributeId; using Data::GiftAttributeIdType; using Data::ResaleGiftsSort; using Data::ResaleGiftsFilter; using Data::ResaleGiftsDescriptor; //using Data::MyGiftsDescriptor; [[nodiscard]] Text::String ResaleTabText(QString text) { auto result = Text::String(); result.setMarkedText( st::semiboldTextStyle, TextWithEntities{ text }.append(st::giftBoxResaleTabsDropdown), kMarkupTextOptions); return result; } [[nodiscard]] Text::String SortModeText(ResaleGiftsSort mode) { auto text = [&] { if (mode == ResaleGiftsSort::Number) { return Ui::Text::IconEmoji(&st::giftBoxResaleMiniNumber).append( tr::lng_gift_resale_number(tr::now)); } else if (mode == ResaleGiftsSort::Price) { return Ui::Text::IconEmoji(&st::giftBoxResaleMiniPrice).append( tr::lng_gift_resale_price(tr::now)); } return Ui::Text::IconEmoji(&st::giftBoxResaleMiniDate).append( tr::lng_gift_resale_date(tr::now)); }(); auto result = Text::String(); result.setMarkedText( st::semiboldTextStyle, text, kMarkupTextOptions); return result; } struct ResaleTabs { rpl::producer filter; object_ptr widget; }; [[nodiscard]] ResaleTabs MakeResaleTabs( std::shared_ptr show, not_null peer, const ResaleGiftsDescriptor &info, rpl::producer filter) { auto widget = object_ptr((QWidget*)nullptr); const auto raw = widget.data(); struct Button { QRect geometry; Text::String text; }; struct State { rpl::variable filter; rpl::variable fullWidth; std::vector