forked from qt-creator/qt-creator
QmlDesigner.Model: add support for custom parser types
This patch enables us to create objects with custom parsers like ListModel and XmlListModel.
This commit is contained in:
@@ -169,6 +169,7 @@ void ComponentView::instanceInformationsChange(const QVector<ModelNode> &/*nodeL
|
|||||||
void ComponentView::instancesRenderImageChanged(const QVector<ModelNode> &/*nodeList*/) {}
|
void ComponentView::instancesRenderImageChanged(const QVector<ModelNode> &/*nodeList*/) {}
|
||||||
void ComponentView::instancesPreviewImageChanged(const QVector<ModelNode> &/*nodeList*/) {}
|
void ComponentView::instancesPreviewImageChanged(const QVector<ModelNode> &/*nodeList*/) {}
|
||||||
void ComponentView::instancesChildrenChanged(const QVector<ModelNode> &/*nodeList*/) {}
|
void ComponentView::instancesChildrenChanged(const QVector<ModelNode> &/*nodeList*/) {}
|
||||||
|
void ComponentView::customParserSourceChanged(const ModelNode &, const QString & /*newCustomParserSource*/) {}
|
||||||
|
|
||||||
void ComponentView::rewriterBeginTransaction() {}
|
void ComponentView::rewriterBeginTransaction() {}
|
||||||
void ComponentView::rewriterEndTransaction() {}
|
void ComponentView::rewriterEndTransaction() {}
|
||||||
|
|||||||
@@ -77,6 +77,7 @@ public:
|
|||||||
void instancesRenderImageChanged(const QVector<ModelNode> &nodeList);
|
void instancesRenderImageChanged(const QVector<ModelNode> &nodeList);
|
||||||
void instancesPreviewImageChanged(const QVector<ModelNode> &nodeList);
|
void instancesPreviewImageChanged(const QVector<ModelNode> &nodeList);
|
||||||
void instancesChildrenChanged(const QVector<ModelNode> &nodeList);
|
void instancesChildrenChanged(const QVector<ModelNode> &nodeList);
|
||||||
|
void customParserSourceChanged(const ModelNode &modelNode, const QString &newCustomParserSource);
|
||||||
|
|
||||||
void rewriterBeginTransaction();
|
void rewriterBeginTransaction();
|
||||||
void rewriterEndTransaction();
|
void rewriterEndTransaction();
|
||||||
|
|||||||
@@ -92,6 +92,10 @@ void DesignDocumentControllerView::instancesChildrenChanged(const QVector<ModelN
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DesignDocumentControllerView::customParserSourceChanged(const ModelNode &, const QString & /*newCustomParserSource*/)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
void DesignDocumentControllerView::rewriterBeginTransaction()
|
void DesignDocumentControllerView::rewriterBeginTransaction()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -68,6 +68,7 @@ public:
|
|||||||
void instancesRenderImageChanged(const QVector<ModelNode> &nodeList);
|
void instancesRenderImageChanged(const QVector<ModelNode> &nodeList);
|
||||||
void instancesPreviewImageChanged(const QVector<ModelNode> &nodeList);
|
void instancesPreviewImageChanged(const QVector<ModelNode> &nodeList);
|
||||||
void instancesChildrenChanged(const QVector<ModelNode> &nodeList);
|
void instancesChildrenChanged(const QVector<ModelNode> &nodeList);
|
||||||
|
void customParserSourceChanged(const ModelNode &modelNode, const QString &newCustomParserSource);
|
||||||
|
|
||||||
void rewriterBeginTransaction();
|
void rewriterBeginTransaction();
|
||||||
void rewriterEndTransaction();
|
void rewriterEndTransaction();
|
||||||
|
|||||||
@@ -172,6 +172,11 @@ void ItemLibraryView::instancesChildrenChanged(const QVector<ModelNode> &/*nodeL
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ItemLibraryView::customParserSourceChanged(const ModelNode &, const QString & /*newCustomParserSource*/)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
void ItemLibraryView::rewriterBeginTransaction()
|
void ItemLibraryView::rewriterBeginTransaction()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -84,6 +84,7 @@ public:
|
|||||||
void instancesRenderImageChanged(const QVector<ModelNode> &nodeList);
|
void instancesRenderImageChanged(const QVector<ModelNode> &nodeList);
|
||||||
void instancesPreviewImageChanged(const QVector<ModelNode> &nodeList);
|
void instancesPreviewImageChanged(const QVector<ModelNode> &nodeList);
|
||||||
void instancesChildrenChanged(const QVector<ModelNode> &nodeList);
|
void instancesChildrenChanged(const QVector<ModelNode> &nodeList);
|
||||||
|
void customParserSourceChanged(const ModelNode &modelNode, const QString &newCustomParserSource);
|
||||||
|
|
||||||
void rewriterBeginTransaction();
|
void rewriterBeginTransaction();
|
||||||
void rewriterEndTransaction();
|
void rewriterEndTransaction();
|
||||||
|
|||||||
@@ -235,6 +235,11 @@ void NavigatorView::instancesChildrenChanged(const QVector<ModelNode> &/*nodeLis
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NavigatorView::customParserSourceChanged(const ModelNode &, const QString & /*newCustomParserSource*/)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
void NavigatorView::rewriterBeginTransaction()
|
void NavigatorView::rewriterBeginTransaction()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -92,6 +92,7 @@ public:
|
|||||||
void instancesRenderImageChanged(const QVector<ModelNode> &nodeList);
|
void instancesRenderImageChanged(const QVector<ModelNode> &nodeList);
|
||||||
void instancesPreviewImageChanged(const QVector<ModelNode> &nodeList);
|
void instancesPreviewImageChanged(const QVector<ModelNode> &nodeList);
|
||||||
void instancesChildrenChanged(const QVector<ModelNode> &nodeList);
|
void instancesChildrenChanged(const QVector<ModelNode> &nodeList);
|
||||||
|
void customParserSourceChanged(const ModelNode &modelNode, const QString &newCustomParserSource);
|
||||||
|
|
||||||
void rewriterBeginTransaction();
|
void rewriterBeginTransaction();
|
||||||
void rewriterEndTransaction();
|
void rewriterEndTransaction();
|
||||||
|
|||||||
@@ -107,6 +107,7 @@ SOURCES += $$PWD/model/abstractview.cpp \
|
|||||||
$$PWD/instances/imagecontainer.cpp \
|
$$PWD/instances/imagecontainer.cpp \
|
||||||
$$PWD/instances/completecomponentcommand.cpp \
|
$$PWD/instances/completecomponentcommand.cpp \
|
||||||
$$PWD/instances/componentcompletedcommand.cpp \
|
$$PWD/instances/componentcompletedcommand.cpp \
|
||||||
|
$$PWD/instances/changecustomparsersourcecommand.cpp \
|
||||||
$$PWD/instances/addimportcontainer.cpp
|
$$PWD/instances/addimportcontainer.cpp
|
||||||
|
|
||||||
HEADERS += $$PWD/include/corelib_global.h \
|
HEADERS += $$PWD/include/corelib_global.h \
|
||||||
@@ -215,6 +216,7 @@ HEADERS += $$PWD/include/corelib_global.h \
|
|||||||
$$PWD/instances/imagecontainer.h \
|
$$PWD/instances/imagecontainer.h \
|
||||||
$$PWD/instances/completecomponentcommand.h \
|
$$PWD/instances/completecomponentcommand.h \
|
||||||
$$PWD/instances/componentcompletedcommand.h \
|
$$PWD/instances/componentcompletedcommand.h \
|
||||||
|
$$PWD/instances/changecustomparsersourcecommand.h \
|
||||||
$$PWD/instances/addimportcontainer.h
|
$$PWD/instances/addimportcontainer.h
|
||||||
contains(CONFIG, plugin) {
|
contains(CONFIG, plugin) {
|
||||||
# If core.pri has been included in the qmldesigner plugin
|
# If core.pri has been included in the qmldesigner plugin
|
||||||
|
|||||||
@@ -85,7 +85,8 @@ public:
|
|||||||
ModelNode createModelNode(const QString &typeString,
|
ModelNode createModelNode(const QString &typeString,
|
||||||
int majorVersion,
|
int majorVersion,
|
||||||
int minorVersion,
|
int minorVersion,
|
||||||
const PropertyListType &propertyList = PropertyListType());
|
const PropertyListType &propertyList = PropertyListType(),
|
||||||
|
const QString &customParserSource = QString());
|
||||||
|
|
||||||
const ModelNode rootModelNode() const;
|
const ModelNode rootModelNode() const;
|
||||||
ModelNode rootModelNode();
|
ModelNode rootModelNode();
|
||||||
@@ -140,6 +141,7 @@ public:
|
|||||||
virtual void instancesRenderImageChanged(const QVector<ModelNode> &nodeList) = 0;
|
virtual void instancesRenderImageChanged(const QVector<ModelNode> &nodeList) = 0;
|
||||||
virtual void instancesPreviewImageChanged(const QVector<ModelNode> &nodeList) = 0;
|
virtual void instancesPreviewImageChanged(const QVector<ModelNode> &nodeList) = 0;
|
||||||
virtual void instancesChildrenChanged(const QVector<ModelNode> &nodeList) = 0;
|
virtual void instancesChildrenChanged(const QVector<ModelNode> &nodeList) = 0;
|
||||||
|
virtual void customParserSourceChanged(const ModelNode &modelNode, const QString &newCustomParserSource) = 0;
|
||||||
|
|
||||||
virtual void rewriterBeginTransaction() = 0;
|
virtual void rewriterBeginTransaction() = 0;
|
||||||
virtual void rewriterEndTransaction() = 0;
|
virtual void rewriterEndTransaction() = 0;
|
||||||
|
|||||||
@@ -170,6 +170,9 @@ public:
|
|||||||
|
|
||||||
qint32 internalId() const;
|
qint32 internalId() const;
|
||||||
|
|
||||||
|
void setCustomParserSource(const QString&);
|
||||||
|
QString customParserSource() const;
|
||||||
|
|
||||||
private: // functions
|
private: // functions
|
||||||
Internal::InternalNodePointer internalNode() const;
|
Internal::InternalNodePointer internalNode() const;
|
||||||
QString generateNewId() const;
|
QString generateNewId() const;
|
||||||
|
|||||||
@@ -54,6 +54,7 @@ class RemovePropertiesCommand;
|
|||||||
class ChangeStateCommand;
|
class ChangeStateCommand;
|
||||||
class AddImportCommand;
|
class AddImportCommand;
|
||||||
class CompleteComponentCommand;
|
class CompleteComponentCommand;
|
||||||
|
class ChangeCustomParserSourceCommand;
|
||||||
|
|
||||||
class NodeInstanceServerInterface : public QObject
|
class NodeInstanceServerInterface : public QObject
|
||||||
{
|
{
|
||||||
@@ -79,6 +80,7 @@ public:
|
|||||||
virtual void changeState(const ChangeStateCommand &command) = 0;
|
virtual void changeState(const ChangeStateCommand &command) = 0;
|
||||||
virtual void addImport(const AddImportCommand &command) = 0;
|
virtual void addImport(const AddImportCommand &command) = 0;
|
||||||
virtual void completeComponent(const CompleteComponentCommand &command) = 0;
|
virtual void completeComponent(const CompleteComponentCommand &command) = 0;
|
||||||
|
virtual void changeCustomParserSource(ChangeCustomParserSourceCommand &command) = 0;
|
||||||
|
|
||||||
static void registerCommands();
|
static void registerCommands();
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -109,6 +109,7 @@ public:
|
|||||||
void instancesChildrenChanged(const QVector<ModelNode> &nodeList);
|
void instancesChildrenChanged(const QVector<ModelNode> &nodeList);
|
||||||
void auxiliaryDataChanged(const ModelNode &node, const QString &name, const QVariant &data);
|
void auxiliaryDataChanged(const ModelNode &node, const QString &name, const QVariant &data);
|
||||||
void customNotification(const AbstractView *view, const QString &identifier, const QList<ModelNode> &nodeList, const QList<QVariant> &data);
|
void customNotification(const AbstractView *view, const QString &identifier, const QList<ModelNode> &nodeList, const QList<QVariant> &data);
|
||||||
|
void customParserSourceChanged(const ModelNode &modelNode, const QString &newCustomParserSource);
|
||||||
|
|
||||||
void rewriterBeginTransaction();
|
void rewriterBeginTransaction();
|
||||||
void rewriterEndTransaction();
|
void rewriterEndTransaction();
|
||||||
|
|||||||
@@ -95,6 +95,8 @@ public:
|
|||||||
QString componentSource() const;
|
QString componentSource() const;
|
||||||
QString componentFileName() const;
|
QString componentFileName() const;
|
||||||
|
|
||||||
|
bool hasCustomParser() const;
|
||||||
|
|
||||||
bool availableInVersion(int majorVersion, int minorVersion) const;
|
bool availableInVersion(int majorVersion, int minorVersion) const;
|
||||||
bool isSubclassOf(const QString& type, int majorVersion, int minorVersio) const;
|
bool isSubclassOf(const QString& type, int majorVersion, int minorVersio) const;
|
||||||
|
|
||||||
|
|||||||
@@ -119,6 +119,7 @@ public:
|
|||||||
void selectedNodesChanged(const QList<ModelNode> &selectedNodeList, const QList<ModelNode> &lastSelectedNodeList);
|
void selectedNodesChanged(const QList<ModelNode> &selectedNodeList, const QList<ModelNode> &lastSelectedNodeList);
|
||||||
|
|
||||||
void importsChanged(const QList<Import> &addedImports, const QList<Import> &removedImports);
|
void importsChanged(const QList<Import> &addedImports, const QList<Import> &removedImports);
|
||||||
|
void customParserSourceChanged(const ModelNode &modelNode, const QString &newCustomParserSource);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
NodeInstance instanceForModelNode(const ModelNode &modelNode);
|
NodeInstance instanceForModelNode(const ModelNode &modelNode);
|
||||||
|
|||||||
@@ -143,6 +143,7 @@ public:
|
|||||||
void instancesRenderImageChanged(const QVector<ModelNode> &nodeList);
|
void instancesRenderImageChanged(const QVector<ModelNode> &nodeList);
|
||||||
void instancesPreviewImageChanged(const QVector<ModelNode> &nodeList);
|
void instancesPreviewImageChanged(const QVector<ModelNode> &nodeList);
|
||||||
void instancesChildrenChanged(const QVector<ModelNode> &nodeList);
|
void instancesChildrenChanged(const QVector<ModelNode> &nodeList);
|
||||||
|
void customParserSourceChanged(const ModelNode &modelNode, const QString &newCustomParserSource);
|
||||||
|
|
||||||
void rewriterBeginTransaction();
|
void rewriterBeginTransaction();
|
||||||
void rewriterEndTransaction();
|
void rewriterEndTransaction();
|
||||||
|
|||||||
@@ -0,0 +1,72 @@
|
|||||||
|
/**************************************************************************
|
||||||
|
**
|
||||||
|
** This file is part of Qt Creator
|
||||||
|
**
|
||||||
|
** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
|
||||||
|
**
|
||||||
|
** Contact: Nokia Corporation (info@qt.nokia.com)
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** GNU Lesser General Public License Usage
|
||||||
|
**
|
||||||
|
** This file may be used under the terms of the GNU Lesser General Public
|
||||||
|
** License version 2.1 as published by the Free Software Foundation and
|
||||||
|
** appearing in the file LICENSE.LGPL included in the packaging of this file.
|
||||||
|
** Please review the following information to ensure the GNU Lesser General
|
||||||
|
** Public License version 2.1 requirements will be met:
|
||||||
|
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||||
|
**
|
||||||
|
** In addition, as a special exception, Nokia gives you certain additional
|
||||||
|
** rights. These rights are described in the Nokia Qt LGPL Exception
|
||||||
|
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||||
|
**
|
||||||
|
** Other Usage
|
||||||
|
**
|
||||||
|
** Alternatively, this file may be used in accordance with the terms and
|
||||||
|
** conditions contained in a signed written agreement between you and Nokia.
|
||||||
|
**
|
||||||
|
** If you have questions regarding the use of this file, please contact
|
||||||
|
** Nokia at qt-info@nokia.com.
|
||||||
|
**
|
||||||
|
**************************************************************************/
|
||||||
|
|
||||||
|
#include "changecustomparsersourcecommand.h"
|
||||||
|
|
||||||
|
namespace QmlDesigner {
|
||||||
|
|
||||||
|
ChangeCustomParserSourceCommand::ChangeCustomParserSourceCommand()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
ChangeCustomParserSourceCommand::ChangeCustomParserSourceCommand(qint32 newInstanceId, const QString &newCustomParserSource)
|
||||||
|
: m_instanceId(newInstanceId), m_customParserSource(newCustomParserSource)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
qint32 ChangeCustomParserSourceCommand::instanceId() const
|
||||||
|
{
|
||||||
|
return m_instanceId;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString ChangeCustomParserSourceCommand::customParserSource() const
|
||||||
|
{
|
||||||
|
return m_customParserSource;
|
||||||
|
}
|
||||||
|
|
||||||
|
QDataStream &operator<<(QDataStream &out, const ChangeCustomParserSourceCommand &command)
|
||||||
|
{
|
||||||
|
out << command.instanceId();
|
||||||
|
out << command.customParserSource();
|
||||||
|
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
|
QDataStream &operator>>(QDataStream &in, ChangeCustomParserSourceCommand &command)
|
||||||
|
{
|
||||||
|
in >> command.m_instanceId;
|
||||||
|
in >> command.m_customParserSource;
|
||||||
|
|
||||||
|
return in;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace QmlDesigner
|
||||||
@@ -0,0 +1,61 @@
|
|||||||
|
/**************************************************************************
|
||||||
|
**
|
||||||
|
** This file is part of Qt Creator
|
||||||
|
**
|
||||||
|
** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
|
||||||
|
**
|
||||||
|
** Contact: Nokia Corporation (info@qt.nokia.com)
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** GNU Lesser General Public License Usage
|
||||||
|
**
|
||||||
|
** This file may be used under the terms of the GNU Lesser General Public
|
||||||
|
** License version 2.1 as published by the Free Software Foundation and
|
||||||
|
** appearing in the file LICENSE.LGPL included in the packaging of this file.
|
||||||
|
** Please review the following information to ensure the GNU Lesser General
|
||||||
|
** Public License version 2.1 requirements will be met:
|
||||||
|
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||||
|
**
|
||||||
|
** In addition, as a special exception, Nokia gives you certain additional
|
||||||
|
** rights. These rights are described in the Nokia Qt LGPL Exception
|
||||||
|
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||||
|
**
|
||||||
|
** Other Usage
|
||||||
|
**
|
||||||
|
** Alternatively, this file may be used in accordance with the terms and
|
||||||
|
** conditions contained in a signed written agreement between you and Nokia.
|
||||||
|
**
|
||||||
|
** If you have questions regarding the use of this file, please contact
|
||||||
|
** Nokia at qt-info@nokia.com.
|
||||||
|
**
|
||||||
|
**************************************************************************/
|
||||||
|
|
||||||
|
#ifndef CHANGECUSTOMPARSERSOURCECOMMAND_H
|
||||||
|
#define CHANGECUSTOMPARSERSOURCECOMMAND_H
|
||||||
|
|
||||||
|
#include <QMetaType>
|
||||||
|
|
||||||
|
namespace QmlDesigner {
|
||||||
|
|
||||||
|
class ChangeCustomParserSourceCommand
|
||||||
|
{
|
||||||
|
friend QDataStream &operator>>(QDataStream &in, ChangeCustomParserSourceCommand &command);
|
||||||
|
public:
|
||||||
|
ChangeCustomParserSourceCommand();
|
||||||
|
ChangeCustomParserSourceCommand(qint32 instanceId, const QString &customParserSource);
|
||||||
|
qint32 instanceId() const;
|
||||||
|
QString customParserSource() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
qint32 m_instanceId;
|
||||||
|
QString m_customParserSource;
|
||||||
|
};
|
||||||
|
|
||||||
|
QDataStream &operator<<(QDataStream &out, const ChangeCustomParserSourceCommand &command);
|
||||||
|
QDataStream &operator>>(QDataStream &in, ChangeCustomParserSourceCommand &command);
|
||||||
|
|
||||||
|
} // namespace QmlDesigner
|
||||||
|
|
||||||
|
Q_DECLARE_METATYPE(QmlDesigner::ChangeCustomParserSourceCommand)
|
||||||
|
|
||||||
|
#endif // CHANGECUSTOMPARSERSOURCECOMMAND_H
|
||||||
@@ -73,17 +73,19 @@ bool ComponentNodeInstance::hasContent() const
|
|||||||
void ComponentNodeInstance::setPropertyVariant(const QString &name, const QVariant &value)
|
void ComponentNodeInstance::setPropertyVariant(const QString &name, const QVariant &value)
|
||||||
{
|
{
|
||||||
if (name == "__component_data") {
|
if (name == "__component_data") {
|
||||||
QByteArray data(value.toByteArray());
|
|
||||||
QByteArray importArray;
|
QByteArray importArray;
|
||||||
foreach(const QString &import, nodeInstanceServer()->imports()) {
|
foreach(const QString &import, nodeInstanceServer()->imports()) {
|
||||||
importArray.append(import.toUtf8());
|
importArray.append(import.toUtf8());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QByteArray data(value.toByteArray());
|
||||||
|
|
||||||
data.prepend(importArray);
|
data.prepend(importArray);
|
||||||
|
data.append("\n");
|
||||||
|
|
||||||
component()->setData(data, nodeInstanceServer()->fileUrl());
|
component()->setData(data, QUrl(nodeInstanceServer()->fileUrl().toString() + "_"+ id()));
|
||||||
setId(id());
|
setId(id());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (component()->isError()) {
|
if (component()->isError()) {
|
||||||
|
|||||||
@@ -39,8 +39,9 @@ InstanceContainer::InstanceContainer()
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
InstanceContainer::InstanceContainer(qint32 instanceId, const QString &type, int majorNumber, int minorNumber, const QString &componentPath)
|
InstanceContainer::InstanceContainer(qint32 instanceId, const QString &type, int majorNumber, int minorNumber, const QString &componentPath, const QString &customParserSource)
|
||||||
: m_instanceId(instanceId), m_type(type), m_majorNumber(majorNumber), m_minorNumber(minorNumber), m_componentPath(componentPath)
|
: m_instanceId(instanceId), m_type(type), m_majorNumber(majorNumber), m_minorNumber(minorNumber), m_componentPath(componentPath),
|
||||||
|
m_customParserSource(customParserSource)
|
||||||
{
|
{
|
||||||
m_type.replace(QLatin1Char('.'), QLatin1Char('/'));
|
m_type.replace(QLatin1Char('.'), QLatin1Char('/'));
|
||||||
}
|
}
|
||||||
@@ -70,6 +71,11 @@ QString InstanceContainer::componentPath() const
|
|||||||
return m_componentPath;
|
return m_componentPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString InstanceContainer::customParserSource() const
|
||||||
|
{
|
||||||
|
return m_customParserSource;
|
||||||
|
}
|
||||||
|
|
||||||
QDataStream &operator<<(QDataStream &out, const InstanceContainer &container)
|
QDataStream &operator<<(QDataStream &out, const InstanceContainer &container)
|
||||||
{
|
{
|
||||||
out << container.instanceId();
|
out << container.instanceId();
|
||||||
@@ -77,6 +83,7 @@ QDataStream &operator<<(QDataStream &out, const InstanceContainer &container)
|
|||||||
out << container.majorNumber();
|
out << container.majorNumber();
|
||||||
out << container.minorNumber();
|
out << container.minorNumber();
|
||||||
out << container.componentPath();
|
out << container.componentPath();
|
||||||
|
out << container.customParserSource();
|
||||||
|
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
@@ -89,6 +96,7 @@ QDataStream &operator>>(QDataStream &in, InstanceContainer &container)
|
|||||||
in >> container.m_majorNumber;
|
in >> container.m_majorNumber;
|
||||||
in >> container.m_minorNumber;
|
in >> container.m_minorNumber;
|
||||||
in >> container.m_componentPath;
|
in >> container.m_componentPath;
|
||||||
|
in >> container.m_customParserSource;
|
||||||
|
|
||||||
return in;
|
return in;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,13 +49,14 @@ class InstanceContainer
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
InstanceContainer();
|
InstanceContainer();
|
||||||
InstanceContainer(qint32 instanceId, const QString &type, int majorNumber, int minorNumber, const QString &componentPath);
|
InstanceContainer(qint32 instanceId, const QString &type, int majorNumber, int minorNumber, const QString &componentPath, const QString &customParserSource);
|
||||||
|
|
||||||
qint32 instanceId() const;
|
qint32 instanceId() const;
|
||||||
QString type() const;
|
QString type() const;
|
||||||
int majorNumber() const;
|
int majorNumber() const;
|
||||||
int minorNumber() const;
|
int minorNumber() const;
|
||||||
QString componentPath() const;
|
QString componentPath() const;
|
||||||
|
QString customParserSource() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
qint32 m_instanceId;
|
qint32 m_instanceId;
|
||||||
@@ -63,6 +64,7 @@ private:
|
|||||||
int m_majorNumber;
|
int m_majorNumber;
|
||||||
int m_minorNumber;
|
int m_minorNumber;
|
||||||
QString m_componentPath;
|
QString m_componentPath;
|
||||||
|
QString m_customParserSource;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace QmlDesigner
|
} // namespace QmlDesigner
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ HEADERS += $$PWD/addimportcommand.h
|
|||||||
HEADERS += $$PWD/changebindingscommand.h
|
HEADERS += $$PWD/changebindingscommand.h
|
||||||
HEADERS += $$PWD/changefileurlcommand.h
|
HEADERS += $$PWD/changefileurlcommand.h
|
||||||
HEADERS += $$PWD/changeidscommand.h
|
HEADERS += $$PWD/changeidscommand.h
|
||||||
|
HEADERS += $$PWD/changecustomparsersourcecommand.h
|
||||||
HEADERS += $$PWD/changestatecommand.h
|
HEADERS += $$PWD/changestatecommand.h
|
||||||
HEADERS += $$PWD/changevaluescommand.h
|
HEADERS += $$PWD/changevaluescommand.h
|
||||||
HEADERS += $$PWD/childrenchangeeventfilter.h
|
HEADERS += $$PWD/childrenchangeeventfilter.h
|
||||||
@@ -66,6 +67,7 @@ SOURCES += $$PWD/addimportcommand.cpp
|
|||||||
SOURCES += $$PWD/changebindingscommand.cpp
|
SOURCES += $$PWD/changebindingscommand.cpp
|
||||||
SOURCES += $$PWD/changefileurlcommand.cpp
|
SOURCES += $$PWD/changefileurlcommand.cpp
|
||||||
SOURCES += $$PWD/changeidscommand.cpp
|
SOURCES += $$PWD/changeidscommand.cpp
|
||||||
|
SOURCES += $$PWD/changecustomparsersourcecommand.cpp
|
||||||
SOURCES += $$PWD/changestatecommand.cpp
|
SOURCES += $$PWD/changestatecommand.cpp
|
||||||
SOURCES += $$PWD/changevaluescommand.cpp
|
SOURCES += $$PWD/changevaluescommand.cpp
|
||||||
SOURCES += $$PWD/childrenchangeeventfilter.cpp
|
SOURCES += $$PWD/childrenchangeeventfilter.cpp
|
||||||
|
|||||||
@@ -67,6 +67,7 @@
|
|||||||
#include "imagecontainer.h"
|
#include "imagecontainer.h"
|
||||||
#include "statepreviewimagechangedcommand.h"
|
#include "statepreviewimagechangedcommand.h"
|
||||||
#include "componentcompletedcommand.h"
|
#include "componentcompletedcommand.h"
|
||||||
|
#include "changecustomparsersourcecommand.h"
|
||||||
|
|
||||||
namespace QmlDesigner {
|
namespace QmlDesigner {
|
||||||
|
|
||||||
@@ -263,6 +264,11 @@ void NodeInstanceClientProxy::completeComponent(const CompleteComponentCommand &
|
|||||||
nodeInstanceServer()->completeComponent(command);
|
nodeInstanceServer()->completeComponent(command);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NodeInstanceClientProxy::changeCustomParserSource(ChangeCustomParserSourceCommand &command)
|
||||||
|
{
|
||||||
|
nodeInstanceServer()->changeCustomParserSource(command);
|
||||||
|
}
|
||||||
|
|
||||||
void NodeInstanceClientProxy::dispatchCommand(const QVariant &command)
|
void NodeInstanceClientProxy::dispatchCommand(const QVariant &command)
|
||||||
{
|
{
|
||||||
static const int createInstancesCommandType = QMetaType::type("CreateInstancesCommand");
|
static const int createInstancesCommandType = QMetaType::type("CreateInstancesCommand");
|
||||||
@@ -279,6 +285,7 @@ void NodeInstanceClientProxy::dispatchCommand(const QVariant &command)
|
|||||||
static const int addImportCommandType = QMetaType::type("AddImportCommand");
|
static const int addImportCommandType = QMetaType::type("AddImportCommand");
|
||||||
static const int completeComponentCommandType = QMetaType::type("CompleteComponentCommand");
|
static const int completeComponentCommandType = QMetaType::type("CompleteComponentCommand");
|
||||||
static const int synchronizeCommandType = QMetaType::type("SynchronizeCommand");
|
static const int synchronizeCommandType = QMetaType::type("SynchronizeCommand");
|
||||||
|
static const int changeCustomParserSourceCommandType = QMetaType::type("ChangeCustomParserSourceCommand");
|
||||||
|
|
||||||
if (command.userType() == createInstancesCommandType) {
|
if (command.userType() == createInstancesCommandType) {
|
||||||
createInstances(command.value<CreateInstancesCommand>());
|
createInstances(command.value<CreateInstancesCommand>());
|
||||||
@@ -306,6 +313,8 @@ void NodeInstanceClientProxy::dispatchCommand(const QVariant &command)
|
|||||||
addImport(command.value<AddImportCommand>());
|
addImport(command.value<AddImportCommand>());
|
||||||
else if (command.userType() == completeComponentCommandType)
|
else if (command.userType() == completeComponentCommandType)
|
||||||
completeComponent(command.value<CompleteComponentCommand>());
|
completeComponent(command.value<CompleteComponentCommand>());
|
||||||
|
else if (command.userType() == changeCustomParserSourceCommandType)
|
||||||
|
changeCustomParserSource(command.value<ChangeCustomParserSourceCommand>());
|
||||||
else if (command.userType() == synchronizeCommandType) {
|
else if (command.userType() == synchronizeCommandType) {
|
||||||
SynchronizeCommand synchronizeCommand = command.value<SynchronizeCommand>();
|
SynchronizeCommand synchronizeCommand = command.value<SynchronizeCommand>();
|
||||||
m_synchronizeId = synchronizeCommand.synchronizeId();
|
m_synchronizeId = synchronizeCommand.synchronizeId();
|
||||||
|
|||||||
@@ -59,6 +59,7 @@ class RemovePropertiesCommand;
|
|||||||
class AddImportCommand;
|
class AddImportCommand;
|
||||||
class CompleteComponentCommand;
|
class CompleteComponentCommand;
|
||||||
class ChangeStateCommand;
|
class ChangeStateCommand;
|
||||||
|
class ChangeCustomParserSourceCommand;
|
||||||
|
|
||||||
class NodeInstanceClientProxy : public QObject, public NodeInstanceClientInterface
|
class NodeInstanceClientProxy : public QObject, public NodeInstanceClientInterface
|
||||||
{
|
{
|
||||||
@@ -96,6 +97,7 @@ protected:
|
|||||||
void changeState(const ChangeStateCommand &command);
|
void changeState(const ChangeStateCommand &command);
|
||||||
void addImport(const AddImportCommand &command);
|
void addImport(const AddImportCommand &command);
|
||||||
void completeComponent(const CompleteComponentCommand &command);
|
void completeComponent(const CompleteComponentCommand &command);
|
||||||
|
void changeCustomParserSource(ChangeCustomParserSourceCommand &command);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void readDataStream();
|
void readDataStream();
|
||||||
|
|||||||
@@ -76,6 +76,7 @@
|
|||||||
#include "completecomponentcommand.h"
|
#include "completecomponentcommand.h"
|
||||||
#include "componentcompletedcommand.h"
|
#include "componentcompletedcommand.h"
|
||||||
#include "createscenecommand.h"
|
#include "createscenecommand.h"
|
||||||
|
#include "changecustomparsersourcecommand.h"
|
||||||
|
|
||||||
#include "dummycontextobject.h"
|
#include "dummycontextobject.h"
|
||||||
|
|
||||||
@@ -345,6 +346,16 @@ void NodeInstanceServer::completeComponent(const CompleteComponentCommand &comma
|
|||||||
startRenderTimer();
|
startRenderTimer();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NodeInstanceServer::changeCustomParserSource(ChangeCustomParserSourceCommand &command)
|
||||||
|
{
|
||||||
|
if (hasInstanceForId(command.instanceId())) {
|
||||||
|
ServerNodeInstance instance = instanceForId(command.instanceId());
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
|
startRenderTimer();
|
||||||
|
}
|
||||||
|
|
||||||
void NodeInstanceServer::addImports(const QVector<AddImportContainer> &containerVector)
|
void NodeInstanceServer::addImports(const QVector<AddImportContainer> &containerVector)
|
||||||
{
|
{
|
||||||
foreach (const AddImportContainer &container, containerVector) {
|
foreach (const AddImportContainer &container, containerVector) {
|
||||||
|
|||||||
@@ -90,6 +90,7 @@ public:
|
|||||||
void changeState(const ChangeStateCommand &command);
|
void changeState(const ChangeStateCommand &command);
|
||||||
void addImport(const AddImportCommand &command);
|
void addImport(const AddImportCommand &command);
|
||||||
void completeComponent(const CompleteComponentCommand &command);
|
void completeComponent(const CompleteComponentCommand &command);
|
||||||
|
void changeCustomParserSource(ChangeCustomParserSourceCommand &command);
|
||||||
|
|
||||||
ServerNodeInstance instanceForId(qint32 id) const;
|
ServerNodeInstance instanceForId(qint32 id) const;
|
||||||
bool hasInstanceForId(qint32 id) const;
|
bool hasInstanceForId(qint32 id) const;
|
||||||
|
|||||||
@@ -50,6 +50,7 @@
|
|||||||
#include "changestatecommand.h"
|
#include "changestatecommand.h"
|
||||||
#include "completecomponentcommand.h"
|
#include "completecomponentcommand.h"
|
||||||
#include "addimportcontainer.h"
|
#include "addimportcontainer.h"
|
||||||
|
#include "changecustomparsersourcecommand.h"
|
||||||
|
|
||||||
#include "informationchangedcommand.h"
|
#include "informationchangedcommand.h"
|
||||||
#include "pixmapchangedcommand.h"
|
#include "pixmapchangedcommand.h"
|
||||||
@@ -165,6 +166,10 @@ void NodeInstanceServerInterface::registerCommands()
|
|||||||
|
|
||||||
qRegisterMetaType<SynchronizeCommand>("SynchronizeCommand");
|
qRegisterMetaType<SynchronizeCommand>("SynchronizeCommand");
|
||||||
qRegisterMetaTypeStreamOperators<SynchronizeCommand>("SynchronizeCommand");
|
qRegisterMetaTypeStreamOperators<SynchronizeCommand>("SynchronizeCommand");
|
||||||
|
|
||||||
|
qRegisterMetaType<ChangeCustomParserSourceCommand>("ChangeCustomParserSourceCommand");
|
||||||
|
qRegisterMetaTypeStreamOperators<ChangeCustomParserSourceCommand>("ChangeCustomParserSourceCommand");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -55,6 +55,7 @@
|
|||||||
#include "changestatecommand.h"
|
#include "changestatecommand.h"
|
||||||
#include "addimportcommand.h"
|
#include "addimportcommand.h"
|
||||||
#include "completecomponentcommand.h"
|
#include "completecomponentcommand.h"
|
||||||
|
#include "changecustomparsersourcecommand.h"
|
||||||
|
|
||||||
#include "informationchangedcommand.h"
|
#include "informationchangedcommand.h"
|
||||||
#include "pixmapchangedcommand.h"
|
#include "pixmapchangedcommand.h"
|
||||||
@@ -451,4 +452,10 @@ void NodeInstanceServerProxy::completeComponent(const CompleteComponentCommand &
|
|||||||
{
|
{
|
||||||
writeCommand(QVariant::fromValue(command));
|
writeCommand(QVariant::fromValue(command));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NodeInstanceServerProxy::changeCustomParserSource(ChangeCustomParserSourceCommand &command)
|
||||||
|
{
|
||||||
|
writeCommand(QVariant::fromValue(command));
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace QmlDesigner
|
} // namespace QmlDesigner
|
||||||
|
|||||||
@@ -70,6 +70,7 @@ public:
|
|||||||
void changeState(const ChangeStateCommand &command);
|
void changeState(const ChangeStateCommand &command);
|
||||||
void addImport(const AddImportCommand &command);
|
void addImport(const AddImportCommand &command);
|
||||||
void completeComponent(const CompleteComponentCommand &command);
|
void completeComponent(const CompleteComponentCommand &command);
|
||||||
|
void changeCustomParserSource(ChangeCustomParserSourceCommand &command);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void writeCommand(const QVariant &command);
|
void writeCommand(const QVariant &command);
|
||||||
|
|||||||
@@ -66,6 +66,7 @@
|
|||||||
#include "changevaluescommand.h"
|
#include "changevaluescommand.h"
|
||||||
#include "changebindingscommand.h"
|
#include "changebindingscommand.h"
|
||||||
#include "changeidscommand.h"
|
#include "changeidscommand.h"
|
||||||
|
#include "changecustomparsersourcecommand.h"
|
||||||
#include "removeinstancescommand.h"
|
#include "removeinstancescommand.h"
|
||||||
#include "removepropertiescommand.h"
|
#include "removepropertiescommand.h"
|
||||||
#include "valueschangedcommand.h"
|
#include "valueschangedcommand.h"
|
||||||
@@ -515,6 +516,15 @@ void NodeInstanceView::customNotification(const AbstractView *view, const QStrin
|
|||||||
restartProcess();
|
restartProcess();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NodeInstanceView::customParserSourceChanged(const ModelNode &node, const QString & newCustomParserSource)
|
||||||
|
{
|
||||||
|
if (hasInstanceForNode(node)) {
|
||||||
|
NodeInstance instance = instanceForNode(node);
|
||||||
|
ChangeCustomParserSourceCommand changeCustomParserSourceCommand(instance.instanceId(), newCustomParserSource);
|
||||||
|
nodeInstanceServer()->changeCustomParserSource(changeCustomParserSourceCommand);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void NodeInstanceView::rewriterBeginTransaction()
|
void NodeInstanceView::rewriterBeginTransaction()
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -747,7 +757,9 @@ CreateSceneCommand NodeInstanceView::createCreateSceneCommand()
|
|||||||
|
|
||||||
QVector<InstanceContainer> instanceContainerList;
|
QVector<InstanceContainer> instanceContainerList;
|
||||||
foreach(const NodeInstance &instance, instanceList) {
|
foreach(const NodeInstance &instance, instanceList) {
|
||||||
InstanceContainer container(instance.instanceId(), instance.modelNode().type(), instance.modelNode().majorVersion(), instance.modelNode().minorVersion(), instance.modelNode().metaInfo().componentFileName());
|
InstanceContainer container(instance.instanceId(), instance.modelNode().type(), instance.modelNode().majorVersion(),
|
||||||
|
instance.modelNode().minorVersion(), instance.modelNode().metaInfo().componentFileName(),
|
||||||
|
instance.modelNode().customParserSource());
|
||||||
instanceContainerList.append(container);
|
instanceContainerList.append(container);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -858,7 +870,8 @@ CreateInstancesCommand NodeInstanceView::createCreateInstancesCommand(const QLis
|
|||||||
{
|
{
|
||||||
QVector<InstanceContainer> containerList;
|
QVector<InstanceContainer> containerList;
|
||||||
foreach(const NodeInstance &instance, instanceList) {
|
foreach(const NodeInstance &instance, instanceList) {
|
||||||
InstanceContainer container(instance.instanceId(), instance.modelNode().type(), instance.modelNode().majorVersion(), instance.modelNode().minorVersion(), instance.modelNode().metaInfo().componentFileName());
|
InstanceContainer container(instance.instanceId(), instance.modelNode().type(), instance.modelNode().majorVersion(), instance.modelNode().minorVersion(),
|
||||||
|
instance.modelNode().metaInfo().componentFileName(), instance.modelNode().customParserSource());
|
||||||
containerList.append(container);
|
containerList.append(container);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -736,17 +736,46 @@ void tweakObjects(QObject *object)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
QObject *createComponent(const QString &componentPath, QDeclarativeContext *context)
|
static QObject *createComponent(const QString &componentPath, QDeclarativeContext *context)
|
||||||
{
|
{
|
||||||
QDeclarativeComponent component(context->engine(), QUrl::fromLocalFile(componentPath));
|
QDeclarativeComponent component(context->engine(), QUrl::fromLocalFile(componentPath));
|
||||||
QObject *object = component.beginCreate(context);
|
QObject *object = component.beginCreate(context);
|
||||||
tweakObjects(object);
|
tweakObjects(object);
|
||||||
component.completeCreate();
|
component.completeCreate();
|
||||||
|
|
||||||
|
if (component.isError()) {
|
||||||
|
qDebug() << componentPath;
|
||||||
|
foreach(const QDeclarativeError &error, component.errors())
|
||||||
|
qDebug() << error;
|
||||||
|
}
|
||||||
|
|
||||||
return object;
|
return object;
|
||||||
}
|
}
|
||||||
|
|
||||||
QObject *createPrimitive(const QString &typeName, int majorNumber, int minorNumber, QDeclarativeContext *context)
|
static QObject *createCustomParserObject(const QString &customParserSource, QStringList imports, QDeclarativeContext *context)
|
||||||
|
{
|
||||||
|
QDeclarativeComponent component(context->engine());
|
||||||
|
|
||||||
|
QByteArray importArray;
|
||||||
|
foreach(const QString &import, imports) {
|
||||||
|
importArray.append(import.toUtf8());
|
||||||
|
}
|
||||||
|
|
||||||
|
QByteArray data(customParserSource.toUtf8());
|
||||||
|
|
||||||
|
data.prepend(importArray);
|
||||||
|
|
||||||
|
component.setData(data, context->baseUrl().resolved(QUrl("createCustomParserObject.qml")));
|
||||||
|
|
||||||
|
QObject *object = component.beginCreate(context);
|
||||||
|
tweakObjects(object);
|
||||||
|
component.completeCreate();
|
||||||
|
|
||||||
|
return object;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static QObject *createPrimitive(const QString &typeName, int majorNumber, int minorNumber, QDeclarativeContext *context)
|
||||||
{
|
{
|
||||||
QObject *object = 0;
|
QObject *object = 0;
|
||||||
QDeclarativeType *type = QDeclarativeMetaType::qmlType(typeName.toUtf8(), majorNumber, minorNumber);
|
QDeclarativeType *type = QDeclarativeMetaType::qmlType(typeName.toUtf8(), majorNumber, minorNumber);
|
||||||
@@ -770,11 +799,13 @@ QObject *createPrimitive(const QString &typeName, int majorNumber, int minorNumb
|
|||||||
return object;
|
return object;
|
||||||
}
|
}
|
||||||
|
|
||||||
QObject* ObjectNodeInstance::createObject(const QString &typeName, int majorNumber, int minorNumber, const QString &componentPath, QDeclarativeContext *context)
|
QObject* ObjectNodeInstance::createObject(const QString &typeName, int majorNumber, int minorNumber, const QString &componentPath, const QString &customParserSource, NodeInstanceServer* nodeInstanceServer, QDeclarativeContext *context)
|
||||||
{
|
{
|
||||||
QObject *object = 0;
|
QObject *object = 0;
|
||||||
if (componentPath.isEmpty()) {
|
if (componentPath.isEmpty() && customParserSource.isEmpty()) {
|
||||||
object = createPrimitive(typeName, majorNumber, minorNumber, context);
|
object = createPrimitive(typeName, majorNumber, minorNumber, context);
|
||||||
|
} else if (componentPath.isEmpty()) {
|
||||||
|
object = createCustomParserObject(customParserSource, nodeInstanceServer->imports(), context);
|
||||||
} else {
|
} else {
|
||||||
object = createComponent(componentPath, context);
|
object = createComponent(componentPath, context);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ public:
|
|||||||
//void setModelNode(const ModelNode &node);
|
//void setModelNode(const ModelNode &node);
|
||||||
|
|
||||||
static Pointer create(QObject *objectToBeWrapped);
|
static Pointer create(QObject *objectToBeWrapped);
|
||||||
static QObject* createObject(const QString &typeName, int majorNumber, int minorNumber, const QString &componentPath, QDeclarativeContext *context);
|
static QObject* createObject(const QString &typeName, int majorNumber, int minorNumber, const QString &componentPath, const QString &customParserSource, NodeInstanceServer* nodeInstanceServer, QDeclarativeContext *context);
|
||||||
|
|
||||||
void setInstanceId(qint32 id);
|
void setInstanceId(qint32 id);
|
||||||
qint32 instanceId() const;
|
qint32 instanceId() const;
|
||||||
|
|||||||
@@ -196,7 +196,9 @@ ServerNodeInstance ServerNodeInstance::create(NodeInstanceServer *nodeInstanceSe
|
|||||||
|
|
||||||
QDeclarativeContext *context = nodeInstanceServer->context();
|
QDeclarativeContext *context = nodeInstanceServer->context();
|
||||||
|
|
||||||
QObject *object = Internal::ObjectNodeInstance::createObject(instanceContainer.type(), instanceContainer.majorNumber(), instanceContainer.minorNumber(), instanceContainer.componentPath(), context);
|
QObject *object = Internal::ObjectNodeInstance::createObject(instanceContainer.type(), instanceContainer.majorNumber(),
|
||||||
|
instanceContainer.minorNumber(), instanceContainer.componentPath(),
|
||||||
|
instanceContainer.customParserSource(), nodeInstanceServer, context);
|
||||||
|
|
||||||
ServerNodeInstance instance(createInstance(object));
|
ServerNodeInstance instance(createInstance(object));
|
||||||
|
|
||||||
|
|||||||
@@ -999,6 +999,11 @@ QString NodeMetaInfo::componentFileName() const
|
|||||||
return NodeMetaInfo::m_privateData->componentFileName();
|
return NodeMetaInfo::m_privateData->componentFileName();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool NodeMetaInfo::hasCustomParser() const
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
bool NodeMetaInfo::availableInVersion(int majorVersion, int minorVersion) const
|
bool NodeMetaInfo::availableInVersion(int majorVersion, int minorVersion) const
|
||||||
{
|
{
|
||||||
if (majorVersion == -1 && minorVersion == -1)
|
if (majorVersion == -1 && minorVersion == -1)
|
||||||
|
|||||||
@@ -80,9 +80,10 @@ RewriterTransaction AbstractView::beginRewriterTransaction()
|
|||||||
ModelNode AbstractView::createModelNode(const QString &typeString,
|
ModelNode AbstractView::createModelNode(const QString &typeString,
|
||||||
int majorVersion,
|
int majorVersion,
|
||||||
int minorVersion,
|
int minorVersion,
|
||||||
const QList<QPair<QString, QVariant> > &propertyList)
|
const QList<QPair<QString, QVariant> > &propertyList,
|
||||||
|
const QString &customParserSource)
|
||||||
{
|
{
|
||||||
return ModelNode(model()->m_d->createNode(typeString, majorVersion, minorVersion, propertyList), model(), this);
|
return ModelNode(model()->m_d->createNode(typeString, majorVersion, minorVersion, propertyList, customParserSource), model(), this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -342,5 +342,15 @@ qint32 InternalNode::internalId() const
|
|||||||
return m_internalId;
|
return m_internalId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void InternalNode::setCustomParserSource(const QString &customParserSource)
|
||||||
|
{
|
||||||
|
m_customParserSource = customParserSource;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString InternalNode::customParserSource() const
|
||||||
|
{
|
||||||
|
return m_customParserSource;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -121,6 +121,9 @@ public:
|
|||||||
|
|
||||||
qint32 internalId() const;
|
qint32 internalId() const;
|
||||||
|
|
||||||
|
void setCustomParserSource(const QString&);
|
||||||
|
QString customParserSource() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Pointer internalPointer() const;
|
Pointer internalPointer() const;
|
||||||
void setInternalWeakPointer(const Pointer &pointer);
|
void setInternalWeakPointer(const Pointer &pointer);
|
||||||
@@ -144,6 +147,8 @@ private:
|
|||||||
|
|
||||||
QHash<QString, InternalPropertyPointer> m_namePropertyHash;
|
QHash<QString, InternalPropertyPointer> m_namePropertyHash;
|
||||||
QStringList m_scriptFunctionList;
|
QStringList m_scriptFunctionList;
|
||||||
|
|
||||||
|
QString m_customParserSource;
|
||||||
};
|
};
|
||||||
|
|
||||||
uint qHash(const InternalNodePointer& node);
|
uint qHash(const InternalNodePointer& node);
|
||||||
|
|||||||
@@ -94,7 +94,7 @@ ModelPrivate::ModelPrivate(Model *model) :
|
|||||||
m_writeLock(false),
|
m_writeLock(false),
|
||||||
m_internalIdCounter(1)
|
m_internalIdCounter(1)
|
||||||
{
|
{
|
||||||
m_rootInternalNode = createNode("QtQuick/Item", 1, 0, PropertyListType(), true);
|
m_rootInternalNode = createNode("QtQuick/Item", 1, 0, PropertyListType(), QString(), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
ModelPrivate::~ModelPrivate()
|
ModelPrivate::~ModelPrivate()
|
||||||
@@ -202,6 +202,7 @@ InternalNode::Pointer ModelPrivate::createNode(const QString &typeString,
|
|||||||
int majorVersion,
|
int majorVersion,
|
||||||
int minorVersion,
|
int minorVersion,
|
||||||
const QList<QPair<QString, QVariant> > &propertyList,
|
const QList<QPair<QString, QVariant> > &propertyList,
|
||||||
|
const QString &customParserSource,
|
||||||
bool isRootNode)
|
bool isRootNode)
|
||||||
{
|
{
|
||||||
if (typeString.isEmpty())
|
if (typeString.isEmpty())
|
||||||
@@ -224,6 +225,9 @@ InternalNode::Pointer ModelPrivate::createNode(const QString &typeString,
|
|||||||
m_nodeSet.insert(newInternalNodePointer);
|
m_nodeSet.insert(newInternalNodePointer);
|
||||||
m_internalIdNodeHash.insert(newInternalNodePointer->internalId(), newInternalNodePointer);
|
m_internalIdNodeHash.insert(newInternalNodePointer->internalId(), newInternalNodePointer);
|
||||||
|
|
||||||
|
if (!customParserSource.isNull())
|
||||||
|
newInternalNodePointer->setCustomParserSource(customParserSource);
|
||||||
|
|
||||||
notifyNodeCreated(newInternalNodePointer);
|
notifyNodeCreated(newInternalNodePointer);
|
||||||
|
|
||||||
return newInternalNodePointer;
|
return newInternalNodePointer;
|
||||||
@@ -355,6 +359,38 @@ void ModelPrivate::notifyAuxiliaryDataChanged(const InternalNodePointer &interna
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ModelPrivate::notifyCustomParserSourceChanged(const InternalNodePointer &internalNode, const QString &newCustomParserSource)
|
||||||
|
{
|
||||||
|
bool resetModel = false;
|
||||||
|
QString description;
|
||||||
|
|
||||||
|
try {
|
||||||
|
if (rewriterView()) {
|
||||||
|
ModelNode node(internalNode, model(), rewriterView());
|
||||||
|
rewriterView()->customParserSourceChanged(node, newCustomParserSource);
|
||||||
|
}
|
||||||
|
} catch (RewritingException &e) {
|
||||||
|
description = e.description();
|
||||||
|
resetModel = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (const QWeakPointer<AbstractView> &view, m_viewList) {
|
||||||
|
Q_ASSERT(view != 0);
|
||||||
|
ModelNode node(internalNode, model(), view.data());
|
||||||
|
view->customParserSourceChanged(node, newCustomParserSource);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (nodeInstanceView()) {
|
||||||
|
ModelNode node(internalNode, model(), nodeInstanceView());
|
||||||
|
nodeInstanceView()->customParserSourceChanged(node, newCustomParserSource);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (resetModel) {
|
||||||
|
resetModelByRewriter(description);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void ModelPrivate::notifyRootNodeTypeChanged(const QString &type, int majorVersion, int minorVersion)
|
void ModelPrivate::notifyRootNodeTypeChanged(const QString &type, int majorVersion, int minorVersion)
|
||||||
{
|
{
|
||||||
bool resetModel = false;
|
bool resetModel = false;
|
||||||
@@ -1456,6 +1492,12 @@ void ModelPrivate::setScriptFunctions(const InternalNode::Pointer &internalNode,
|
|||||||
notifyScriptFunctionsChanged(internalNode, scriptFunctionList);
|
notifyScriptFunctionsChanged(internalNode, scriptFunctionList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ModelPrivate::setCustomParserSource(const InternalNodePointer &internalNode, const QString &customParserSource)
|
||||||
|
{
|
||||||
|
internalNode->setCustomParserSource(customParserSource);
|
||||||
|
notifyCustomParserSourceChanged(internalNode, customParserSource);
|
||||||
|
}
|
||||||
|
|
||||||
void ModelPrivate::changeNodeOrder(const InternalNode::Pointer &internalParentNode, const QString &listPropertyName, int from, int to)
|
void ModelPrivate::changeNodeOrder(const InternalNode::Pointer &internalParentNode, const QString &listPropertyName, int from, int to)
|
||||||
{
|
{
|
||||||
InternalNodeListProperty::Pointer nodeList(internalParentNode->nodeListProperty(listPropertyName));
|
InternalNodeListProperty::Pointer nodeList(internalParentNode->nodeListProperty(listPropertyName));
|
||||||
|
|||||||
@@ -105,6 +105,7 @@ public:
|
|||||||
int majorVersion,
|
int majorVersion,
|
||||||
int minorVersion,
|
int minorVersion,
|
||||||
const QList<QPair<QString, QVariant> > &propertyList,
|
const QList<QPair<QString, QVariant> > &propertyList,
|
||||||
|
const QString &customParserSource,
|
||||||
bool isRootNode = false);
|
bool isRootNode = false);
|
||||||
|
|
||||||
|
|
||||||
@@ -142,6 +143,7 @@ public:
|
|||||||
|
|
||||||
void notifyNodeOrderChanged(const InternalNodeListPropertyPointer &internalListPropertyPointer, const InternalNodePointer &internalNodePointer, int oldIndex);
|
void notifyNodeOrderChanged(const InternalNodeListPropertyPointer &internalListPropertyPointer, const InternalNodePointer &internalNodePointer, int oldIndex);
|
||||||
void notifyAuxiliaryDataChanged(const InternalNodePointer &internalNode, const QString &name, const QVariant &data);
|
void notifyAuxiliaryDataChanged(const InternalNodePointer &internalNode, const QString &name, const QVariant &data);
|
||||||
|
void notifyCustomParserSourceChanged(const InternalNodePointer &internalNode, const QString &newCustomParserSource);
|
||||||
|
|
||||||
void notifyRootNodeTypeChanged(const QString &type, int majorVersion, int minorVersion);
|
void notifyRootNodeTypeChanged(const QString &type, int majorVersion, int minorVersion);
|
||||||
|
|
||||||
@@ -194,6 +196,7 @@ public:
|
|||||||
void clearParent(const InternalNodePointer &internalNode);
|
void clearParent(const InternalNodePointer &internalNode);
|
||||||
void changeRootNodeType(const QString &type, int majorVersion, int minorVersion);
|
void changeRootNodeType(const QString &type, int majorVersion, int minorVersion);
|
||||||
void setScriptFunctions(const InternalNodePointer &internalNode, const QStringList &scriptFunctionList);
|
void setScriptFunctions(const InternalNodePointer &internalNode, const QStringList &scriptFunctionList);
|
||||||
|
void setCustomParserSource(const InternalNodePointer &internalNode, const QString &customParserSource);
|
||||||
|
|
||||||
InternalNodePointer nodeForId(const QString &id) const;
|
InternalNodePointer nodeForId(const QString &id) const;
|
||||||
bool hasId(const QString &id) const;
|
bool hasId(const QString &id) const;
|
||||||
|
|||||||
@@ -51,6 +51,7 @@
|
|||||||
#include "nodeabstractproperty.h"
|
#include "nodeabstractproperty.h"
|
||||||
#include "nodelistproperty.h"
|
#include "nodelistproperty.h"
|
||||||
#include "nodeproperty.h"
|
#include "nodeproperty.h"
|
||||||
|
#include <rewriterview.h>
|
||||||
|
|
||||||
namespace QmlDesigner {
|
namespace QmlDesigner {
|
||||||
using namespace QmlDesigner::Internal;
|
using namespace QmlDesigner::Internal;
|
||||||
@@ -935,4 +936,28 @@ qint32 ModelNode::internalId() const
|
|||||||
return m_internalNode->internalId();
|
return m_internalNode->internalId();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ModelNode::setCustomParserSource(const QString &newCustomParserSource)
|
||||||
|
{
|
||||||
|
Internal::WriteLocker locker(m_model.data());
|
||||||
|
|
||||||
|
if (!isValid()) {
|
||||||
|
Q_ASSERT_X(isValid(), Q_FUNC_INFO, "model node is invalid");
|
||||||
|
throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (internalNode()->customParserSource() == newCustomParserSource)
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_model.data()->m_d->setCustomParserSource(internalNode(), newCustomParserSource);
|
||||||
|
}
|
||||||
|
|
||||||
|
QString ModelNode::customParserSource() const
|
||||||
|
{
|
||||||
|
if (!isValid()) {
|
||||||
|
throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
|
||||||
|
}
|
||||||
|
|
||||||
|
return internalNode()->customParserSource();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -380,6 +380,11 @@ void QmlModelView::importsChanged(const QList<Import> &/*addedImports*/, const Q
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void QmlModelView::customParserSourceChanged(const ModelNode &, const QString & /*newCustomParserSource*/)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
void QmlModelView::rewriterBeginTransaction()
|
void QmlModelView::rewriterBeginTransaction()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|||||||
@@ -407,6 +407,11 @@ void RewriterView::instancesChildrenChanged(const QVector<ModelNode> &/*nodeList
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RewriterView::customParserSourceChanged(const ModelNode &, const QString & /*newCustomParserSource*/)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
void RewriterView::rewriterBeginTransaction()
|
void RewriterView::rewriterBeginTransaction()
|
||||||
{
|
{
|
||||||
transactionLevel++;
|
transactionLevel++;
|
||||||
|
|||||||
@@ -264,7 +264,7 @@ static bool isComponentType(const QString &type)
|
|||||||
return type == QLatin1String("Component") || type == QLatin1String("Qt.Component") || type == QLatin1String("QtQuick.Component");
|
return type == QLatin1String("Component") || type == QLatin1String("Qt.Component") || type == QLatin1String("QtQuick.Component");
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool isModelType(const QString &type)
|
static bool isCustomParserType(const QString &type)
|
||||||
{
|
{
|
||||||
return type == "QtQuick.VisualItemModel" || type == "Qt.VisualItemModel" ||
|
return type == "QtQuick.VisualItemModel" || type == "Qt.VisualItemModel" ||
|
||||||
type == "QtQuick.VisualDataModel" || type == "Qt.VisualDataModel" ||
|
type == "QtQuick.VisualDataModel" || type == "Qt.VisualDataModel" ||
|
||||||
@@ -762,8 +762,8 @@ void TextToModelMerger::syncNode(ModelNode &modelNode,
|
|||||||
if (isComponentType(typeNameFixedForImplicitComponents))
|
if (isComponentType(typeNameFixedForImplicitComponents))
|
||||||
setupComponent(modelNode);
|
setupComponent(modelNode);
|
||||||
|
|
||||||
if (isModelType(typeName))
|
if (isCustomParserType(typeName))
|
||||||
setupModel(modelNode);
|
setupCustomParserNode(modelNode);
|
||||||
|
|
||||||
if (modelNode.parentProperty().isValid() && modelNode.type() != typeNameFixedForImplicitComponents //If there is no valid parentProperty
|
if (modelNode.parentProperty().isValid() && modelNode.type() != typeNameFixedForImplicitComponents //If there is no valid parentProperty
|
||||||
//the node has just been created. The type is correct then.
|
//the node has just been created. The type is correct then.
|
||||||
@@ -1102,9 +1102,18 @@ ModelNode TextToModelMerger::createModelNode(const QString &typeName,
|
|||||||
ReadingContext *context,
|
ReadingContext *context,
|
||||||
DifferenceHandler &differenceHandler)
|
DifferenceHandler &differenceHandler)
|
||||||
{
|
{
|
||||||
|
QString customParserSource;
|
||||||
|
|
||||||
|
if (isCustomParserType(typeName))
|
||||||
|
customParserSource = textAt(context->doc(),
|
||||||
|
astNode->firstSourceLocation(),
|
||||||
|
astNode->lastSourceLocation());
|
||||||
|
|
||||||
ModelNode newNode = m_rewriterView->createModelNode(typeName,
|
ModelNode newNode = m_rewriterView->createModelNode(typeName,
|
||||||
majorVersion,
|
majorVersion,
|
||||||
minorVersion);
|
minorVersion,
|
||||||
|
PropertyListType(),
|
||||||
|
customParserSource);
|
||||||
syncNode(newNode, astNode, context, differenceHandler);
|
syncNode(newNode, astNode, context, differenceHandler);
|
||||||
return newNode;
|
return newNode;
|
||||||
}
|
}
|
||||||
@@ -1469,20 +1478,16 @@ void TextToModelMerger::setupComponent(const ModelNode &node)
|
|||||||
node.setAuxiliaryData("__component_data", result);
|
node.setAuxiliaryData("__component_data", result);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TextToModelMerger::setupModel(const ModelNode &node)
|
void TextToModelMerger::setupCustomParserNode(const ModelNode &node)
|
||||||
{
|
{
|
||||||
Q_ASSERT(isModelType(node.type()));
|
Q_ASSERT(isCustomParserType(node.type()));
|
||||||
|
|
||||||
QString modelText = m_rewriterView->extractText(QList<ModelNode>() << node).value(node);
|
QString modelText = m_rewriterView->extractText(QList<ModelNode>() << node).value(node);
|
||||||
|
|
||||||
if (modelText.isEmpty())
|
if (modelText.isEmpty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (node.hasAuxiliaryData("__model_data")
|
ModelNode(node).setCustomParserSource(modelText);
|
||||||
&& node.auxiliaryData("__model_data").toString() == modelText)
|
|
||||||
return;
|
|
||||||
|
|
||||||
node.setAuxiliaryData("__model_data", modelText);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QString TextToModelMerger::textAt(const Document::Ptr &doc,
|
QString TextToModelMerger::textAt(const Document::Ptr &doc,
|
||||||
|
|||||||
@@ -122,7 +122,7 @@ public:
|
|||||||
DifferenceHandler &differenceHandler);
|
DifferenceHandler &differenceHandler);
|
||||||
|
|
||||||
void setupComponent(const ModelNode &node);
|
void setupComponent(const ModelNode &node);
|
||||||
void setupModel(const ModelNode &node);
|
void setupCustomParserNode(const ModelNode &node);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static QString textAt(const QmlJS::Document::Ptr &doc,
|
static QString textAt(const QmlJS::Document::Ptr &doc,
|
||||||
|
|||||||
@@ -256,6 +256,12 @@ void ViewLogger::instancesChildrenChanged(const QVector<ModelNode> &nodeList)
|
|||||||
m_output << time() << indent("node: ") << node << endl;
|
m_output << time() << indent("node: ") << node << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ViewLogger::customParserSourceChanged(const ModelNode &node, const QString & /*newCustomParserSource*/)
|
||||||
|
{
|
||||||
|
m_output << time() << indent("customParserSourceChanged:") << endl;
|
||||||
|
m_output << time() << indent("node: ") << node << endl;
|
||||||
|
}
|
||||||
|
|
||||||
void ViewLogger::rewriterBeginTransaction()
|
void ViewLogger::rewriterBeginTransaction()
|
||||||
{
|
{
|
||||||
m_output << time() << indent("rewriterBeginTransaction:") << endl;
|
m_output << time() << indent("rewriterBeginTransaction:") << endl;
|
||||||
|
|||||||
@@ -81,6 +81,7 @@ public:
|
|||||||
void instancesRenderImageChanged(const QVector<ModelNode> &nodeList);
|
void instancesRenderImageChanged(const QVector<ModelNode> &nodeList);
|
||||||
void instancesPreviewImageChanged(const QVector<ModelNode> &nodeList);
|
void instancesPreviewImageChanged(const QVector<ModelNode> &nodeList);
|
||||||
void instancesChildrenChanged(const QVector<ModelNode> &nodeList);
|
void instancesChildrenChanged(const QVector<ModelNode> &nodeList);
|
||||||
|
void customParserSourceChanged(const ModelNode &modelNode, const QString &newCustomParserSource);
|
||||||
|
|
||||||
void rewriterBeginTransaction();
|
void rewriterBeginTransaction();
|
||||||
void rewriterEndTransaction();
|
void rewriterEndTransaction();
|
||||||
|
|||||||
Reference in New Issue
Block a user