From 75b5d1baf12c36bfb2bd5bd66a39a68876c0563d Mon Sep 17 00:00:00 2001 From: Christiaan Janssen Date: Fri, 24 Jun 2022 13:10:18 +0200 Subject: [PATCH] McuSupport: add template for qmlproject-based projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds a new option for creating qmlproject-based MCU projects in the "New Project" wizard. The generated qmlproject file contains all the supported properties and nodes, prefilled with their default values, for easy tweaking by users without requiring to dive into the documentation. No extra fonts, translations or images are generated, but empty placeholder nodes for them are found in the qmlproject file, for the user to fill in. One custom module with a simple Text item is generated, in order to demonstrate how to use the modules feature. The required QmlProjectExporter version for building the project is the one packaged with Qt for MCUs 2.3.0. Task-number: QTCREATORBUG-26042 Change-Id: I4569306f2f6e7b9370dfa65cacd0b65c2e4fcb06 Reviewed-by: Reviewed-by: Piotr Mućko Reviewed-by: Dawid Śliwa Reviewed-by: Erik Verbruggen Reviewed-by: Alessandro Portale --- src/plugins/mcusupport/mcusupport.qrc | 7 +- .../application/project.qmlproject.tpl | 19 --- .../wizards/application/wizard.json | 5 - .../wizards/qmlproject/CMakeLists.txt | 9 ++ .../wizards/qmlproject/component.qml.tpl | 7 + .../wizards/qmlproject/main.qml.tpl | 11 ++ .../wizards/qmlproject/module.qmlproject.tpl | 12 ++ .../wizards/qmlproject/project.qmlproject.tpl | 139 ++++++++++++++++++ .../mcusupport/wizards/qmlproject/wizard.json | 83 +++++++++++ 9 files changed, 267 insertions(+), 25 deletions(-) delete mode 100644 src/plugins/mcusupport/wizards/application/project.qmlproject.tpl create mode 100644 src/plugins/mcusupport/wizards/qmlproject/CMakeLists.txt create mode 100644 src/plugins/mcusupport/wizards/qmlproject/component.qml.tpl create mode 100644 src/plugins/mcusupport/wizards/qmlproject/main.qml.tpl create mode 100644 src/plugins/mcusupport/wizards/qmlproject/module.qmlproject.tpl create mode 100644 src/plugins/mcusupport/wizards/qmlproject/project.qmlproject.tpl create mode 100644 src/plugins/mcusupport/wizards/qmlproject/wizard.json diff --git a/src/plugins/mcusupport/mcusupport.qrc b/src/plugins/mcusupport/mcusupport.qrc index b45fb8ccc31..23934d4df40 100644 --- a/src/plugins/mcusupport/mcusupport.qrc +++ b/src/plugins/mcusupport/mcusupport.qrc @@ -7,8 +7,13 @@ wizards/icon.png wizards/icon@2x.png wizards/application/CMakeLists.txt - wizards/application/project.qmlproject.tpl wizards/application/main.qml.tpl wizards/application/wizard.json + wizards/qmlproject/CMakeLists.txt + wizards/qmlproject/main.qml.tpl + wizards/qmlproject/project.qmlproject.tpl + wizards/qmlproject/module.qmlproject.tpl + wizards/qmlproject/component.qml.tpl + wizards/qmlproject/wizard.json diff --git a/src/plugins/mcusupport/wizards/application/project.qmlproject.tpl b/src/plugins/mcusupport/wizards/application/project.qmlproject.tpl deleted file mode 100644 index 0b5d6d58631..00000000000 --- a/src/plugins/mcusupport/wizards/application/project.qmlproject.tpl +++ /dev/null @@ -1,19 +0,0 @@ -/* File generated by Qt Creator */ - -import QmlProject 1.1 - -Project { - mainFile: "%{MainQmlFile}" - qtForMCUs: true - - /* Include .qml, .js, and image files from current directory and subdirectories */ - QmlFiles { - directory: "." - } - JavaScriptFiles { - directory: "." - } - ImageFiles { - directory: "." - } -} diff --git a/src/plugins/mcusupport/wizards/application/wizard.json b/src/plugins/mcusupport/wizards/application/wizard.json index e9caecf4c86..93bffa9f6e2 100644 --- a/src/plugins/mcusupport/wizards/application/wizard.json +++ b/src/plugins/mcusupport/wizards/application/wizard.json @@ -49,11 +49,6 @@ "source": "CMakeLists.txt", "openAsProject": true }, - { - "source": "project.qmlproject.tpl", - "target": "%{ProjectDirectory}/%{ProjectName}.qmlproject", - "openInEditor": false - }, { "source": "main.qml.tpl", "target": "%{ProjectDirectory}/%{MainQmlFile}", diff --git a/src/plugins/mcusupport/wizards/qmlproject/CMakeLists.txt b/src/plugins/mcusupport/wizards/qmlproject/CMakeLists.txt new file mode 100644 index 00000000000..a1fb2aef795 --- /dev/null +++ b/src/plugins/mcusupport/wizards/qmlproject/CMakeLists.txt @@ -0,0 +1,9 @@ +cmake_minimum_required (VERSION 3.15) + +project(%{ProjectName} VERSION 0.0.1 LANGUAGES C CXX ASM ASM_MASM) + +find_package(Qul) + +qul_add_target(%{ProjectName} QML_PROJECT %{QmlProjectFile}) +app_target_setup_os(%{ProjectName}) +app_target_default_entrypoint(%{ProjectName} %{RootItemName}) diff --git a/src/plugins/mcusupport/wizards/qmlproject/component.qml.tpl b/src/plugins/mcusupport/wizards/qmlproject/component.qml.tpl new file mode 100644 index 00000000000..69b8e643bfc --- /dev/null +++ b/src/plugins/mcusupport/wizards/qmlproject/component.qml.tpl @@ -0,0 +1,7 @@ +import QtQuick 2.0 + +Text { + color: "salmon" + text: "Hello World!" + font.pixelSize: 14 +} diff --git a/src/plugins/mcusupport/wizards/qmlproject/main.qml.tpl b/src/plugins/mcusupport/wizards/qmlproject/main.qml.tpl new file mode 100644 index 00000000000..a60dd10046a --- /dev/null +++ b/src/plugins/mcusupport/wizards/qmlproject/main.qml.tpl @@ -0,0 +1,11 @@ +import QtQuick 2.0 +import CustomModule + +Rectangle { + width: 480 + height: 272 + + CustomComponent { + anchors.centerIn: parent + } +} diff --git a/src/plugins/mcusupport/wizards/qmlproject/module.qmlproject.tpl b/src/plugins/mcusupport/wizards/qmlproject/module.qmlproject.tpl new file mode 100644 index 00000000000..11e04b8325d --- /dev/null +++ b/src/plugins/mcusupport/wizards/qmlproject/module.qmlproject.tpl @@ -0,0 +1,12 @@ +import QmlProject 1.3 + +Project { + MCU.Module { + uri: "CustomModule" + generateQmltypes: true + } + + QmlFiles { + files: ["%{QmlComponent}"] + } +} diff --git a/src/plugins/mcusupport/wizards/qmlproject/project.qmlproject.tpl b/src/plugins/mcusupport/wizards/qmlproject/project.qmlproject.tpl new file mode 100644 index 00000000000..d799190038a --- /dev/null +++ b/src/plugins/mcusupport/wizards/qmlproject/project.qmlproject.tpl @@ -0,0 +1,139 @@ +import QmlProject 1.3 + +Project { + // importPaths: ["."] // optional extra import paths + // projectRootPath: "." // optional root path relative to qmlproject file path + + /* Global configuration */ + MCU.Config { + controlsStyle: "QtQuick.Controls.StyleDefault" + debugBytecode: false + debugLineDirectives: false + binaryAssetOptions: "Automatic" + // platformImageAlignment: 1 // undefined by default + platformPixelWidthAlignment: 1 + platformAlphaPixelFormat: "ARGB8888" + platformOpaquePixelFormat: "XRGB8888" + platformAlphaCompressedLosslessResourcePixelFormat: "ARGB8888RLE" + platformOpaqueCompressedLosslessResourcePixelFormat: "RGB888RLE" + // maxResourceCacheSize: 102400 // undefined by default + + // global defaults for image properties + resourceAlphaOptions: "ForTransformations" + resourceRlePremultipliedAlpha: true + resourceImagePixelFormat: "Automatic" + resourceCachePolicy: "OnStartup" + resourceCompression: false + resourceStorageSection: "QulResourceData" + resourceRuntimeAllocationType: 3 + resourceOptimizeForRotation: false + resourceOptimizeForScale: false + + // default font engine selection + fontEngine: "Static" // alternative option: "Spark" + + // font defaults for both engines + defaultFontFamily: "DejaVu Sans" + defaultFontQuality: "VeryHigh" + glyphsCachePolicy: "OnStartup" + glyphsStorageSection: "QulFontResourceData" + glyphsRuntimeAllocationType: 3 + + // font defaults for "Static" + autoGenerateGlyphs: true + complexTextRendering: true + fontFilesCachePolicy: "OnStartup" + fontFilesStorageSection: "QulFontResourceData" + fontFilesRuntimeAllocationType: 3 + + // font properties for "Spark" + fontCachePriming: true + fontCacheSize: 104800 + fontHeapSize: -1 + fontHeapPrealloc: true + fontCachePrealloc: true + fontVectorOutlinesDrawing: false + maxParagraphSize: 100 + } + + /* QML files */ + // optional root property for adding one single qml file + // mainFile: "%{MainQmlFile}" + QmlFiles { + files: ["%{MainQmlFile}"] + MCU.copyQmlFiles: false + } + + /* Images */ + ImageFiles { + // files: [""] // uncomment and add image files + MCU.base: "images" // example base "images". + MCU.prefix: "pics" // example prefix "pics". + + MCU.resourceAlphaOptions: "ForTransformations" + MCU.resourceRlePremultipliedAlpha: true + MCU.resourceImagePixelFormat: "Automatic" + MCU.resourceCachePolicy: "OnStartup" + MCU.resourceCompression: false + MCU.resourceStorageSection: "QulResourceData" + MCU.resourceRuntimeAllocationType: 3 + MCU.resourceOptimizeForRotation: false + MCU.resourceOptimizeForScale: false + } + + /* Modules */ + ModuleFiles { + files: ["%{ModuleFile}"] + // qulModules: [ // Uncomment for adding Qul modules + // "Qul::Controls", + // "Qul::ControlsTemplates", + // "Qul::Shapes", + // "Qul::Timeline" + // ] + } + + /* Interfaces */ + InterfaceFiles { + // files: [""] // uncomment for adding header files + MCU.qmlImports: ["QtQuick"] + } + + /* Translations */ + TranslationFiles { + // files: [""] // Uncomment for adding translation files with .ts extension + MCU.omitSourceLanguage: false + } + + FontFiles { + // files: [""] // Uncomment for adding font files (.ttf, .otf, .pfa, .ttc, .pfb) + MCU.addDefaultFonts: true + } + + FontConfiguration { + // font engine selection overriddes default + MCU.fontEngine: "Static" // or "Spark" + + // properties shared between both engines + MCU.defaultFontFamily: "DejaVu Sans" + MCU.defaultFontQuality: "VeryHigh" + MCU.glyphsCachePolicy: "OnStartup" + MCU.glyphsStorageSection: "QulFontResourceData" + MCU.glyphsRuntimeAllocationType: 3 + + // properties for Static engine + MCU.autoGenerateGlyphs: true + MCU.complexTextRendering: true + MCU.fontFilesCachePolicy: "OnStartup" + MCU.fontFilesStorageSection: "QulFontResourceData" + MCU.fontFilesRuntimeAllocationType: 3 + + // monotype for Spark engine + MCU.fontCachePriming: true + MCU.fontCacheSize: 104800 + MCU.fontHeapSize: -1 + MCU.fontHeapPrealloc: true + MCU.fontCachePrealloc: true + MCU.fontVectorOutlinesDrawing: false + MCU.maxParagraphSize: 100 + } +} diff --git a/src/plugins/mcusupport/wizards/qmlproject/wizard.json b/src/plugins/mcusupport/wizards/qmlproject/wizard.json new file mode 100644 index 00000000000..71874ff02bc --- /dev/null +++ b/src/plugins/mcusupport/wizards/qmlproject/wizard.json @@ -0,0 +1,83 @@ +{ + "version": 1, + "supportedProjectTypes": [ "CMakeProjectManager.CMakeProject" ], + "id": "M.McuSupportQmlprojectApplication", + "category": "D.ApplicationMCU", + "trDescription": "Creates an Mcu Support application with an empty UI, based on qmlproject (Technical Preview).", + "trDisplayName": "Qt for MCUs QmlProject Application (Technical Preview)", + "trDisplayCategory": "QmlProject Application (Qt for MCU)", + "icon": "../icon.png", + "iconKind": "Themed", + "enabled": true, + + "options": + [ + { "key": "MainQmlFile", "value": "%{ProjectName}.qml" }, + { "key": "QmlProjectFile", "value": "%{ProjectName}.qmlproject" }, + { "key": "RootItemName", "value": "%{ProjectName}" }, + { "key": "CMakeFile", "value": "%{ProjectDirectory}/CMakeLists.txt" }, + { "key": "ModuleFile", "value": "CustomModule.qmlproject"}, + { "key": "QmlComponent", "value": "CustomComponent.qml"} + ], + + "pages": + [ + { + "trDisplayName": "Project Location", + "trShortTitle": "Location", + "typeId": "Project" + }, + { + "trDisplayName": "Kit Selection", + "trShortTitle": "Kits", + "typeId": "Kits", + "enabled": "%{JS: !value('IsSubproject')}", + "data": { + "projectFilePath": "%{CMakeFile}" + } + }, + { + "trDisplayName": "Project Management", + "trShortTitle": "Summary", + "typeId": "Summary" + } + ], + "generators": + [ + { + "typeId": "File", + "data": + [ + { + "source": "CMakeLists.txt", + "openAsProject": true + }, + { + "source": "project.qmlproject.tpl", + "target": "%{ProjectDirectory}/%{QmlProjectFile}", + "openInEditor": true + }, + { + "source": "main.qml.tpl", + "target": "%{ProjectDirectory}/%{MainQmlFile}", + "openInEditor": true + }, + { + "source": "component.qml.tpl", + "target": "%{ProjectDirectory}/%{QmlComponent}", + "openInEditor": true + }, + { + "source": "module.qmlproject.tpl", + "target": "%{ProjectDirectory}/%{ModuleFile}", + "openInEditor": true + }, + { + "source": "%{IDE:ResourcePath}/templates/wizards/projects/git.ignore", + "target": ".gitignore", + "condition": "%{JS: !value('IsSubproject') && value('VersionControl') === 'G.Git'}" + } + ] + } + ] +}