/* 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 "boxes/peer_list_box.h" namespace Ui { class VerticalLayout; } // namespace Ui class PeerListWidgets : public Ui::RpWidget { public: PeerListWidgets( not_null parent, not_null controller); crl::time paintRow( Painter &p, crl::time now, bool selected, not_null row); void appendRow(std::unique_ptr row); PeerListRow* findRow(PeerListRowId id); void updateRow(not_null row); int fullRowsCount(); [[nodiscard]] not_null rowAt(int index); void refreshRows(); private: const not_null _controller; const style::PeerList &_st; base::unique_qptr _content; std::vector> _rows; std::map> _rowsById; std::map>> _rowsByPeer; }; class PeerListWidgetsDelegate : public PeerListDelegate { public: void setContent(PeerListWidgets *content); void setUiShow(std::shared_ptr uiShow); void peerListSetHideEmpty(bool hide) override; void peerListAppendRow(std::unique_ptr row) override; void peerListAppendSearchRow(std::unique_ptr row) override; void peerListAppendFoundRow(not_null row) override; void peerListPrependRow(std::unique_ptr row) override; void peerListPrependRowFromSearchResult( not_null row) override; PeerListRow *peerListFindRow(PeerListRowId id) override; std::optional peerListLastRowMousePosition() override; void peerListUpdateRow(not_null row) override; void peerListRemoveRow(not_null row) override; void peerListConvertRowToSearchResult( not_null row) override; void peerListSetRowChecked( not_null row, bool checked) override; void peerListSetRowHidden( not_null row, bool hidden) override; void peerListSetForeignRowChecked( not_null row, bool checked, anim::type animated) override; int peerListFullRowsCount() override; not_null peerListRowAt(int index) override; int peerListSearchRowsCount() override; not_null peerListSearchRowAt(int index) override; void peerListRefreshRows() override; void peerListSetDescription(object_ptr) override; void peerListSetSearchNoResults(object_ptr) override; void peerListSetAboveWidget(object_ptr) override; void peerListSetAboveSearchWidget(object_ptr) override; void peerListSetBelowWidget(object_ptr) override; void peerListSetSearchMode(PeerListSearchMode mode) override; void peerListMouseLeftGeometry() override; void peerListSortRows( Fn) override; int peerListPartitionRows(Fn border) override; std::unique_ptr peerListSaveState() const override; void peerListRestoreState(std::unique_ptr state) override; void peerListShowRowMenu( not_null row, bool highlightRow, Fn)> destroyed = nullptr) override; void peerListSelectSkip(int direction) override; void peerListPressLeftToContextMenu(bool shown) override; bool peerListTrackRowPressFromGlobal(QPoint globalPosition) override; std::shared_ptr peerListUiShow() override; void peerListAddSelectedPeerInBunch(not_null peer) override; void peerListAddSelectedRowInBunch(not_null row) override; void peerListFinishSelectedRowsBunch() override; void peerListSetTitle(rpl::producer title) override; void peerListSetAdditionalTitle(rpl::producer title) override; bool peerListIsRowChecked(not_null row) override; void peerListScrollToTop() override; int peerListSelectedRowsCount() override; private: PeerListWidgets *_content = nullptr; std::shared_ptr _uiShow; };