Skip to content
Snippets Groups Projects
RoomSettings.qml 8.5 KiB
Newer Older
  • Learn to ignore specific revisions
  • Nicolas Werner's avatar
    Nicolas Werner committed
    // SPDX-FileCopyrightText: 2021 Nheko Contributors
    
    // SPDX-FileCopyrightText: 2022 Nheko Contributors
    
    Nicolas Werner's avatar
    Nicolas Werner committed
    // SPDX-License-Identifier: GPL-3.0-or-later
    
    
    import ".."
    import "../ui"
    
    Nicolas Werner's avatar
    Nicolas Werner committed
    import Qt.labs.platform 1.1 as Platform
    
    Jedi18's avatar
    Jedi18 committed
    import QtQuick.Controls 2.3
    import QtQuick.Layouts 1.2
    
    import QtQuick.Window 2.13
    
    Jedi18's avatar
    Jedi18 committed
    import im.nheko 1.0
    
    ApplicationWindow {
    
        id: roomSettingsDialog
    
    Jedi18's avatar
    Jedi18 committed
    
        property var roomSettings
    
    
        minimumWidth: 450
        minimumHeight: 680
    
        palette: Nheko.colors
        color: Nheko.colors.window
    
        flags: Qt.Dialog | Qt.WindowCloseButtonHint | Qt.WindowTitleHint
    
        title: qsTr("Room Settings")
    
    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
    
            anchors.margins: Nheko.paddingMedium
            spacing: Nheko.paddingMedium
    
    Jedi18's avatar
    Jedi18 committed
    
            Avatar {
    
    Jedi18's avatar
    Jedi18 committed
                url: roomSettings.roomAvatarUrl.replace("mxc://", "image://MxcImage/")
    
    Joe Donofry's avatar
    Joe Donofry committed
                roomid: roomSettings.roomId
    
                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
                Layout.alignment: Qt.AlignHCenter
                visible: roomSettings.isLoading
    
                foreground: Nheko.colors.mid
                running: roomSettings.isLoading
    
    Jedi18's avatar
    Jedi18 committed
            }
    
            Text {
                id: errorText
    
    Jedi18's avatar
    Jedi18 committed
                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
    
                function onDisplayError(errorMessage) {
    
                    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
    
    Loren Burkholder's avatar
    Loren Burkholder committed
                    font.pixelSize: fontMetrics.font.pixelSize * 2
    
                    Layout.fillWidth: true
                    horizontalAlignment: TextEdit.AlignHCenter
    
    Jedi18's avatar
    Jedi18 committed
                }
    
                MatrixText {
    
                    text: qsTr("%n member(s)", "", roomSettings.memberCount)
    
    Jedi18's avatar
    Jedi18 committed
                    Layout.alignment: Qt.AlignHCenter
    
                        onSingleTapped: TimelineManager.openRoomMembers(Rooms.getRoomById(roomSettings.roomId))
    
                    }
    
                    CursorShape {
                        cursorShape: Qt.PointingHandCursor
                        anchors.fill: parent
                    }
    
    
    Jedi18's avatar
    Jedi18 committed
                }
    
    Jedi18's avatar
    Jedi18 committed
            }
    
            ImageButton {
                Layout.alignment: Qt.AlignHCenter
    
                image: ":/icons/icons/ui/edit.svg"
    
                visible: roomSettings.canChangeNameAndTopic
                onClicked: roomSettings.openEditModal()
    
    Jedi18's avatar
    Jedi18 committed
            }
    
    Jedi18's avatar
    Jedi18 committed
    
    
    Jedi18's avatar
    Jedi18 committed
            ScrollView {
    
                Layout.fillHeight: true
    
    Jedi18's avatar
    Jedi18 committed
                Layout.alignment: Qt.AlignHCenter
    
                Layout.fillWidth: true
                Layout.leftMargin: Nheko.paddingLarge
                Layout.rightMargin: Nheko.paddingLarge
    
    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
    
                    color: Nheko.colors.text
    
    Nicolas Werner's avatar
    Nicolas Werner committed
                    horizontalAlignment: TextEdit.AlignHCenter
    
                    onLinkActivated: Nheko.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
    
    
                rowSpacing: Nheko.paddingMedium
    
    Jedi18's avatar
    Jedi18 committed
    
                MatrixText {
    
                    text: qsTr("SETTINGS")
    
    Jedi18's avatar
    Jedi18 committed
                }
    
                Item {
                    Layout.fillWidth: true
                }
    
    
                    text: qsTr("Notifications")
    
    Jedi18's avatar
    Jedi18 committed
                ComboBox {
    
                    model: [qsTr("Muted"), qsTr("Mentions only"), qsTr("All messages")]
    
                    currentIndex: roomSettings.notifications
                    onActivated: {
    
                        roomSettings.changeNotifications(index);
    
    Jedi18's avatar
    Jedi18 committed
                }
    
                MatrixText {
    
                    text: qsTr("Room access")
    
    Jedi18's avatar
    Jedi18 committed
                }
    
                ComboBox {
    
                    enabled: roomSettings.canChangeJoinRules
    
                    model: {
                        let opts = [qsTr("Anyone and guests"), qsTr("Anyone"), qsTr("Invited users")];
                        if (roomSettings.supportsKnocking)
                            opts.push(qsTr("By knocking"));
    
                        if (roomSettings.supportsRestricted)
                            opts.push(qsTr("Restricted by membership in other rooms"));
    
                        return opts;
                    }
    
                    currentIndex: roomSettings.accessJoinRules
                    onActivated: {
    
                        roomSettings.changeAccessRules(index);
    
    Jedi18's avatar
    Jedi18 committed
                }
    
                MatrixText {
    
                    text: qsTr("Encryption")
    
    Jedi18's avatar
    Jedi18 committed
                ToggleButton {
                    id: encryptionToggle
    
    
                    checked: roomSettings.isEncryptionEnabled
    
                    onCheckedChanged: {
    
                        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.NonModal
    
                        if (roomSettings.isEncryptionEnabled)
                            return ;
    
    
                        roomSettings.enableEncryption();
                    }
                    onRejected: {
    
                        encryptionToggle.checked = false;
    
                    buttons: Platform.MessageDialog.Ok | Platform.MessageDialog.Cancel
    
    Jedi18's avatar
    Jedi18 committed
                }
    
                MatrixText {
                    text: qsTr("Sticker & Emote Settings")
                }
    
                Button {
                    text: qsTr("Change")
                    ToolTip.text: qsTr("Change what packs are enabled, remove packs or create new ones")
                    onClicked: TimelineManager.openImagePackSettings(roomSettings.roomId)
                    Layout.alignment: Qt.AlignRight
                }
    
    
                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 {
    
                    text: qsTr("INFO")
    
    Jedi18's avatar
    Jedi18 committed
                }
    
                Item {
                    Layout.fillWidth: true
                }
    
    
                    text: qsTr("Internal ID")
    
    Jedi18's avatar
    Jedi18 committed
                MatrixText {
    
    Jedi18's avatar
    Jedi18 committed
                    text: roomSettings.roomId
    
                    font.pixelSize: Math.floor(fontMetrics.font.pixelSize * 0.8)
    
    Jedi18's avatar
    Jedi18 committed
                }
    
                MatrixText {
    
                    text: qsTr("Room Version")
    
    Jedi18's avatar
    Jedi18 committed
                }
    
                MatrixText {
    
    Jedi18's avatar
    Jedi18 committed
                    text: roomSettings.roomVersion
    
                    font.pixelSize: fontMetrics.font.pixelSize
    
    Jedi18's avatar
    Jedi18 committed
                }
    
            DialogButtonBox {
                Layout.fillWidth: true
                standardButtons: DialogButtonBox.Ok
                onAccepted: close()
    
    Jedi18's avatar
    Jedi18 committed
            }
    
    Jedi18's avatar
    Jedi18 committed
        }