Skip to content
Snippets Groups Projects
RoomSettings.qml 7.34 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)
                }
            Item {
                // for adding extra space between sections
                Layout.fillWidth: true
            }

            Item {
                // for adding extra space between sections
                Layout.fillWidth: true
            }

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
            }

            MatrixText {
                text: "Room Version"
            }

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

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