From b41973be283dd2e51ff2af829de41055a53d84ed Mon Sep 17 00:00:00 2001 From: Black Hat Date: Fri, 5 Jul 2019 10:24:07 +0800 Subject: [PATCH] Fix alias and more compact account detail dialog. --- .../Spectral/Dialog/AccountDetailDialog.qml | 61 +++++----------- .../Spectral/Dialog/RoomSettingsDialog.qml | 71 ++++++++++++------- include/libQuotient | 2 +- src/controller.cpp | 6 +- src/spectralroom.cpp | 20 ++++++ src/spectralroom.h | 2 + 6 files changed, 89 insertions(+), 73 deletions(-) diff --git a/imports/Spectral/Dialog/AccountDetailDialog.qml b/imports/Spectral/Dialog/AccountDetailDialog.qml index 8e405fc42..78f9f113c 100644 --- a/imports/Spectral/Dialog/AccountDetailDialog.qml +++ b/imports/Spectral/Dialog/AccountDetailDialog.qml @@ -20,55 +20,26 @@ Dialog { spacing: 0 - Repeater { + ListView { + width: parent.width + height: 48 + + clip: true + + orientation: ListView.Horizontal + + spacing: 16 + model: AccountListModel{ controller: spectralController } - delegate: Item { - width: detailColumn.width - height: 72 + delegate: Avatar { + width: 48 + height: 48 - RowLayout { - anchors.fill: parent - anchors.margins: 12 - - spacing: 12 - - Avatar { - Layout.preferredWidth: height - Layout.fillHeight: true - - source: user.avatarMediaId - hint: user.displayName || "No Name" - } - - ColumnLayout { - Layout.fillWidth: true - Layout.alignment: Qt.AlignHCenter - - Label { - Layout.fillWidth: true - - text: user.displayName || "No Name" - color: MPalette.foreground - font.pixelSize: 16 - font.bold: true - elide: Text.ElideRight - wrapMode: Text.NoWrap - } - - Label { - Layout.fillWidth: true - - text: connection === spectralController.connection ? "Active" : "Online" - color: MPalette.lighter - font.pixelSize: 13 - elide: Text.ElideRight - wrapMode: Text.NoWrap - } - } - } + source: user.avatarMediaId + hint: user.displayName || "No Name" Menu { id: contextMenu @@ -83,6 +54,8 @@ Dialog { RippleEffect { anchors.fill: parent + circular: true + onPrimaryClicked: spectralController.connection = connection onSecondaryClicked: contextMenu.popup() } diff --git a/imports/Spectral/Dialog/RoomSettingsDialog.qml b/imports/Spectral/Dialog/RoomSettingsDialog.qml index d76587a66..a504671e5 100644 --- a/imports/Spectral/Dialog/RoomSettingsDialog.qml +++ b/imports/Spectral/Dialog/RoomSettingsDialog.qml @@ -176,6 +176,23 @@ Dialog { } } + Button { + Layout.alignment: Qt.AlignRight + + text: "Save" + highlighted: true + + onClicked: { + if (room.name != roomNameField.text) { + room.setName(roomNameField.text) + } + + if (room.topic != roomTopicField.text) { + room.setTopic(roomTopicField.text) + } + } + } + MenuSeparator { Layout.fillWidth: true } @@ -202,6 +219,11 @@ Dialog { model: room.remoteAliases currentIndex: room.remoteAliases.indexOf(room.canonicalAlias) + onCurrentIndexChanged: { + if (room.canonicalAlias != room.remoteAliases[currentIndex]) { + room.setCanonicalAlias(room.remoteAliases[currentIndex]) + } + } } } @@ -225,13 +247,30 @@ Dialog { Repeater { model: room.localAliases - delegate: Label { - Layout.fillWidth: true + delegate: RowLayout { + Layout.maximumWidth: parent.width - text: modelData + Label { + text: modelData - font.pixelSize: 12 - color: MPalette.lighter + font.pixelSize: 12 + color: MPalette.lighter + } + + MaterialIcon { + icon: "\ue5cd" + + color: MPalette.lighter + font.pixelSize: 12 + + RippleEffect { + anchors.fill: parent + + circular: true + + onClicked: room.removeLocalAlias(modelData) + } + } } } } @@ -273,14 +312,6 @@ Dialog { onClicked: room.clearBackground() } } - - Button { - Layout.alignment: Qt.AlignRight - - text: "Save" - - onClicked: saveSettings() - } } Component { @@ -290,19 +321,5 @@ Dialog { } onClosed: destroy() - - function saveSettings() { - if (room.name != roomNameField.text) { - room.setName(roomNameField.text) - } - - if (room.topic != roomTopicField.text) { - room.setTopic(roomTopicField.text) - } - - if (room.canonicalAlias != room.remoteAliases[canonicalAliasComboBox.currentIndex]) { - room.setCanonicalAlias(room.remoteAliases[canonicalAliasComboBox.currentIndex]) - } - } } diff --git a/include/libQuotient b/include/libQuotient index fe8253386..d15ba3d77 160000 --- a/include/libQuotient +++ b/include/libQuotient @@ -1 +1 @@ -Subproject commit fe82533860a327fbbaa0c980188ccd56d8463b1c +Subproject commit d15ba3d77598c60b1eb713cb2a5348390071db44 diff --git a/src/controller.cpp b/src/controller.cpp index 3d97345e6..4f0d0765e 100644 --- a/src/controller.cpp +++ b/src/controller.cpp @@ -68,8 +68,12 @@ void Controller::loginWithCredentials(QString serverAddr, QSysInfo::productVersion() + " " + QSysInfo::currentCpuArchitecture(); + QUrl serverUrl(serverAddr); + Connection* conn = new Connection(this); - conn->setHomeserver(QUrl(serverAddr)); + if (serverUrl.isValid()) { + conn->setHomeserver(serverUrl); + } conn->connectToServer(user, pass, deviceName, ""); connect(conn, &Connection::connected, [=] { AccountSettings account(conn->userId()); diff --git a/src/spectralroom.cpp b/src/spectralroom.cpp index 053574c15..5aa154c09 100644 --- a/src/spectralroom.cpp +++ b/src/spectralroom.cpp @@ -316,3 +316,23 @@ void SpectralRoom::changeAvatar(QUrl localFile) { }); } } + +void SpectralRoom::addLocalAlias(const QString& alias) { + auto aliases = localAliases(); + if (aliases.contains(alias)) + return; + + aliases.append(alias); + + setLocalAliases(aliases); +} + +void SpectralRoom::removeLocalAlias(const QString& alias) { + auto aliases = localAliases(); + if (!aliases.contains(alias)) + return; + + aliases.removeAll(alias); + + setLocalAliases(aliases); +} diff --git a/src/spectralroom.h b/src/spectralroom.h index 7eaa9c15e..f065f15b8 100644 --- a/src/spectralroom.h +++ b/src/spectralroom.h @@ -306,6 +306,8 @@ class SpectralRoom : public Room { QString replyContent, QString sendContent); void changeAvatar(QUrl localFile); + void addLocalAlias(const QString& alias); + void removeLocalAlias(const QString& alias); }; #endif // SpectralRoom_H