diff --git a/include/InviteeItem.h b/include/InviteeItem.h
new file mode 100644
index 00000000..f0bdbdf0
--- /dev/null
+++ b/include/InviteeItem.h
@@ -0,0 +1,27 @@
+#pragma once
+
+#include <QLabel>
+#include <QWidget>
+
+#include "mtx.hpp"
+
+class FlatButton;
+
+class InviteeItem : public QWidget
+{
+ Q_OBJECT
+
+public:
+ InviteeItem(mtx::identifiers::User user, QWidget *parent = nullptr);
+
+ QString userID() { return user_; }
+
+signals:
+ void removeItem();
+
+private:
+ QString user_;
+
+ QLabel *name_;
+ FlatButton *removeUserBtn_;
+};
diff --git a/include/MatrixClient.h b/include/MatrixClient.h
index 397ba11d..ee493da6 100644
--- a/include/MatrixClient.h
+++ b/include/MatrixClient.h
@@ -60,6 +60,7 @@ public:
void sendTypingNotification(const QString &roomid, int timeoutInMillis = 20000);
void removeTypingNotification(const QString &roomid);
void readEvent(const QString &room_id, const QString &event_id);
+ void inviteUser(const QString &room_id, const QString &user);
QUrl getHomeServer() { return server_; };
int transactionId() { return txn_id_; };
@@ -84,6 +85,7 @@ signals:
void versionError(const QString &error);
void loggedOut();
+ void invitedUser(const QString &room_id, const QString &user);
void loginSuccess(const QString &userid, const QString &homeserver, const QString &token);
void registerSuccess(const QString &userid,
diff --git a/include/TopRoomBar.h b/include/TopRoomBar.h
index 7bd10356..471662a4 100644
--- a/include/TopRoomBar.h
+++ b/include/TopRoomBar.h
@@ -26,6 +26,7 @@
#include <QSharedPointer>
#include <QVBoxLayout>
+#include "dialogs/InviteUsers.h"
#include "dialogs/LeaveRoom.h"
class Avatar;
@@ -56,6 +57,7 @@ public:
signals:
void leaveRoom();
+ void inviteUsers(QStringList users);
protected:
void paintEvent(QPaintEvent *event) override;
@@ -76,12 +78,16 @@ private:
QMenu *menu_;
QAction *toggleNotifications_;
QAction *leaveRoom_;
+ QAction *inviteUsers_;
FlatButton *settingsBtn_;
QSharedPointer<OverlayModal> leaveRoomModal_;
QSharedPointer<dialogs::LeaveRoom> leaveRoomDialog_;
+ QSharedPointer<OverlayModal> inviteUsersModal_;
+ QSharedPointer<dialogs::InviteUsers> inviteUsersDialog_;
+
Avatar *avatar_;
int buttonSize_;
diff --git a/include/dialogs/InviteUsers.h b/include/dialogs/InviteUsers.h
new file mode 100644
index 00000000..236a2558
--- /dev/null
+++ b/include/dialogs/InviteUsers.h
@@ -0,0 +1,41 @@
+#pragma once
+
+#include <QFrame>
+#include <QLabel>
+#include <QListWidgetItem>
+#include <QStringList>
+
+class FlatButton;
+class TextField;
+class QListWidget;
+
+namespace dialogs {
+
+class InviteUsers : public QFrame
+{
+ Q_OBJECT
+public:
+ explicit InviteUsers(QWidget *parent = nullptr);
+
+protected:
+ void paintEvent(QPaintEvent *event) override;
+
+signals:
+ void closing(bool isLeaving, QStringList invitees);
+
+private slots:
+ void removeInvitee(QListWidgetItem *item);
+
+private:
+ void addUser();
+ QStringList invitedUsers() const;
+
+ FlatButton *confirmBtn_;
+ FlatButton *cancelBtn_;
+
+ TextField *inviteeInput_;
+ QLabel *errorLabel_;
+
+ QListWidget *inviteeList_;
+};
+} // dialogs
|