Skip to content
Snippets Groups Projects
RoomSettings.qml 7.59 KiB
Newer Older
Nicolas Werner's avatar
Nicolas Werner committed
import Qt.labs.platform 1.1 as Platform
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 im.nheko 1.0

ApplicationWindow {
    id: roomSettingsDialog
Jedi18's avatar
Jedi18 committed

    property var roomSettings

    x: MainWindow.x + (MainWindow.width / 2) - (width / 2)
Jedi18's avatar
Jedi18 committed
    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/")
            displayName: roomSettings.roomName
Jedi18's avatar
Jedi18 committed
            height: 130
            width: 130
            Layout.alignment: Qt.AlignHCenter
Jedi18's avatar
Jedi18 committed
            onClicked: {
                if (roomSettings.canChangeAvatar)
                    roomSettings.updateAvatar();

Jedi18's avatar
Jedi18 committed
            }
        }

        BusyIndicator {
            Layout.alignment: Qt.AlignHCenter
            running: roomSettings.isLoading
            visible: roomSettings.isLoading
        }

        Text {
            id: errorText
Jedi18's avatar
Jedi18 committed
            text: "Error Text"
            color: "red"
            visible: opacity > 0
            opacity: 0
            Layout.alignment: Qt.AlignHCenter
        }

        SequentialAnimation {
            id: hideErrorAnimation
Jedi18's avatar
Jedi18 committed
            running: false
Jedi18's avatar
Jedi18 committed
            PauseAnimation {
                duration: 4000
            }
Jedi18's avatar
Jedi18 committed
            NumberAnimation {
                target: errorText
                property: 'opacity'
                to: 0
                duration: 1000
            }
Jedi18's avatar
Jedi18 committed
            target: roomSettings
            onDisplayError: {
                errorText.text = errorMessage;
                errorText.opacity = 1;
                hideErrorAnimation.restart();
Jedi18's avatar
Jedi18 committed
            }
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
            }
Jedi18's avatar
Jedi18 committed
        }

        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
            Layout.alignment: Qt.AlignHCenter
Jedi18's avatar
Jedi18 committed

Jedi18's avatar
Jedi18 committed
            TextArea {
                text: TimelineManager.escapeEmoji(roomSettings.roomTopic)
Nicolas Werner's avatar
Nicolas Werner committed
                wrapMode: TextEdit.WordWrap
                textFormat: TextEdit.RichText
Jedi18's avatar
Jedi18 committed
                readOnly: true
                background: null
Nicolas Werner's avatar
Nicolas Werner committed
                horizontalAlignment: TextEdit.AlignHCenter
                onLinkActivated: TimelineManager.openLink(link)
Nicolas Werner's avatar
Nicolas Werner committed
                CursorShape {
                    anchors.fill: parent
                    cursorShape: parent.hoveredLink ? Qt.PointingHandCursor : Qt.ArrowCursor
                }
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
                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();
                }
                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
                onAccepted: {
                    if (roomSettings.isEncryptionEnabled)
                        return ;

                    roomSettings.enableEncryption();
                }
                onRejected: {
                    encryptionToggle.checked = false;
                buttons: 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
            }
Jedi18's avatar
Jedi18 committed
        }

        Button {
            Layout.alignment: Qt.AlignRight
            text: "Ok"
Jedi18's avatar
Jedi18 committed
        }
Jedi18's avatar
Jedi18 committed
    }