From 763330fd3c259b7a877eb05944783e92c0afcb80 Mon Sep 17 00:00:00 2001 From: Konstantinos Sideris Date: Tue, 1 May 2018 19:35:28 +0300 Subject: Add member list --- include/Cache.h | 13 ++++++++++ include/MainWindow.h | 6 +++++ include/TopRoomBar.h | 1 + include/dialogs/MemberList.hpp | 57 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 77 insertions(+) create mode 100644 include/dialogs/MemberList.hpp (limited to 'include') diff --git a/include/Cache.h b/include/Cache.h index db5dba00..e0b68549 100644 --- a/include/Cache.h +++ b/include/Cache.h @@ -24,6 +24,13 @@ #include #include +struct RoomMember +{ + QString user_id; + QString display_name; + QImage avatar; +}; + struct SearchResult { QString user_id; @@ -32,6 +39,7 @@ struct SearchResult Q_DECLARE_METATYPE(SearchResult) Q_DECLARE_METATYPE(QVector) +Q_DECLARE_METATYPE(RoomMember); //! Used to uniquely identify a list of read receipts. struct ReadReceiptKey @@ -164,6 +172,11 @@ public: lmdb::dbi &membersdb, const QString &room_id); + //! Retrieve member info from a room. + std::vector getMembers(const std::string &room_id, + std::size_t startIndex = 0, + std::size_t len = 30); + void saveState(const mtx::responses::Sync &res); bool isInitialized() const; diff --git a/include/MainWindow.h b/include/MainWindow.h index 08d7e53e..1ffbe850 100644 --- a/include/MainWindow.h +++ b/include/MainWindow.h @@ -49,6 +49,7 @@ class InviteUsers; class JoinRoom; class LeaveRoom; class Logout; +class MemberList; class ReCaptcha; class RoomSettings; } @@ -70,6 +71,7 @@ public: void openJoinRoomDialog(std::function callback); void openLogoutDialog(std::function callback); void openRoomSettings(const QString &room_id = ""); + void openMemberListDialog(const QString &room_id = ""); protected: void closeEvent(QCloseEvent *event); @@ -153,4 +155,8 @@ private: QSharedPointer roomSettingsModal_; //! Room settings dialog. QSharedPointer roomSettingsDialog_; + //! Member list modal. + QSharedPointer memberListModal_; + //! Member list dialog. + QSharedPointer memberListDialog_; }; diff --git a/include/TopRoomBar.h b/include/TopRoomBar.h index 37a0b61b..54b89a59 100644 --- a/include/TopRoomBar.h +++ b/include/TopRoomBar.h @@ -67,6 +67,7 @@ private: Menu *menu_; QAction *leaveRoom_; + QAction *roomMembers_; QAction *roomSettings_; QAction *inviteUsers_; diff --git a/include/dialogs/MemberList.hpp b/include/dialogs/MemberList.hpp new file mode 100644 index 00000000..09a56aab --- /dev/null +++ b/include/dialogs/MemberList.hpp @@ -0,0 +1,57 @@ +#pragma once + +#include +#include + +class Avatar; +class Cache; +class FlatButton; +class QHBoxLayout; +class QLabel; +class QVBoxLayout; + +struct RoomMember; + +template +class QSharedPointer; + +namespace dialogs { + +class MemberItem : public QWidget +{ + Q_OBJECT + +public: + MemberItem(const RoomMember &member, QWidget *parent); + +private: + QHBoxLayout *topLayout_; + QVBoxLayout *textLayout_; + + Avatar *avatar_; + + QLabel *userName_; + QLabel *userId_; +}; + +class MemberList : public QFrame +{ + Q_OBJECT +public: + MemberList(const QString &room_id, QSharedPointer cache, QWidget *parent = nullptr); + +public slots: + void addUsers(const std::vector &users); + +protected: + void paintEvent(QPaintEvent *event) override; + void moveButtonToBottom(); + +private: + QString room_id_; + QLabel *topLabel_; + QListWidget *list_; + QSharedPointer cache_; + FlatButton *moreBtn_; +}; +} // dialogs -- cgit 1.5.1