summary refs log tree commit diff
path: root/resources/qml/dialogs/AllowedRoomsSettingsDialog.qml
blob: 82b5506e4043364c23777c4e1d3d4ce3a5ed4044 (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
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
// SPDX-FileCopyrightText: Nheko Contributors
//
// SPDX-License-Identifier: GPL-3.0-or-later

import ".."
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import QtQuick.Window
import im.nheko

ApplicationWindow {
    id: allowedDialog

    property var roomSettings

    minimumWidth: 340
    minimumHeight: 450
    width: 450
    height: 680
    color: palette.window
    modality: Qt.NonModal
    flags: Qt.Dialog | Qt.WindowCloseButtonHint | Qt.WindowTitleHint
    title: qsTr("Allowed rooms settings")

    Shortcut {
        sequence: StandardKey.Cancel
        onActivated: roomSettingsDialog.close()
    }

    ColumnLayout {
        anchors.margins: Nheko.paddingMedium
        anchors.fill: parent
        spacing: 0


        MatrixText {
            text: qsTr("List of rooms that allow access to this room. Anyone who is in any of those rooms can join this room.")
            font.pixelSize: Math.floor(fontMetrics.font.pixelSize * 1.1)
            Layout.fillWidth: true
            Layout.fillHeight: false
            color: palette.text
            Layout.bottomMargin: Nheko.paddingMedium
        }

        ListView {
            Layout.fillWidth: true
            Layout.fillHeight: true

            id: view

            clip: true


            model: roomSettings.allowedRoomsModel
            spacing: 4
            cacheBuffer: 50

            delegate: RowLayout {
                anchors.left: parent.left
                anchors.right: parent.right

                ColumnLayout {
                    Layout.fillWidth: true
                    Text {
                        Layout.fillWidth: true
                        text: model.name
                        color: palette.text
                        textFormat: Text.PlainText
                    }

                    Text {
                        Layout.fillWidth: true
                        text: model.isParent ? qsTr("Parent community") : qsTr("Other room")
                        color: palette.buttonText
                        textFormat: Text.PlainText
                    }
                }

                ToggleButton {
                    checked: model.allowed
                    Layout.alignment: Qt.AlignRight
                    onCheckedChanged: model.allowed = checked
                }
            }
        }

        Column{
            id: roomEntryCompleter
            Layout.fillWidth: true

            spacing: 1
            z: 5

            Completer {
                id: roomCompleter

                visible: roomEntry.text.length > 0
                width: parent.width
                roomId: allowedDialog.roomSettings.roomId
                completerName: "room"
                bottomToTop: true
                fullWidth: true
                avatarHeight: Nheko.avatarSize / 2
                avatarWidth: Nheko.avatarSize / 2
                centerRowContent: false
                rowMargin: 2
                rowSpacing: 2
            }

            MatrixTextField {
                id: roomEntry

                width: parent.width

                placeholderText: qsTr("Enter additional rooms not in the list yet...")

                color: palette.text
                onTextEdited: {
                    roomCompleter.completer.searchString = text;
                }
                Keys.onPressed: {
                    if (event.key == Qt.Key_Up || event.key == Qt.Key_Backtab) {
                        event.accepted = true;
                        roomCompleter.up();
                    } else if (event.key == Qt.Key_Down || event.key == Qt.Key_Tab) {
                        event.accepted = true;
                        if (event.key == Qt.Key_Tab && (event.modifiers & Qt.ShiftModifier))
                        roomCompleter.up();
                        else
                        roomCompleter.down();
                    } else if (event.matches(StandardKey.InsertParagraphSeparator)) {
                        roomCompleter.finishCompletion();
                        event.accepted = true;
                    }
                }
            }

        }

        Connections {
            function onCompletionSelected(id) {
                console.log("selected: " + id);
                roomSettings.allowedRoomsModel.addRoom(id);
                roomEntry.clear();
            }

            function onCountChanged() {
                if (roomCompleter.count > 0 && (roomCompleter.currentIndex < 0 || roomCompleter.currentIndex >= roomCompleter.count))
                roomCompleter.currentIndex = 0;

            }

            target: roomCompleter
        }

    }

    footer: DialogButtonBox {
        id: dbb

        standardButtons: DialogButtonBox.Ok | DialogButtonBox.Cancel
        onAccepted: {
            roomSettings.applyAllowedFromModel();
            allowedDialog.close();
        }
        onRejected: allowedDialog.close()
    }

}