Skip to content
Snippets Groups Projects
RoomSettings.qml 6.82 KiB
Newer Older
Jedi18's avatar
Jedi18 committed
import QtQuick 2.9
import QtQuick.Controls 2.3
import QtQuick.Layouts 1.2
import QtQuick.Window 2.3
import QtQuick.Dialogs 1.2
Jedi18's avatar
Jedi18 committed
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)
Jedi18's avatar
Jedi18 committed
    minimumWidth: 400
    minimumHeight: 650
Jedi18's avatar
Jedi18 committed
    palette: colors
    color: colors.window
    modality: Qt.WindowModal
Jedi18's avatar
Jedi18 committed

    Shortcut {
        sequence: StandardKey.Cancel
        onActivated: roomSettingsDialog.close()
    }

    ColumnLayout {
Jedi18's avatar
Jedi18 committed
        id: contentLayout1
Jedi18's avatar
Jedi18 committed

Jedi18's avatar
Jedi18 committed
        anchors.fill: parent
Jedi18's avatar
Jedi18 committed
        anchors.margins: 10
        spacing: 10

        Avatar {
Jedi18's avatar
Jedi18 committed
            url: roomSettings.roomAvatarUrl.replace("mxc://", "image://MxcImage/")
Jedi18's avatar
Jedi18 committed
            height: 130
            width: 130
            Layout.alignment: Qt.AlignHCenter
Jedi18's avatar
Jedi18 committed
            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()
            }
Jedi18's avatar
Jedi18 committed
        }

        ColumnLayout {
            Layout.alignment: Qt.AlignHCenter

            MatrixText {
Jedi18's avatar
Jedi18 committed
                text: roomSettings.roomName
Jedi18's avatar
Jedi18 committed
                font.pixelSize: 24
                Layout.alignment: Qt.AlignHCenter
            }

            MatrixText {
Jedi18's avatar
Jedi18 committed
                text: "%1 member(s)".arg(roomSettings.memberCount)
Jedi18's avatar
Jedi18 committed
                Layout.alignment: Qt.AlignHCenter
            }
        }

        ImageButton {
            Layout.alignment: Qt.AlignHCenter
            image: ":/icons/icons/ui/edit.png"
            visible: roomSettings.canChangeNameAndTopic
            onClicked: roomSettings.openEditModal()
Jedi18's avatar
Jedi18 committed
        }
Jedi18's avatar
Jedi18 committed

Jedi18's avatar
Jedi18 committed
        ScrollView {
            Layout.maximumHeight: 75
            ScrollBar.horizontal.policy: ScrollBar.AlwaysOff
            Layout.alignment: Qt.AlignHCenter
            Layout.fillWidth: true
Jedi18's avatar
Jedi18 committed

Jedi18's avatar
Jedi18 committed
            TextArea {
                text: roomSettings.roomTopic
                wrapMode: TextEdit.WordWrap
                readOnly: true
                background: null
            }
Jedi18's avatar
Jedi18 committed
        }
Jedi18's avatar
Jedi18 committed

        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)
                }
Jedi18's avatar
Jedi18 committed
            }
        }

        RowLayout {
            MatrixText {
                text: "Room access"
            }

            ComboBox {
                Layout.fillWidth: true
                enabled: roomSettings.canChangeJoinRules
Jedi18's avatar
Jedi18 committed
                model: [ "Anyone and guests", "Anyone", "Invited users" ]
                currentIndex: roomSettings.accessJoinRules
                onActivated: {
                    roomSettings.changeAccessRules(index)
                }
Jedi18's avatar
Jedi18 committed
            }
        }

        RowLayout {
            MatrixText {
                text: "Encryption"
            }

            Item {
                Layout.fillWidth: true
            }

Jedi18's avatar
Jedi18 committed
            ToggleButton {
                id: encryptionToggle

                checked: roomSettings.isEncryptionEnabled
Jedi18's avatar
Jedi18 committed
                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: {
Jedi18's avatar
Jedi18 committed
                    encryptionToggle.checked = false
                }

                standardButtons: Dialog.Ok | Dialog.Cancel
Jedi18's avatar
Jedi18 committed
            }
        }

        RowLayout {
            visible: roomSettings.isEncryptionEnabled

Jedi18's avatar
Jedi18 committed
            MatrixText {
                text: "Respond to key requests"
            }

            Item {
                Layout.fillWidth: true
            }

Jedi18's avatar
Jedi18 committed
            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

Jedi18's avatar
Jedi18 committed
                onClicked: {
                    roomSettings.changeKeyRequestsPreference(checked)
                }
Jedi18's avatar
Jedi18 committed
            }
        }

        MatrixText {
            text: "INFO"
        }

        RowLayout {
            MatrixText {
                text: "Internal ID"
            }

            Item {
                Layout.fillWidth: true
            }

            MatrixText {
Jedi18's avatar
Jedi18 committed
                text: roomSettings.roomId
Jedi18's avatar
Jedi18 committed
                font.pixelSize: 12
            }
        }

        RowLayout {
            MatrixText {
                text: "Room Version"
            }

            Item {
                Layout.fillWidth: true
            }

            MatrixText {
Jedi18's avatar
Jedi18 committed
                text: roomSettings.roomVersion
Jedi18's avatar
Jedi18 committed
                font.pixelSize: 12
            }
        }

        Button {
            Layout.alignment: Qt.AlignRight
            text: "Ok"