From 48ef732f494f7339e009b5e4b48a1db4ee22bccf Mon Sep 17 00:00:00 2001 From: Victor Berger Date: Thu, 27 Sep 2018 17:59:21 +0200 Subject: [PATCH] Sort entries in the community bar --- src/CommunitiesList.cpp | 39 +++++++++++++++++++++++++++++++++++++++ src/CommunitiesList.h | 1 + 2 files changed, 40 insertions(+) diff --git a/src/CommunitiesList.cpp b/src/CommunitiesList.cpp index fa6db098..863f1231 100644 --- a/src/CommunitiesList.cpp +++ b/src/CommunitiesList.cpp @@ -64,6 +64,7 @@ CommunitiesList::setCommunities(const mtx::responses::JoinedGroups &response) communities_["world"]->setPressedState(true); emit communityChanged("world"); + sortEntries(); } void @@ -71,6 +72,7 @@ CommunitiesList::syncTags(const std::map &info) { for (const auto &room : info) setTagsForRoom(room.first, room.second.tags); + sortEntries(); } void @@ -252,3 +254,40 @@ CommunitiesList::roomList(const QString &id) const return {}; } + +void +CommunitiesList::sortEntries() +{ + std::vector header; + std::vector communities; + std::vector tags; + std::vector footer; + // remove all the contents and sort them in the 4 vectors + for (auto &entry : communities_) { + CommunitiesListItem *item = entry.second.get(); + contentsLayout_->removeWidget(item); + // world is handled separately + if (entry.first == "world") + continue; + // sort the rest + if (item->is_tag()) + if (entry.first == "tag:m.favourite") + header.push_back(item); + else if (entry.first == "tag:m.lowpriority") + footer.push_back(item); + else + tags.push_back(item); + else + communities.push_back(item); + } + + contentsLayout_->insertWidget(contentsLayout_->count() - 1, communities_["world"].get()); + for (auto item : header) + contentsLayout_->insertWidget(contentsLayout_->count() - 1, item); + for (auto item : communities) + contentsLayout_->insertWidget(contentsLayout_->count() - 1, item); + for (auto item : tags) + contentsLayout_->insertWidget(contentsLayout_->count() - 1, item); + for (auto item : footer) + contentsLayout_->insertWidget(contentsLayout_->count() - 1, item); +} diff --git a/src/CommunitiesList.h b/src/CommunitiesList.h index f56cd5d9..b18df654 100644 --- a/src/CommunitiesList.h +++ b/src/CommunitiesList.h @@ -38,6 +38,7 @@ public slots: private: void fetchCommunityAvatar(const QString &id, const QString &avatarUrl); void addGlobalItem() { addCommunity("world"); } + void sortEntries(); //! Check whether or not a community id is currently managed. bool communityExists(const QString &id) const