Transform Qt Quick 2 Extension Plugin wizard to JSON

Change-Id: I0e59219adeb5b3aa08a99da7c0bb657d793ba2e1
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
Eike Ziller
2019-08-27 16:38:03 +02:00
parent 2e8f650044
commit 6c9f75ff4a
13 changed files with 164 additions and 118 deletions

View File

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

@@ -1,7 +1,7 @@
#include "%ObjectName:l%.%CppHeaderSuffix%"
#include "%{ObjectHdr}"
%ObjectName%::%ObjectName%(QQuickItem *parent):
QQuickItem(parent)
%{ObjectName}::%{ObjectName}(QQuickItem *parent)
: QQuickItem(parent)
{
// By default, QQuickItem does not draw anything. If you subclass
// QQuickItem to create a visual item, you will need to uncomment the
@@ -10,6 +10,6 @@
// setFlag(ItemHasContents, true);
}
%ObjectName%::~%ObjectName%()
%{ObjectName}::~%{ObjectName}()
{
}

View File

@@ -0,0 +1,23 @@
%{Cpp:LicenseTemplate}\
@if '%{Cpp:PragmaOnce}'
#pragma once
@else
#ifndef %{OBJECTGUARD}
#define %{OBJECTGUARD}
@endif
#include <QQuickItem>
class %{ObjectName} : public QQuickItem
{
Q_OBJECT
Q_DISABLE_COPY(%{ObjectName})
public:
explicit %{ObjectName}(QQuickItem *parent = nullptr);
~%{ObjectName}() override;
};
@if ! '%{Cpp:PragmaOnce}'
#endif // %{OBJECTGUARD}
@endif

View File

@@ -0,0 +1,12 @@
#include "%{PluginHdr}"
#include "%{ObjectHdr}"
#include <qqml.h>
void %{PluginName}::registerTypes(const char *uri)
{
// @uri %{Uri}
qmlRegisterType<%{ObjectName}>(uri, 1, 0, "%{ObjectName}");
}

View File

@@ -1,13 +1,14 @@
%{Cpp:LicenseTemplate}\
@if '%{Cpp:PragmaOnce}'
#pragma once
@else
#ifndef %ProjectName:h%_PLUGIN_H
#define %ProjectName:h%_PLUGIN_H
#ifndef %{PLUGINGUARD}
#define %{PLUGINGUARD}
@endif
#include <QQmlExtensionPlugin>
class %ProjectName:s%Plugin : public QQmlExtensionPlugin
class %{PluginName} : public QQmlExtensionPlugin
{
Q_OBJECT
Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid)
@@ -17,5 +18,5 @@ public:
};
@if ! '%{Cpp:PragmaOnce}'
#endif // %ProjectName:h%_PLUGIN_H
#endif // %{PLUGINGUARD}
@endif

View File

@@ -1,26 +1,26 @@
TEMPLATE = lib
TARGET = %ProjectName%
TARGET = %{ProjectName}
QT += qml quick
CONFIG += plugin c++11
TARGET = $$qtLibraryTarget($$TARGET)
uri = %Uri%
uri = %{Uri}
# Input
SOURCES += \
%ProjectName:l%_plugin.%CppSourceSuffix% \
%ObjectName:l%.%CppSourceSuffix%
SOURCES += \\
%{PluginSrc} \\
%{ObjectSrc}
HEADERS += \
%ProjectName:l%_plugin.%CppHeaderSuffix% \
%ObjectName:l%.%CppHeaderSuffix%
HEADERS += \\
%{PluginHdr} \\
%{ObjectHdr}
DISTFILES = qmldir
!equals(_PRO_FILE_PWD_, $$OUT_PWD) {
copy_qmldir.target = $$OUT_PWD/qmldir
copy_qmldir.depends = $$_PRO_FILE_PWD_/qmldir
copy_qmldir.commands = $(COPY_FILE) \"$$replace(copy_qmldir.depends, /, $$QMAKE_DIR_SEP)\" \"$$replace(copy_qmldir.target, /, $$QMAKE_DIR_SEP)\"
copy_qmldir.commands = $(COPY_FILE) "$$replace(copy_qmldir.depends, /, $$QMAKE_DIR_SEP)" "$$replace(copy_qmldir.target, /, $$QMAKE_DIR_SEP)"
QMAKE_EXTRA_TARGETS += copy_qmldir
PRE_TARGETDEPS += $$copy_qmldir.target
}

View File

@@ -0,0 +1,2 @@
module %{Uri}
plugin %{ProjectName}

View File

@@ -0,0 +1,109 @@
{
"version": 1,
"supportedProjectTypes": [ "Qt4ProjectManager.Qt4Project" ],
"id": "M.QtQuick2ExtensionPlugin",
"category": "G.Library",
"trDescription": "Creates a C++ plugin to load Qt Quick extensions dynamically into applications using the QQmlEngine class.",
"trDisplayName": "Qt Quick 2 Extension Plugin",
"trDisplayCategory": "Library",
"icon": "lib.png",
"featuresRequired": [ "QtSupport.Wizards.FeatureQtQuick", "QtSupport.Wizards.FeatureQtQuick.2" ],
"enabled": "%{JS: value('Plugins').indexOf('QmakeProjectManager') >= 0}",
"options":
[
{ "key": "ProjectFile", "value": "%{ProFile}" },
{ "key": "ProFile", "value": "%{JS: Util.fileName(value('ProjectDirectory') + '/' + value('ProjectName'), 'pro')}" },
{ "key": "PluginBaseFileName", "value": "%{JS: value('ProjectName') + '_plugin'}" },
{ "key": "PluginSrc", "value": "%{JS: Cpp.classToFileName(value('PluginBaseFileName'), Util.preferredSuffix('text/x-c++src'))}" },
{ "key": "PluginHdr", "value": "%{JS: Cpp.classToFileName(value('PluginBaseFileName'), Util.preferredSuffix('text/x-c++hdr'))}" },
{ "key": "ObjectSrc", "value": "%{JS: Cpp.classToFileName(value('ObjectName'), Util.preferredSuffix('text/x-c++src'))}" },
{ "key": "ObjectHdr", "value": "%{JS: Cpp.classToFileName(value('ObjectName'), Util.preferredSuffix('text/x-c++hdr'))}" },
{ "key": "PluginName", "value": "%{JS: value('ProjectName').charAt(0).toUpperCase() + value('ProjectName').slice(1) + 'Plugin' }" },
{ "key": "PLUGINGUARD", "value": "%{JS: Cpp.classToHeaderGuard(value('PluginBaseFileName'), Util.preferredSuffix('text/x-c++hdr'))}" },
{ "key": "OBJECTGUARD", "value": "%{JS: Cpp.classToHeaderGuard(value('ObjectName'), Util.preferredSuffix('text/x-c++hdr'))}" }
],
"pages":
[
{
"trDisplayName": "Project Location",
"trShortTitle": "Location",
"typeId": "Project"
},
{
"trDisplayName": "Custom Parameters",
"trShortTitle": "Details",
"typeId": "Fields",
"data":
[
{
"name": "ObjectName",
"trDisplayName": "Object class-name:",
"mandatory": true,
"type": "LineEdit",
"data":
{
"validator": "^[A-Za-z0-9_]+$",
"trText": "MyItem"
}
},
{
"name": "Uri",
"trDisplayName": "URI:",
"mandatory": true,
"type": "LineEdit",
"data":
{
"validator": "^[A-Za-z0-9]+([A-Za-z0-9-]*[A-Za-z0-9]+)?(\.[A-Za-z0-9]+([-A-Za-z0-9]*[A-Za-z0-9]+)?)*$",
"trText": "com.mycompany.qmlcomponents"
}
}
]
},
{
"trDisplayName": "Project Management",
"trShortTitle": "Summary",
"typeId": "Summary"
}
],
"generators":
[
{
"typeId": "File",
"data":
[
{
"source": "project.pro",
"target": "%{ProFile}",
"openAsProject": true
},
{
"source": "qmldir",
"target": "qmldir"
},
{
"source": "plugin.cpp",
"target": "%{PluginSrc}"
},
{
"source": "plugin.h",
"target": "%{PluginHdr}"
},
{
"source": "object.cpp",
"target": "%{ObjectSrc}"
},
{
"source": "object.h",
"target": "%{ObjectHdr}"
},
{
"source": "../git.ignore",
"target": ".gitignore",
"condition": "%{JS: !value('IsSubproject') && value('VersionControl') === 'G.Git'}"
}
]
}
]
}

View File

@@ -1,22 +0,0 @@
@if '%{Cpp:PragmaOnce}'
#pragma once
@else
#ifndef %ObjectName:u%_H
#define %ObjectName:u%_H
@endif
#include <QQuickItem>
class %ObjectName% : public QQuickItem
{
Q_OBJECT
Q_DISABLE_COPY(%ObjectName%)
public:
explicit %ObjectName%(QQuickItem *parent = nullptr);
~%ObjectName%() override;
};
@if ! '%{Cpp:PragmaOnce}'
#endif // %ObjectName:u%_H
@endif

View File

@@ -1,11 +0,0 @@
#include "%ProjectName:l%_plugin.%CppHeaderSuffix%"
#include "%ObjectName:l%.%CppHeaderSuffix%"
#include <qqml.h>
void %ProjectName:s%Plugin::registerTypes(const char *uri)
{
// @uri %Uri%
qmlRegisterType<%ObjectName%>(uri, 1, 0, "%ObjectName:c%");
}

View File

@@ -1,2 +0,0 @@
module %Uri%
plugin %ProjectName%

View File

@@ -1,66 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** 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.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
Custom project wizard configuration example file. Note that by convention,
the project file goes last.
The "class" and "firstpage" attributes specify that it is a Qt 4 wizard and
leave room for the Qt 4 target page.
-->
<wizard version="1" kind="project"
class="qmakeproject" firstpage="10"
id="QtQuick2ExtensionPlugin" category="G.Library"
featuresRequired="QtSupport.Wizards.FeatureQtQuick,QtSupport.Wizards.FeatureQtQuick.2">
<icon>lib.png</icon>
<description>Creates a C++ plugin to load extensions dynamically into applications using the QQmlEngine class. Requires Qt 5.0 or newer.</description>
<displayname>Qt Quick 2 Extension Plugin</displayname>
<displaycategory>Library</displaycategory>
<files>
<file source="qmldir" target="qmldir"/>
<file source="plugin.h" target="%ProjectName:l%_plugin.%CppHeaderSuffix%"/>
<file source="plugin.cpp" target="%ProjectName:l%_plugin.%CppSourceSuffix%"/>
<file source="object.h" target="%ObjectName:l%.%CppHeaderSuffix%"/>
<file source="object.cpp" target="%ObjectName:l%.%CppSourceSuffix%" openeditor="true"/>
<file source="project.pro" target="%ProjectName:l%.pro" openproject="true"/>
</files>
<!-- Create a 2nd wizard page with parameters -->
<fieldpagetitle>Custom QML Extension Plugin Parameters</fieldpagetitle>
<fields>
<field mandatory="true" name="ObjectName">
<fieldcontrol class="QLineEdit" validator='^[A-Za-z0-9_]+$' defaulttext="MyItem"/>
<fielddescription>Object class-name:</fielddescription>
</field>
<field mandatory="true" name="Uri">
<fieldcontrol class="QLineEdit" validator='^[A-Za-z0-9]+([A-Za-z0-9-]*[A-Za-z0-9]+)?(\.[A-Za-z0-9]+([-A-Za-z0-9]*[A-Za-z0-9]+)?)*$' defaulttext="com.mycompany.qmlcomponents"/>
<fielddescription>URI:</fielddescription>
</field>
</fields>
<validationrules>
<validationrule condition='"%ObjectName%" != "%ProjectName%_plugin"'>
<message>The project name and the object class-name cannot be the same.</message>
</validationrule>
</validationrules>
</wizard>