diff --git a/CMakeLists.txt b/CMakeLists.txt index 2b918be7..aa81f285 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -303,6 +303,7 @@ set(SRC_FILES src/TrayIcon.cpp src/UserInfoWidget.cpp src/UserSettingsPage.cpp + src/UsersModel.cpp src/Utils.cpp src/WebRTCSession.cpp src/WelcomePage.cpp diff --git a/src/UsersModel.cpp b/src/UsersModel.cpp new file mode 100644 index 00000000..c63292bb --- /dev/null +++ b/src/UsersModel.cpp @@ -0,0 +1,28 @@ +#include "UsersModel.h" + +#include "Cache.h" +#include "CompletionModelRoles.h" + +#include + +UsersModel::UsersModel(const std::string &roomId, QObject *parent) + : QAbstractListModel(parent) +{ + roomMembers_ = cache::getMembers(roomId, 0, 9999); +} + +QVariant +UsersModel::data(const QModelIndex &index, int role) const +{ + if (hasIndex(index.row(), index.column(), index.parent())) { + switch (role) { + case CompletionModel::CompletionRole: + case CompletionModel::SearchRole: + case Qt::DisplayRole: + return roomMembers_[index.row()].display_name; + case Avatar: + return roomMembers_[index.row()].avatar; + } + } + return {}; +} diff --git a/src/UsersModel.h b/src/UsersModel.h new file mode 100644 index 00000000..09ccbf25 --- /dev/null +++ b/src/UsersModel.h @@ -0,0 +1,24 @@ +#pragma once + +#include + +class RoomMember; + +class UsersModel : public QAbstractListModel +{ +public: + enum Roles + { + Avatar = Qt::UserRole // QImage avatar + }; + + UsersModel(const std::string &roomId, QObject *parent = nullptr); + int rowCount(const QModelIndex &parent = QModelIndex()) const override + { + return (parent == QModelIndex()) ? roomMembers_.size() : 0; + } + QVariant data(const QModelIndex &index, int role) const override; + +private: + std::vector roomMembers_; +};