From 2073334339fc03870786e2213c4210879f18da3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Burak=20Han=C3=A7erli?= <burak.hancerli@qt.io> Date: Wed, 7 Feb 2024 09:44:28 +0000 Subject: [PATCH] QDS-11912 Project list and run project button are enabled/disabled properly --- src/backend.cpp | 14 ++++++-------- src/backend.h | 7 +++---- ui/HomePage.qml | 25 +++++++++++++++++-------- ui/SettingsPage.qml | 3 ++- 4 files changed, 28 insertions(+), 21 deletions(-) diff --git a/src/backend.cpp b/src/backend.cpp index c8dee26..bc6d794 100644 --- a/src/backend.cpp +++ b/src/backend.cpp @@ -150,7 +150,7 @@ void Backend::setAutoScaleProject(const bool &enabled) void Backend::setUserHash(const QString &userHash) { QSettings().setValue("user/hash", userHash); - updateUserProjectList(); + emit userRegistered(); } bool Backend::updateInBackground() @@ -494,8 +494,6 @@ void Backend::runOnlineProject(const QString &url) void Backend::updateUserProjectList() { - emit userRegistered(); - const QString userHash = Backend::userHash(); if (userHash.isEmpty()) { @@ -511,17 +509,16 @@ void Backend::updateUserProjectList() return; } - if (projectList == m_projectListArray) { + if (projectList == m_projectList) { qDebug("No new projects available"); return; } - m_projectListArray = projectList; - m_projectList.clear(); + + m_projectList = projectList; qDebug("List of available projects fetched:"); for (const auto &project : projectList) { const QString projectName{project.toObject().value("appName").toString()}; qDebug() << "--" << projectName; - m_projectList << projectName; } emit projectListChanged(); @@ -534,7 +531,7 @@ void Backend::parseDesignViewerUrl(const QUrl &url) // If it is a user hash, we register the user and fetch the project list // If it is a project url, we submit the url to the text field // sample url: https://<url>/<project_name>.qmlrc - // sample user hash: qtdesignviewer://17e8907b3b84029384hs8djshdu38476 + // sample user hash: qtdesignviewer://19f8907b6t84029384hs8djshdu38476 if (urlData.isEmpty()) return; else if (urlData.startsWith("https//")) { @@ -545,6 +542,7 @@ void Backend::parseDesignViewerUrl(const QUrl &url) } else if (urlData.startsWith("qtdesignviewer://")) { qDebug() << "Registering user from QR code"; setUserHash(url.toString().remove("qtdesignviewer://")); + updateUserProjectList(); } else { qWarning() << "Unknown QR code data: " << urlData; } diff --git a/src/backend.h b/src/backend.h index 3363acd..980bd63 100644 --- a/src/backend.h +++ b/src/backend.h @@ -58,7 +58,7 @@ signals: class Backend : public QObject { Q_OBJECT - Q_PROPERTY(QStringList projectList READ projectList NOTIFY projectListChanged FINAL) + Q_PROPERTY(QJsonArray projectList READ projectList NOTIFY projectListChanged) public: explicit Backend(QObject *parent = nullptr); @@ -69,13 +69,12 @@ public: emit logsChanged(m_logs); } - QStringList projectList() const { return m_projectList; } + QJsonArray projectList() const { return m_projectList; } private: // UI data QString m_logs; - QStringList m_projectList; - QJsonArray m_projectListArray; + QJsonArray m_projectList; // Other members ServiceConnector m_serviceConnector; diff --git a/ui/HomePage.qml b/ui/HomePage.qml index 44f0f14..520a60e 100644 --- a/ui/HomePage.qml +++ b/ui/HomePage.qml @@ -62,33 +62,42 @@ Item { ColumnLayout { id: column2 Layout.fillWidth: true + ComboBox { id: projectList Layout.fillWidth: true - enabled: backend.userHash() !== '' + enabled: true onCurrentIndexChanged: { displayText = textAt(currentIndex) } + textRole: "appName" model: backend.projectList displayText: "Scan QR code to access your projects"; currentIndex: -1 Layout.preferredHeight: 50 - Connections { - target: backend - function onUserRegistered(){ - projectList.enabled = true; - } - } } Button { id: downloadUserProject text: qsTr("Run Project") onClicked: backend.runUserProject(projectList.currentText) - enabled: backend.userHash() !== '' + enabled: false Layout.fillWidth: true Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter } + + Connections { + target: backend + function onUserRegistered(){ + projectList.displayText = "No projects available for the user"; + projectList.enabled = false; + downloadUserProject.enabled = false; + } + function onProjectListChanged(){ + projectList.enabled = true; + downloadUserProject.enabled = true; + } + } } Item { diff --git a/ui/SettingsPage.qml b/ui/SettingsPage.qml index dc58259..894afb5 100644 --- a/ui/SettingsPage.qml +++ b/ui/SettingsPage.qml @@ -45,8 +45,9 @@ Item { Text{ leftPadding: 45 - text: qsTr("Scales the project to fit it to the current display and orientation") + text: qsTr("Scales the project to fit it to the current\ndisplay and orientation") font.pointSize: 12 + wrapMode: Text.WordWrap } } -- GitLab