From e44b37e6540525dc9541d5f13176212c83088db6 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Thu, 3 Mar 2022 09:17:33 +0300 Subject: [PATCH] Added to PeerListDelegate methods to show content. --- Telegram/SourceFiles/boxes/peer_list_box.cpp | 17 +++++++++++++- Telegram/SourceFiles/boxes/peer_list_box.h | 22 +++++++++++++++++++ Telegram/SourceFiles/boxes/peer_lists_box.cpp | 17 +++++++++++++- Telegram/SourceFiles/boxes/peer_lists_box.h | 6 +++++ .../calls/group/calls_group_members.cpp | 12 ++++++++++ .../calls/group/calls_group_members.h | 5 +++++ .../info_common_groups_inner_widget.cpp | 15 +++++++++++++ .../info_common_groups_inner_widget.h | 10 +++++++++ .../polls/info_polls_results_inner_widget.cpp | 17 ++++++++++++++ .../info/profile/info_profile_members.cpp | 15 +++++++++++++ .../info/profile/info_profile_members.h | 11 ++++++++++ 11 files changed, 145 insertions(+), 2 deletions(-) diff --git a/Telegram/SourceFiles/boxes/peer_list_box.cpp b/Telegram/SourceFiles/boxes/peer_list_box.cpp index 90b77e56e..fd877b17e 100644 --- a/Telegram/SourceFiles/boxes/peer_list_box.cpp +++ b/Telegram/SourceFiles/boxes/peer_list_box.cpp @@ -56,7 +56,8 @@ PeerListBox::PeerListBox( QWidget*, std::unique_ptr controller, Fn)> init) -: _controller(std::move(controller)) +: _show(this) +, _controller(std::move(controller)) , _init(std::move(init)) { Expects(_controller != nullptr); } @@ -262,6 +263,20 @@ void PeerListBox::peerListSetSearchMode(PeerListSearchMode mode) { } } +void PeerListBox::peerListShowBox( + object_ptr content, + Ui::LayerOptions options) { + _show.showBox(std::move(content), options); +} + +void PeerListBox::peerListHideLayer() { + _show.hideLayer(); +} + +not_null PeerListBox::peerListToastParent() { + return _show.toastParent(); +} + PeerListController::PeerListController(std::unique_ptr searchController) : _searchController(std::move(searchController)) { if (_searchController) { _searchController->setDelegate(this); diff --git a/Telegram/SourceFiles/boxes/peer_list_box.h b/Telegram/SourceFiles/boxes/peer_list_box.h index 39260c4e3..6d1a8a9e3 100644 --- a/Telegram/SourceFiles/boxes/peer_list_box.h +++ b/Telegram/SourceFiles/boxes/peer_list_box.h @@ -313,6 +313,11 @@ public: virtual PeerListRow *peerListFindRow(PeerListRowId id) = 0; virtual void peerListSortRows(Fn compare) = 0; virtual int peerListPartitionRows(Fn border) = 0; + virtual void peerListShowBox( + object_ptr content, + Ui::LayerOptions options = Ui::LayerOption::KeepOther) = 0; + virtual void peerListHideLayer() = 0; + virtual not_null peerListToastParent() = 0; template void peerListAddSelectedPeers(PeerDataRange &&range) { @@ -975,6 +980,17 @@ public: object_ptr description) override { description.destroy(); } + void peerListShowBox( + object_ptr content, + Ui::LayerOptions options = Ui::LayerOption::KeepOther) override { + Unexpected("...DelegateSimple::peerListShowBox"); + } + void peerListHideLayer() override { + Unexpected("...DelegateSimple::peerListHideLayer"); + } + not_null peerListToastParent() override { + Unexpected("...DelegateSimple::peerListToastParent"); + } }; @@ -1007,6 +1023,11 @@ public: bool peerListIsRowChecked(not_null row) override; int peerListSelectedRowsCount() override; void peerListScrollToTop() override; + void peerListShowBox( + object_ptr content, + Ui::LayerOptions options = Ui::LayerOption::KeepOther) override; + void peerListHideLayer() override; + not_null peerListToastParent() override; void setAddedTopScrollSkip(int skip); @@ -1046,6 +1067,7 @@ private: object_ptr> _select = { nullptr }; + const Ui::BoxShow _show; std::unique_ptr _controller; Fn _init; bool _scrollBottomFixed = false; diff --git a/Telegram/SourceFiles/boxes/peer_lists_box.cpp b/Telegram/SourceFiles/boxes/peer_lists_box.cpp index 4a476a4e3..c8de74034 100644 --- a/Telegram/SourceFiles/boxes/peer_lists_box.cpp +++ b/Telegram/SourceFiles/boxes/peer_lists_box.cpp @@ -300,7 +300,8 @@ PeerListsBox::Delegate::Delegate( not_null box, not_null controller) : _box(box) -, _controller(controller) { +, _controller(controller) +, _show(_box) { } void PeerListsBox::Delegate::peerListSetTitle(rpl::producer title) { @@ -370,6 +371,20 @@ void PeerListsBox::Delegate::peerListFinishSelectedRowsBunch() { _box->_select->entity()->finishItemsBunch(); } +void PeerListsBox::Delegate::peerListShowBox( + object_ptr content, + Ui::LayerOptions options) { + _show.showBox(std::move(content), options); +} + +void PeerListsBox::Delegate::peerListHideLayer() { + _show.hideLayer(); +} + +not_null PeerListsBox::Delegate::peerListToastParent() { + return _show.toastParent(); +} + bool PeerListsBox::Delegate::peerListIsRowChecked( not_null row) { return _box->_select diff --git a/Telegram/SourceFiles/boxes/peer_lists_box.h b/Telegram/SourceFiles/boxes/peer_lists_box.h index 09e8e92e2..fcbbd984e 100644 --- a/Telegram/SourceFiles/boxes/peer_lists_box.h +++ b/Telegram/SourceFiles/boxes/peer_lists_box.h @@ -54,10 +54,16 @@ private: _box->addSelectItem(row, anim::type::instant); } void peerListFinishSelectedRowsBunch() override; + void peerListShowBox( + object_ptr content, + Ui::LayerOptions options = Ui::LayerOption::KeepOther) override; + void peerListHideLayer() override; + not_null peerListToastParent() override; private: const not_null _box; const not_null _controller; + const Ui::BoxShow _show; }; struct List { diff --git a/Telegram/SourceFiles/calls/group/calls_group_members.cpp b/Telegram/SourceFiles/calls/group/calls_group_members.cpp index 5e5490392..cbca11e06 100644 --- a/Telegram/SourceFiles/calls/group/calls_group_members.cpp +++ b/Telegram/SourceFiles/calls/group/calls_group_members.cpp @@ -1976,4 +1976,16 @@ void Members::peerListSetDescription( description.destroy(); } +void Members::peerListShowBox( + object_ptr content, + Ui::LayerOptions options) { +} + +void Members::peerListHideLayer() { +} + +not_null Members::peerListToastParent() { + Unexpected("...Members::peerListToastParent"); +} + } // namespace Calls::Group diff --git a/Telegram/SourceFiles/calls/group/calls_group_members.h b/Telegram/SourceFiles/calls/group/calls_group_members.h index 52c364e01..312161b3a 100644 --- a/Telegram/SourceFiles/calls/group/calls_group_members.h +++ b/Telegram/SourceFiles/calls/group/calls_group_members.h @@ -88,6 +88,11 @@ private: void peerListFinishSelectedRowsBunch() override; void peerListSetDescription( object_ptr description) override; + void peerListShowBox( + object_ptr content, + Ui::LayerOptions options = Ui::LayerOption::KeepOther) override; + void peerListHideLayer() override; + not_null peerListToastParent() override; void setupAddMember(not_null call); void resizeToList(); diff --git a/Telegram/SourceFiles/info/common_groups/info_common_groups_inner_widget.cpp b/Telegram/SourceFiles/info/common_groups/info_common_groups_inner_widget.cpp index 6c3ab80d5..fb8e5f9a0 100644 --- a/Telegram/SourceFiles/info/common_groups/info_common_groups_inner_widget.cpp +++ b/Telegram/SourceFiles/info/common_groups/info_common_groups_inner_widget.cpp @@ -172,6 +172,7 @@ InnerWidget::InnerWidget( not_null controller, not_null user) : RpWidget(parent) +, _show(std::make_unique(controller->parentController())) , _controller(controller) , _user(user) , _listController(std::make_unique(controller, _user)) @@ -280,5 +281,19 @@ void InnerWidget::peerListSetDescription( description.destroy(); } +void InnerWidget::peerListShowBox( + object_ptr content, + Ui::LayerOptions options) { + _show->showBox(std::move(content), options); +} + +void InnerWidget::peerListHideLayer() { + _show->hideLayer(); +} + +not_null InnerWidget::peerListToastParent() { + return _show->toastParent(); +} + } // namespace CommonGroups } // namespace Info diff --git a/Telegram/SourceFiles/info/common_groups/info_common_groups_inner_widget.h b/Telegram/SourceFiles/info/common_groups/info_common_groups_inner_widget.h index 3ad4b007d..dc8573355 100644 --- a/Telegram/SourceFiles/info/common_groups/info_common_groups_inner_widget.h +++ b/Telegram/SourceFiles/info/common_groups/info_common_groups_inner_widget.h @@ -11,6 +11,10 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/rp_widget.h" #include "boxes/peer_list_box.h" +namespace Window { +class Show; +} // namespace Window + namespace Info { class Controller; @@ -60,11 +64,17 @@ private: void peerListFinishSelectedRowsBunch() override; void peerListSetDescription( object_ptr description) override; + void peerListShowBox( + object_ptr content, + Ui::LayerOptions options = Ui::LayerOption::KeepOther) override; + void peerListHideLayer() override; + not_null peerListToastParent() override; object_ptr setupList( RpWidget *parent, not_null controller) const; + std::unique_ptr _show; not_null _controller; not_null _user; std::unique_ptr _listController; diff --git a/Telegram/SourceFiles/info/polls/info_polls_results_inner_widget.cpp b/Telegram/SourceFiles/info/polls/info_polls_results_inner_widget.cpp index 7d0025bd1..6a9df2132 100644 --- a/Telegram/SourceFiles/info/polls/info_polls_results_inner_widget.cpp +++ b/Telegram/SourceFiles/info/polls/info_polls_results_inner_widget.cpp @@ -65,6 +65,11 @@ public: void peerListFinishSelectedRowsBunch() override; void peerListSetDescription( object_ptr description) override; + void peerListShowBox( + object_ptr content, + Ui::LayerOptions options = Ui::LayerOption::KeepOther) override; + void peerListHideLayer() override; + not_null peerListToastParent() override; }; @@ -148,6 +153,18 @@ void ListDelegate::peerListSetDescription( description.destroy(); } +void ListDelegate::peerListShowBox( + object_ptr content, + Ui::LayerOptions options) { +} + +void ListDelegate::peerListHideLayer() { +} + +not_null ListDelegate::peerListToastParent() { + Unexpected("...ListDelegate::peerListToastParent"); +} + } // namespace class ListController final : public PeerListController { diff --git a/Telegram/SourceFiles/info/profile/info_profile_members.cpp b/Telegram/SourceFiles/info/profile/info_profile_members.cpp index 2c6d9dba5..fc6fa187c 100644 --- a/Telegram/SourceFiles/info/profile/info_profile_members.cpp +++ b/Telegram/SourceFiles/info/profile/info_profile_members.cpp @@ -46,6 +46,7 @@ Members::Members( QWidget *parent, not_null controller) : RpWidget(parent) +, _show(std::make_unique(controller->parentController())) , _controller(controller) , _peer(_controller->key().peer()) , _listController(CreateMembersController(controller, _peer)) { @@ -438,6 +439,20 @@ void Members::peerListAddSelectedRowInBunch(not_null row) { void Members::peerListFinishSelectedRowsBunch() { } +void Members::peerListShowBox( + object_ptr content, + Ui::LayerOptions options) { + _show->showBox(std::move(content), options); +} + +void Members::peerListHideLayer() { + _show->hideLayer(); +} + +not_null Members::peerListToastParent() { + return _show->toastParent(); +} + void Members::peerListSetDescription( object_ptr description) { description.destroy(); diff --git a/Telegram/SourceFiles/info/profile/info_profile_members.h b/Telegram/SourceFiles/info/profile/info_profile_members.h index bf7c6332a..46d048703 100644 --- a/Telegram/SourceFiles/info/profile/info_profile_members.h +++ b/Telegram/SourceFiles/info/profile/info_profile_members.h @@ -20,6 +20,10 @@ class AbstractButton; class SettingsButton; } // namespace Ui +namespace Window { +class Show; +} // namespace Window + namespace Info { class Controller; @@ -71,6 +75,11 @@ private: void peerListFinishSelectedRowsBunch() override; void peerListSetDescription( object_ptr description) override; + void peerListShowBox( + object_ptr content, + Ui::LayerOptions options = Ui::LayerOption::KeepOther) override; + void peerListHideLayer() override; + not_null peerListToastParent() override; //void peerListAppendRow( // std::unique_ptr row) override { @@ -102,6 +111,8 @@ private: void updateHeaderControlsGeometry(int newWidth); //void updateSearchEnabledByContent(); + std::unique_ptr _show; + //Wrap _wrap; not_null _controller; not_null _peer;