summary refs log tree commit diff
path: root/src/MemberList.h
diff options
context:
space:
mode:
authorLoren Burkholder <55629213+LorenDB@users.noreply.github.com>2022-04-22 19:59:40 -0400
committerGitHub <noreply@github.com>2022-04-22 23:59:40 +0000
commit6672e765d7a1f51381521538d6c53abb6303f079 (patch)
treec09936eae0bdb118c5d6069e98bfcb46a44f9559 /src/MemberList.h
parentMerge pull request #1054 from tastytea/image-pack-changes/pack-id (diff)
downloadnheko-6672e765d7a1f51381521538d6c53abb6303f079.tar.xz
Search room members (#1049)
Diffstat (limited to 'src/MemberList.h')
-rw-r--r--src/MemberList.h61
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;
 };