#pragma once #include #include #include #include "CacheStructs.h" #include "CommunitiesListItem.h" #include "ui/Theme.h" namespace mtx::responses { struct GroupProfile; struct JoinedGroups; } class CommunitiesList : public QWidget { Q_OBJECT public: CommunitiesList(QWidget *parent = nullptr); void clear() { communities_.clear(); } void addCommunity(const std::string &id); void removeCommunity(const QString &id) { communities_.erase(id); }; std::map roomList(const QString &id) const; void syncTags(const std::map &info); void setTagsForRoom(const QString &id, const std::vector &tags); std::vector currentTags() const; signals: void communityChanged(const QString &id); void avatarRetrieved(const QString &id, const QPixmap &img); void groupProfileRetrieved(const QString &group_id, const mtx::responses::GroupProfile &); void groupRoomsRetrieved(const QString &group_id, const std::map &res); public slots: void updateCommunityAvatar(const QString &id, const QPixmap &img); void highlightSelectedCommunity(const QString &id); void setCommunities(const mtx::responses::JoinedGroups &groups); 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 { return communities_.find(id) != communities_.end(); } QVBoxLayout *topLayout_; QVBoxLayout *contentsLayout_; QScrollArea *scrollArea_; std::map> communities_; };