mirror of
https://github.com/Nheko-Reborn/nheko.git
synced 2024-11-25 20:48:52 +03:00
287 lines
7.8 KiB
QML
287 lines
7.8 KiB
QML
// SPDX-FileCopyrightText: 2021 Nheko Contributors
|
|
//
|
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
import Qt.labs.platform 1.1 as Platform
|
|
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
|
|
|
|
property var roomSettings
|
|
|
|
x: MainWindow.x + (MainWindow.width / 2) - (width / 2)
|
|
y: MainWindow.y + (MainWindow.height / 2) - (height / 2)
|
|
minimumWidth: 420
|
|
minimumHeight: 650
|
|
palette: colors
|
|
color: colors.window
|
|
modality: Qt.WindowModal
|
|
flags: Qt.Dialog
|
|
title: qsTr("Room Settings")
|
|
|
|
Shortcut {
|
|
sequence: StandardKey.Cancel
|
|
onActivated: roomSettingsDialog.close()
|
|
}
|
|
|
|
ColumnLayout {
|
|
id: contentLayout1
|
|
|
|
anchors.fill: parent
|
|
anchors.margins: 10
|
|
spacing: 10
|
|
|
|
Avatar {
|
|
url: roomSettings.roomAvatarUrl.replace("mxc://", "image://MxcImage/")
|
|
displayName: roomSettings.roomName
|
|
height: 130
|
|
width: 130
|
|
Layout.alignment: Qt.AlignHCenter
|
|
onClicked: {
|
|
if (roomSettings.canChangeAvatar)
|
|
roomSettings.updateAvatar();
|
|
|
|
}
|
|
}
|
|
|
|
BusyIndicator {
|
|
Layout.alignment: Qt.AlignHCenter
|
|
running: roomSettings.isLoading
|
|
visible: roomSettings.isLoading
|
|
}
|
|
|
|
Text {
|
|
id: errorText
|
|
|
|
color: "red"
|
|
visible: opacity > 0
|
|
opacity: 0
|
|
Layout.alignment: Qt.AlignHCenter
|
|
}
|
|
|
|
SequentialAnimation {
|
|
id: hideErrorAnimation
|
|
|
|
running: false
|
|
|
|
PauseAnimation {
|
|
duration: 4000
|
|
}
|
|
|
|
NumberAnimation {
|
|
target: errorText
|
|
property: 'opacity'
|
|
to: 0
|
|
duration: 1000
|
|
}
|
|
|
|
}
|
|
|
|
Connections {
|
|
target: roomSettings
|
|
onDisplayError: {
|
|
errorText.text = errorMessage;
|
|
errorText.opacity = 1;
|
|
hideErrorAnimation.restart();
|
|
}
|
|
}
|
|
|
|
ColumnLayout {
|
|
Layout.alignment: Qt.AlignHCenter
|
|
|
|
MatrixText {
|
|
text: roomSettings.roomName
|
|
font.pixelSize: 24
|
|
Layout.alignment: Qt.AlignHCenter
|
|
}
|
|
|
|
MatrixText {
|
|
text: qsTr("%1 member(s)").arg(roomSettings.memberCount)
|
|
Layout.alignment: Qt.AlignHCenter
|
|
}
|
|
|
|
}
|
|
|
|
ImageButton {
|
|
Layout.alignment: Qt.AlignHCenter
|
|
image: ":/icons/icons/ui/edit.png"
|
|
visible: roomSettings.canChangeNameAndTopic
|
|
onClicked: roomSettings.openEditModal()
|
|
}
|
|
|
|
ScrollView {
|
|
Layout.maximumHeight: 75
|
|
Layout.alignment: Qt.AlignHCenter
|
|
width: parent.width
|
|
|
|
TextArea {
|
|
text: TimelineManager.escapeEmoji(roomSettings.roomTopic)
|
|
wrapMode: TextEdit.WordWrap
|
|
textFormat: TextEdit.RichText
|
|
readOnly: true
|
|
background: null
|
|
selectByMouse: true
|
|
color: colors.text
|
|
horizontalAlignment: TextEdit.AlignHCenter
|
|
onLinkActivated: TimelineManager.openLink(link)
|
|
|
|
CursorShape {
|
|
anchors.fill: parent
|
|
cursorShape: parent.hoveredLink ? Qt.PointingHandCursor : Qt.ArrowCursor
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
GridLayout {
|
|
columns: 2
|
|
rowSpacing: 10
|
|
|
|
MatrixText {
|
|
text: qsTr("SETTINGS")
|
|
font.bold: true
|
|
}
|
|
|
|
Item {
|
|
Layout.fillWidth: true
|
|
}
|
|
|
|
MatrixText {
|
|
text: qsTr("Notifications")
|
|
Layout.fillWidth: true
|
|
}
|
|
|
|
ComboBox {
|
|
model: [qsTr("Muted"), qsTr("Mentions only"), qsTr("All messages")]
|
|
currentIndex: roomSettings.notifications
|
|
onActivated: {
|
|
roomSettings.changeNotifications(index);
|
|
}
|
|
Layout.fillWidth: true
|
|
}
|
|
|
|
MatrixText {
|
|
text: "Room access"
|
|
Layout.fillWidth: true
|
|
}
|
|
|
|
ComboBox {
|
|
enabled: roomSettings.canChangeJoinRules
|
|
model: [qsTr("Anyone and guests"), qsTr("Anyone"), qsTr("Invited users")]
|
|
currentIndex: roomSettings.accessJoinRules
|
|
onActivated: {
|
|
roomSettings.changeAccessRules(index);
|
|
}
|
|
Layout.fillWidth: true
|
|
}
|
|
|
|
MatrixText {
|
|
text: qsTr("Encryption")
|
|
}
|
|
|
|
ToggleButton {
|
|
id: encryptionToggle
|
|
|
|
checked: roomSettings.isEncryptionEnabled
|
|
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
|
|
}
|
|
|
|
MatrixText {
|
|
visible: roomSettings.isEncryptionEnabled
|
|
text: qsTr("Respond to key requests")
|
|
}
|
|
|
|
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
|
|
onClicked: {
|
|
roomSettings.changeKeyRequestsPreference(checked);
|
|
}
|
|
Layout.alignment: Qt.AlignRight
|
|
}
|
|
|
|
Item {
|
|
// for adding extra space between sections
|
|
Layout.fillWidth: true
|
|
}
|
|
|
|
Item {
|
|
// for adding extra space between sections
|
|
Layout.fillWidth: true
|
|
}
|
|
|
|
MatrixText {
|
|
text: qsTr("INFO")
|
|
font.bold: true
|
|
}
|
|
|
|
Item {
|
|
Layout.fillWidth: true
|
|
}
|
|
|
|
MatrixText {
|
|
text: qsTr("Internal ID")
|
|
}
|
|
|
|
MatrixText {
|
|
text: roomSettings.roomId
|
|
font.pixelSize: 14
|
|
Layout.alignment: Qt.AlignRight
|
|
}
|
|
|
|
MatrixText {
|
|
text: qsTr("Room Version")
|
|
}
|
|
|
|
MatrixText {
|
|
text: roomSettings.roomVersion
|
|
font.pixelSize: 14
|
|
Layout.alignment: Qt.AlignRight
|
|
}
|
|
|
|
}
|
|
|
|
Button {
|
|
Layout.alignment: Qt.AlignRight
|
|
text: qsTr("OK")
|
|
onClicked: close()
|
|
}
|
|
|
|
}
|
|
|
|
}
|