190 lines
5.0 KiB
QML
190 lines
5.0 KiB
QML
// SPDX-License-Identifier: LGPL-3.0-or-later
|
|
|
|
import QtQuick 2.12
|
|
import QtQuick.Controls 2.12
|
|
import QtQuick.Layouts 1.12
|
|
import "../../../Base"
|
|
import "../../../Base/ButtonLayout"
|
|
|
|
HFlickableColumnPage {
|
|
id: settingsView
|
|
|
|
|
|
property var saveFuture: null
|
|
|
|
readonly property bool anyChange:
|
|
nameField.item.changed || topicArea.item.area.changed ||
|
|
encryptCheckBox.changed || requireInviteCheckbox.changed ||
|
|
forbidGuestsCheckBox.changed
|
|
|
|
readonly property Item keybindFocusItem: nameField.item
|
|
|
|
|
|
function save() {
|
|
if (saveFuture) saveFuture.cancel()
|
|
|
|
const args = [
|
|
chat.roomId,
|
|
nameField.item.changed ? nameField.item.text : undefined,
|
|
topicArea.item.area.changed ? topicArea.item.area.text : undefined,
|
|
encryptCheckBox.changed ? true : undefined,
|
|
|
|
requireInviteCheckbox.changed ?
|
|
requireInviteCheckbox.checked : undefined,
|
|
|
|
forbidGuestsCheckBox.changed ?
|
|
forbidGuestsCheckBox.checked : undefined,
|
|
]
|
|
|
|
function onDone() { saveFuture = null }
|
|
|
|
saveFuture = py.callClientCoro(
|
|
chat.userId, "room_set", args, onDone, onDone,
|
|
)
|
|
}
|
|
|
|
function cancel() {
|
|
if (saveFuture) {
|
|
saveFuture.cancel()
|
|
saveFuture = null
|
|
}
|
|
|
|
nameField.item.reset()
|
|
topicArea.item.area.reset()
|
|
encryptCheckBox.reset()
|
|
requireInviteCheckbox.reset()
|
|
forbidGuestsCheckBox.reset()
|
|
}
|
|
|
|
|
|
flickShortcuts.active:
|
|
! mainUI.debugConsole.visible && ! chat.composerHasFocus
|
|
|
|
background: Rectangle {
|
|
color: theme.chat.roomPane.roomSettings.background
|
|
}
|
|
|
|
footer: ButtonLayout {
|
|
ApplyButton {
|
|
enabled: anyChange
|
|
loading: saveFuture !== null
|
|
disableWhileLoading: false
|
|
onClicked: save()
|
|
|
|
}
|
|
|
|
CancelButton {
|
|
enabled: anyChange || saveFuture !== null
|
|
onClicked: cancel()
|
|
}
|
|
}
|
|
|
|
Keys.onEscapePressed: cancel()
|
|
|
|
|
|
HRoomAvatar {
|
|
id: avatar
|
|
roomId: chat.roomId
|
|
displayName: nameField.item.text || chat.roomInfo.display_name
|
|
mxc: chat.roomInfo.avatar_url
|
|
// enabled: chat.roomInfo.can_set_avatar # put this in "change avatar"
|
|
|
|
Layout.fillWidth: true
|
|
Layout.preferredHeight: width
|
|
Layout.maximumWidth: 256 * theme.uiScale
|
|
Layout.alignment: Qt.AlignCenter
|
|
}
|
|
|
|
HLabeledItem {
|
|
id: nameField
|
|
label.text: qsTr("Name:")
|
|
|
|
Layout.fillWidth: true
|
|
|
|
HTextField {
|
|
width: parent.width
|
|
maximumLength: 255
|
|
defaultText: chat.roomInfo.given_name
|
|
enabled: chat.roomInfo.can_set_name
|
|
Component.onCompleted: forceActiveFocus()
|
|
}
|
|
}
|
|
|
|
HLabeledItem {
|
|
id: topicArea
|
|
label.text: qsTr("Topic:")
|
|
|
|
Layout.fillWidth: true
|
|
|
|
HScrollView {
|
|
clip: true
|
|
width: parent.width
|
|
height:
|
|
Math.min(topicAreaIn.implicitHeight, settingsView.height / 2)
|
|
|
|
readonly property alias area: topicAreaIn
|
|
|
|
HTextArea {
|
|
id: topicAreaIn
|
|
placeholderText: qsTr("This room is about...")
|
|
defaultText: chat.roomInfo.plain_topic
|
|
enabled: chat.roomInfo.can_set_topic
|
|
|
|
focusItemOnTab:
|
|
encryptCheckBox.checked ?
|
|
requireInviteCheckbox :
|
|
encryptCheckBox
|
|
}
|
|
}
|
|
}
|
|
|
|
HCheckBox {
|
|
id: encryptCheckBox
|
|
text: qsTr("Encrypt messages")
|
|
subtitle.text:
|
|
qsTr("Only you and those you trust will be able to read the " +
|
|
"conversation") +
|
|
`<br><font color="${theme.colors.warningText}">` +
|
|
(
|
|
chat.roomInfo.encrypted ?
|
|
qsTr("Cannot be disabled") :
|
|
qsTr("Cannot be disabled later!")
|
|
) +
|
|
"</font>"
|
|
subtitle.textFormat: Text.StyledText
|
|
defaultChecked: chat.roomInfo.encrypted
|
|
enabled: chat.roomInfo.can_set_encryption && ! chat.roomInfo.encrypted
|
|
|
|
Layout.fillWidth: true
|
|
}
|
|
|
|
HCheckBox {
|
|
id: requireInviteCheckbox
|
|
text: qsTr("Require being invited")
|
|
subtitle.text: qsTr("Users will need an invite to join the room")
|
|
defaultChecked: chat.roomInfo.invite_required
|
|
enabled: chat.roomInfo.can_set_join_rules
|
|
|
|
Layout.fillWidth: true
|
|
}
|
|
|
|
HCheckBox {
|
|
id: forbidGuestsCheckBox
|
|
text: qsTr("Forbid guests")
|
|
subtitle.text: qsTr("Users without an account won't be able to join")
|
|
defaultChecked: ! chat.roomInfo.guests_allowed
|
|
enabled: chat.roomInfo.can_set_guest_access
|
|
|
|
Layout.fillWidth: true
|
|
}
|
|
|
|
// HCheckBox { TODO
|
|
// text: qsTr("Make this room visible in the public room directory")
|
|
// checked: chat.roomInfo.published_in_directory
|
|
|
|
// Layout.fillWidth: true
|
|
// }
|
|
|
|
HSpacer {}
|
|
}
|