peer_list_widgets.h 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. /*
  2. This file is part of Telegram Desktop,
  3. the official desktop application for the Telegram messaging service.
  4. For license and copyright information please follow this link:
  5. https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
  6. */
  7. #pragma once
  8. #include "boxes/peer_list_box.h"
  9. namespace Ui {
  10. class VerticalLayout;
  11. } // namespace Ui
  12. class PeerListWidgets : public Ui::RpWidget {
  13. public:
  14. PeerListWidgets(
  15. not_null<Ui::RpWidget*> parent,
  16. not_null<PeerListController*> controller);
  17. crl::time paintRow(
  18. Painter &p,
  19. crl::time now,
  20. bool selected,
  21. not_null<PeerListRow*> row);
  22. void appendRow(std::unique_ptr<PeerListRow> row);
  23. PeerListRow* findRow(PeerListRowId id);
  24. void updateRow(not_null<PeerListRow*> row);
  25. int fullRowsCount();
  26. [[nodiscard]] not_null<PeerListRow*> rowAt(int index);
  27. void refreshRows();
  28. private:
  29. const not_null<PeerListController*> _controller;
  30. const style::PeerList &_st;
  31. base::unique_qptr<Ui::VerticalLayout> _content;
  32. std::vector<std::unique_ptr<PeerListRow>> _rows;
  33. std::map<PeerListRowId, not_null<PeerListRow*>> _rowsById;
  34. std::map<PeerData*, std::vector<not_null<PeerListRow*>>> _rowsByPeer;
  35. };
  36. class PeerListWidgetsDelegate : public PeerListDelegate {
  37. public:
  38. void setContent(PeerListWidgets *content);
  39. void setUiShow(std::shared_ptr<Main::SessionShow> uiShow);
  40. void peerListSetHideEmpty(bool hide) override;
  41. void peerListAppendRow(std::unique_ptr<PeerListRow> row) override;
  42. void peerListAppendSearchRow(std::unique_ptr<PeerListRow> row) override;
  43. void peerListAppendFoundRow(not_null<PeerListRow*> row) override;
  44. void peerListPrependRow(std::unique_ptr<PeerListRow> row) override;
  45. void peerListPrependRowFromSearchResult(
  46. not_null<PeerListRow*> row) override;
  47. PeerListRow *peerListFindRow(PeerListRowId id) override;
  48. std::optional<QPoint> peerListLastRowMousePosition() override;
  49. void peerListUpdateRow(not_null<PeerListRow*> row) override;
  50. void peerListRemoveRow(not_null<PeerListRow*> row) override;
  51. void peerListConvertRowToSearchResult(
  52. not_null<PeerListRow*> row) override;
  53. void peerListSetRowChecked(
  54. not_null<PeerListRow*> row,
  55. bool checked) override;
  56. void peerListSetRowHidden(
  57. not_null<PeerListRow*> row,
  58. bool hidden) override;
  59. void peerListSetForeignRowChecked(
  60. not_null<PeerListRow*> row,
  61. bool checked,
  62. anim::type animated) override;
  63. int peerListFullRowsCount() override;
  64. not_null<PeerListRow*> peerListRowAt(int index) override;
  65. int peerListSearchRowsCount() override;
  66. not_null<PeerListRow*> peerListSearchRowAt(int index) override;
  67. void peerListRefreshRows() override;
  68. void peerListSetDescription(object_ptr<Ui::FlatLabel>) override;
  69. void peerListSetSearchNoResults(object_ptr<Ui::FlatLabel>) override;
  70. void peerListSetAboveWidget(object_ptr<Ui::RpWidget>) override;
  71. void peerListSetAboveSearchWidget(object_ptr<Ui::RpWidget>) override;
  72. void peerListSetBelowWidget(object_ptr<Ui::RpWidget>) override;
  73. void peerListSetSearchMode(PeerListSearchMode mode) override;
  74. void peerListMouseLeftGeometry() override;
  75. void peerListSortRows(
  76. Fn<bool(const PeerListRow &, const PeerListRow &)>) override;
  77. int peerListPartitionRows(Fn<bool(const PeerListRow &a)> border) override;
  78. std::unique_ptr<PeerListState> peerListSaveState() const override;
  79. void peerListRestoreState(std::unique_ptr<PeerListState> state) override;
  80. void peerListShowRowMenu(
  81. not_null<PeerListRow*> row,
  82. bool highlightRow,
  83. Fn<void(not_null<Ui::PopupMenu*>)> destroyed = nullptr) override;
  84. void peerListSelectSkip(int direction) override;
  85. void peerListPressLeftToContextMenu(bool shown) override;
  86. bool peerListTrackRowPressFromGlobal(QPoint globalPosition) override;
  87. std::shared_ptr<Main::SessionShow> peerListUiShow() override;
  88. void peerListAddSelectedPeerInBunch(not_null<PeerData*> peer) override;
  89. void peerListAddSelectedRowInBunch(not_null<PeerListRow*> row) override;
  90. void peerListFinishSelectedRowsBunch() override;
  91. void peerListSetTitle(rpl::producer<QString> title) override;
  92. void peerListSetAdditionalTitle(rpl::producer<QString> title) override;
  93. bool peerListIsRowChecked(not_null<PeerListRow*> row) override;
  94. void peerListScrollToTop() override;
  95. int peerListSelectedRowsCount() override;
  96. private:
  97. PeerListWidgets *_content = nullptr;
  98. std::shared_ptr<Main::SessionShow> _uiShow;
  99. };