summary refs log tree commit diff
path: root/resources/qml/dialogs/ConfirmJoinRoomDialog.qml
blob: a3fb9831f4c0f9f79b92bec2562add7b5d1e1232 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
// SPDX-FileCopyrightText: Nheko Contributors
//
// SPDX-License-Identifier: GPL-3.0-or-later

import ".."
import "../ui"
import Qt.labs.platform 1.1 as Platform
import QtQuick 2.15
import QtQuick.Controls 2.3
import QtQuick.Layouts 1.2
import QtQuick.Window 2.13
import im.nheko 1.0

ApplicationWindow {
    id: joinRoomRoot

    required property RoomSummary summary

    title: summary.isSpace ? qsTr("Confirm community join") : qsTr("Confirm room join")
    modality: Qt.WindowModal
    flags: Qt.Dialog | Qt.WindowCloseButtonHint | Qt.WindowTitleHint
    color: palette.window
    width: 350
    height: content.implicitHeight + Nheko.paddingLarge + footer.implicitHeight

    Shortcut {
        sequence: StandardKey.Cancel
        onActivated: dbb.rejected()
    }

    ColumnLayout {
        id: content
        spacing: Nheko.paddingMedium
        anchors.margins: Nheko.paddingMedium
        anchors.fill: parent

        Avatar {
            Layout.topMargin: Nheko.paddingMedium
            url: summary.roomAvatarUrl.replace("mxc://", "image://MxcImage/")
            roomid: summary.roomid
            displayName: summary.roomName
            height: 130
            width: 130
            Layout.alignment: Qt.AlignHCenter
        }

        Spinner {
            Layout.alignment: Qt.AlignHCenter
            visible: !summary.isLoaded
            foreground: palette.mid
            running: !summary.isLoaded
        }

        TextEdit {
            readOnly: true
            textFormat: TextEdit.RichText
            text: summary.roomName
            font.pixelSize: fontMetrics.font.pixelSize * 2
            color: palette.text

            Layout.alignment: Qt.AlignHCenter
            Layout.fillWidth: true
            horizontalAlignment: TextEdit.AlignHCenter
            wrapMode: TextEdit.Wrap
            selectByMouse: true
        }
        TextEdit {
            readOnly: true
            textFormat: TextEdit.RichText
            text: summary.roomid
            font.pixelSize: fontMetrics.font.pixelSize * 0.8
            color: palette.text

            Layout.alignment: Qt.AlignHCenter
            Layout.fillWidth: true
            horizontalAlignment: TextEdit.AlignHCenter
            wrapMode: TextEdit.Wrap
            selectByMouse: true
        }
        RowLayout {
            spacing: Nheko.paddingMedium
            Layout.alignment: Qt.AlignHCenter

            MatrixText {
                text: qsTr("%n member(s)", "", summary.memberCount)
            }

            ImageButton {
                image: ":/icons/icons/ui/people.svg"
                enabled: false
            }

        }
        TextEdit {
            readOnly: true
            textFormat: TextEdit.RichText
            text: summary.roomTopic
            color: palette.text

            Layout.alignment: Qt.AlignHCenter
            Layout.fillWidth: true
            horizontalAlignment: TextEdit.AlignHCenter
            wrapMode: TextEdit.Wrap
            selectByMouse: true
        }

        Label {
            id: promptLabel

            text: summary.isKnockOnly ? qsTr("This room can't be joined directly. You can, however, knock on the room and room members can accept or decline this join request. You can additionally provide a reason for them to let you in below:") : qsTr("Do you want to join this room? You can optionally add a reason below:")
            color: palette.text
            Layout.fillWidth: true
            horizontalAlignment: Text.AlignHCenter
            wrapMode: Text.Wrap
            font.bold: true
        }

        MatrixTextField {
            id: reason

            focus: true
            Layout.fillWidth: true
            text: joinRoomRoot.summary.reason
        }

    }

    footer: DialogButtonBox {
        id: dbb

        standardButtons: DialogButtonBox.Cancel
        onAccepted: {
            summary.reason = reason.text;
            summary.join();
            joinRoomRoot.close();
        }
        onRejected: {
            joinRoomRoot.close();
        }

        Button {
            text: summary.isKnockOnly ? qsTr("Knock") : qsTr("Join")
            enabled: input.text.match("#.+?:.{3,}")
            DialogButtonBox.buttonRole: DialogButtonBox.AcceptRole
        }

    }

}