/* 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 "data/data_star_gift.h" #include "info/info_content_widget.h" class UserData; struct PeerListState; namespace Ui { class RpWidget; template class SlideWrap; } // namespace Ui namespace Info::PeerGifts { struct ListState { std::vector list; QString offset; }; struct Filter { bool sortByValue : 1 = false; bool skipUnlimited : 1 = false; bool skipLimited : 1 = false; bool skipUpgradable : 1 = false; bool skipUnique : 1 = false; bool skipSaved : 1 = false; bool skipUnsaved : 1 = false; [[nodiscard]] bool skipsSomething() const { return skipLimited || skipUnlimited || skipSaved || skipUnsaved || skipUpgradable || skipUnique; } friend inline bool operator==(Filter, Filter) = default; }; struct Descriptor { Filter filter; int collectionId = 0; friend inline bool operator==( const Descriptor &, const Descriptor &) = default; }; class InnerWidget; class Memento final : public ContentMemento { public: Memento(not_null controller); Memento(not_null peer, int collectionId); ~Memento(); object_ptr createWidget( QWidget *parent, not_null controller, const QRect &geometry) override; Section section() const override; void setListState(std::unique_ptr state); std::unique_ptr listState(); private: std::unique_ptr _listState; }; class Widget final : public ContentWidget { public: Widget(QWidget *parent, not_null controller); [[nodiscard]] not_null peer() const; bool showInternal( not_null memento) override; void setInternalState( const QRect &geometry, not_null memento); void fillTopBarMenu(const Ui::Menu::MenuCallback &addAction) override; rpl::producer title() override; rpl::producer desiredBottomShadowVisibility() override; void showFinished() override; private: void saveState(not_null memento); void restoreState(not_null memento); std::shared_ptr doCreateMemento() override; void setupNotifyCheckbox(int wasBottomHeight, bool enabled); void setupBottomButton(int wasBottomHeight); void refreshBottom(); InnerWidget *_inner = nullptr; QPointer> _pinnedToBottom; rpl::variable _hasPinnedToBottom; rpl::variable _emptyCollectionShown; rpl::variable _descriptor; std::optional _notifyEnabled; bool _shown = false; }; [[nodiscard]] std::shared_ptr Make( not_null peer, int collectionId = 0); } // namespace Info::PeerGifts