summary refs log tree commit diff
path: root/resources
diff options
context:
space:
mode:
authorLoren Burkholder <computersemiexpert@outlook.com>2021-05-29 21:09:21 -0400
committerLoren Burkholder <computersemiexpert@outlook.com>2021-07-20 21:47:05 -0400
commit77a0c574bfc962b6c37426fb16a70ca16c08a3f5 (patch)
tree63bd4a66b761c4afee8e41468551921b7fa32212 /resources
parentExplicitly reload data in delegates, if related events got loaded (diff)
downloadnheko-77a0c574bfc962b6c37426fb16a70ca16c08a3f5.tar.xz
QML the room member list
Diffstat (limited to 'resources')
-rw-r--r--resources/qml/RoomMembers.qml111
-rw-r--r--resources/qml/TopBar.qml2
-rw-r--r--resources/res.qrc1
3 files changed, 113 insertions, 1 deletions
diff --git a/resources/qml/RoomMembers.qml b/resources/qml/RoomMembers.qml
new file mode 100644
index 00000000..4406c1b0
--- /dev/null
+++ b/resources/qml/RoomMembers.qml
@@ -0,0 +1,111 @@
+import QtQuick 2.12
+import QtQuick.Controls 2.12
+import QtQuick.Layouts 1.12
+import QtQuick.Window 2.12
+import im.nheko 1.0
+
+ApplicationWindow {
+    id: roomMembersRoot
+
+    property string roomName: Rooms.currentRoom.roomName
+    property MemberList members
+
+    title: qsTr("Members of ") + roomName
+    x: MainWindow.x + (MainWindow.width / 2) - (width / 2)
+    y: MainWindow.y + (MainWindow.height / 2) - (height / 2)
+    height: 650
+    width: 420
+    minimumHeight: 420
+
+    Shortcut {
+        sequence: StandardKey.Cancel
+        onActivated: roomMembersRoot.close()
+    }
+
+    ColumnLayout {
+        anchors.fill: parent
+        anchors.margins: 10
+        spacing: 10
+
+        Avatar {
+            id: roomAvatar
+
+            width: 130
+            height: width
+            displayName: members.roomName
+            Layout.alignment: Qt.AlignHCenter
+            url: members.avatarUrl.replace("mxc://", "image://MxcImage/")
+            onClicked: TimelineManager.timeline.openRoomSettings(members.roomId)
+        }
+
+        Label {
+            font.pixelSize: 24
+            text: members.memberCount + (members.memberCount === 1 ? qsTr(" person in ") : qsTr(" people in ")) + roomName
+            Layout.alignment: Qt.AlignHCenter
+        }
+
+        ScrollView {
+            clip: false
+            palette: colors
+            padding: 10
+            ScrollBar.horizontal.visible: false
+            Layout.fillHeight: true
+            Layout.minimumHeight: 200
+            Layout.fillWidth: true
+
+            ListView {
+                id: memberList
+
+                clip: true
+                spacing: 8
+                boundsBehavior: Flickable.StopAtBounds
+                model: members
+
+                ScrollHelper {
+                    flickable: parent
+                    anchors.fill: parent
+                    enabled: !Settings.mobileMode
+                }
+
+                delegate: RowLayout {
+                    spacing: 10
+
+                    Avatar {
+                        width: avatarSize
+                        height: avatarSize
+                        userid: model.mxid
+                        url: model.avatarUrl.replace("mxc://", "image://MxcImage/")
+                        displayName: model.displayName
+                        onClicked: TimelineManager.timeline.openUserProfile(model.mxid)
+                    }
+
+                    ColumnLayout {
+                        spacing: 5
+
+                        Label {
+                            text: model.displayName
+                            color: TimelineManager.userColor(model ? model.mxid : "", colors.window)
+                            font.pointSize: 12
+                        }
+
+                        Label {
+                            text: model.mxid
+                            color: colors.buttonText
+                            font.pointSize: 10
+                        }
+
+                        Item {
+                            Layout.fillHeight: true
+                            Layout.fillWidth: true
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    footer: DialogButtonBox {
+        standardButtons: DialogButtonBox.Ok
+        onAccepted: roomMembersRoot.close()
+    }
+}
diff --git a/resources/qml/TopBar.qml b/resources/qml/TopBar.qml
index 58aba0c7..50c2447c 100644
--- a/resources/qml/TopBar.qml
+++ b/resources/qml/TopBar.qml
@@ -116,7 +116,7 @@ Rectangle {
 
                 Platform.MenuItem {
                     text: qsTr("Members")
-                    onTriggered: TimelineManager.openMemberListDialog(room.roomId())
+                    onTriggered: Rooms.currentRoom.openRoomMembers(room.roomId())
                 }
 
                 Platform.MenuItem {
diff --git a/resources/res.qrc b/resources/res.qrc
index e9479e57..da5288c8 100644
--- a/resources/res.qrc
+++ b/resources/res.qrc
@@ -185,6 +185,7 @@
         <file>qml/components/AdaptiveLayout.qml</file>
         <file>qml/components/AdaptiveLayoutElement.qml</file>
         <file>qml/components/FlatButton.qml</file>
+        <file>qml/RoomMembers.qml</file>
     </qresource>
     <qresource prefix="/media">
         <file>media/ring.ogg</file>