nheko/resources/qml/RoomSettings.qml

287 lines
7.7 KiB
QML
Raw Normal View History

2021-03-05 00:35:15 +01:00
// SPDX-FileCopyrightText: 2021 Nheko Contributors
//
// SPDX-License-Identifier: GPL-3.0-or-later
2021-02-23 05:24:34 +01:00
import Qt.labs.platform 1.1 as Platform
2021-02-09 18:41:39 +01:00
import QtQuick 2.9
import QtQuick.Controls 2.3
import QtQuick.Layouts 1.2
import QtQuick.Window 2.3
import im.nheko 1.0
ApplicationWindow {
id: roomSettingsDialog
2021-02-09 18:41:39 +01:00
property var roomSettings
x: MainWindow.x + (MainWindow.width / 2) - (width / 2)
2021-02-09 18:41:39 +01:00
y: MainWindow.y + (MainWindow.height / 2) - (height / 2)
minimumWidth: 420
2021-02-13 14:38:52 +01:00
minimumHeight: 650
2021-02-09 18:41:39 +01:00
palette: colors
color: colors.window
modality: Qt.WindowModal
2021-02-09 18:41:39 +01:00
Shortcut {
sequence: StandardKey.Cancel
onActivated: roomSettingsDialog.close()
}
ColumnLayout {
2021-02-13 14:38:52 +01:00
id: contentLayout1
2021-02-09 18:41:39 +01:00
2021-02-13 16:16:40 +01:00
anchors.fill: parent
2021-02-09 18:41:39 +01:00
anchors.margins: 10
spacing: 10
Avatar {
2021-02-11 19:09:11 +01:00
url: roomSettings.roomAvatarUrl.replace("mxc://", "image://MxcImage/")
2021-03-03 17:54:00 +01:00
displayName: roomSettings.roomName
2021-02-09 18:41:39 +01:00
height: 130
width: 130
Layout.alignment: Qt.AlignHCenter
2021-02-11 19:09:11 +01:00
onClicked: {
if (roomSettings.canChangeAvatar)
roomSettings.updateAvatar();
2021-02-11 19:09:11 +01:00
}
}
BusyIndicator {
Layout.alignment: Qt.AlignHCenter
running: roomSettings.isLoading
visible: roomSettings.isLoading
}
Text {
id: errorText
2021-02-11 19:09:11 +01:00
text: "Error Text"
color: "red"
visible: opacity > 0
opacity: 0
Layout.alignment: Qt.AlignHCenter
}
SequentialAnimation {
id: hideErrorAnimation
2021-02-11 19:09:11 +01:00
running: false
2021-02-11 19:09:11 +01:00
PauseAnimation {
duration: 4000
}
2021-02-11 19:09:11 +01:00
NumberAnimation {
target: errorText
property: 'opacity'
to: 0
duration: 1000
}
2021-02-11 19:09:11 +01:00
}
Connections {
2021-02-11 19:09:11 +01:00
target: roomSettings
onDisplayError: {
errorText.text = errorMessage;
errorText.opacity = 1;
hideErrorAnimation.restart();
2021-02-11 19:09:11 +01:00
}
2021-02-09 18:41:39 +01:00
}
ColumnLayout {
Layout.alignment: Qt.AlignHCenter
MatrixText {
2021-02-11 16:53:33 +01:00
text: roomSettings.roomName
2021-02-09 18:41:39 +01:00
font.pixelSize: 24
Layout.alignment: Qt.AlignHCenter
}
MatrixText {
2021-02-11 16:53:33 +01:00
text: "%1 member(s)".arg(roomSettings.memberCount)
2021-02-09 18:41:39 +01:00
Layout.alignment: Qt.AlignHCenter
}
2021-02-09 18:41:39 +01:00
}
ImageButton {
Layout.alignment: Qt.AlignHCenter
image: ":/icons/icons/ui/edit.png"
visible: roomSettings.canChangeNameAndTopic
onClicked: roomSettings.openEditModal()
2021-02-09 18:41:39 +01:00
}
2021-02-13 14:38:52 +01:00
2021-02-13 16:16:40 +01:00
ScrollView {
Layout.maximumHeight: 75
Layout.alignment: Qt.AlignHCenter
width: parent.width
2021-02-13 14:38:52 +01:00
2021-02-13 16:16:40 +01:00
TextArea {
text: TimelineManager.escapeEmoji(roomSettings.roomTopic)
2021-02-23 05:24:34 +01:00
wrapMode: TextEdit.WordWrap
textFormat: TextEdit.RichText
2021-02-13 16:16:40 +01:00
readOnly: true
background: null
selectByMouse: true
color: colors.text
2021-02-23 05:24:34 +01:00
horizontalAlignment: TextEdit.AlignHCenter
onLinkActivated: TimelineManager.openLink(link)
2021-02-23 05:24:34 +01:00
CursorShape {
anchors.fill: parent
cursorShape: parent.hoveredLink ? Qt.PointingHandCursor : Qt.ArrowCursor
}
2021-02-13 16:16:40 +01:00
}
2021-02-13 14:38:52 +01:00
}
2021-02-09 18:41:39 +01:00
GridLayout {
columns: 2
rowSpacing: 10
2021-02-09 18:41:39 +01:00
MatrixText {
text: "SETTINGS"
font.bold: true
2021-02-09 18:41:39 +01:00
}
Item {
Layout.fillWidth: true
}
MatrixText {
text: "Notifications"
Layout.fillWidth: true
}
2021-02-09 18:41:39 +01:00
ComboBox {
model: ["Muted", "Mentions only", "All messages"]
currentIndex: roomSettings.notifications
onActivated: {
roomSettings.changeNotifications(index);
}
Layout.fillWidth: true
2021-02-09 18:41:39 +01:00
}
MatrixText {
text: "Room access"
Layout.fillWidth: true
2021-02-09 18:41:39 +01:00
}
ComboBox {
enabled: roomSettings.canChangeJoinRules
model: ["Anyone and guests", "Anyone", "Invited users"]
currentIndex: roomSettings.accessJoinRules
onActivated: {
roomSettings.changeAccessRules(index);
}
Layout.fillWidth: true
2021-02-09 18:41:39 +01:00
}
MatrixText {
text: "Encryption"
}
2021-02-13 16:16:40 +01:00
ToggleButton {
id: encryptionToggle
checked: roomSettings.isEncryptionEnabled
2021-02-13 17:19:21 +01:00
onClicked: {
if (roomSettings.isEncryptionEnabled) {
checked = true;
return ;
}
confirmEncryptionDialog.open();
}
Layout.alignment: Qt.AlignRight
}
Platform.MessageDialog {
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
2021-02-09 18:41:39 +01:00
}
2021-02-09 18:41:39 +01:00
MatrixText {
visible: roomSettings.isEncryptionEnabled
2021-02-09 18:41:39 +01:00
text: "Respond to key requests"
}
2021-02-13 16:16:40 +01:00
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
2021-02-13 17:19:21 +01:00
onClicked: {
roomSettings.changeKeyRequestsPreference(checked);
}
Layout.alignment: Qt.AlignRight
2021-02-09 18:41:39 +01:00
}
Item {
// for adding extra space between sections
Layout.fillWidth: true
}
Item {
// for adding extra space between sections
Layout.fillWidth: true
}
2021-02-09 18:41:39 +01:00
MatrixText {
text: "INFO"
font.bold: true
2021-02-09 18:41:39 +01:00
}
Item {
Layout.fillWidth: true
}
MatrixText {
text: "Internal ID"
}
2021-02-09 18:41:39 +01:00
MatrixText {
2021-02-11 16:53:33 +01:00
text: roomSettings.roomId
font.pixelSize: 14
Layout.alignment: Qt.AlignRight
2021-02-09 18:41:39 +01:00
}
MatrixText {
text: "Room Version"
}
MatrixText {
2021-02-11 16:53:33 +01:00
text: roomSettings.roomVersion
font.pixelSize: 14
Layout.alignment: Qt.AlignRight
2021-02-09 18:41:39 +01:00
}
2021-02-09 18:41:39 +01:00
}
Button {
Layout.alignment: Qt.AlignRight
text: "Ok"
onClicked: close()
2021-02-09 18:41:39 +01:00
}
2021-02-09 18:41:39 +01:00
}
}