diff options
author | Loren Burkholder <55629213+LorenDB@users.noreply.github.com> | 2022-04-22 19:59:40 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-22 23:59:40 +0000 |
commit | 6672e765d7a1f51381521538d6c53abb6303f079 (patch) | |
tree | c09936eae0bdb118c5d6069e98bfcb46a44f9559 /src/MemberList.h | |
parent | Merge pull request #1054 from tastytea/image-pack-changes/pack-id (diff) | |
download | nheko-6672e765d7a1f51381521538d6c53abb6303f079.tar.xz |
Search room members (#1049)
Diffstat (limited to 'src/MemberList.h')
-rw-r--r-- | src/MemberList.h | 61 |
1 files changed, 59 insertions, 2 deletions
diff --git a/src/MemberList.h b/src/MemberList.h index be345d41..2f90e5e8 100644 --- a/src/MemberList.h +++ b/src/MemberList.h @@ -6,10 +6,13 @@ #pragma once #include <QAbstractListModel> +#include <QSortFilterProxyModel> + +#include <mtx/events/power_levels.hpp> #include "CacheStructs.h" -class MemberList : public QAbstractListModel +class MemberListBackend : public QAbstractListModel { Q_OBJECT @@ -27,8 +30,10 @@ public: DisplayName, AvatarUrl, Trustlevel, + Powerlevel, }; - MemberList(const QString &room_id, QObject *parent = nullptr); + + MemberListBackend(const QString &room_id, QObject *parent = nullptr); QHash<int, QByteArray> roleNames() const override; int rowCount(const QModelIndex &parent = QModelIndex()) const override @@ -66,4 +71,56 @@ private: RoomInfo info_; int numUsersLoaded_{0}; bool loadingMoreMembers_{false}; + + mtx::events::state::PowerLevels powerLevels_; + + friend class MemberList; +}; + +class MemberList : public QSortFilterProxyModel +{ + Q_OBJECT + + Q_PROPERTY(QString roomName READ roomName NOTIFY roomNameChanged) + Q_PROPERTY(int memberCount READ memberCount NOTIFY memberCountChanged) + Q_PROPERTY(QString avatarUrl READ avatarUrl NOTIFY avatarUrlChanged) + Q_PROPERTY(QString roomId READ roomId NOTIFY roomIdChanged) + Q_PROPERTY(int numUsersLoaded READ numUsersLoaded NOTIFY numUsersLoadedChanged) + Q_PROPERTY(bool loadingMoreMembers READ loadingMoreMembers NOTIFY loadingMoreMembersChanged) + +public: + enum MemberSortRoles + { + Mxid = MemberListBackend::Roles::Mxid, + DisplayName = MemberListBackend::Roles::DisplayName, + Powerlevel = MemberListBackend::Roles::Powerlevel, + }; + Q_ENUM(MemberSortRoles) + + MemberList(const QString &room_id, QObject *parent = nullptr); + + QString roomName() const { return m_model.roomName(); } + int memberCount() const { return m_model.memberCount(); } + QString avatarUrl() const { return m_model.avatarUrl(); } + QString roomId() const { return m_model.roomId(); } + int numUsersLoaded() const { return m_model.numUsersLoaded(); } + bool loadingMoreMembers() const { return m_model.loadingMoreMembers(); } + +signals: + void roomNameChanged(); + void memberCountChanged(); + void avatarUrlChanged(); + void roomIdChanged(); + void numUsersLoadedChanged(); + void loadingMoreMembersChanged(); + +public slots: + void setFilterString(const QString &text); + void sortBy(const MemberSortRoles role); + +protected: + bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override; + +private: + MemberListBackend m_model; }; |