/* 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 "history/view/history_view_list_widget.h" #include "window/section_widget.h" #include "window/section_memento.h" #include "data/data_feed.h" namespace Ui { class ScrollArea; class PlainShadow; class FlatButton; } // namespace Ui namespace HistoryView { class ListWidget; class TopBarWidget; } // namespace HistoryView namespace HistoryFeed { class Memento; class Widget final : public Window::SectionWidget , public HistoryView::ListDelegate { public: Widget( QWidget *parent, not_null controller, not_null feed); Dialogs::RowDescriptor activeChat() const override; bool hasTopBarShadow() const override { return true; } QPixmap grabForShowAnimation( const Window::SectionSlideParams ¶ms) override; bool showInternal( not_null memento, const Window::SectionShow ¶ms) override; std::unique_ptr createMemento() override; void setInternalState( const QRect &geometry, not_null memento); // Float player interface. bool wheelEventFromFloatPlayer(QEvent *e) override; QRect rectForFloatPlayer() const override; bool cmd_search() override; // HistoryView::ListDelegate interface. HistoryView::Context listContext() override; void listScrollTo(int top) override; void listCloseRequest() override; rpl::producer listSource( Data::MessagePosition aroundId, int limitBefore, int limitAfter) override; bool listAllowsMultiSelect() override; bool listIsLessInOrder( not_null first, not_null second) override; void listSelectionChanged( HistoryView::SelectedItems &&items) override; protected: void resizeEvent(QResizeEvent *e) override; void paintEvent(QPaintEvent *e) override; void showAnimatedHook( const Window::SectionSlideParams ¶ms) override; void showFinishedHook() override; void doSetInnerFocus() override; private: void onScroll(); void updateInnerVisibleArea(); void updateControlsGeometry(); void updateAdaptiveLayout(); void saveState(not_null memento); void restoreState(not_null memento); void forwardSelected(); void confirmDeleteSelected(); void clearSelected(); not_null _feed; object_ptr _scroll; QPointer _inner; object_ptr _topBar; object_ptr _topBarShadow; object_ptr _showNext; bool _undefinedAroundPosition = false; }; class Memento : public Window::SectionMemento { public: explicit Memento( not_null feed, Data::MessagePosition aroundPosition = Data::UnreadMessagePosition); ~Memento(); object_ptr createWidget( QWidget *parent, not_null controller, Window::Column column, const QRect &geometry) override; not_null feed() const { return _feed; } not_null list() const { return _list.get(); } private: not_null _feed; std::unique_ptr _list; }; } // namespace HistoryFeed