diff options
author | Aapo Rotonen <aapo.rotonen@qt.io> | 2024-02-05 14:25:07 +0200 |
---|---|---|
committer | Aapo Rotonen <aapo.rotonen@qt.io> | 2024-03-22 07:41:55 +0000 |
commit | 4ff817db04b6e9ce7691b2c1ed54568441d32519 (patch) | |
tree | cf61a0ef1e7cf55b6e9bc05ebbc607ecb2af7ef6 /startupscreen | |
parent | 28042f4e7cb7ade04e032499e77d4fa49c679fa8 (diff) |
Add own version of QSR screen to startupscreen. It has
functionality that will start the qsrdemo in the target device.
Task-number: QSR-2290
Change-Id: I9d931553cfe99598c97d6b17c2d6a09d17ad457d
Reviewed-by: Samuli Piippo <samuli.piippo@qt.io>
Reviewed-by: Jussi Witick <jussi.witick@qt.io>
Diffstat (limited to 'startupscreen')
-rw-r--r-- | startupscreen/CMakeLists.txt | 24 | ||||
-rw-r--r-- | startupscreen/QSR_MainView.qml | 249 | ||||
-rw-r--r-- | startupscreen/assets/Application_Logo.png | bin | 0 -> 4470 bytes | |||
-rw-r--r-- | startupscreen/assets/QSR_Logo.png | bin | 0 -> 4470 bytes | |||
-rw-r--r-- | startupscreen/main.cpp | 9 | ||||
-rw-r--r-- | startupscreen/qml.qrc | 2 | ||||
-rw-r--r-- | startupscreen/settingsmanager.cpp | 24 | ||||
-rw-r--r-- | startupscreen/settingsmanager.h | 1 |
8 files changed, 307 insertions, 2 deletions
diff --git a/startupscreen/CMakeLists.txt b/startupscreen/CMakeLists.txt index 21d1fed..23e008d 100644 --- a/startupscreen/CMakeLists.txt +++ b/startupscreen/CMakeLists.txt @@ -11,6 +11,13 @@ set(CMAKE_AUTORCC ON) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) +# From build settings -> cmake -> variables -> set "QSR_BUILD = ON" to enable QSR Screen +option(QSR_BUILD "Build with QSR" OFF) + +if(QSR_BUILD) + add_definitions(-DQSR) +endif() + find_package(QT NAMES Qt6 Qt5 COMPONENTS Core Quick QuickControls2 REQUIRED) find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core Quick QuickControls2 REQUIRED) @@ -21,6 +28,23 @@ add_executable(startupscreen qml.qrc ) +if(QSR_BUILD) + set_source_files_properties("QSR_MainView.qml" + PROPERTIES QT_RESOURCE_ALIAS "MainView.qml" + ) + # Use QSR_MainView in QSR builds + set(QML_FILES "QSR_MainView.qml") +else() + # For non-QSR builds, use the original MainView.qml + set(QML_FILES "MainView.qml") +endif() + +# Add resources to the project +qt_add_resources(startupscreen "mainview" + PREFIX "/" + FILES ${QML_FILES} +) + target_compile_definitions(startupscreen PRIVATE $<$<OR:$<CONFIG:Debug>,$<CONFIG:RelWithDebInfo>>:QT_QML_DEBUG>) target_link_libraries(startupscreen diff --git a/startupscreen/QSR_MainView.qml b/startupscreen/QSR_MainView.qml new file mode 100644 index 0000000..6cdf71f --- /dev/null +++ b/startupscreen/QSR_MainView.qml @@ -0,0 +1,249 @@ +/**************************************************************************** +** +** Copyright (C) 2024 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Device Creation. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls +import StartupScreen +import backend 1.0 + +Item { + id: root + + property int textNormal: panel.height / 9 + property int textLarge: panel.height / 7 + + Item { + id: panel + anchors.top: root.top + anchors.topMargin: height / 10 + anchors.left: root.left + anchors.leftMargin: panel.width *.1 + height: width / 2 + width: root.width * 0.6 + + Text { + id: headerText_1 + color: "#2cde85" + text: qsTr("Get Started with Qt Safe Renderer ") + anchors.top: panel.top + anchors.left: panel.left + font.pixelSize: textNormal * 1.2 + font.family: "Titillium Web" + } + + Text { + id: bodyText + color: "#ffffff" + text: qsTr("How to install demo application\nfrom Qt Creator?") + font.pixelSize: textNormal + font.family: "Titillium Web" + anchors.left: panel.left + anchors.top: headerText_1.bottom + anchors.topMargin: textNormal + wrapMode: Text.WordWrap + } + + Text { + id: buttonLabel + color: "#2cde85" + text: qsTr("Click here to learn more!") + font.underline: true + anchors.left: panel.left + anchors.top: bodyText.bottom + anchors.topMargin: textLarge + font.pixelSize: textLarge + font.family: "Titillium Web" + + MouseArea { + anchors.fill: parent + anchors.margins: -height * .5 + onPressed: guide.visible = true + } + } + } + + Item { + id: demoButtonAlignment + anchors.right: root.right + anchors.left: panel.right + anchors.top: panel.top + anchors.bottom: panel.bottom + } + + Rectangle { + width: parent.width * 0.2 + height: parent.height * 0.2 + radius: height * 0.075 + anchors.horizontalCenter: demoButtonAlignment.horizontalCenter + anchors.verticalCenter: panel.verticalCenter + color: "#2cde85" + + MouseArea { + id: mouseArea + anchors.fill: parent + onPressed: parent.color = "#235866" + var target = "qsrdemo.target"; + onReleased: { + parent.color = "#2cde85" + SettingsManager.runDemoMode(target) + } + } + + Text { + text: "Start Demo" + font.pixelSize: height * 2 + font.family: "Titillium Web" + anchors.centerIn: parent + color: "white" + } + } + + + // Button row + Row { + id: buttonRow + anchors.top: panel.bottom + anchors.horizontalCenter: panel.BottomLeft + spacing: buttonSize / 4 + padding: buttonSize / 4 + property var buttonSize: panel.height / 2 + + UsbButton { + id: usbButton + height: parent.buttonSize + width: height + available: SettingsManager.hasQdb + connected: ipAddress.text.indexOf("usb0") !== -1 + onPressed: { + usbModeDialog.open() + } + } + WifiButton { + id: wifiButton + height: parent.buttonSize + width: height + visible: true + onPressed: { + loader.source = "qrc:/NetworkSettings/NetworkSettingsPage.qml" + } + } + } + + // label and IP address + Text { + id: ipLabel + color: "grey" + text: qsTr("Networks:") + anchors.bottom: ipAddress.top + anchors.horizontalCenter: ipAddress.horizontalCenter + font.pixelSize: textNormal + font.family: "Titillium Web" + visible: ipAddress.text !== "" + } + Text { + id: ipAddress + color: "grey" + text: SettingsManager.networks + anchors.bottom: root.bottom + anchors.right: root.right + anchors.rightMargin: 5 + font.pixelSize: textNormal + font.bold: true + font.family: "Titillium Web" + + Timer { + interval: 3000 + onTriggered: ipAddress.text = SettingsManager.networks + running: true + repeat: true + } + } + + Loader { + id: loader + anchors.fill: parent + } + + UsbModeDialog { + id: usbModeDialog + } + + GuideView { + id: guide + visible: false + } + + // base state = landscape + states: [ + State { + name: "portrait" + + PropertyChanges { + target: panel + width: root.width * 0.9 + } + AnchorChanges { + target: panel + anchors.top: clock.bottom + } + AnchorChanges { + target: clock + anchors.top: root.top + anchors.horizontalCenter: root.horizontalCenter + anchors.verticalCenter: undefined + } + AnchorChanges { + target: buttonRow + anchors.horizontalCenter: undefined + anchors.left: root.left + } + } + ] +} diff --git a/startupscreen/assets/Application_Logo.png b/startupscreen/assets/Application_Logo.png Binary files differnew file mode 100644 index 0000000..7f4f0a9 --- /dev/null +++ b/startupscreen/assets/Application_Logo.png diff --git a/startupscreen/assets/QSR_Logo.png b/startupscreen/assets/QSR_Logo.png Binary files differnew file mode 100644 index 0000000..7f4f0a9 --- /dev/null +++ b/startupscreen/assets/QSR_Logo.png diff --git a/startupscreen/main.cpp b/startupscreen/main.cpp index 9d8e371..77d3e02 100644 --- a/startupscreen/main.cpp +++ b/startupscreen/main.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2020 The Qt Company Ltd. +** Copyright (C) 2024 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qt for Device Creation. @@ -63,11 +63,17 @@ int main(int argc, char *argv[]) app.setApplicationVersion(QLatin1String(qVersion())); SettingsManager settingsManager; + qmlRegisterSingletonInstance("StartupScreen", 1, 0, "SettingsManager", &settingsManager); QtButtonImageProvider imageProvider; QQmlApplicationEngine engine; +#ifdef QSR + if (app.windowIcon().isNull()) { + app.setWindowIcon(QIcon(":/assets/QSR_Logo.png")); + } +#endif engine.addImageProvider("QtButton", &imageProvider); engine.addImportPath("qrc:/imports"); const QUrl url(QStringLiteral("qrc:/StartupScreen.qml")); @@ -76,6 +82,7 @@ int main(int argc, char *argv[]) if (!obj && url == objUrl) QCoreApplication::exit(-1); }, Qt::QueuedConnection); + engine.load(url); return app.exec(); diff --git a/startupscreen/qml.qrc b/startupscreen/qml.qrc index 2b4023d..0b59285 100644 --- a/startupscreen/qml.qrc +++ b/startupscreen/qml.qrc @@ -2,7 +2,6 @@ <qresource prefix="/"> <file>AnalogClock.qml</file> <file>GuideView.qml</file> - <file>MainView.qml</file> <file>RebootDialog.qml</file> <file>SplashView.ui.qml</file> <file>StartupScreen.qml</file> @@ -38,5 +37,6 @@ <file>NetworkSettings/ViewSettings.qml</file> <file>NetworkSettings/QtButton.qml</file> <file>NetworkSettings/NetworkDelegate.qml</file> + <file>assets/QSR_Logo.png</file> </qresource> </RCC> diff --git a/startupscreen/settingsmanager.cpp b/startupscreen/settingsmanager.cpp index e732734..ddd964b 100644 --- a/startupscreen/settingsmanager.cpp +++ b/startupscreen/settingsmanager.cpp @@ -55,6 +55,7 @@ #include <QFile> #include <QTemporaryFile> #include <QNetworkInterface> +#include <QProcess> #include <sys/reboot.h> #include <unistd.h> @@ -161,3 +162,26 @@ QByteArray SettingsManager::guideText() return QByteArrayLiteral("Guide not found"); } } + +void SettingsManager::runDemoMode(const QString& target) +{ + QProcess process; + QString program = "systemctl"; + QStringList arguments; + + arguments << "start" << target; + + process.start(program, arguments); + process.waitForFinished(-1); + + if (process.exitStatus() == QProcess::NormalExit && process.exitCode() == 0) { + qInfo() << "Successfully started target: " << target; + } else { + qWarning() << "Command execution failed with exit code: " << process.exitCode() << " for target: " << target; + qWarning() << "Error message: " << process.errorString(); + } +} + + + + diff --git a/startupscreen/settingsmanager.h b/startupscreen/settingsmanager.h index fe254d7..6f524cf 100644 --- a/startupscreen/settingsmanager.h +++ b/startupscreen/settingsmanager.h @@ -70,6 +70,7 @@ public: void setUsbMode(const QString &usbMode); bool hasQdb(); Q_INVOKABLE void reboot(); + Q_INVOKABLE void runDemoMode(const QString& target); QString networks(); QByteArray guideText(); |