1 files changed, 268 insertions, 0 deletions
diff --git a/resources/qml/RoomSettings.qml b/resources/qml/RoomSettings.qml
new file mode 100644
index 00000000..b3602a6a
--- /dev/null
+++ b/resources/qml/RoomSettings.qml
@@ -0,0 +1,268 @@
+import QtQuick 2.9
+import QtQuick.Controls 2.3
+import QtQuick.Layouts 1.2
+import QtQuick.Window 2.3
+import QtQuick.Dialogs 1.2
+import im.nheko 1.0
+
+ApplicationWindow {
+ id: roomSettingsDialog
+
+ property var roomSettings
+
+ x: MainWindow.x + (MainWindow.width / 2) - (width / 2)
+ y: MainWindow.y + (MainWindow.height / 2) - (height / 2)
+ minimumWidth: 400
+ minimumHeight: 650
+ palette: colors
+ color: colors.window
+ modality: Qt.WindowModal
+
+ Shortcut {
+ sequence: StandardKey.Cancel
+ onActivated: roomSettingsDialog.close()
+ }
+
+ ColumnLayout {
+ id: contentLayout1
+
+ anchors.fill: parent
+ anchors.margins: 10
+ spacing: 10
+
+ Avatar {
+ url: roomSettings.roomAvatarUrl.replace("mxc://", "image://MxcImage/")
+ height: 130
+ width: 130
+ Layout.alignment: Qt.AlignHCenter
+ onClicked: {
+ if(roomSettings.canChangeAvatar) {
+ roomSettings.updateAvatar();
+ }
+ }
+ }
+
+ BusyIndicator {
+ Layout.alignment: Qt.AlignHCenter
+ running: roomSettings.isLoading
+ visible: roomSettings.isLoading
+ }
+
+ Text {
+ id: errorText
+ text: "Error Text"
+ color: "red"
+ visible: opacity > 0
+ opacity: 0
+ Layout.alignment: Qt.AlignHCenter
+ }
+
+ SequentialAnimation {
+ id: hideErrorAnimation
+ running: false
+ PauseAnimation {
+ duration: 4000
+ }
+ NumberAnimation {
+ target: errorText
+ property: 'opacity'
+ to: 0
+ duration: 1000
+ }
+ }
+
+ Connections{
+ target: roomSettings
+ onDisplayError: {
+ errorText.text = errorMessage
+ errorText.opacity = 1
+ hideErrorAnimation.restart()
+ }
+ }
+
+ ColumnLayout {
+ Layout.alignment: Qt.AlignHCenter
+
+ MatrixText {
+ text: roomSettings.roomName
+ font.pixelSize: 24
+ Layout.alignment: Qt.AlignHCenter
+ }
+
+ MatrixText {
+ text: "%1 member(s)".arg(roomSettings.memberCount)
+ Layout.alignment: Qt.AlignHCenter
+ }
+ }
+
+ ImageButton {
+ Layout.alignment: Qt.AlignHCenter
+ image: ":/icons/icons/ui/edit.png"
+ visible: roomSettings.canChangeNameAndTopic
+ onClicked: roomSettings.openEditModal()
+ }
+
+ ScrollView {
+ Layout.maximumHeight: 75
+ ScrollBar.horizontal.policy: ScrollBar.AlwaysOff
+ Layout.alignment: Qt.AlignHCenter
+ Layout.fillWidth: true
+
+ TextArea {
+ text: roomSettings.roomTopic
+ wrapMode: TextEdit.WordWrap
+ readOnly: true
+ background: null
+ }
+ }
+
+ MatrixText {
+ text: "SETTINGS"
+ }
+
+ RowLayout {
+ MatrixText {
+ text: "Notifications"
+ }
+
+ Item {
+ Layout.fillWidth: true
+ }
+
+ ComboBox {
+ model: [ "Muted", "Mentions only", "All messages" ]
+ currentIndex: roomSettings.notifications
+ onActivated: {
+ roomSettings.changeNotifications(index)
+ }
+ }
+ }
+
+ RowLayout {
+ MatrixText {
+ text: "Room access"
+ }
+
+ ComboBox {
+ Layout.fillWidth: true
+ enabled: roomSettings.canChangeJoinRules
+ model: [ "Anyone and guests", "Anyone", "Invited users" ]
+ currentIndex: roomSettings.accessJoinRules
+ onActivated: {
+ roomSettings.changeAccessRules(index)
+ }
+ }
+ }
+
+ RowLayout {
+ MatrixText {
+ text: "Encryption"
+ }
+
+ Item {
+ Layout.fillWidth: true
+ }
+
+ ToggleButton {
+ id: encryptionToggle
+
+ checked: roomSettings.isEncryptionEnabled
+ onClicked: {
+ if(roomSettings.isEncryptionEnabled) {
+ checked=true;
+ return;
+ }
+
+ confirmEncryptionDialog.open();
+ }
+ }
+
+ MessageDialog {
+ id: confirmEncryptionDialog
+ title: qsTr("End-to-End Encryption")
+ text: qsTr("Encryption is currently experimental and things might break unexpectedly. <br>
+ Please take note that it can't be disabled afterwards.")
+ modality: Qt.WindowModal
+ icon: StandardIcon.Question
+
+ onAccepted: {
+ if(roomSettings.isEncryptionEnabled) {
+ return;
+ }
+
+ roomSettings.enableEncryption();
+ }
+
+ onRejected: {
+ encryptionToggle.checked = false
+ }
+
+ standardButtons: Dialog.Ok | Dialog.Cancel
+ }
+ }
+
+ RowLayout {
+ visible: roomSettings.isEncryptionEnabled
+
+ MatrixText {
+ text: "Respond to key requests"
+ }
+
+ Item {
+ Layout.fillWidth: true
+ }
+
+ ToggleButton {
+ ToolTip.text: qsTr("Whether or not the client should respond automatically with the session keys
+ upon request. Use with caution, this is a temporary measure to test the
+ E2E implementation until device verification is completed.")
+
+ checked: roomSettings.respondsToKeyRequests
+
+ onClicked: {
+ roomSettings.changeKeyRequestsPreference(checked)
+ }
+ }
+ }
+
+ MatrixText {
+ text: "INFO"
+ }
+
+ RowLayout {
+ MatrixText {
+ text: "Internal ID"
+ }
+
+ Item {
+ Layout.fillWidth: true
+ }
+
+ MatrixText {
+ text: roomSettings.roomId
+ font.pixelSize: 12
+ }
+ }
+
+ RowLayout {
+ MatrixText {
+ text: "Room Version"
+ }
+
+ Item {
+ Layout.fillWidth: true
+ }
+
+ MatrixText {
+ text: roomSettings.roomVersion
+ font.pixelSize: 12
+ }
+ }
+
+ Button {
+ Layout.alignment: Qt.AlignRight
+ text: "Ok"
+ onClicked: close()
+ }
+ }
+}
\ No newline at end of file
|