Skip to content
Snippets Groups Projects
InviteDialog.qml 4.31 KiB
Newer Older
  • Learn to ignore specific revisions
  • Loren Burkholder's avatar
    Loren Burkholder committed
    // SPDX-FileCopyrightText: 2021 Nheko Contributors
    //
    // SPDX-License-Identifier: GPL-3.0-or-later
    
    
    Loren Burkholder's avatar
    Loren Burkholder committed
    import QtQuick 2.12
    import QtQuick.Controls 2.12
    import QtQuick.Layouts 1.12
    import im.nheko 1.0
    
    ApplicationWindow {
        id: inviteDialogRoot
    
        property string roomId
    
        property string plainRoomName
    
    Loren Burkholder's avatar
    Loren Burkholder committed
        property InviteesModel invitees
    
    Loren Burkholder's avatar
    Loren Burkholder committed
    
        function addInvite() {
    
            if (inviteeEntry.isValidMxid) {
    
    Loren Burkholder's avatar
    Loren Burkholder committed
                invitees.addUser(inviteeEntry.text);
    
    Loren Burkholder's avatar
    Loren Burkholder committed
                inviteeEntry.clear();
    
        function cleanUpAndClose() {
    
            if (inviteeEntry.isValidMxid)
    
    Loren Burkholder's avatar
    Loren Burkholder committed
    
    
    Nicolas Werner's avatar
    Nicolas Werner committed
        title: qsTr("Invite users to %1").arg(plainRoomName)
    
    Loren Burkholder's avatar
    Loren Burkholder committed
        height: 380
        width: 340
    
    Loren Burkholder's avatar
    Loren Burkholder committed
        palette: Nheko.colors
        color: Nheko.colors.window
    
        flags: Qt.Dialog | Qt.WindowCloseButtonHint | Qt.WindowTitleHint
    
        Component.onCompleted: Nheko.reparent(inviteDialogRoot)
    
        Shortcut {
            sequence: "Ctrl+Enter"
            onActivated: cleanUpAndClose()
        }
    
    
        Shortcut {
            sequence: StandardKey.Cancel
            onActivated: inviteDialogRoot.close()
        }
    
    
    Loren Burkholder's avatar
    Loren Burkholder committed
        ColumnLayout {
            anchors.fill: parent
    
            anchors.margins: Nheko.paddingMedium
    
            spacing: Nheko.paddingMedium
    
    Loren Burkholder's avatar
    Loren Burkholder committed
    
            Label {
                text: qsTr("User ID to invite")
                Layout.fillWidth: true
    
                color: Nheko.colors.text
    
    Loren Burkholder's avatar
    Loren Burkholder committed
            }
    
            RowLayout {
    
                spacing: Nheko.paddingMedium
    
    Loren Burkholder's avatar
    Loren Burkholder committed
                    id: inviteeEntry
    
    
                    property bool isValidMxid: text.match("@.+?:.{3,}")
    
    
                    backgroundColor: Nheko.colors.window
    
    Loren Burkholder's avatar
    Loren Burkholder committed
                    placeholderText: qsTr("@joe:matrix.org", "Example user id. The name 'joe' can be localized however you want.")
                    Layout.fillWidth: true
    
    Loren Burkholder's avatar
    Loren Burkholder committed
                    onAccepted: {
    
                        if (isValidMxid)
    
    Loren Burkholder's avatar
    Loren Burkholder committed
                            addInvite();
    
    Loren Burkholder's avatar
    Loren Burkholder committed
    
    
    Loren Burkholder's avatar
    Loren Burkholder committed
                    }
    
                    Component.onCompleted: forceActiveFocus()
    
    Loren Burkholder's avatar
    Loren Burkholder committed
                    Keys.onShortcutOverride: event.accepted = ((event.key === Qt.Key_Return || event.key === Qt.Key_Enter) && (event.modifiers & Qt.ControlModifier))
    
    Loren Burkholder's avatar
    Loren Burkholder committed
                    Keys.onPressed: {
    
    Loren Burkholder's avatar
    Loren Burkholder committed
                        if ((event.key === Qt.Key_Return || event.key === Qt.Key_Enter) && (event.modifiers === Qt.ControlModifier))
    
    Loren Burkholder's avatar
    Loren Burkholder committed
                            cleanUpAndClose();
    
    Loren Burkholder's avatar
    Loren Burkholder committed
    
    
    Loren Burkholder's avatar
    Loren Burkholder committed
                    }
    
    Loren Burkholder's avatar
    Loren Burkholder committed
                }
    
                Button {
    
    Loren Burkholder's avatar
    Loren Burkholder committed
                    text: qsTr("Add")
    
                    enabled: inviteeEntry.isValidMxid
    
    Loren Burkholder's avatar
    Loren Burkholder committed
    
    
    Loren Burkholder's avatar
    Loren Burkholder committed
            ListView {
                id: inviteesList
    
                Layout.fillWidth: true
                Layout.fillHeight: true
                model: invitees
    
    Loren Burkholder's avatar
    Loren Burkholder committed
    
                delegate: RowLayout {
    
                    spacing: Nheko.paddingMedium
    
    Loren Burkholder's avatar
    Loren Burkholder committed
    
                    Avatar {
    
    Loren Burkholder's avatar
    Loren Burkholder committed
                        width: Nheko.avatarSize
                        height: Nheko.avatarSize
    
    Loren Burkholder's avatar
    Loren Burkholder committed
                        userid: model.mxid
                        url: model.avatarUrl.replace("mxc://", "image://MxcImage/")
                        displayName: model.displayName
    
                        onClicked: TimelineManager.openGlobalUserProfile(model.mxid)
    
    Loren Burkholder's avatar
    Loren Burkholder committed
                    }
    
                    ColumnLayout {
    
                        spacing: Nheko.paddingSmall
    
    Loren Burkholder's avatar
    Loren Burkholder committed
    
                        Label {
                            text: model.displayName
    
    Loren Burkholder's avatar
    Loren Burkholder committed
                            color: TimelineManager.userColor(model ? model.mxid : "", Nheko.colors.window)
    
    Loren Burkholder's avatar
    Loren Burkholder committed
                            font.pointSize: fontMetrics.font.pointSize
    
    Loren Burkholder's avatar
    Loren Burkholder committed
                        }
    
                        Label {
                            text: model.mxid
    
    Loren Burkholder's avatar
    Loren Burkholder committed
                            color: Nheko.colors.buttonText
    
    Loren Burkholder's avatar
    Loren Burkholder committed
                            font.pointSize: fontMetrics.font.pointSize * 0.9
    
    Loren Burkholder's avatar
    Loren Burkholder committed
                        }
    
                        Item {
                            Layout.fillHeight: true
                            Layout.fillWidth: true
                        }
    
    Loren Burkholder's avatar
    Loren Burkholder committed
    
    
    Loren Burkholder's avatar
    Loren Burkholder committed
                    }
    
    Loren Burkholder's avatar
    Loren Burkholder committed
    
    
    Loren Burkholder's avatar
    Loren Burkholder committed
    
    
    Loren Burkholder's avatar
    Loren Burkholder committed
    
    
    Loren Burkholder's avatar
    Loren Burkholder committed
        }
    
        footer: DialogButtonBox {
            id: buttons
    
            Button {
                text: qsTr("Invite")
                DialogButtonBox.buttonRole: DialogButtonBox.AcceptRole
    
                enabled: invitees.count > 0
    
                onClicked: cleanUpAndClose()
    
    Loren Burkholder's avatar
    Loren Burkholder committed
            }
    
            Button {
                text: qsTr("Cancel")
                DialogButtonBox.buttonRole: DialogButtonBox.DestructiveRole
    
    Loren Burkholder's avatar
    Loren Burkholder committed
                onClicked: inviteDialogRoot.close()
    
    Loren Burkholder's avatar
    Loren Burkholder committed
    
    
    Loren Burkholder's avatar
    Loren Burkholder committed