import QtQuick 2.12 import QtQuick.Controls 2.12 import QtQuick.Layouts 1.12 import Spectral.Component 2.0 import Spectral.Effect 2.0 import Spectral.Setting 0.1 Dialog { property var room anchors.centerIn: parent width: 480 id: root title: "Room Settings - " + room.displayName modal: true contentItem: ColumnLayout { RowLayout { Layout.fillWidth: true spacing: 16 Avatar { Layout.preferredWidth: 72 Layout.preferredHeight: 72 Layout.alignment: Qt.AlignTop hint: room.displayName source: room.avatarMediaId } ColumnLayout { Layout.fillWidth: true Layout.margins: 4 AutoTextField { Layout.fillWidth: true id: roomNameField text: room.name placeholderText: "Room Name" } AutoTextField { Layout.fillWidth: true id: roomTopicField text: room.topic placeholderText: "Room Topic" } } } Control { Layout.fillWidth: true visible: room.predecessorId padding: 8 contentItem: RowLayout { MaterialIcon { Layout.preferredWidth: 48 Layout.preferredHeight: 48 icon: "\ue8d4" } ColumnLayout { Layout.fillWidth: true spacing: 0 Label { Layout.fillWidth: true font.bold: true color: MPalette.foreground text: "This room is a continuation of another conversation." } Label { Layout.fillWidth: true color: MPalette.lighter text: "Click here to see older messages." } } } background: Rectangle { color: MPalette.banner RippleEffect { anchors.fill: parent onClicked: { roomListForm.enteredRoom = spectralController.connection.room(room.predecessorId) root.close() } } } } Control { Layout.fillWidth: true visible: room.successorId padding: 8 contentItem: RowLayout { MaterialIcon { Layout.preferredWidth: 48 Layout.preferredHeight: 48 icon: "\ue8d4" } ColumnLayout { Layout.fillWidth: true spacing: 0 Label { Layout.fillWidth: true font.bold: true color: MPalette.foreground text: "This room has been replaced and is no longer active." } Label { Layout.fillWidth: true color: MPalette.lighter text: "The conversation continues here." } } } background: Rectangle { color: MPalette.banner RippleEffect { anchors.fill: parent onClicked: { roomListForm.enteredRoom = spectralController.connection.room(room.successorId) root.close() } } } } MenuSeparator { Layout.fillWidth: true } ColumnLayout { Layout.fillWidth: true RowLayout { Layout.fillWidth: true Label { Layout.preferredWidth: 100 wrapMode: Label.Wrap text: "Main Alias" color: MPalette.lighter } ComboBox { Layout.fillWidth: true model: room.aliases currentIndex: room.aliases.indexOf(room.canonicalAlias) } } RowLayout { Layout.fillWidth: true Label { Layout.preferredWidth: 100 Layout.alignment: Qt.AlignTop wrapMode: Label.Wrap text: "Aliases" color: MPalette.lighter } ColumnLayout { Layout.fillWidth: true Repeater { model: room.aliases delegate: Label { Layout.fillWidth: true text: modelData font.pixelSize: 12 color: MPalette.lighter } } } } } MenuSeparator { Layout.fillWidth: true } RowLayout { Layout.fillWidth: true Button { Layout.fillWidth: true flat: true text: "Set background image" onClicked: { var fileDialog = chatBackgroundDialog.createObject(ApplicationWindow.overlay) fileDialog.chosen.connect(function(path) { if (!path) return room.setBackgroundFromLocalFile(path) }) fileDialog.open() } } Button { Layout.fillWidth: true flat: true text: "Clear background image" onClicked: room.clearBackground() } } Button { Layout.alignment: Qt.AlignRight text: "Save" onClicked: saveSettings() } } Component { id: chatBackgroundDialog OpenFileDialog {} } onClosed: destroy() function saveSettings() { if (room.name != roomNameField.text) { room.setName(roomNameField.text) } if (room.topic != roomTopicField.text) { room.setTopic(roomTopicField.text) } } }