From f1a23355bdd7d2fe08c5efa73ee21ece14979a7f Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Sun, 9 Jan 2022 00:28:03 +0100 Subject: Port usersettings to qml --- resources/qml/UserSettingsPage.qml | 218 +++++++++++++++++++++++++++++++++++++ 1 file changed, 218 insertions(+) create mode 100644 resources/qml/UserSettingsPage.qml (limited to 'resources/qml/UserSettingsPage.qml') diff --git a/resources/qml/UserSettingsPage.qml b/resources/qml/UserSettingsPage.qml new file mode 100644 index 00000000..025f44fa --- /dev/null +++ b/resources/qml/UserSettingsPage.qml @@ -0,0 +1,218 @@ +// SPDX-FileCopyrightText: 2021 Nheko Contributors +// SPDX-FileCopyrightText: 2022 Nheko Contributors +// +// SPDX-License-Identifier: GPL-3.0-or-later + +import "ui" +import Qt.labs.platform 1.1 as Platform +import QtQuick 2.15 +import QtQuick.Controls 2.3 +import QtQuick.Layouts 1.2 +import QtQuick.Window 2.13 +import im.nheko 1.0 + +Rectangle { + id: userSettingsDialog + + property bool collapsed: width < 800 + color: Nheko.colors.window + + Shortcut { + sequence: StandardKey.Cancel + onActivated: userSettingsDialog.close() + } + + ScrollView { + id: scroll + + palette: Nheko.colors + ScrollBar.horizontal.visible: false + anchors.fill: parent + anchors.margins: Nheko.paddingLarge + + contentWidth: availableWidth + + Timer { + id: deadTimer + interval: 500 + } + + Connections { + target: scroll.contentItem + function onContentYChanged() { deadTimer.restart(); } + } + + + GridLayout { + id: grid + + columns: userSettingsDialog.collapsed ? 1 : 2 + rowSpacing: Nheko.paddingMedium + columnSpacing: Nheko.paddingMedium + + anchors.fill: parent + anchors.leftMargin: userSettingsDialog.collapsed ? Nheko.paddingLarge : (userSettingsDialog.width-600) * 0.4 + anchors.rightMargin: userSettingsDialog.collapsed ? Nheko.paddingLarge : (userSettingsDialog.width-600) * 0.4 + + Repeater { + model: UserSettingsModel + + delegate: Item { + required property var model + id: r + + Component.onCompleted: { + while (children.length) { + console.log("Reparenting: " + children[0]); + children[0].parent = grid; + } + } + + Label { + Layout.alignment: Qt.AlignLeft + Layout.fillWidth: true + color: Nheko.colors.text + text: model.name + //Layout.column: 0 + Layout.columnSpan: (model.type == UserSettingsModel.SectionTitle && !userSettingsDialog.collapsed) ? 2 : 1 + //Layout.row: model.index + Layout.minimumWidth: implicitWidth + Layout.leftMargin: model.type == UserSettingsModel.SectionTitle ? 0 : Nheko.paddingMedium + Layout.topMargin: model.type == UserSettingsModel.SectionTitle ? Nheko.paddingLarge : 0 + font.pointSize: 1.1 * fontInfo.pointSize + + HoverHandler { + id: hovered + enabled: model.description ?? false + } + ToolTip.visible: hovered.hovered && model.description + ToolTip.text: model.description ?? "" + ToolTip.delay: Nheko.tooltipDelay + } + + DelegateChooser { + id: chooser + + roleValue: model.type + Layout.alignment: Qt.AlignRight + + //Layout.column: model.type == UserSettingsModel.SectionTitle ? 0 : 1 + Layout.columnSpan: (model.type == UserSettingsModel.SectionTitle && !userSettingsDialog.collapsed) ? 2 : 1 + //Layout.row: model.index + Layout.preferredHeight: child.height + Layout.preferredWidth: Math.min(child.implicitWidth, child.width || 1000) + Layout.fillWidth: model.type == UserSettingsModel.SectionTitle + Layout.rightMargin: model.type == UserSettingsModel.SectionTitle ? 0 : Nheko.paddingMedium + + DelegateChoice { + roleValue: UserSettingsModel.Toggle + ToggleButton { + checked: model.value + onCheckedChanged: model.value = checked + enabled: model.enabled + } + } + DelegateChoice { + roleValue: UserSettingsModel.Options + ComboBox { + Layout.preferredWidth: Math.min(200, implicitWidth) + width: Math.min(200, implicitWidth) + model: r.model.values + currentIndex: r.model.value + enabled: !deadTimer.running + onCurrentIndexChanged: r.model.value = currentIndex + } + } + DelegateChoice { + roleValue: UserSettingsModel.Number + + SpinBox { + //implicitWidth: 100 + enabled: !deadTimer.running && model.enabled + from: model.valueLowerBound + to: model.valueUpperBound + stepSize: model.valueStep + value: model.value + onValueChanged: model.value = value + } + } + DelegateChoice { + roleValue: UserSettingsModel.ReadOnlyText + Text { + color: Nheko.colors.text + text: model.value + } + } + DelegateChoice { + roleValue: UserSettingsModel.SectionTitle + Item { + width: grid.width + height: fontMetrics.lineSpacing + Rectangle { + anchors.topMargin: Nheko.paddingSmall + anchors.top: parent.top + anchors.left: parent.left + anchors.right: parent.right + color: Nheko.colors.buttonText + height: 1 + } + } + } + DelegateChoice { + roleValue: UserSettingsModel.KeyStatus + Text { + color: model.good ? "green" : Nheko.theme.error + text: model.value ? qsTr("CACHED") : qsTr("NOT CACHED") + } + } + DelegateChoice { + roleValue: UserSettingsModel.SessionKeyImportExport + RowLayout { + Button { + text: qsTr("IMPORT") + onClicked: UserSettingsModel.importSessionKeys() + } + Button { + text: qsTr("EXPORT") + onClicked: UserSettingsModel.exportSessionKeys() + } + } + } + DelegateChoice { + roleValue: UserSettingsModel.XSignKeysRequestDownload + RowLayout { + Button { + text: qsTr("DOWNLOAD") + onClicked: UserSettingsModel.downloadCrossSigningSecrets() + } + Button { + text: qsTr("REQUEST") + onClicked: UserSettingsModel.requestCrossSigningSecrets() + } + } + } + DelegateChoice { + Text { + text: model.value + } + } + } + } + } + } + } + + ImageButton { + anchors.top: parent.top + anchors.left: parent.left + anchors.margins: Nheko.paddingMedium + width: Nheko.avatarSize + height: Nheko.avatarSize + image: ":/icons/icons/ui/angle-arrow-left.svg" + ToolTip.visible: hovered + ToolTip.text: qsTr("Back") + onClicked: mainWindow.pop() + } + +} + -- cgit 1.5.1 From 59bc8307c8e9cd50c4d70d11e418a427c5c86fa2 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Tue, 11 Jan 2022 04:12:42 +0100 Subject: Address review comments --- resources/qml/UserSettingsPage.qml | 19 +++++++------------ resources/qml/components/FlatButton.qml | 1 + src/UserSettingsPage.cpp | 1 - 3 files changed, 8 insertions(+), 13 deletions(-) (limited to 'resources/qml/UserSettingsPage.qml') diff --git a/resources/qml/UserSettingsPage.qml b/resources/qml/UserSettingsPage.qml index 025f44fa..588f0c2c 100644 --- a/resources/qml/UserSettingsPage.qml +++ b/resources/qml/UserSettingsPage.qml @@ -6,22 +6,18 @@ import "ui" import Qt.labs.platform 1.1 as Platform import QtQuick 2.15 -import QtQuick.Controls 2.3 +import QtQuick.Controls 2.15 import QtQuick.Layouts 1.2 -import QtQuick.Window 2.13 +import QtQuick.Window 2.15 import im.nheko 1.0 Rectangle { id: userSettingsDialog - property bool collapsed: width < 800 + property int collapsePoint: 800 + property bool collapsed: width < collapsePoint color: Nheko.colors.window - Shortcut { - sequence: StandardKey.Cancel - onActivated: userSettingsDialog.close() - } - ScrollView { id: scroll @@ -51,8 +47,8 @@ Rectangle { columnSpacing: Nheko.paddingMedium anchors.fill: parent - anchors.leftMargin: userSettingsDialog.collapsed ? Nheko.paddingLarge : (userSettingsDialog.width-600) * 0.4 - anchors.rightMargin: userSettingsDialog.collapsed ? Nheko.paddingLarge : (userSettingsDialog.width-600) * 0.4 + anchors.leftMargin: userSettingsDialog.collapsed ? Nheko.paddingLarge : (userSettingsDialog.width-userSettingsDialog.collapsePoint) * 0.4 + anchors.rightMargin: anchors.leftMargin Repeater { model: UserSettingsModel @@ -63,7 +59,6 @@ Rectangle { Component.onCompleted: { while (children.length) { - console.log("Reparenting: " + children[0]); children[0].parent = grid; } } @@ -79,7 +74,7 @@ Rectangle { Layout.minimumWidth: implicitWidth Layout.leftMargin: model.type == UserSettingsModel.SectionTitle ? 0 : Nheko.paddingMedium Layout.topMargin: model.type == UserSettingsModel.SectionTitle ? Nheko.paddingLarge : 0 - font.pointSize: 1.1 * fontInfo.pointSize + font.pointSize: 1.1 * fontMetrics.font.pointSize HoverHandler { id: hovered diff --git a/resources/qml/components/FlatButton.qml b/resources/qml/components/FlatButton.qml index 1978b373..8ca3f104 100644 --- a/resources/qml/components/FlatButton.qml +++ b/resources/qml/components/FlatButton.qml @@ -8,6 +8,7 @@ import QtQuick 2.9 import QtQuick.Controls 2.5 import im.nheko 1.0 +// FIXME(Nico): Don't use hardcoded colors. Button { id: control diff --git a/src/UserSettingsPage.cpp b/src/UserSettingsPage.cpp index b6d05fb5..c43727a2 100644 --- a/src/UserSettingsPage.cpp +++ b/src/UserSettingsPage.cpp @@ -964,7 +964,6 @@ UserSettingsModel::data(const QModelIndex &index, int role) const return data(index, Values).toStringList().indexOf(i->emojiFont()); case Ringtone: { auto v = i->ringtone(); - nhlog::ui()->critical("ringtone: {}", v.toStdString()); if (v == QStringView(u"Mute")) return 0; else if (v == QStringView(u"Default")) -- cgit 1.5.1