Skip to content
Snippets Groups Projects
RoomSettings.qml 7 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
    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
                color: colors.text
                horizontalAlignment: TextEdit.AlignHCenter
Jedi18's avatar
Jedi18 committed
            }
Jedi18's avatar
Jedi18 committed
        }
Jedi18's avatar
Jedi18 committed

Jedi18's avatar
Jedi18 committed

            MatrixText {
Jedi18's avatar
Jedi18 committed
            }

            Item {
                Layout.fillWidth: true
            }

            MatrixText {
                text: "Notifications"
                Layout.fillWidth: true
            }

Jedi18's avatar
Jedi18 committed
            ComboBox {
                model: [ "Muted", "Mentions only", "All messages" ]
                currentIndex: roomSettings.notifications
                onActivated: {
                    roomSettings.changeNotifications(index)
                }
Jedi18's avatar
Jedi18 committed
            }

            MatrixText {
                text: "Room access"
Jedi18's avatar
Jedi18 committed
            }

            ComboBox {
                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
            }

            MatrixText {
                text: "Encryption"
            }

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
            }
Jedi18's avatar
Jedi18 committed
            MatrixText {
                visible: roomSettings.isEncryptionEnabled
Jedi18's avatar
Jedi18 committed
                text: "Respond to key requests"
            }

Jedi18's avatar
Jedi18 committed
            ToggleButton {
                visible: roomSettings.isEncryptionEnabled
                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 {
Jedi18's avatar
Jedi18 committed
            }

            Item {
                Layout.fillWidth: true
            }

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

            MatrixText {
                text: "Room Version"
            }

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

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