summary refs log tree commit diff
path: root/include
diff options
context:
space:
mode:
authorKonstantinos Sideris <sideris.konstantin@gmail.com>2018-05-01 19:35:28 +0300
committerKonstantinos Sideris <sideris.konstantin@gmail.com>2018-05-01 19:35:28 +0300
commit763330fd3c259b7a877eb05944783e92c0afcb80 (patch)
treecf6810cba9aded346ecf8c3dbede7ed0e7d8d68f /include
parentAdd prototype room settings menu (diff)
downloadnheko-763330fd3c259b7a877eb05944783e92c0afcb80.tar.xz
Add member list
Diffstat (limited to 'include')
-rw-r--r--include/Cache.h13
-rw-r--r--include/MainWindow.h6
-rw-r--r--include/TopRoomBar.h1
-rw-r--r--include/dialogs/MemberList.hpp57
4 files changed, 77 insertions, 0 deletions
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 <lmdb++.h> #include <mtx/responses.hpp> +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<SearchResult>) +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<RoomMember> 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<void(const QString &room_id)> callback); void openLogoutDialog(std::function<void()> callback); void openRoomSettings(const QString &room_id = ""); + void openMemberListDialog(const QString &room_id = ""); protected: void closeEvent(QCloseEvent *event); @@ -153,4 +155,8 @@ private: QSharedPointer<OverlayModal> roomSettingsModal_; //! Room settings dialog. QSharedPointer<dialogs::RoomSettings> roomSettingsDialog_; + //! Member list modal. + QSharedPointer<OverlayModal> memberListModal_; + //! Member list dialog. + QSharedPointer<dialogs::MemberList> 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 <QFrame> +#include <QListWidget> + +class Avatar; +class Cache; +class FlatButton; +class QHBoxLayout; +class QLabel; +class QVBoxLayout; + +struct RoomMember; + +template<class T> +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> cache, QWidget *parent = nullptr); + +public slots: + void addUsers(const std::vector<RoomMember> &users); + +protected: + void paintEvent(QPaintEvent *event) override; + void moveButtonToBottom(); + +private: + QString room_id_; + QLabel *topLabel_; + QListWidget *list_; + QSharedPointer<Cache> cache_; + FlatButton *moreBtn_; +}; +} // dialogs