/* 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 skipUnique : 1 = false; bool skipSaved : 1 = false; bool skipUnsaved : 1 = false; [[nodiscard]] bool skipsSomething() const { return skipLimited || skipUnlimited || skipSaved || skipUnsaved || skipUnique; } friend inline bool operator==(Filter, Filter) = default; }; class InnerWidget; class Memento final : public ContentMemento { public: explicit Memento(not_null peer); 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(); ~Memento(); private: std::unique_ptr _listState; }; class Widget final : public ContentWidget { public: Widget( QWidget *parent, not_null controller, not_null peer); [[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(bool enabled); InnerWidget *_inner = nullptr; QPointer> _pinnedToBottom; rpl::variable _hasPinnedToBottom; rpl::variable _filter; bool _shown = false; }; } // namespace Info::PeerGifts