Skip to content
Snippets Groups Projects
RoomSettings.qml 7.44 KiB
Newer Older
  • Learn to ignore specific revisions
  • Jedi18's avatar
    Jedi18 committed
    import QtQuick 2.9
    import QtQuick.Controls 2.3
    
    import Qt.labs.platform 1.1 as Platform
    
    Jedi18's avatar
    Jedi18 committed
    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/")
    
    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)
    		wrapMode: TextEdit.WordWrap
    		textFormat: TextEdit.RichText
    
    Jedi18's avatar
    Jedi18 committed
                    readOnly: true
                    background: null
    
    		horizontalAlignment: TextEdit.AlignHCenter
    
    		onLinkActivated: TimelineManager.openLink(link);
    
        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
        }