From 22f45bc1fb354158dcb20e553b4a50efe2994068 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Wed, 30 Nov 2022 14:02:07 +0300 Subject: [PATCH] Added loading peer animation to peer list content. --- Telegram/SourceFiles/boxes/boxes.style | 2 +- Telegram/SourceFiles/boxes/peer_list_box.cpp | 38 ++++++++++++-------- Telegram/SourceFiles/boxes/peer_list_box.h | 9 +---- 3 files changed, 26 insertions(+), 23 deletions(-) diff --git a/Telegram/SourceFiles/boxes/boxes.style b/Telegram/SourceFiles/boxes/boxes.style index cd475d10e..dd13b5db1 100644 --- a/Telegram/SourceFiles/boxes/boxes.style +++ b/Telegram/SourceFiles/boxes/boxes.style @@ -273,7 +273,7 @@ notificationsSampleMargin: 2px; notificationSampleOpacity: 0.5; notificationSampleSize: size(64px, 16px); -membersAboutLimitPadding: margins(0px, 12px, 0px, 12px); +membersAboutLimitPadding: margins(0px, 16px, 0px, 16px); membersAbout: FlatLabel(defaultFlatLabel) { minWidth: 240px; textFg: membersAboutLimitFg; diff --git a/Telegram/SourceFiles/boxes/peer_list_box.cpp b/Telegram/SourceFiles/boxes/peer_list_box.cpp index e0a5bf5df..2ed495a55 100644 --- a/Telegram/SourceFiles/boxes/peer_list_box.cpp +++ b/Telegram/SourceFiles/boxes/peer_list_box.cpp @@ -13,6 +13,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/widgets/labels.h" #include "ui/widgets/scroll_area.h" #include "ui/widgets/popup_menu.h" +#include "ui/effects/loading_element.h" #include "ui/effects/round_checkbox.h" #include "ui/effects/ripple_animation.h" #include "ui/empty_userpic.h" @@ -355,14 +356,6 @@ void PeerListController::setDescriptionText(const QString &text) { } } -void PeerListController::setSearchLoadingText(const QString &text) { - if (text.isEmpty()) { - setSearchLoading(nullptr); - } else { - setSearchLoading(object_ptr(nullptr, text, st::membersAbout)); - } -} - void PeerListController::setSearchNoResultsText(const QString &text) { if (text.isEmpty()) { setSearchNoResults(nullptr); @@ -1243,7 +1236,7 @@ int PeerListContent::labelHeight() const { if (!_filterResults.empty()) { return 0; } - if (_controller->isSearchLoading()) { + if (_controller->isSearchLoading() && _searchLoading) { return computeLabelHeight(_searchLoading); } return computeLabelHeight(_searchNoResults); @@ -1279,11 +1272,20 @@ void PeerListContent::setSearchMode(PeerListSearchMode mode) { } _searchMode = mode; if (_controller->hasComplexSearch()) { - if (!_searchLoading) { - setSearchLoading(object_ptr( - this, - tr::lng_contacts_loading(tr::now), - st::membersAbout)); + if (_mode == Mode::Custom) { + if (!_searchLoading) { + setSearchLoading(object_ptr( + this, + tr::lng_contacts_loading(tr::now), + st::membersAbout)); + } + } else { + if (!_loadingAnimation) { + _loadingAnimation = Ui::CreateLoadingPeerListItemWidget( + this, + _st.item, + 2); + } } } else { clearSearchRows(); @@ -1378,6 +1380,14 @@ int PeerListContent::resizeGetHeight(int newWidth) { _searchLoading->moveToLeft(st::contactsPadding.left(), labelTop + st::membersAboutLimitPadding.top(), newWidth); _searchLoading->setVisible(!hideAll && showingSearch() && _filterResults.empty() && _controller->isSearchLoading()); } + if (_loadingAnimation) { + _loadingAnimation->resizeToWidth(newWidth); + _loadingAnimation->moveToLeft(0, rowsTop(), newWidth); + _loadingAnimation->setVisible(!hideAll + && showingSearch() + && _filterResults.empty() + && _controller->isSearchLoading()); + } const auto label = labelHeight(); const auto belowTop = (label > 0 || rowsCount > 0) ? (labelTop + label + _st.padding.bottom()) diff --git a/Telegram/SourceFiles/boxes/peer_list_box.h b/Telegram/SourceFiles/boxes/peer_list_box.h index 7da4570c3..f416d74ba 100644 --- a/Telegram/SourceFiles/boxes/peer_list_box.h +++ b/Telegram/SourceFiles/boxes/peer_list_box.h @@ -294,7 +294,6 @@ public: virtual void peerListSetAdditionalTitle(rpl::producer title) = 0; virtual void peerListSetHideEmpty(bool hide) = 0; virtual void peerListSetDescription(object_ptr description) = 0; - virtual void peerListSetSearchLoading(object_ptr loading) = 0; virtual void peerListSetSearchNoResults(object_ptr noResults) = 0; virtual void peerListSetAboveWidget(object_ptr aboveWidget) = 0; virtual void peerListSetAboveSearchWidget(object_ptr aboveWidget) = 0; @@ -541,14 +540,10 @@ protected: } void setDescriptionText(const QString &text); - void setSearchLoadingText(const QString &text); void setSearchNoResultsText(const QString &text); void setDescription(object_ptr description) { delegate()->peerListSetDescription(std::move(description)); } - void setSearchLoading(object_ptr loading) { - delegate()->peerListSetSearchLoading(std::move(loading)); - } void setSearchNoResults(object_ptr noResults) { delegate()->peerListSetSearchNoResults(std::move(noResults)); } @@ -822,6 +817,7 @@ private: object_ptr _description = { nullptr }; object_ptr _searchNoResults = { nullptr }; object_ptr _searchLoading = { nullptr }; + object_ptr _loadingAnimation = { nullptr }; std::vector> _searchRows; base::Timer _repaintByStatus; @@ -898,9 +894,6 @@ public: void peerListSetDescription(object_ptr description) override { _content->setDescription(std::move(description)); } - void peerListSetSearchLoading(object_ptr loading) override { - _content->setSearchLoading(std::move(loading)); - } void peerListSetSearchNoResults(object_ptr noResults) override { _content->setSearchNoResults(std::move(noResults)); }