forked from qt-creator/qt-creator
AssetExport: Improve json generating class names
Change-Id: Id9abcf1122ee4c2c53f886438958e38cc84a835d Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
@@ -53,10 +53,10 @@ add_qtc_plugin(assetexporterplugin
|
||||
assetexporterplugin/componentexporter.h assetexporterplugin/componentexporter.cpp
|
||||
assetexporterplugin/exportnotification.h assetexporterplugin/exportnotification.cpp
|
||||
assetexporterplugin/filepathmodel.h assetexporterplugin/filepathmodel.cpp
|
||||
assetexporterplugin/parsers/assetnodeparser.h assetexporterplugin/parsers/assetnodeparser.cpp
|
||||
assetexporterplugin/parsers/modelitemnodeparser.h assetexporterplugin/parsers/modelitemnodeparser.cpp
|
||||
assetexporterplugin/parsers/modelnodeparser.h assetexporterplugin/parsers/modelnodeparser.cpp
|
||||
assetexporterplugin/parsers/textnodeparser.h assetexporterplugin/parsers/textnodeparser.cpp
|
||||
assetexporterplugin/dumpers/assetnodedumper.h assetexporterplugin/dumpers/assetnodedumper.cpp
|
||||
assetexporterplugin/dumpers/itemnodedumper.h assetexporterplugin/dumpers/itemnodedumper.cpp
|
||||
assetexporterplugin/dumpers/nodedumper.h assetexporterplugin/dumpers/nodedumper.cpp
|
||||
assetexporterplugin/dumpers/textnodedumper.h assetexporterplugin/dumpers/textnodedumper.cpp
|
||||
assetexporterplugin/assetexporterplugin.qrc
|
||||
PLUGIN_PATH ${QmlDesignerPluginInstallPrefix}
|
||||
SKIP_DEBUG_CMAKE_FILE_CHECK
|
||||
|
@@ -32,9 +32,9 @@
|
||||
#include "filepathmodel.h"
|
||||
#include "componentexporter.h"
|
||||
|
||||
#include "parsers/modelitemnodeparser.h"
|
||||
#include "parsers/textnodeparser.h"
|
||||
#include "parsers/assetnodeparser.h"
|
||||
#include "dumpers/itemnodedumper.h"
|
||||
#include "dumpers/textnodedumper.h"
|
||||
#include "dumpers/assetnodedumper.h"
|
||||
|
||||
#include "coreplugin/actionmanager/actionmanager.h"
|
||||
#include "coreplugin/actionmanager/actioncontainer.h"
|
||||
@@ -68,10 +68,10 @@ AssetExporterPlugin::AssetExporterPlugin() :
|
||||
auto &viewManager = designerPlugin->viewManager();
|
||||
viewManager.registerViewTakingOwnership(m_view);
|
||||
|
||||
// Add parsers templates for factory instantiation.
|
||||
Component::addNodeParser<ItemNodeParser>();
|
||||
Component::addNodeParser<TextNodeParser>();
|
||||
Component::addNodeParser<AssetNodeParser>();
|
||||
// Add dumper templates for factory instantiation.
|
||||
Component::addNodeDumper<ItemNodeDumper>();
|
||||
Component::addNodeDumper<TextNodeDumper>();
|
||||
Component::addNodeDumper<AssetNodeDumper>();
|
||||
|
||||
// Instantiate actions created by the plugin.
|
||||
addActions();
|
||||
|
@@ -16,10 +16,10 @@ HEADERS += \
|
||||
componentexporter.h \
|
||||
exportnotification.h \
|
||||
filepathmodel.h \
|
||||
parsers/assetnodeparser.h \
|
||||
parsers/modelitemnodeparser.h \
|
||||
parsers/modelnodeparser.h \
|
||||
parsers/textnodeparser.h
|
||||
dumpers/assetnodedumper.h \
|
||||
dumpers/itemnodedumper.h \
|
||||
dumpers/nodedumper.h \
|
||||
dumpers/textnodedumper.h
|
||||
|
||||
SOURCES += \
|
||||
assetexportdialog.cpp \
|
||||
@@ -29,10 +29,10 @@ SOURCES += \
|
||||
componentexporter.cpp \
|
||||
exportnotification.cpp \
|
||||
filepathmodel.cpp \
|
||||
parsers/assetnodeparser.cpp \
|
||||
parsers/modelitemnodeparser.cpp \
|
||||
parsers/modelnodeparser.cpp \
|
||||
parsers/textnodeparser.cpp
|
||||
dumpers/assetnodedumper.cpp \
|
||||
dumpers/itemnodedumper.cpp \
|
||||
dumpers/nodedumper.cpp \
|
||||
dumpers/textnodedumper.cpp
|
||||
|
||||
FORMS += \
|
||||
assetexportdialog.ui
|
||||
|
@@ -53,13 +53,13 @@ QtcProduct {
|
||||
"exportnotification.h",
|
||||
"filepathmodel.cpp",
|
||||
"filepathmodel.h",
|
||||
"parsers/assetnodeparser.cpp",
|
||||
"parsers/assetnodeparser.h",
|
||||
"parsers/modelitemnodeparser.cpp",
|
||||
"parsers/modelitemnodeparser.h",
|
||||
"parsers/modelnodeparser.cpp",
|
||||
"parsers/modelnodeparser.h",
|
||||
"parsers/textnodeparser.cpp",
|
||||
"parsers/textnodeparser.h"
|
||||
"dumpers/assetnodedumper.cpp",
|
||||
"dumpers/assetnodedumper.h",
|
||||
"dumpers/itemnodedumper.cpp",
|
||||
"dumpers/itemnodedumper.h",
|
||||
"dumpers/nodedumper.cpp",
|
||||
"dumpers/nodedumper.h",
|
||||
"dumpers/textnodedumper.cpp",
|
||||
"dumpers/textnodedumper.h"
|
||||
]
|
||||
}
|
||||
|
@@ -26,7 +26,7 @@
|
||||
#include "assetexporter.h"
|
||||
#include "assetexportpluginconstants.h"
|
||||
#include "exportnotification.h"
|
||||
#include "parsers/modelnodeparser.h"
|
||||
#include "dumpers/nodedumper.h"
|
||||
|
||||
#include "model.h"
|
||||
#include "nodeabstractproperty.h"
|
||||
@@ -59,7 +59,7 @@ static QByteArrayList populateLineage(const QmlDesigner::ModelNode &node)
|
||||
namespace QmlDesigner {
|
||||
using namespace Constants;
|
||||
|
||||
std::vector<std::unique_ptr<Internal::NodeParserCreatorBase>> Component::m_readers;
|
||||
std::vector<std::unique_ptr<Internal::NodeDumperCreatorBase>> Component::m_readers;
|
||||
Component::Component(AssetExporter &exporter, const ModelNode &rootNode):
|
||||
m_exporter(exporter),
|
||||
m_rootNode(rootNode)
|
||||
@@ -88,12 +88,12 @@ void Component::exportComponent()
|
||||
addImports();
|
||||
}
|
||||
|
||||
ModelNodeParser *Component::createNodeParser(const ModelNode &node) const
|
||||
NodeDumper *Component::createNodeDumper(const ModelNode &node) const
|
||||
{
|
||||
QByteArrayList lineage = populateLineage(node);
|
||||
std::unique_ptr<ModelNodeParser> reader;
|
||||
for (auto &parserCreator: m_readers) {
|
||||
std::unique_ptr<ModelNodeParser> r(parserCreator->instance(lineage, node));
|
||||
std::unique_ptr<NodeDumper> reader;
|
||||
for (auto &dumperCreator: m_readers) {
|
||||
std::unique_ptr<NodeDumper> r(dumperCreator->instance(lineage, node));
|
||||
if (r->isExportable()) {
|
||||
if (reader) {
|
||||
if (reader->priority() < r->priority())
|
||||
@@ -105,7 +105,7 @@ ModelNodeParser *Component::createNodeParser(const ModelNode &node) const
|
||||
}
|
||||
|
||||
if (!reader)
|
||||
qCDebug(loggerInfo()) << "No parser for node" << node;
|
||||
qCDebug(loggerInfo()) << "No dumper for node" << node;
|
||||
|
||||
return reader.release();
|
||||
}
|
||||
@@ -118,15 +118,15 @@ QJsonObject Component::nodeToJson(const ModelNode &node)
|
||||
if (!node.isSubclassOf("QtQuick.Item"))
|
||||
return {};
|
||||
|
||||
std::unique_ptr<ModelNodeParser> parser(createNodeParser(node));
|
||||
if (parser) {
|
||||
if (parser->uuid().isEmpty()) {
|
||||
std::unique_ptr<NodeDumper> dumper(createNodeDumper(node));
|
||||
if (dumper) {
|
||||
if (dumper->uuid().isEmpty()) {
|
||||
// Assign an unique identifier to the node.
|
||||
QByteArray uuid = m_exporter.generateUuid(node);
|
||||
node.setAuxiliaryData(Constants::UuidAuxTag, QString::fromLatin1(uuid));
|
||||
node.model()->rewriterView()->writeAuxiliaryData();
|
||||
}
|
||||
jsonObject = parser->json(*this);
|
||||
jsonObject = dumper->json(*this);
|
||||
} else {
|
||||
ExportNotification::addError(tr("Error exporting node %1. Cannot parse type %2.")
|
||||
.arg(node.id()).arg(QString::fromUtf8(node.type())));
|
||||
|
@@ -41,27 +41,27 @@ namespace QmlDesigner {
|
||||
class AssetExporter;
|
||||
class ModelNode;
|
||||
class Component;
|
||||
class ModelNodeParser;
|
||||
class NodeDumper;
|
||||
|
||||
namespace Internal {
|
||||
class NodeParserCreatorBase
|
||||
class NodeDumperCreatorBase
|
||||
{
|
||||
public:
|
||||
virtual ~NodeParserCreatorBase() {}
|
||||
virtual ~NodeDumperCreatorBase() {}
|
||||
protected:
|
||||
virtual ModelNodeParser *instance(const QByteArrayList &, const ModelNode &) const = 0;
|
||||
virtual NodeDumper *instance(const QByteArrayList &, const ModelNode &) const = 0;
|
||||
friend class QmlDesigner::Component;
|
||||
};
|
||||
|
||||
template<class T>
|
||||
class NodeParserCreator : public NodeParserCreatorBase
|
||||
class NodeDumperCreator : public NodeDumperCreatorBase
|
||||
{
|
||||
public:
|
||||
NodeParserCreator() = default;
|
||||
~NodeParserCreator() = default;
|
||||
NodeDumperCreator() = default;
|
||||
~NodeDumperCreator() = default;
|
||||
|
||||
protected:
|
||||
ModelNodeParser *instance(const QByteArrayList &lineage, const ModelNode &node) const {
|
||||
NodeDumper *instance(const QByteArrayList &lineage, const ModelNode &node) const {
|
||||
return new T(lineage, node);
|
||||
}
|
||||
};
|
||||
@@ -79,13 +79,13 @@ public:
|
||||
|
||||
AssetExporter &exporter();
|
||||
|
||||
template<typename T> static void addNodeParser()
|
||||
template<typename T> static void addNodeDumper()
|
||||
{
|
||||
QTC_ASSERT((std::is_base_of<ModelNodeParser, T>::value), return);
|
||||
m_readers.push_back(std::make_unique<Internal::NodeParserCreator<T>>());
|
||||
QTC_ASSERT((std::is_base_of<NodeDumper, T>::value), return);
|
||||
m_readers.push_back(std::make_unique<Internal::NodeDumperCreator<T>>());
|
||||
}
|
||||
private:
|
||||
ModelNodeParser* createNodeParser(const ModelNode &node) const;
|
||||
NodeDumper* createNodeDumper(const ModelNode &node) const;
|
||||
QJsonObject nodeToJson(const ModelNode &node);
|
||||
void addImports();
|
||||
|
||||
@@ -93,6 +93,6 @@ private:
|
||||
AssetExporter& m_exporter;
|
||||
const ModelNode &m_rootNode;
|
||||
QJsonObject m_json;
|
||||
static std::vector<std::unique_ptr<Internal::NodeParserCreatorBase>> m_readers;
|
||||
static std::vector<std::unique_ptr<Internal::NodeDumperCreatorBase>> m_readers;
|
||||
};
|
||||
}
|
||||
|
@@ -23,7 +23,7 @@
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "assetnodeparser.h"
|
||||
#include "assetnodedumper.h"
|
||||
#include "assetexportpluginconstants.h"
|
||||
#include "assetexporter.h"
|
||||
|
||||
@@ -36,13 +36,13 @@
|
||||
|
||||
namespace QmlDesigner {
|
||||
using namespace Constants;
|
||||
AssetNodeParser::AssetNodeParser(const QByteArrayList &lineage, const ModelNode &node) :
|
||||
ItemNodeParser(lineage, node)
|
||||
AssetNodeDumper::AssetNodeDumper(const QByteArrayList &lineage, const ModelNode &node) :
|
||||
ItemNodeDumper(lineage, node)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
bool AssetNodeParser::isExportable() const
|
||||
bool AssetNodeDumper::isExportable() const
|
||||
{
|
||||
auto hasType = [this](const QByteArray &type) {
|
||||
return lineage().contains(type);
|
||||
@@ -50,9 +50,9 @@ bool AssetNodeParser::isExportable() const
|
||||
return hasType("QtQuick.Image") || hasType("QtQuick.Rectangle");
|
||||
}
|
||||
|
||||
QJsonObject AssetNodeParser::json(Component &component) const
|
||||
QJsonObject AssetNodeDumper::json(Component &component) const
|
||||
{
|
||||
QJsonObject jsonObject = ItemNodeParser::json(component);
|
||||
QJsonObject jsonObject = ItemNodeDumper::json(component);
|
||||
|
||||
Utils::FilePath assetPath = component.exporter().exportAsset(objectNode(), uuid());
|
||||
QJsonObject assetData;
|
@@ -24,16 +24,16 @@
|
||||
****************************************************************************/
|
||||
#pragma once
|
||||
|
||||
#include "modelitemnodeparser.h"
|
||||
#include "itemnodedumper.h"
|
||||
|
||||
namespace QmlDesigner {
|
||||
class Component;
|
||||
|
||||
class AssetNodeParser : public ItemNodeParser
|
||||
class AssetNodeDumper : public ItemNodeDumper
|
||||
{
|
||||
public:
|
||||
AssetNodeParser(const QByteArrayList &lineage, const ModelNode &node);
|
||||
~AssetNodeParser() override = default;
|
||||
AssetNodeDumper(const QByteArrayList &lineage, const ModelNode &node);
|
||||
~AssetNodeDumper() override = default;
|
||||
|
||||
bool isExportable() const override;
|
||||
int priority() const override { return 200; }
|
@@ -23,7 +23,7 @@
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "modelitemnodeparser.h"
|
||||
#include "itemnodedumper.h"
|
||||
#include "assetexportpluginconstants.h"
|
||||
|
||||
#include "qmlitemnode.h"
|
||||
@@ -41,19 +41,19 @@ static QString capitalize(const QString &str)
|
||||
|
||||
namespace QmlDesigner {
|
||||
using namespace Constants;
|
||||
ItemNodeParser::ItemNodeParser(const QByteArrayList &lineage,
|
||||
ItemNodeDumper::ItemNodeDumper(const QByteArrayList &lineage,
|
||||
const ModelNode &node) :
|
||||
ModelNodeParser(lineage, node)
|
||||
NodeDumper(lineage, node)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
bool QmlDesigner::ItemNodeParser::isExportable() const
|
||||
bool QmlDesigner::ItemNodeDumper::isExportable() const
|
||||
{
|
||||
return lineage().contains("QtQuick.Item");
|
||||
}
|
||||
|
||||
QJsonObject QmlDesigner::ItemNodeParser::json(QmlDesigner::Component &component) const
|
||||
QJsonObject QmlDesigner::ItemNodeDumper::json(QmlDesigner::Component &component) const
|
||||
{
|
||||
Q_UNUSED(component);
|
||||
const QmlObjectNode &qmlObjectNode = objectNode();
|
@@ -24,18 +24,18 @@
|
||||
****************************************************************************/
|
||||
#pragma once
|
||||
|
||||
#include "modelnodeparser.h"
|
||||
#include "nodedumper.h"
|
||||
|
||||
namespace QmlDesigner {
|
||||
class ModelNode;
|
||||
class Component;
|
||||
|
||||
class ItemNodeParser : public ModelNodeParser
|
||||
class ItemNodeDumper : public NodeDumper
|
||||
{
|
||||
public:
|
||||
ItemNodeParser(const QByteArrayList &lineage, const ModelNode &node);
|
||||
ItemNodeDumper(const QByteArrayList &lineage, const ModelNode &node);
|
||||
|
||||
~ItemNodeParser() override = default;
|
||||
~ItemNodeDumper() override = default;
|
||||
|
||||
int priority() const override { return 100; }
|
||||
bool isExportable() const override;
|
@@ -22,11 +22,11 @@
|
||||
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
****************************************************************************/
|
||||
#include "modelnodeparser.h"
|
||||
#include "nodedumper.h"
|
||||
#include "assetexportpluginconstants.h"
|
||||
|
||||
namespace QmlDesigner {
|
||||
ModelNodeParser::ModelNodeParser(const QByteArrayList &lineage, const ModelNode &node) :
|
||||
NodeDumper::NodeDumper(const QByteArrayList &lineage, const ModelNode &node) :
|
||||
m_node(node),
|
||||
m_objectNode(node),
|
||||
m_lineage(lineage)
|
||||
@@ -34,12 +34,12 @@ ModelNodeParser::ModelNodeParser(const QByteArrayList &lineage, const ModelNode
|
||||
|
||||
}
|
||||
|
||||
QVariant ModelNodeParser::propertyValue(const PropertyName &name) const
|
||||
QVariant NodeDumper::propertyValue(const PropertyName &name) const
|
||||
{
|
||||
return m_objectNode.instanceValue(name);
|
||||
}
|
||||
|
||||
QString ModelNodeParser::uuid() const
|
||||
QString NodeDumper::uuid() const
|
||||
{
|
||||
return m_node.auxiliaryData(Constants::UuidAuxTag).toString();
|
||||
}
|
@@ -33,12 +33,12 @@ namespace QmlDesigner {
|
||||
class Component;
|
||||
class ModelNode;
|
||||
|
||||
class ModelNodeParser
|
||||
class NodeDumper
|
||||
{
|
||||
public:
|
||||
ModelNodeParser(const QByteArrayList &lineage, const ModelNode &node);
|
||||
NodeDumper(const QByteArrayList &lineage, const ModelNode &node);
|
||||
|
||||
virtual ~ModelNodeParser() = default;
|
||||
virtual ~NodeDumper() = default;
|
||||
|
||||
virtual int priority() const = 0;
|
||||
virtual bool isExportable() const = 0;
|
@@ -23,7 +23,7 @@
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "textnodeparser.h"
|
||||
#include "textnodedumper.h"
|
||||
#include "assetexportpluginconstants.h"
|
||||
|
||||
#include <QColor>
|
||||
@@ -55,21 +55,21 @@ QString toJsonAlignEnum(QString value) {
|
||||
|
||||
namespace QmlDesigner {
|
||||
using namespace Constants;
|
||||
TextNodeParser::TextNodeParser(const QByteArrayList &lineage, const ModelNode &node) :
|
||||
ItemNodeParser(lineage, node)
|
||||
TextNodeDumper::TextNodeDumper(const QByteArrayList &lineage, const ModelNode &node) :
|
||||
ItemNodeDumper(lineage, node)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
bool TextNodeParser::isExportable() const
|
||||
bool TextNodeDumper::isExportable() const
|
||||
{
|
||||
return lineage().contains("QtQuick.Text");
|
||||
}
|
||||
|
||||
QJsonObject TextNodeParser::json(Component &component) const
|
||||
QJsonObject TextNodeDumper::json(Component &component) const
|
||||
{
|
||||
Q_UNUSED(component);
|
||||
QJsonObject jsonObject = ItemNodeParser::json(component);
|
||||
QJsonObject jsonObject = ItemNodeDumper::json(component);
|
||||
|
||||
QJsonObject textDetails;
|
||||
textDetails.insert(TextContentTag, propertyValue("text").toString());
|
@@ -24,16 +24,16 @@
|
||||
****************************************************************************/
|
||||
#pragma once
|
||||
|
||||
#include "modelitemnodeparser.h"
|
||||
#include "itemnodedumper.h"
|
||||
|
||||
namespace QmlDesigner {
|
||||
class Component;
|
||||
|
||||
class TextNodeParser : public ItemNodeParser
|
||||
class TextNodeDumper : public ItemNodeDumper
|
||||
{
|
||||
public:
|
||||
TextNodeParser(const QByteArrayList &lineage, const ModelNode &node);
|
||||
~TextNodeParser() override = default;
|
||||
TextNodeDumper(const QByteArrayList &lineage, const ModelNode &node);
|
||||
~TextNodeDumper() override = default;
|
||||
|
||||
bool isExportable() const override;
|
||||
int priority() const override { return 200; }
|
Reference in New Issue
Block a user