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;
};
|