summaryrefslogtreecommitdiff
path: root/src/plugins/qmldesigner/designercore/model
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/qmldesigner/designercore/model')
-rw-r--r--src/plugins/qmldesigner/designercore/model/abstractproperty.cpp1
-rw-r--r--src/plugins/qmldesigner/designercore/model/abstractview.cpp21
-rw-r--r--src/plugins/qmldesigner/designercore/model/anchorline.cpp3
-rw-r--r--src/plugins/qmldesigner/designercore/model/basetexteditmodifier.cpp5
-rw-r--r--src/plugins/qmldesigner/designercore/model/bindingproperty.cpp3
-rw-r--r--src/plugins/qmldesigner/designercore/model/internalnode.cpp8
-rw-r--r--src/plugins/qmldesigner/designercore/model/internalnodelistproperty.cpp2
-rw-r--r--src/plugins/qmldesigner/designercore/model/internalnodeproperty.cpp3
-rw-r--r--src/plugins/qmldesigner/designercore/model/internalproperty.h4
-rw-r--r--src/plugins/qmldesigner/designercore/model/model.cpp168
-rw-r--r--src/plugins/qmldesigner/designercore/model/model_p.h11
-rw-r--r--src/plugins/qmldesigner/designercore/model/modelmerger.cpp15
-rw-r--r--src/plugins/qmldesigner/designercore/model/modelnode.cpp39
-rw-r--r--src/plugins/qmldesigner/designercore/model/modelnodecontextmenu.cpp951
-rw-r--r--src/plugins/qmldesigner/designercore/model/modelnodecontextmenu.h131
-rw-r--r--src/plugins/qmldesigner/designercore/model/modelrewriter.cpp15
-rw-r--r--src/plugins/qmldesigner/designercore/model/modeltotextmerger.cpp15
-rw-r--r--src/plugins/qmldesigner/designercore/model/modeltotextmerger.h4
-rw-r--r--src/plugins/qmldesigner/designercore/model/nodelistproperty.cpp3
-rw-r--r--src/plugins/qmldesigner/designercore/model/painteventfilter.cpp2
-rw-r--r--src/plugins/qmldesigner/designercore/model/paster.cpp12
-rw-r--r--src/plugins/qmldesigner/designercore/model/plaintexteditmodifier.cpp5
-rw-r--r--src/plugins/qmldesigner/designercore/model/propertycontainer.cpp19
-rw-r--r--src/plugins/qmldesigner/designercore/model/propertyparser.cpp6
-rw-r--r--src/plugins/qmldesigner/designercore/model/qmlanchors.cpp19
-rw-r--r--src/plugins/qmldesigner/designercore/model/qmlchangeset.cpp9
-rw-r--r--src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp3
-rw-r--r--src/plugins/qmldesigner/designercore/model/qmlmodelview.cpp46
-rw-r--r--src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp9
-rw-r--r--src/plugins/qmldesigner/designercore/model/qmlstate.cpp18
-rw-r--r--src/plugins/qmldesigner/designercore/model/qmltextgenerator.cpp8
-rw-r--r--src/plugins/qmldesigner/designercore/model/rewriteactioncompressor.cpp14
-rw-r--r--src/plugins/qmldesigner/designercore/model/rewriterview.cpp76
-rw-r--r--src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp129
-rw-r--r--src/plugins/qmldesigner/designercore/model/texttomodelmerger.h4
-rw-r--r--src/plugins/qmldesigner/designercore/model/variantproperty.cpp3
-rw-r--r--src/plugins/qmldesigner/designercore/model/viewlogger.cpp49
-rw-r--r--src/plugins/qmldesigner/designercore/model/viewlogger.h4
-rw-r--r--src/plugins/qmldesigner/designercore/model/viewmanager.cpp201
39 files changed, 603 insertions, 1435 deletions
diff --git a/src/plugins/qmldesigner/designercore/model/abstractproperty.cpp b/src/plugins/qmldesigner/designercore/model/abstractproperty.cpp
index b51ed2c204..785655578c 100644
--- a/src/plugins/qmldesigner/designercore/model/abstractproperty.cpp
+++ b/src/plugins/qmldesigner/designercore/model/abstractproperty.cpp
@@ -42,7 +42,6 @@
#include "nodelistproperty.h"
#include <QTextStream>
#include <qmlobjectnode.h>
-#include <QDeclarativeView>
namespace QmlDesigner {
diff --git a/src/plugins/qmldesigner/designercore/model/abstractview.cpp b/src/plugins/qmldesigner/designercore/model/abstractview.cpp
index d4309bb591..e306199243 100644
--- a/src/plugins/qmldesigner/designercore/model/abstractview.cpp
+++ b/src/plugins/qmldesigner/designercore/model/abstractview.cpp
@@ -132,6 +132,11 @@ Model* AbstractView::model() const
return m_model.data();
}
+bool AbstractView::isAttached() const
+{
+ return model();
+}
+
/*!
\brief is called if a view is being attached to a model
\param model which is being attached
@@ -252,7 +257,7 @@ QList<ModelNode> AbstractView::toModelNodeList(const QList<Internal::InternalNod
QList<ModelNode> toModelNodeList(const QList<Internal::InternalNode::Pointer> &nodeList, AbstractView *view)
{
QList<ModelNode> newNodeList;
- foreach(const Internal::InternalNode::Pointer &node, nodeList)
+ foreach (const Internal::InternalNode::Pointer &node, nodeList)
newNodeList.append(ModelNode(node, view->model(), view));
return newNodeList;
@@ -261,7 +266,7 @@ QList<ModelNode> toModelNodeList(const QList<Internal::InternalNode::Pointer> &n
QList<Internal::InternalNode::Pointer> toInternalNodeList(const QList<ModelNode> &nodeList)
{
QList<Internal::InternalNode::Pointer> newNodeList;
- foreach(const ModelNode &node, nodeList)
+ foreach (const ModelNode &node, nodeList)
newNodeList.append(node.internalNode());
return newNodeList;
@@ -338,20 +343,18 @@ QmlModelView *AbstractView::toQmlModelView()
NodeInstanceView *AbstractView::nodeInstanceView() const
{
- if (model()) {
+ if (model())
return model()->d->nodeInstanceView();
- } else {
+ else
return 0;
- }
}
RewriterView *AbstractView::rewriterView() const
{
- if (model()) {
+ if (model())
return model()->d->rewriterView();
- } else {
+ else
return 0;
- }
}
void AbstractView::resetView()
@@ -364,7 +367,7 @@ void AbstractView::resetView()
currentModel->attachView(this);
}
-QList<ModelNode> AbstractView::allModelNodes()
+QList<ModelNode> AbstractView::allModelNodes() const
{
return toModelNodeList(model()->d->allNodes());
}
diff --git a/src/plugins/qmldesigner/designercore/model/anchorline.cpp b/src/plugins/qmldesigner/designercore/model/anchorline.cpp
index dddafb1222..2563647436 100644
--- a/src/plugins/qmldesigner/designercore/model/anchorline.cpp
+++ b/src/plugins/qmldesigner/designercore/model/anchorline.cpp
@@ -84,9 +84,8 @@ AnchorLine &AnchorLine::operator =(const AnchorLine &other)
ModelNode AnchorLine::modelNode() const
{
- if (m_internalNode.isNull() || m_internalNodeState.isNull() || m_model.isNull()) {
+ if (m_internalNode.isNull() || m_internalNodeState.isNull() || m_model.isNull())
return ModelNode();
- }
return ModelNode(m_internalNode, m_model.data());
}
diff --git a/src/plugins/qmldesigner/designercore/model/basetexteditmodifier.cpp b/src/plugins/qmldesigner/designercore/model/basetexteditmodifier.cpp
index 053e911e6e..b38fc0bdd2 100644
--- a/src/plugins/qmldesigner/designercore/model/basetexteditmodifier.cpp
+++ b/src/plugins/qmldesigner/designercore/model/basetexteditmodifier.cpp
@@ -62,11 +62,10 @@ void BaseTextEditModifier::indent(int offset, int length)
int BaseTextEditModifier::indentDepth() const
{
- if (TextEditor::BaseTextEditorWidget *bte = qobject_cast<TextEditor::BaseTextEditorWidget*>(plainTextEdit())) {
+ if (TextEditor::BaseTextEditorWidget *bte = qobject_cast<TextEditor::BaseTextEditorWidget*>(plainTextEdit()))
return bte->tabSettings().m_indentSize;
- } else {
+ else
return 0;
- }
}
bool BaseTextEditModifier::renameId(const QString &oldId, const QString &newId)
diff --git a/src/plugins/qmldesigner/designercore/model/bindingproperty.cpp b/src/plugins/qmldesigner/designercore/model/bindingproperty.cpp
index 559e3c7b4e..9acb0bbc2e 100644
--- a/src/plugins/qmldesigner/designercore/model/bindingproperty.cpp
+++ b/src/plugins/qmldesigner/designercore/model/bindingproperty.cpp
@@ -212,9 +212,8 @@ void BindingProperty::setDynamicTypeNameAndExpression(const QString &typeName, c
if (expression.isEmpty())
throw InvalidArgumentException(__LINE__, __FUNCTION__, __FILE__, name());
- if (typeName.isEmpty()) {
+ if (typeName.isEmpty())
throw InvalidArgumentException(__LINE__, __FUNCTION__, __FILE__, name());
- }
if (internalNode()->hasProperty(name())) { //check if oldValue != value
Internal::InternalProperty::Pointer internalProperty = internalNode()->property(name());
diff --git a/src/plugins/qmldesigner/designercore/model/internalnode.cpp b/src/plugins/qmldesigner/designercore/model/internalnode.cpp
index 01aafbf003..a981757864 100644
--- a/src/plugins/qmldesigner/designercore/model/internalnode.cpp
+++ b/src/plugins/qmldesigner/designercore/model/internalnode.cpp
@@ -36,7 +36,7 @@
#include "invalidpropertyexception.h"
#include <QDebug>
-#include <corelib_global.h>
+#include <qmldesignercorelib_global.h>
namespace QmlDesigner {
namespace Internal {
@@ -289,7 +289,7 @@ QList<InternalProperty::Pointer> InternalNode::propertyList() const
QList<InternalNodeAbstractProperty::Pointer> InternalNode::nodeAbstractPropertyList() const
{
QList<InternalNodeAbstractProperty::Pointer> abstractPropertyList;
- foreach(const InternalProperty::Pointer &property, propertyList()) {
+ foreach (const InternalProperty::Pointer &property, propertyList()) {
if (property->isNodeAbstractProperty())
abstractPropertyList.append(property->toNodeAbstractProperty());
}
@@ -301,7 +301,7 @@ QList<InternalNodeAbstractProperty::Pointer> InternalNode::nodeAbstractPropertyL
QList<InternalNode::Pointer> InternalNode::allSubNodes() const
{
QList<InternalNode::Pointer> nodeList;
- foreach(const InternalNodeAbstractProperty::Pointer &property, nodeAbstractPropertyList()) {
+ foreach (const InternalNodeAbstractProperty::Pointer &property, nodeAbstractPropertyList()) {
nodeList.append(property->allSubNodes());
}
@@ -311,7 +311,7 @@ QList<InternalNode::Pointer> InternalNode::allSubNodes() const
QList<InternalNode::Pointer> InternalNode::allDirectSubNodes() const
{
QList<InternalNode::Pointer> nodeList;
- foreach(const InternalNodeAbstractProperty::Pointer &property, nodeAbstractPropertyList()) {
+ foreach (const InternalNodeAbstractProperty::Pointer &property, nodeAbstractPropertyList()) {
nodeList.append(property->allDirectSubNodes());
}
diff --git a/src/plugins/qmldesigner/designercore/model/internalnodelistproperty.cpp b/src/plugins/qmldesigner/designercore/model/internalnodelistproperty.cpp
index d512a1cefe..10f08167dd 100644
--- a/src/plugins/qmldesigner/designercore/model/internalnodelistproperty.cpp
+++ b/src/plugins/qmldesigner/designercore/model/internalnodelistproperty.cpp
@@ -109,7 +109,7 @@ void InternalNodeListProperty::slide(int from, int to)
QList<InternalNode::Pointer> InternalNodeListProperty::allSubNodes() const
{
QList<InternalNode::Pointer> nodeList;
- foreach(const InternalNode::Pointer &childNode, m_nodeList) {
+ foreach (const InternalNode::Pointer &childNode, m_nodeList) {
nodeList.append(childNode->allSubNodes());
nodeList.append(childNode);
}
diff --git a/src/plugins/qmldesigner/designercore/model/internalnodeproperty.cpp b/src/plugins/qmldesigner/designercore/model/internalnodeproperty.cpp
index 866e45952a..63209ead49 100644
--- a/src/plugins/qmldesigner/designercore/model/internalnodeproperty.cpp
+++ b/src/plugins/qmldesigner/designercore/model/internalnodeproperty.cpp
@@ -114,9 +114,8 @@ QList<InternalNodePointer> InternalNodeProperty::allDirectSubNodes() const
{
QList<InternalNode::Pointer> nodeList;
- if (node()) {
+ if (node())
nodeList.append(node());
- }
return nodeList;
}
diff --git a/src/plugins/qmldesigner/designercore/model/internalproperty.h b/src/plugins/qmldesigner/designercore/model/internalproperty.h
index 048be6db0e..2fbb6e1c69 100644
--- a/src/plugins/qmldesigner/designercore/model/internalproperty.h
+++ b/src/plugins/qmldesigner/designercore/model/internalproperty.h
@@ -30,7 +30,7 @@
#ifndef INTERNALPROPERTY_H
#define INTERNALPROPERTY_H
-#include "corelib_global.h"
+#include "qmldesignercorelib_global.h"
#include <QVariant>
#include <QString>
@@ -55,7 +55,7 @@ class InternalNode;
typedef QSharedPointer<InternalNode> InternalNodePointer;
typedef QWeakPointer<InternalNode> InternalNodeWeakPointer;
-class CORESHARED_EXPORT InternalProperty
+class QMLDESIGNERCORE_EXPORT InternalProperty
{
public:
typedef QSharedPointer<InternalProperty> Pointer;
diff --git a/src/plugins/qmldesigner/designercore/model/model.cpp b/src/plugins/qmldesigner/designercore/model/model.cpp
index 043747313a..1b72e15d3c 100644
--- a/src/plugins/qmldesigner/designercore/model/model.cpp
+++ b/src/plugins/qmldesigner/designercore/model/model.cpp
@@ -91,7 +91,7 @@ ModelPrivate::ModelPrivate(Model *model) :
m_writeLock(false),
m_internalIdCounter(1)
{
- m_rootInternalNode = createNode("QtQuick/Item", 1, 0, PropertyListType(), PropertyListType(), QString(), ModelNode::NodeWithoutSource,true);
+ m_rootInternalNode = createNode("QtQuick.Item", 1, 0, PropertyListType(), PropertyListType(), QString(), ModelNode::NodeWithoutSource,true);
m_acutalStateNode = m_rootInternalNode;
}
@@ -107,15 +107,15 @@ void ModelPrivate::detachAllViews()
m_viewList.clear();
- if (m_rewriterView) {
- m_rewriterView->modelAboutToBeDetached(m_q);
- m_rewriterView.clear();
- }
-
if (m_nodeInstanceView) {
m_nodeInstanceView->modelAboutToBeDetached(m_q);
m_nodeInstanceView.clear();
}
+
+ if (m_rewriterView) {
+ m_rewriterView->modelAboutToBeDetached(m_q);
+ m_rewriterView.clear();
+ }
}
Model *ModelPrivate::create(QString type, int major, int minor, Model *metaInfoPropxyModel)
@@ -158,9 +158,8 @@ void ModelPrivate::notifyImportsChanged(const QList<Import> &addedImports, const
QString description;
try {
- if (rewriterView()) {
+ if (rewriterView())
rewriterView()->importsChanged(addedImports, removedImports);
- }
} catch (RewritingException &e) {
description = e.description();
resetModel = true;
@@ -174,9 +173,8 @@ void ModelPrivate::notifyImportsChanged(const QList<Import> &addedImports, const
foreach (const QWeakPointer<AbstractView> &view, m_viewList)
view->importsChanged(addedImports, removedImports);
- if (resetModel) {
+ if (resetModel)
resetModelByRewriter(description);
- }
}
QUrl ModelPrivate::fileUrl() const
@@ -359,9 +357,8 @@ void ModelPrivate::notifyAuxiliaryDataChanged(const InternalNodePointer &interna
nodeInstanceView()->auxiliaryDataChanged(node, name, data);
}
- if (resetModel) {
+ if (resetModel)
resetModelByRewriter(description);
- }
}
void ModelPrivate::notifyNodeSourceChanged(const InternalNodePointer &internalNode, const QString &newNodeSource)
@@ -391,9 +388,8 @@ void ModelPrivate::notifyNodeSourceChanged(const InternalNodePointer &internalNo
nodeInstanceView()->nodeSourceChanged(node, newNodeSource);
}
- if (resetModel) {
+ if (resetModel)
resetModelByRewriter(description);
- }
}
void ModelPrivate::notifyRootNodeTypeChanged(const QString &type, int majorVersion, int minorVersion)
@@ -418,9 +414,8 @@ void ModelPrivate::notifyRootNodeTypeChanged(const QString &type, int majorVersi
}
- if (resetModel) {
+ if (resetModel)
resetModelByRewriter(description);
- }
}
void ModelPrivate::notifyInstancePropertyChange(const QList<QPair<ModelNode, QString> > &propertyPairList)
@@ -461,13 +456,11 @@ void ModelPrivate::notifyInstancesCompleted(const QVector<ModelNode> &nodeVector
view->instancesCompleted(toModelNodeVector(internalVector, view.data()));
}
- if (nodeInstanceView()) {
+ if (nodeInstanceView())
nodeInstanceView()->instancesCompleted(toModelNodeVector(internalVector, nodeInstanceView()));
- }
- if (resetModel) {
+ if (resetModel)
resetModelByRewriter(description);
- }
}
QMultiHash<ModelNode, InformationName> convertModelNodeInformationHash(const QMultiHash<ModelNode, InformationName> &informationChangeHash, AbstractView *view)
@@ -501,13 +494,11 @@ void ModelPrivate::notifyInstancesInformationsChange(const QMultiHash<ModelNode,
view->instanceInformationsChange(convertModelNodeInformationHash(informationChangeHash, view.data()));
}
- if (nodeInstanceView()) {
+ if (nodeInstanceView())
nodeInstanceView()->instanceInformationsChange(convertModelNodeInformationHash(informationChangeHash, nodeInstanceView()));
- }
- if (resetModel) {
+ if (resetModel)
resetModelByRewriter(description);
- }
}
void ModelPrivate::notifyInstancesRenderImageChanged(const QVector<ModelNode> &nodeVector)
@@ -530,13 +521,11 @@ void ModelPrivate::notifyInstancesRenderImageChanged(const QVector<ModelNode> &n
view->instancesRenderImageChanged(toModelNodeVector(internalVector, view.data()));
}
- if (nodeInstanceView()) {
+ if (nodeInstanceView())
nodeInstanceView()->instancesRenderImageChanged(toModelNodeVector(internalVector, nodeInstanceView()));
- }
- if (resetModel) {
+ if (resetModel)
resetModelByRewriter(description);
- }
}
void ModelPrivate::notifyInstancesPreviewImageChanged(const QVector<ModelNode> &nodeVector)
@@ -559,13 +548,11 @@ void ModelPrivate::notifyInstancesPreviewImageChanged(const QVector<ModelNode> &
view->instancesPreviewImageChanged(toModelNodeVector(internalVector, view.data()));
}
- if (nodeInstanceView()) {
+ if (nodeInstanceView())
nodeInstanceView()->instancesPreviewImageChanged(toModelNodeVector(internalVector, nodeInstanceView()));
- }
- if (resetModel) {
+ if (resetModel)
resetModelByRewriter(description);
- }
}
void ModelPrivate::notifyInstancesChildrenChanged(const QVector<ModelNode> &nodeVector)
@@ -588,13 +575,11 @@ void ModelPrivate::notifyInstancesChildrenChanged(const QVector<ModelNode> &node
view->instancesChildrenChanged(toModelNodeVector(internalVector, view.data()));
}
- if (nodeInstanceView()) {
+ if (nodeInstanceView())
nodeInstanceView()->instancesChildrenChanged(toModelNodeVector(internalVector, nodeInstanceView()));
- }
- if (resetModel) {
+ if (resetModel)
resetModelByRewriter(description);
- }
}
void ModelPrivate::notifyActualStateChanged(const ModelNode &node)
@@ -617,13 +602,11 @@ void ModelPrivate::notifyActualStateChanged(const ModelNode &node)
view->actualStateChanged(ModelNode(node.internalNode(), model(), view.data()));
}
- if (nodeInstanceView()) {
+ if (nodeInstanceView())
nodeInstanceView()->actualStateChanged(ModelNode(node.internalNode(), model(), nodeInstanceView()));
- }
- if (resetModel) {
+ if (resetModel)
resetModelByRewriter(description);
- }
}
void ModelPrivate::notifyRewriterBeginTransaction()
@@ -644,13 +627,11 @@ void ModelPrivate::notifyRewriterBeginTransaction()
view->rewriterBeginTransaction();
}
- if (nodeInstanceView()) {
+ if (nodeInstanceView())
nodeInstanceView()->rewriterBeginTransaction();
- }
- if (resetModel) {
+ if (resetModel)
resetModelByRewriter(description);
- }
}
void ModelPrivate::notifyRewriterEndTransaction()
@@ -671,13 +652,11 @@ void ModelPrivate::notifyRewriterEndTransaction()
view->rewriterEndTransaction();
}
- if (nodeInstanceView()) {
+ if (nodeInstanceView())
nodeInstanceView()->rewriterEndTransaction();
- }
- if (resetModel) {
+ if (resetModel)
resetModelByRewriter(description);
- }
}
void ModelPrivate::notifyInstanceToken(const QString &token, int number, const QVector<ModelNode> &nodeVector)
@@ -701,13 +680,11 @@ void ModelPrivate::notifyInstanceToken(const QString &token, int number, const Q
view->instancesToken(token, number, toModelNodeVector(internalVector, view.data()));
}
- if (nodeInstanceView()) {
+ if (nodeInstanceView())
nodeInstanceView()->instancesToken(token, number, toModelNodeVector(internalVector, nodeInstanceView()));
- }
- if (resetModel) {
+ if (resetModel)
resetModelByRewriter(description);
- }
}
void ModelPrivate::notifyCustomNotification(const AbstractView *senderView, const QString &identifier, const QList<ModelNode> &nodeList, const QList<QVariant> &data)
@@ -730,13 +707,11 @@ void ModelPrivate::notifyCustomNotification(const AbstractView *senderView, cons
view->customNotification(senderView, identifier, toModelNodeList(internalList, view.data()), data);
}
- if (nodeInstanceView()) {
+ if (nodeInstanceView())
nodeInstanceView()->customNotification(senderView, identifier, toModelNodeList(internalList, nodeInstanceView()), data);
- }
- if (resetModel) {
+ if (resetModel)
resetModelByRewriter(description);
- }
}
@@ -781,9 +756,8 @@ void ModelPrivate::notifyPropertiesRemoved(const QList<PropertyPair> &propertyPa
view->propertiesRemoved(propertyList);
}
- if (resetModel) {
+ if (resetModel)
resetModelByRewriter(description);
- }
}
void ModelPrivate::notifyPropertiesAboutToBeRemoved(const QList<InternalProperty::Pointer> &internalPropertyList)
@@ -833,9 +807,8 @@ void ModelPrivate::notifyPropertiesAboutToBeRemoved(const QList<InternalProperty
nodeInstanceView()->propertiesAboutToBeRemoved(propertyList);
}
- if (resetModel) {
+ if (resetModel)
resetModelByRewriter(description);
- }
}
void ModelPrivate::setAuxiliaryData(const InternalNode::Pointer& node, const QString &name, const QVariant &data)
@@ -846,9 +819,8 @@ void ModelPrivate::setAuxiliaryData(const InternalNode::Pointer& node, const QSt
void ModelPrivate::resetModelByRewriter(const QString &description)
{
- if (rewriterView()) {
+ if (rewriterView())
rewriterView()->resetToLastCorrectQml();
- }
throw RewritingException(__LINE__, __FUNCTION__, __FILE__, description, rewriterView()->textModifierContent());
}
@@ -899,9 +871,8 @@ void ModelPrivate::notifyNodeCreated(const InternalNode::Pointer &newInternalNod
view->nodeCreated(createdNode);
}
- if (resetModel) {
+ if (resetModel)
resetModelByRewriter(description);
- }
}
void ModelPrivate::notifyNodeAboutToBeRemoved(const InternalNode::Pointer &nodePointer)
@@ -930,9 +901,8 @@ void ModelPrivate::notifyNodeAboutToBeRemoved(const InternalNode::Pointer &nodeP
nodeInstanceView()->nodeAboutToBeRemoved(node);
}
- if (resetModel) {
+ if (resetModel)
resetModelByRewriter(description);
- }
}
void ModelPrivate::notifyNodeRemoved(const InternalNodePointer &nodePointer, const InternalNodePointer &parentNodePointer, const QString &parentPropertyName, AbstractView::PropertyChangeFlags propertyChange)
@@ -965,9 +935,8 @@ void ModelPrivate::notifyNodeRemoved(const InternalNodePointer &nodePointer, con
}
- if (resetModel) {
+ if (resetModel)
resetModelByRewriter(description);
- }
}
void ModelPrivate::notifyNodeIdChanged(const InternalNode::Pointer& nodePointer, const QString& newId, const QString& oldId)
@@ -996,9 +965,8 @@ void ModelPrivate::notifyNodeIdChanged(const InternalNode::Pointer& nodePointer,
nodeInstanceView()->nodeIdChanged(node, newId, oldId);
}
- if (resetModel) {
+ if (resetModel)
resetModelByRewriter(description);
- }
}
void ModelPrivate::notifyBindingPropertiesChanged(const QList<InternalBindingPropertyPointer> &internalBropertyList, AbstractView::PropertyChangeFlags propertyChange)
@@ -1037,9 +1005,8 @@ void ModelPrivate::notifyBindingPropertiesChanged(const QList<InternalBindingPro
nodeInstanceView()->bindingPropertiesChanged(propertyList, propertyChange);
}
- if (resetModel) {
+ if (resetModel)
resetModelByRewriter(description);
- }
}
void ModelPrivate::notifyScriptFunctionsChanged(const InternalNodePointer &internalNodePointer, const QStringList &scriptFunctionList)
@@ -1070,9 +1037,8 @@ void ModelPrivate::notifyScriptFunctionsChanged(const InternalNodePointer &inter
}
- if (resetModel) {
+ if (resetModel)
resetModelByRewriter(description);
- }
}
@@ -1127,9 +1093,8 @@ void ModelPrivate::notifyVariantPropertiesChanged(const InternalNodePointer &int
nodeInstanceView()->variantPropertiesChanged(propertyList, propertyChange);
}
- if (resetModel) {
+ if (resetModel)
resetModelByRewriter(description);
- }
}
void ModelPrivate::notifyNodeAboutToBeReparent(const InternalNodePointer &internalNodePointer, const InternalNodeAbstractPropertyPointer &newPropertyParent, const InternalNodePointer &oldParent, const QString &oldPropertyName, AbstractView::PropertyChangeFlags propertyChange)
@@ -1184,9 +1149,8 @@ void ModelPrivate::notifyNodeAboutToBeReparent(const InternalNodePointer &intern
nodeInstanceView()->nodeAboutToBeReparented(node, newProperty, oldProperty, propertyChange);
}
- if (resetModel) {
+ if (resetModel)
resetModelByRewriter(description);
- }
}
@@ -1242,9 +1206,8 @@ void ModelPrivate::notifyNodeReparent(const InternalNode::Pointer &internalNodeP
nodeInstanceView()->nodeReparented(node, newProperty, oldProperty, propertyChange);
}
- if (resetModel) {
+ if (resetModel)
resetModelByRewriter(description);
- }
}
void ModelPrivate::notifyNodeOrderChanged(const InternalNodeListPropertyPointer &internalListPropertyPointer,
@@ -1276,9 +1239,8 @@ void ModelPrivate::notifyNodeOrderChanged(const InternalNodeListPropertyPointer
ModelNode(internalNodePointer, model(), nodeInstanceView()),
oldIndex);
- if (resetModel) {
+ if (resetModel)
resetModelByRewriter(description);
- }
}
void ModelPrivate::setSelectedNodes(const QList<InternalNode::Pointer> &selectedNodeList)
@@ -1563,12 +1525,13 @@ void ModelPrivate::setRewriterView(RewriterView *rewriterView)
Q_ASSERT(!(rewriterView && m_rewriterView));
+ if (m_rewriterView)
+ m_rewriterView->modelAboutToBeDetached(model());
+
m_rewriterView = rewriterView;
if (rewriterView)
rewriterView->modelAttached(model());
- else if (m_rewriterView)
- m_rewriterView->modelAboutToBeDetached(model());
}
RewriterView *ModelPrivate::rewriterView() const
@@ -1755,11 +1718,34 @@ bool Model::hasImport(const Import &import, bool ignoreAlias, bool allowHigherVe
return false;
}
+QString Model::pathForImport(const Import &import)
+{
+ if (!rewriterView())
+ return QString();
+
+ return rewriterView()->pathForImport(import);
+}
+
RewriterView *Model::rewriterView() const
{
return d->rewriterView();
}
+void Model::setRewriterView(RewriterView *rewriterView)
+{
+ d->setRewriterView(rewriterView);
+}
+
+NodeInstanceView *Model::nodeInstanceView() const
+{
+ return d->nodeInstanceView();
+}
+
+void Model::setNodeInstanceView(NodeInstanceView *nodeInstanceView)
+{
+ d->setNodeInstanceView(nodeInstanceView);
+}
+
/*!
\brief Returns the model that is used for metainfo
\return Return itself if not other metaInfoProxyModel does exist
@@ -1785,16 +1771,6 @@ Model *Model::create(const QString &rootType)
}
#endif
-Model *Model::masterModel() const
-{
- return d->m_masterModel.data();
-}
-
-void Model::setMasterModel(Model *model)
-{
- d->m_masterModel = model;
-}
-
/*!
\brief Returns the URL against which relative URLs within the model should be resolved.
\return The base URL.
@@ -1864,13 +1840,11 @@ void Model::attachView(AbstractView *view)
// Internal::WriteLocker locker(d);
RewriterView *rewriterView = qobject_cast<RewriterView*>(view);
if (rewriterView) {
- d->setRewriterView(rewriterView);
return;
}
NodeInstanceView *nodeInstanceView = qobject_cast<NodeInstanceView*>(view);
if (nodeInstanceView) {
- d->setNodeInstanceView(nodeInstanceView);
return;
}
@@ -1892,13 +1866,11 @@ void Model::detachView(AbstractView *view, ViewNotification emitDetachNotify)
RewriterView *rewriterView = qobject_cast<RewriterView*>(view);
if (rewriterView) {
- d->setRewriterView(0);
return;
}
NodeInstanceView *nodeInstanceView = qobject_cast<NodeInstanceView*>(view);
if (nodeInstanceView) {
- d->setNodeInstanceView(0);
return;
}
diff --git a/src/plugins/qmldesigner/designercore/model/model_p.h b/src/plugins/qmldesigner/designercore/model/model_p.h
index 8339ca9c05..27605e35c9 100644
--- a/src/plugins/qmldesigner/designercore/model/model_p.h
+++ b/src/plugins/qmldesigner/designercore/model/model_p.h
@@ -39,7 +39,7 @@
#include "abstractview.h"
#include "metainfo.h"
-#include "corelib_global.h"
+#include "qmldesignercorelib_global.h"
QT_BEGIN_NAMESPACE
class QPlainTextEdit;
@@ -212,6 +212,8 @@ public:
void setRewriterView(RewriterView *rewriterView);
RewriterView *rewriterView() const;
+
+
void setNodeInstanceView(NodeInstanceView *nodeInstanceView);
NodeInstanceView *nodeInstanceView() const;
@@ -229,7 +231,6 @@ private: //functions
private:
Model *m_q;
MetaInfo m_metaInfo;
-
QList<Import> m_imports;
QList<QWeakPointer<AbstractView> > m_viewList;
QList<InternalNodePointer> m_selectedNodeList;
@@ -237,17 +238,11 @@ private:
QHash<qint32, InternalNodePointer> m_internalIdNodeHash;
QSet<InternalNodePointer> m_nodeSet;
InternalNodePointer m_acutalStateNode;
-
-
InternalNodePointer m_rootInternalNode;
-
QUrl m_fileUrl;
-
- QWeakPointer<Model> m_masterModel;
QWeakPointer<RewriterView> m_rewriterView;
QWeakPointer<NodeInstanceView> m_nodeInstanceView;
QWeakPointer<Model> m_metaInfoProxyModel;
-
bool m_writeLock;
qint32 m_internalIdCounter;
};
diff --git a/src/plugins/qmldesigner/designercore/model/modelmerger.cpp b/src/plugins/qmldesigner/designercore/model/modelmerger.cpp
index 10679027ba..122977fbe0 100644
--- a/src/plugins/qmldesigner/designercore/model/modelmerger.cpp
+++ b/src/plugins/qmldesigner/designercore/model/modelmerger.cpp
@@ -33,6 +33,7 @@
#include "modelnode.h"
#include "abstractview.h"
#include "model.h"
+#include "nodemetainfo.h"
#include "nodeproperty.h"
#include "nodelistproperty.h"
#include "bindingproperty.h"
@@ -42,6 +43,7 @@
#include <QSet>
#include <QStringList>
+#include <QUrl>
#include <QDebug>
@@ -75,16 +77,15 @@ static void syncBindingProperties(ModelNode &outputNode, const ModelNode &inputN
static void syncId(ModelNode &outputNode, const ModelNode &inputNode, const QHash<QString, QString> &idRenamingHash)
{
- if (!inputNode.id().isEmpty()) {
+ if (!inputNode.id().isEmpty())
outputNode.setId(idRenamingHash.value(inputNode.id()));
- }
}
static void splitIdInBaseNameAndNumber(const QString &id, QString *baseId, int *number)
{
int counter = 0;
- while(counter < id.count()) {
+ while (counter < id.count()) {
bool canConvertToInteger = false;
int newNumber = id.right(counter +1).toInt(&canConvertToInteger);
if (canConvertToInteger)
@@ -144,7 +145,8 @@ static ModelNode createNodeFromNode(const ModelNode &modelNode,const QHash<QStri
foreach (const VariantProperty &variantProperty, modelNode.variantProperties()) {
propertyList.append(QPair<QString, QVariant>(variantProperty.name(), variantProperty.value()));
}
- ModelNode newNode(view->createModelNode(modelNode.type(),modelNode.majorVersion(),modelNode.minorVersion(),
+ NodeMetaInfo nodeMetaInfo = view->model()->metaInfo(modelNode.type());
+ ModelNode newNode(view->createModelNode(modelNode.type(), nodeMetaInfo.majorVersion(), nodeMetaInfo.minorVersion(),
propertyList, variantPropertyList, modelNode.nodeSource(), modelNode.nodeSourceType()));
syncBindingProperties(newNode, modelNode, idRenamingHash);
syncId(newNode, modelNode, idRenamingHash);
@@ -161,9 +163,8 @@ ModelNode ModelMerger::insertModel(const ModelNode &modelNode)
QList<Import> newImports;
foreach (const Import &import, modelNode.model()->imports()) {
- if (!view()->model()->hasImport(import, true, true)) {
+ if (!view()->model()->hasImport(import, true, true))
newImports.append(import);
- }
}
view()->model()->changeImports(newImports, QList<Import>());
@@ -198,7 +199,7 @@ void ModelMerger::replaceModel(const ModelNode &modelNode)
syncNodeProperties(rootNode, modelNode, idRenamingHash, view());
syncNodeListProperties(rootNode, modelNode, idRenamingHash, view());
m_view->changeRootNodeType(modelNode.type(), modelNode.majorVersion(), modelNode.minorVersion());
- } catch (RewritingException &e) {
+ } catch (RewritingException &e) {
qWarning() << e.description(); //silent error
}
}
diff --git a/src/plugins/qmldesigner/designercore/model/modelnode.cpp b/src/plugins/qmldesigner/designercore/model/modelnode.cpp
index 79b354965d..dbce22d4f0 100644
--- a/src/plugins/qmldesigner/designercore/model/modelnode.cpp
+++ b/src/plugins/qmldesigner/designercore/model/modelnode.cpp
@@ -134,7 +134,7 @@ QString ModelNode::generateNewId() const
int counter = 1;
QString newId = QString("%1%2").arg(simplifiedTypeName().toLower()).arg(counter);
- while(view()->hasId(newId)) {
+ while (view()->hasId(newId)) {
counter += 1;
newId = QString("%1%2").arg(simplifiedTypeName().toLower()).arg(counter);
}
@@ -147,9 +147,8 @@ QString ModelNode::generateNewId() const
*/
QString ModelNode::id() const
{
- if (!isValid()) {
+ if (!isValid())
throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
- }
return m_internalNode->id();
}
@@ -248,10 +247,12 @@ int ModelNode::majorQtQuickVersion() const
}
if (metaInfo().isValid()) {
+ if (type() == "QtQuick.QtObject")
+ return majorVersion();
NodeMetaInfo superClass = metaInfo().directSuperClass();
while (superClass.isValid()) {
- if (superClass.typeName() == "QtQuick.Item")
+ if (superClass.typeName() == "QtQuick.QtObject")
return superClass.majorVersion();
superClass = superClass.directSuperClass();
}
@@ -351,9 +352,8 @@ void ModelNode::setParentProperty(NodeAbstractProperty parent)
throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
}
- if (!parent.parentModelNode().isValid()) {
+ if (!parent.parentModelNode().isValid())
throw InvalidArgumentException(__LINE__, __FUNCTION__, __FILE__, "newParentNode");
- }
if (*this == parent.parentModelNode()) {
Q_ASSERT_X(*this != parent.parentModelNode(), Q_FUNC_INFO, "cannot set parent to itself");
@@ -629,9 +629,8 @@ void ModelNode::destroy()
throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
}
- if (isRootNode()) {
+ if (isRootNode())
throw InvalidArgumentException(__LINE__, __FUNCTION__, __FILE__, "rootNode");
- }
removeModelNodeFromSelection(*this);
model()->d->removeNode(internalNode());
@@ -879,9 +878,8 @@ QTextStream& operator<<(QTextStream &stream, const ModelNode &modelNode)
void ModelNode::selectNode()
{
- if (!isValid()) {
+ if (!isValid())
throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
- }
QList<ModelNode> selectedNodeList;
selectedNodeList.append(*this);
@@ -891,9 +889,8 @@ void ModelNode::selectNode()
void ModelNode::deselectNode()
{
- if (!isValid()) {
+ if (!isValid())
throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
- }
QList<ModelNode> selectedNodeList(view()->selectedModelNodes());
selectedNodeList.removeAll(*this);
@@ -913,9 +910,8 @@ QVariant ModelNode::toVariant() const
QVariant ModelNode::auxiliaryData(const QString &name) const
{
- if (!isValid()) {
+ if (!isValid())
throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
- }
return internalNode()->auxiliaryData(name);
}
@@ -928,18 +924,16 @@ void ModelNode::setAuxiliaryData(const QString &name, const QVariant &data) cons
bool ModelNode::hasAuxiliaryData(const QString &name) const
{
- if (!isValid()) {
+ if (!isValid())
throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
- }
return internalNode()->hasAuxiliaryData(name);
}
QHash<QString, QVariant> ModelNode::auxiliaryData() const
{
- if (!isValid()) {
+ if (!isValid())
throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
- }
return internalNode()->auxiliaryData();
}
@@ -979,18 +973,16 @@ void ModelNode::setNodeSource(const QString &newNodeSource)
QString ModelNode::nodeSource() const
{
- if (!isValid()) {
+ if (!isValid())
throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
- }
return internalNode()->nodeSource();
}
QString ModelNode::convertTypeToImportAlias() const
{
- if (!isValid()) {
+ if (!isValid())
throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
- }
if (model()->rewriterView())
return model()->rewriterView()->convertTypeToImportAlias(type());
@@ -1000,9 +992,8 @@ QString ModelNode::convertTypeToImportAlias() const
ModelNode::NodeSourceType ModelNode::nodeSourceType() const
{
- if (!isValid()) {
+ if (!isValid())
throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
- }
return static_cast<ModelNode::NodeSourceType>(internalNode()->nodeSourceType());
diff --git a/src/plugins/qmldesigner/designercore/model/modelnodecontextmenu.cpp b/src/plugins/qmldesigner/designercore/model/modelnodecontextmenu.cpp
deleted file mode 100644
index 336dbaaa6b..0000000000
--- a/src/plugins/qmldesigner/designercore/model/modelnodecontextmenu.cpp
+++ /dev/null
@@ -1,951 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** 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 Digia. For licensing terms and
-** conditions see http://qt.digia.com/licensing. For further information
-** use the contact form at http://qt.digia.com/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, 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, Digia gives you certain additional
-** rights. These rights are described in the Digia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-****************************************************************************/
-
-#include <cmath>
-#include "modelnodecontextmenu.h"
-#include <QApplication>
-#include <QMessageBox>
-#include <coreplugin/editormanager/editormanager.h>
-#include <nodeabstractproperty.h>
-#include <nodelistproperty.h>
-#include <nodemetainfo.h>
-#include <modelnode.h>
-#include <qmlitemnode.h>
-#include <variantproperty.h>
-#include <bindingproperty.h>
-#include <nodeproperty.h>
-#include <rewritingexception.h>
-#include <rewritertransaction.h>
-#include <designmodewidget.h>
-#include <qmlanchors.h>
-
-const QString auxDataString = QLatin1String("anchors_");
-
-namespace QmlDesigner {
-
-static inline DesignDocumentController* designDocumentController()
-{
- return Internal::DesignModeWidget::instance()->currentDesignDocumentController();
-}
-
-static inline QString captionForModelNode(const ModelNode &modelNode)
-{
- if (modelNode.id().isEmpty())
- return modelNode.simplifiedTypeName();
-
- return modelNode.id();
-}
-
-static inline bool contains(const QmlItemNode &node, const QPoint &p)
-{
- return node.instanceSceneTransform().mapRect(node.instanceBoundingRect()).contains(p);
-}
-
-static inline bool checkIfNodeIsAView(const ModelNode &node)
-{
- return node.metaInfo().isValid() &&
- (node.metaInfo().isSubclassOf("QtQuick.ListView", -1, -1) ||
- node.metaInfo().isSubclassOf("QtQuick.GridView", -1, -1) ||
- node.metaInfo().isSubclassOf("QtQuick.PathView", -1, -1));
-}
-
-static inline bool isItem(const ModelNode &node)
-{
- return node.isValid() && node.metaInfo().isValid() && node.metaInfo().isSubclassOf("QtQuick.Item", -1, -1);
-}
-
-static inline bool itemsHaveSameParent(const QList<ModelNode> &siblingList)
-{
- if (siblingList.isEmpty())
- return false;
-
-
- QmlItemNode item(siblingList.first());
- if (!item.isValid())
- return false;
-
- if (item.isRootModelNode())
- return false;
-
- QmlItemNode parent = item.instanceParent().toQmlItemNode();
- if (!parent.isValid())
- return false;
-
- foreach (const ModelNode &node, siblingList) {
- QmlItemNode currentItem(node);
- if (!currentItem.isValid())
- return false;
- QmlItemNode currentParent = currentItem.instanceParent().toQmlItemNode();
- if (!currentParent.isValid())
- return false;
- if (currentItem.instanceIsInPositioner())
- return false;
- if (currentParent != parent)
- return false;
- }
- return true;
-}
-
-static inline QList<QmlItemNode> siblingsForNode(const QmlItemNode &itemNode)
-{
- QList<QmlItemNode> siblingList;
-
- if (itemNode.isValid() && itemNode.modelNode().parentProperty().isValid()) {
- QList<ModelNode> modelNodes = itemNode.modelNode().parentProperty().parentModelNode().allDirectSubModelNodes();
- foreach (const ModelNode &node, modelNodes) {
- QmlItemNode childItemNode = node;
- if (childItemNode.isValid())
- siblingList.append(childItemNode);
- }
- }
-
- return siblingList;
-}
-
-static signed int getMaxZValue(const QList<QmlItemNode> &siblingList)
-{
- signed int maximum = INT_MIN;
- foreach (const QmlItemNode &node, siblingList) {
- signed int z = node.instanceValue("z").toInt();
- if (z > maximum)
- maximum = z;
- }
- return maximum;
-}
-
-static signed int getMinZValue(const QList<QmlItemNode> &siblingList)
-{
- signed int minimum = INT_MAX;
- foreach (const QmlItemNode &node, siblingList) {
- signed int z = node.instanceValue("z").toInt();
- if (z < minimum)
- minimum = z;
- }
- return minimum;
-}
-
-
-static inline bool modelNodeIsComponent(const ModelNode &node)
-{
- if (!node.isValid() || !node.metaInfo().isValid())
- return false;
-
- if (node.metaInfo().isComponent())
- return true;
-
- if (node.nodeSourceType() == ModelNode::NodeWithComponentSource)
- return true;
- if (checkIfNodeIsAView(node) &&
- node.hasNodeProperty("delegate")) {
- if (node.nodeProperty("delegate").modelNode().metaInfo().isComponent())
- return true;
- if (node.nodeProperty("delegate").modelNode().nodeSourceType() == ModelNode::NodeWithComponentSource)
- return true;
- }
-
- return false;
-}
-
-static inline bool isFileComponent(const ModelNode &node)
-{
- if (!node.isValid() || !node.metaInfo().isValid())
- return false;
-
- if (node.metaInfo().isComponent())
- return true;
-
- if (checkIfNodeIsAView(node) &&
- node.hasNodeProperty("delegate")) {
- if (node.nodeProperty("delegate").modelNode().metaInfo().isComponent())
- return true;
- }
-
- return false;
-}
-
-static inline void getWidthHeight(const ModelNode &node, int &width, int &height)
-{
- QmlItemNode itemNode(node);
- if (itemNode.isValid()) {
- width = itemNode.instanceValue("width").toInt();
- height = itemNode.instanceValue("height").toInt();
- }
-}
-
-static inline void getProperties(const ModelNode node, QHash<QString, QVariant> &propertyHash)
-{
- if (QmlObjectNode(node).isValid()) {
- foreach (const QString &propertyName, node.propertyNames()) {
- if (node.property(propertyName).isVariantProperty() ||
- (node.property(propertyName).isBindingProperty() &&
- !propertyName.contains(QLatin1String("anchors.")))) {
- propertyHash.insert(propertyName, QmlObjectNode(node).instanceValue(propertyName));
- }
- }
- }
- QmlItemNode itemNode(node);
- if (itemNode.isValid()) {
- propertyHash.insert(QLatin1String("width"), itemNode.instanceValue(QLatin1String("width")));
- propertyHash.insert(QLatin1String("height"), itemNode.instanceValue(QLatin1String("height")));
- propertyHash.remove(QLatin1String("x"));
- propertyHash.remove(QLatin1String("y"));
- propertyHash.remove(QLatin1String("rotation"));
- propertyHash.remove(QLatin1String("opacity"));
- }
-}
-
-static inline void applyProperties(ModelNode &node, const QHash<QString, QVariant> &propertyHash)
-{
- QHash<QString, QVariant> auxiliaryData = node.auxiliaryData();
- foreach (const QString propertyName, auxiliaryData.keys()) {
- node.setAuxiliaryData(propertyName, QVariant());
- }
-
- QHashIterator<QString, QVariant> i(propertyHash);
- while (i.hasNext()) {
- i.next();
- if (i.key() == QLatin1String("width") || i.key() == QLatin1String("height")) {
- node.setAuxiliaryData(i.key(), i.value());
- } else if (node.property(i.key()).isDynamic() &&
- node.property(i.key()).dynamicTypeName() == QLatin1String("alias") &&
- node.property(i.key()).isBindingProperty()) {
- AbstractProperty targetProperty = node.bindingProperty(i.key()).resolveToProperty();
- if (targetProperty.isValid()) {
- targetProperty.parentModelNode().setAuxiliaryData(targetProperty.name() + QLatin1String("@NodeInstance"), i.value());
- }
- } else {
- node.setAuxiliaryData(i.key() + QLatin1String("@NodeInstance"), i.value());
- }
- }
-}
-
-static inline void openFileForComponent(const ModelNode &node)
-{
- //int width = 0;
- //int height = 0;
- QHash<QString, QVariant> propertyHash;
- if (node.metaInfo().isComponent()) {
- //getWidthHeight(node, width, height);
- getProperties(node, propertyHash);
- designDocumentController()->changeToExternalSubComponent(node.metaInfo().componentFileName());
- } else if (checkIfNodeIsAView(node) &&
- node.hasNodeProperty("delegate") &&
- node.nodeProperty("delegate").modelNode().metaInfo().isComponent()) {
- //getWidthHeight(node, width, height);
- getProperties(node, propertyHash);
- designDocumentController()->changeToExternalSubComponent(node.nodeProperty("delegate").modelNode().metaInfo().componentFileName());
- }
- ModelNode rootModelNode = designDocumentController()->model()->rewriterView()->rootModelNode();
- applyProperties(rootModelNode, propertyHash);
- //rootModelNode.setAuxiliaryData("width", width);
- //rootModelNode.setAuxiliaryData("height", height);
-}
-
-static inline void openInlineComponent(const ModelNode &node)
-{
- if (!node.isValid() || !node.metaInfo().isValid())
- return;
-
- if (!designDocumentController())
- return;
-
- //int width = 0;
- //int height = 0;
- QHash<QString, QVariant> propertyHash;
-
- if (node.nodeSourceType() == ModelNode::NodeWithComponentSource) {
- //getWidthHeight(node, width, height);
- getProperties(node, propertyHash);
- designDocumentController()->changeToSubComponent(node);
- } else if (checkIfNodeIsAView(node) &&
- node.hasNodeProperty("delegate")) {
- if (node.nodeProperty("delegate").modelNode().nodeSourceType() == ModelNode::NodeWithComponentSource) {
- //getWidthHeight(node, width, height);
- getProperties(node, propertyHash);
- designDocumentController()->changeToSubComponent(node.nodeProperty("delegate").modelNode());
- }
- }
-
- ModelNode rootModelNode = designDocumentController()->model()->rewriterView()->rootModelNode();
- applyProperties(rootModelNode, propertyHash);
- //rootModelNode.setAuxiliaryData("width", width);
- //rootModelNode.setAuxiliaryData("height", height);
-}
-
-static inline bool modelNodesHaveProperty(const QList<ModelNode> &modelNodeList, const QString &propertyName)
-{
- foreach (const ModelNode &modelNode, modelNodeList)
- if (modelNode.hasProperty(propertyName))
- return true;
-
- return false;
-}
-
-ModelNodeContextMenu::ModelNodeContextMenu(QmlModelView *view) : m_view(view)
-{
-}
-
-void ModelNodeContextMenu::execute(const QPoint &pos, bool selectionMenuBool)
-{
- QMenu* menu = new QMenu();
-
- bool singleSelected = false;
- bool selectionIsEmpty = m_view->selectedModelNodes().isEmpty();
- ModelNode currentSingleNode;
- const bool isInBaseState = m_view->currentState().isBaseState();
- const QList<ModelNode> &selectedModelNodes = m_view->selectedModelNodes();
- if (selectedModelNodes.count()== 1) {
- singleSelected = true;
- currentSingleNode = selectedModelNodes.first();
- }
-
- if (selectionMenuBool) {
- QMenu *selectionMenu = new QMenu(tr("Selection"), menu);
- menu->addMenu(selectionMenu);
- ModelNode parentNode;
- if (singleSelected) {
- //ModelNodeAction *selectionAction;
- //selectionAction = createModelNodeAction(tr("DeSelect: ") + captionForModelNode(currentSingleNode), selectionMenu, QList<ModelNode>() << currentSingleNode, ModelNodeAction::DeSelectModelNode);
- //selectionMenu->addAction(selectionAction);
- if (!currentSingleNode.isRootNode()) {
- parentNode = currentSingleNode.parentProperty().parentModelNode();
- selectionMenu->addAction(createModelNodeAction(tr("Select parent: %1").arg(captionForModelNode(parentNode)),
- selectionMenu, QList<ModelNode>() << parentNode, ModelNodeAction::SelectModelNode));
- }
-
- selectionMenu->addSeparator();
- }
- foreach (const ModelNode &node, m_view->allModelNodes()) {
- if (node != currentSingleNode && node != parentNode && contains(node, m_scenePos) && !node.isRootNode())
- selectionMenu->addAction(createModelNodeAction(tr("Select: %1").arg(captionForModelNode(node)), selectionMenu, QList<ModelNode>() << node, ModelNodeAction::SelectModelNode));
- }
- }
-
- QMenu *stackMenu = new QMenu(tr("Stack (z)"), menu);
- menu->addMenu(stackMenu);
-
- stackMenu->addAction(createModelNodeAction(tr("To Front"), stackMenu, QList<ModelNode>() << currentSingleNode, ModelNodeAction::ToFront, singleSelected));
- stackMenu->addAction(createModelNodeAction(tr("To Back"), stackMenu, QList<ModelNode>() << currentSingleNode, ModelNodeAction::ToBack, singleSelected));
- stackMenu->addAction(createModelNodeAction(tr("Raise"), stackMenu, QList<ModelNode>() << selectedModelNodes, ModelNodeAction::Raise));
- stackMenu->addAction(createModelNodeAction(tr("Lower"), stackMenu, QList<ModelNode>() << selectedModelNodes, ModelNodeAction::Lower));
- stackMenu->addSeparator();
- stackMenu->addAction(createModelNodeAction(tr("Reset z property"), stackMenu, QList<ModelNode>() << selectedModelNodes, ModelNodeAction::ResetZ));
-
- QMenu *editMenu = new QMenu(tr("Edit"), menu);
- menu->addMenu(editMenu);
- if (!selectionIsEmpty) {
- //editMenu->addAction(createModelNodeAction(tr("Change Id"), editMenu, QList<ModelNode>() << currentSingleNode, ModelNodeAction::SetId, singleSelected));
- ModelNodeAction* action = createModelNodeAction(tr("Reset Position"), editMenu, selectedModelNodes, ModelNodeAction::ResetPosition);
- if (!modelNodesHaveProperty(selectedModelNodes, QLatin1String("x")) && !modelNodesHaveProperty(selectedModelNodes, QLatin1String("y")))
- action->setEnabled(false);
- editMenu->addAction(action);
- action = createModelNodeAction(tr("Reset Size"), editMenu, selectedModelNodes, ModelNodeAction::ResetSize);
- if (!modelNodesHaveProperty(selectedModelNodes, QLatin1String("width")) && !modelNodesHaveProperty(selectedModelNodes, QLatin1String("height")))
- action->setEnabled(false);
- editMenu->addAction(action);
- action = createModelNodeAction(tr("Visibility"), editMenu, QList<ModelNode>() << currentSingleNode, ModelNodeAction::ModelNodeVisibility, singleSelected);
- editMenu->addAction(action);
- if (singleSelected && !isItem(currentSingleNode))
- action->setEnabled(false);
-
- } else {
- editMenu->setEnabled(false);
- }
-
- QMenu *anchorMenu = new QMenu(tr("Anchors"), menu);
- menu->addMenu(anchorMenu);
-
-
- if (singleSelected && isInBaseState) {
- QmlItemNode itemNode(currentSingleNode);
-
- bool anchored = itemNode.instanceHasAnchors();
- bool isRootNode = itemNode.isRootNode();
-
- ModelNodeAction *action = createModelNodeAction(tr("Fill"), anchorMenu, QList<ModelNode>() << currentSingleNode, ModelNodeAction::AnchorFill, !anchored && !isRootNode);
- anchorMenu->addAction(action);
- action = createModelNodeAction(tr("Reset"), anchorMenu, QList<ModelNode>() << currentSingleNode, ModelNodeAction::AnchorReset, anchored && !isRootNode);
- anchorMenu->addAction(action);
- } else {
- anchorMenu->setEnabled(false);
- }
-
- QMenu *layoutMenu = new QMenu(tr("Layout"), menu);
- menu->addMenu(layoutMenu);
-
- bool layoutingIsPossible = itemsHaveSameParent(selectedModelNodes) && isInBaseState;
-
- if (!singleSelected && !selectionIsEmpty && layoutingIsPossible) {
-
- ModelNodeAction *action = createModelNodeAction(tr("Layout in Row"), layoutMenu, selectedModelNodes, ModelNodeAction::LayoutRow, true);
- layoutMenu->addAction(action);
- action = createModelNodeAction(tr("Layout in Column"), layoutMenu, selectedModelNodes, ModelNodeAction::LayoutColumn, true);
- layoutMenu->addAction(action);
- action = createModelNodeAction(tr("Layout in Grid"), layoutMenu, selectedModelNodes, ModelNodeAction::LayoutGrid, true);
- layoutMenu->addAction(action);
- action = createModelNodeAction(tr("Layout in Flow"), layoutMenu, selectedModelNodes, ModelNodeAction::LayoutFlow, true);
- layoutMenu->addAction(action);
-
- } else {
- layoutMenu->setEnabled(false);
- }
-
-
- menu->addSeparator();
- bool enterComponent = false;
- if (singleSelected) {
- enterComponent = modelNodeIsComponent(currentSingleNode);
- }
- menu->addAction(createModelNodeAction(tr("Go into Component"), editMenu, QList<ModelNode>() << currentSingleNode, ModelNodeAction::GoIntoComponent, enterComponent));
-
- menu->exec(pos);
- menu->deleteLater();
-}
-
-void ModelNodeContextMenu::setScenePos(const QPoint &pos)
-{
- m_scenePos = pos;
-}
-
-
-ModelNodeAction* ModelNodeContextMenu::createModelNodeAction(const QString &description, QMenu *menu, const QList<ModelNode> &modelNodeList, ModelNodeAction::ModelNodeActionType type, bool enabled)
-{
- ModelNodeAction* action = new ModelNodeAction(description, menu, m_view, modelNodeList, type);
- action->setEnabled(enabled);
- return action;
-}
-
-
-ModelNodeAction::ModelNodeAction( const QString & text, QObject *parent, QmlModelView *view, const QList<ModelNode> &modelNodeList, ModelNodeActionType type) :
- QAction(text, parent), m_view(view), m_modelNodeList(modelNodeList), m_type(type)
-{
- if (type == ModelNodeVisibility) {
- setCheckable(true);
- QmlItemNode itemNode = QmlItemNode(m_modelNodeList.first());
- if (itemNode.isValid())
- setChecked(itemNode.instanceValue("visible").toBool());
- else
- setEnabled(false);
- }
- connect(this, SIGNAL(triggered(bool)), this, SLOT(actionTriggered(bool)));
-}
-
-void ModelNodeAction::goIntoComponent(const ModelNode &modelNode)
-{
-
- if (modelNode.isValid() && modelNodeIsComponent(modelNode)) {
- if (isFileComponent(modelNode))
- openFileForComponent(modelNode);
- else
- openInlineComponent(modelNode);
- }
-}
-
-void ModelNodeAction::actionTriggered(bool b)
-{
- try {
- switch (m_type) {
- case ModelNodeAction::SelectModelNode: select(); break;
- case ModelNodeAction::DeSelectModelNode: deSelect(); break;
- case ModelNodeAction::CutSelection: cut(); break;
- case ModelNodeAction::CopySelection: copy(); break;
- case ModelNodeAction::DeleteSelection: deleteSelection(); break;
- case ModelNodeAction::ToFront: toFront(); break;
- case ModelNodeAction::ToBack: toBack(); break;
- case ModelNodeAction::Raise: raise(); break;
- case ModelNodeAction::Lower: lower(); break;
- case ModelNodeAction::Paste: paste(); break;
- case ModelNodeAction::Undo: undo(); break;
- case ModelNodeAction::Redo: redo(); break;
- case ModelNodeAction::ModelNodeVisibility: setVisible(b); break;
- case ModelNodeAction::ResetSize: resetSize(); break;
- case ModelNodeAction::ResetPosition: resetPosition(); break;
- case ModelNodeAction::GoIntoComponent: goIntoComponent(); break;
- case ModelNodeAction::SetId: setId(); break;
- case ModelNodeAction::ResetZ: resetZ(); break;
- case ModelNodeAction::AnchorFill: anchorsFill(); break;
- case ModelNodeAction::AnchorReset: anchorsReset(); break;
- case ModelNodeAction::LayoutColumn: layoutColumn(); break;
- case ModelNodeAction::LayoutRow: layoutRow(); break;
- case ModelNodeAction::LayoutGrid: layoutGrid(); break;
- case ModelNodeAction::LayoutFlow: layoutFlow(); break;
- }
- } catch (RewritingException e) { //better save then sorry
- QMessageBox::warning(0, "Error", e.description());
- }
-}
-
-void ModelNodeAction::select()
-{
- if (m_view)
- m_view->setSelectedModelNodes(m_modelNodeList);
-}
-
-void ModelNodeAction::deSelect()
-{
- if (m_view) {
- QList<ModelNode> selectedNodes = m_view->selectedModelNodes();
- foreach (const ModelNode &node, m_modelNodeList) {
- if (selectedNodes.contains(node))
- selectedNodes.removeAll(node);
- }
- m_view->setSelectedModelNodes(selectedNodes);
- }
-}
-
-void ModelNodeAction::cut()
-{
-}
-
-
-void ModelNodeAction::copy()
-{
-}
-
-void ModelNodeAction::deleteSelection()
-{
-}
-
-void ModelNodeAction::toFront()
-{
- if (!m_view)
- return;
-
- try {
- QmlItemNode node = m_modelNodeList.first();
- if (node.isValid()) {
- signed int maximumZ = getMaxZValue(siblingsForNode(node));
- maximumZ++;
- node.setVariantProperty("z", maximumZ);
- }
- } catch (RewritingException &e) { //better save then sorry
- QMessageBox::warning(0, "Error", e.description());
- }
-}
-
-
-void ModelNodeAction::toBack()
-{
- if (!m_view)
- return;
- try {
- QmlItemNode node = m_modelNodeList.first();
- if (node.isValid()) {
- signed int minimumZ = getMinZValue(siblingsForNode(node));
- minimumZ--;
- node.setVariantProperty("z", minimumZ);
- }
-
- } catch (RewritingException &e) { //better save then sorry
- QMessageBox::warning(0, "Error", e.description());
- }
-}
-
-void ModelNodeAction::raise()
-{
- if (!m_view)
- return;
-
- try {
- RewriterTransaction transaction(m_view);
- foreach (ModelNode modelNode, m_modelNodeList) {
- QmlItemNode node = modelNode;
- if (node.isValid()) {
- signed int z = node.instanceValue("z").toInt();
- z++;
- node.setVariantProperty("z", z);
- }
- }
- } catch (RewritingException &e) { //better save then sorry
- QMessageBox::warning(0, "Error", e.description());
- }
-}
-
-void ModelNodeAction::lower()
-{
- if (!m_view)
- return;
- try {
- RewriterTransaction transaction(m_view);
- foreach (ModelNode modelNode, m_modelNodeList) {
- QmlItemNode node = modelNode;
- if (node.isValid()) {
- signed int z = node.instanceValue("z").toInt();
- z--;
- node.setVariantProperty("z", z);
- }
- }
- } catch (RewritingException &e) { //better save then sorry
- QMessageBox::warning(0, "Error", e.description());
- }
-}
-
-void ModelNodeAction::paste()
-{
-}
-
-void ModelNodeAction::undo()
-{
-}
-
-void ModelNodeAction::redo()
-{
-}
-
-void ModelNodeAction::setVisible(bool b)
-{
- if (!m_view)
- return;
- try {
- m_modelNodeList.first().variantProperty("visible") = b;
- } catch (RewritingException &e) { //better save then sorry
- QMessageBox::warning(0, "Error", e.description());
- }
-}
-
-
-void ModelNodeAction::resetSize()
-{
- if (!m_view)
- return;
- try {
- RewriterTransaction transaction(m_view);
- foreach (ModelNode node, m_modelNodeList) {
- node.removeProperty("width");
- node.removeProperty("height");
- }
- } catch (RewritingException &e) { //better save then sorry
- QMessageBox::warning(0, "Error", e.description());
- }
-}
-
-void ModelNodeAction::resetPosition()
-{
- if (!m_view)
- return;
- try {
- RewriterTransaction transaction(m_view);
- foreach (ModelNode node, m_modelNodeList) {
- node.removeProperty("x");
- node.removeProperty("y");
- }
- } catch (RewritingException &e) { //better save then sorry
- QMessageBox::warning(0, "Error", e.description());
- }
-}
-
-void ModelNodeAction::goIntoComponent()
-{
- goIntoComponent(m_modelNodeList.first());
-}
-
-void ModelNodeAction::setId()
-{
-}
-
-void ModelNodeAction::resetZ()
-{
- if (!m_view)
- return;
-
- RewriterTransaction transaction(m_view);
- foreach (ModelNode node, m_modelNodeList) {
- node.removeProperty("z");
- }
-}
-
-static inline void backupPropertyAndRemove(ModelNode node, const QString &propertyName)
-{
- if (node.hasVariantProperty(propertyName)) {
- node.setAuxiliaryData(auxDataString + propertyName, node.variantProperty(propertyName).value());
- node.removeProperty(propertyName);
-
- }
- if (node.hasBindingProperty(propertyName)) {
- node.setAuxiliaryData(auxDataString + propertyName, QmlItemNode(node).instanceValue(propertyName));
- node.removeProperty(propertyName);
- }
-}
-
-
-static inline void restoreProperty(ModelNode node, const QString &propertyName)
-{
- if (node.hasAuxiliaryData(auxDataString + propertyName))
- node.variantProperty(propertyName) = node.auxiliaryData(auxDataString + propertyName);
-}
-
-void ModelNodeAction::anchorsFill()
-{
- if (!m_view)
- return;
-
- RewriterTransaction transaction(m_view);
-
- foreach (ModelNode modelNode, m_modelNodeList) {
- QmlItemNode node = modelNode;
- if (node.isValid()) {
- node.anchors().fill();
- backupPropertyAndRemove(modelNode, QLatin1String("x"));
- backupPropertyAndRemove(modelNode, QLatin1String("y"));
- backupPropertyAndRemove(modelNode, QLatin1String("width"));
- backupPropertyAndRemove(modelNode, QLatin1String("height"));
- }
- }
-}
-
-void ModelNodeAction::anchorsReset()
-{
- if (!m_view)
- return;
- RewriterTransaction transaction(m_view);
-
- foreach (ModelNode modelNode, m_modelNodeList) {
- QmlItemNode node = modelNode;
- if (node.isValid()) {
- node.anchors().removeAnchors();
- node.anchors().removeMargins();
- restoreProperty(node, "x");
- restoreProperty(node, "y");
- restoreProperty(node, "width");
- restoreProperty(node, "height");
- }
- }
-}
-
-static inline void reparentTo(const ModelNode &node, const QmlItemNode &parent)
-{
-
- if (parent.isValid() && node.isValid()) {
- NodeAbstractProperty parentProperty;
-
- if (parent.hasDefaultProperty()) {
- parentProperty = parent.nodeAbstractProperty(parent.defaultProperty());
- } else {
- parentProperty = parent.nodeAbstractProperty(QLatin1String("data"));
- }
-
- parentProperty.reparentHere(node);
- }
-}
-
-
-bool compareByX(const ModelNode &node1, const ModelNode &node2)
-{
- QmlItemNode itemNode1 = QmlItemNode(node1);
- QmlItemNode itemNode2 = QmlItemNode(node2);
- if (itemNode1.isValid() && itemNode2.isValid())
- return itemNode1.instancePosition().x() < itemNode2.instancePosition().x();
- return false;
-}
-
-bool compareByY(const ModelNode &node1, const ModelNode &node2)
-{
- QmlItemNode itemNode1 = QmlItemNode(node1);
- QmlItemNode itemNode2 = QmlItemNode(node2);
- if (itemNode1.isValid() && itemNode2.isValid())
- return itemNode1.instancePosition().y() < itemNode2.instancePosition().y();
- return false;
-}
-
-bool compareByGrid(const ModelNode &node1, const ModelNode &node2)
-{
- QmlItemNode itemNode1 = QmlItemNode(node1);
- QmlItemNode itemNode2 = QmlItemNode(node2);
- if (itemNode1.isValid() && itemNode2.isValid()) {
- if ((itemNode1.instancePosition().y() + itemNode1.instanceSize().height()) < itemNode2.instancePosition().y())
- return true;
- if ((itemNode2.instancePosition().y() + itemNode2.instanceSize().height()) < itemNode1.instancePosition().y())
- return false; //first sort y (rows)
- return itemNode1.instancePosition().x() < itemNode2.instancePosition().x();
- }
- return false;
-}
-
-static inline QPoint getUpperLeftPosition(const QList<ModelNode> &modelNodeList)
-{
- QPoint p(INT_MAX, INT_MAX);
- foreach (ModelNode modelNode, modelNodeList) {
- QmlItemNode itemNode = QmlItemNode(modelNode);
- if (itemNode.isValid()) {
- if (itemNode.instancePosition().x() < p.x())
- p.setX(itemNode.instancePosition().x());
- if (itemNode.instancePosition().y() < p.y())
- p.setY(itemNode.instancePosition().y());
- }
-
- }
- return p;
-}
-
-void ModelNodeAction::layoutRow()
-{
- if (!m_view)
- return;
-
- ModelNode row;
- {
- RewriterTransaction transaction(m_view);
-
- QmlItemNode parent = QmlItemNode(m_modelNodeList.first()).instanceParent().toQmlItemNode();
- if (!parent.isValid())
- return;
-
- row = m_view->createModelNode(QLatin1String("QtQuick.Row"), parent.modelNode().majorQtQuickVersion(), 0);
-
- reparentTo(row, parent);
- }
-
- {
- RewriterTransaction transaction(m_view);
-
- QPoint pos = getUpperLeftPosition(m_modelNodeList);
- row.variantProperty(QLatin1String("x")) = pos.x();
- row.variantProperty(QLatin1String("y")) = pos.y();
-
- QList<ModelNode> sortedList = m_modelNodeList;
- qSort(sortedList.begin(), sortedList.end(), compareByX);
-
- foreach (ModelNode modelNode, sortedList) {
- reparentTo(modelNode, row);
- modelNode.removeProperty(QLatin1String("x"));
- modelNode.removeProperty(QLatin1String("y"));
- }
- }
-}
-
-void ModelNodeAction::layoutColumn()
-{
- if (!m_view)
- return;
-
- ModelNode column;
- {
- RewriterTransaction transaction(m_view);
-
- QmlItemNode parent = QmlItemNode(m_modelNodeList.first()).instanceParent().toQmlItemNode();
- if (!parent.isValid())
- return;
-
- column = m_view->createModelNode(QLatin1String("QtQuick.Column"), parent.modelNode().majorQtQuickVersion(), 0);
-
- reparentTo(column, parent);
- }
-
- {
- RewriterTransaction transaction(m_view);
-
- QPoint pos = getUpperLeftPosition(m_modelNodeList);
- column.variantProperty(QLatin1String("x")) = pos.x();
- column.variantProperty(QLatin1String("y")) = pos.y();
-
- QList<ModelNode> sortedList = m_modelNodeList;
- qSort(sortedList.begin(), sortedList.end(), compareByY);
-
- foreach (ModelNode modelNode, sortedList) {
- reparentTo(modelNode, column);
- modelNode.removeProperty(QLatin1String("x"));
- modelNode.removeProperty(QLatin1String("y"));
- }
- }
-}
-
-void ModelNodeAction::layoutGrid()
-{
- if (!m_view)
- return;
-
- ModelNode grid;
- {
- RewriterTransaction transaction(m_view);
-
- QmlItemNode parent = QmlItemNode(m_modelNodeList.first()).instanceParent().toQmlItemNode();
- if (!parent.isValid())
- return;
-
- grid = m_view->createModelNode(QLatin1String("QtQuick.Grid"), parent.modelNode().majorQtQuickVersion(), 0);
- grid.variantProperty(QLatin1String("columns")) = int(sqrt(double(m_modelNodeList.count())));
-
- reparentTo(grid, parent);
- }
-
- {
- RewriterTransaction transaction(m_view);
-
- QPoint pos = getUpperLeftPosition(m_modelNodeList);
- grid.variantProperty(QLatin1String("x")) = pos.x();
- grid.variantProperty(QLatin1String("y")) = pos.y();
-
- QList<ModelNode> sortedList = m_modelNodeList;
- qSort(sortedList.begin(), sortedList.end(), compareByGrid);
-
- foreach (ModelNode modelNode, sortedList) {
- reparentTo(modelNode, grid);
- modelNode.removeProperty(QLatin1String("x"));
- modelNode.removeProperty(QLatin1String("y"));
- }
- }
-}
-
-void ModelNodeAction::layoutFlow()
-{
- if (!m_view)
- return;
-
- ModelNode flow;
- {
- RewriterTransaction transaction(m_view);
-
- QmlItemNode parent = QmlItemNode(m_modelNodeList.first()).instanceParent().toQmlItemNode();
- if (!parent.isValid())
- return;
-
- flow = m_view->createModelNode(QLatin1String("QtQuick.Flow"), parent.modelNode().majorQtQuickVersion(), 0);
-
- reparentTo(flow, parent);
- }
-
- {
- RewriterTransaction transaction(m_view);
-
- QPoint pos = getUpperLeftPosition(m_modelNodeList);
- flow.variantProperty(QLatin1String("x")) = pos.x();
- flow.variantProperty(QLatin1String("y")) = pos.y();
-
- QList<ModelNode> sortedList = m_modelNodeList;
- qSort(sortedList.begin(), sortedList.end(), compareByGrid);
-
- foreach (ModelNode modelNode, sortedList) {
- reparentTo(modelNode, flow);
- modelNode.removeProperty(QLatin1String("x"));
- modelNode.removeProperty(QLatin1String("y"));
- }
- }
-}
-
-}
diff --git a/src/plugins/qmldesigner/designercore/model/modelnodecontextmenu.h b/src/plugins/qmldesigner/designercore/model/modelnodecontextmenu.h
deleted file mode 100644
index 903f64b257..0000000000
--- a/src/plugins/qmldesigner/designercore/model/modelnodecontextmenu.h
+++ /dev/null
@@ -1,131 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** 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 Digia. For licensing terms and
-** conditions see http://qt.digia.com/licensing. For further information
-** use the contact form at http://qt.digia.com/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, 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, Digia gives you certain additional
-** rights. These rights are described in the Digia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-****************************************************************************/
-
-#ifndef MODELNODECONTEXTMENU_H
-#define MODELNODECONTEXTMENU_H
-
-#include <QObject>
-#include <QPoint>
-#include <QAction>
-#include <QCoreApplication>
-#include <QMenu>
-#include <qmlmodelview.h>
-
-namespace QmlDesigner {
-
-class ModelNodeAction : public QAction
-{
- Q_OBJECT
-public:
- enum ModelNodeActionType {
- SelectModelNode,
- DeSelectModelNode,
- CutSelection,
- CopySelection,
- DeleteSelection,
- ToFront,
- ToBack,
- Raise,
- Lower,
- Paste,
- Undo,
- Redo,
- ModelNodeVisibility,
- ResetSize,
- ResetPosition,
- GoIntoComponent,
- SetId,
- ResetZ,
- AnchorReset,
- AnchorFill,
- LayoutRow,
- LayoutColumn,
- LayoutGrid,
- LayoutFlow
- };
-
-
- ModelNodeAction( const QString & text, QObject *parent, QmlModelView *view, const QList<ModelNode> &modelNodeList, ModelNodeActionType type);
-
- static void goIntoComponent(const ModelNode &modelNode);
-
-public slots:
- void actionTriggered(bool);
-
-private:
- void select();
- void deSelect();
- void cut();
- void copy();
- void deleteSelection();
- void toFront();
- void toBack();
- void raise();
- void lower();
- void paste();
- void undo();
- void redo();
- void setVisible(bool);
- void resetSize();
- void resetPosition();
- void goIntoComponent();
- void setId();
- void resetZ();
- void anchorsFill();
- void anchorsReset();
- void layoutRow();
- void layoutColumn();
- void layoutGrid();
- void layoutFlow();
-
- QmlModelView *m_view;
- QList<ModelNode> m_modelNodeList;
- ModelNodeActionType m_type;
-};
-
-class ModelNodeContextMenu
-{
- Q_DECLARE_TR_FUNCTIONS(QmlDesigner::ModelNodeContextMenu)
-public:
- ModelNodeContextMenu(QmlModelView *view);
- void execute(const QPoint &pos, bool selectionMenu);
- void setScenePos(const QPoint &pos);
-
-private:
- ModelNodeAction* createModelNodeAction(const QString &description, QMenu *menu, const QList<ModelNode> &modelNodeList, ModelNodeAction::ModelNodeActionType type, bool enabled = true);
-
- QmlModelView *m_view;
- QPoint m_scenePos;
-
-};
-
-
-};
-
-#endif // MODELNODECONTEXTMENU_H
diff --git a/src/plugins/qmldesigner/designercore/model/modelrewriter.cpp b/src/plugins/qmldesigner/designercore/model/modelrewriter.cpp
index f715916f9e..f51239ebcf 100644
--- a/src/plugins/qmldesigner/designercore/model/modelrewriter.cpp
+++ b/src/plugins/qmldesigner/designercore/model/modelrewriter.cpp
@@ -387,21 +387,17 @@ ModificationGroupToken ModelRewriter::beginModificationGroup()
void ModelRewriter::endModificationGroup(const ModificationGroupToken& token)
{
- if (m_activeModificationGroups.isEmpty()) {
+ if (m_activeModificationGroups.isEmpty())
throw ModificationGroupException(__LINE__, Q_FUNC_INFO, __FILE__);
- }
- if (m_activeModificationGroups.last() != token) {
+ if (m_activeModificationGroups.last() != token)
throw ModificationGroupException(__LINE__, Q_FUNC_INFO, __FILE__);
- }
- if (!m_activeModificationGroups.removeAll(token)) {
+ if (!m_activeModificationGroups.removeAll(token))
throw ModificationGroupException(__LINE__, Q_FUNC_INFO, __FILE__);
- }
- if (!modificationGroupActive()) {
+ if (!modificationGroupActive())
m_modelToTextMerger.applyChanges(*m_textModifier);
- }
}
bool ModelRewriter::lastRewriteFailed() const
@@ -438,9 +434,8 @@ bool ModelRewriter::paste(QMimeData *transferData, const InternalNode::Pointer &
Paster paster(transferData, intoNode);
if (paster.doPaste(m_modelToTextMerger)) {
- if (!modificationGroupActive()) {
+ if (!modificationGroupActive())
m_modelToTextMerger.applyChanges(*m_textModifier);
- }
return true;
} else {
m_modelToTextMerger.clear();
diff --git a/src/plugins/qmldesigner/designercore/model/modeltotextmerger.cpp b/src/plugins/qmldesigner/designercore/model/modeltotextmerger.cpp
index 219a33137f..9e171dd1a6 100644
--- a/src/plugins/qmldesigner/designercore/model/modeltotextmerger.cpp
+++ b/src/plugins/qmldesigner/designercore/model/modeltotextmerger.cpp
@@ -66,13 +66,12 @@ void ModelToTextMerger::nodeRemoved(const ModelNode &removedNode, const NodeAbst
if (!isInHierarchy(parentProperty))
return;
- if (parentProperty.isDefaultProperty()) {
+ if (parentProperty.isDefaultProperty())
schedule(new RemoveNodeRewriteAction(removedNode));
- } else if (AbstractView::EmptyPropertiesRemoved == propertyChange) {
+ else if (AbstractView::EmptyPropertiesRemoved == propertyChange)
schedule(new RemovePropertyRewriteAction(parentProperty));
- } else if (parentProperty.isNodeListProperty()) {
+ else if (parentProperty.isNodeListProperty())
schedule(new RemoveNodeRewriteAction(removedNode));
- }
}
void ModelToTextMerger::propertiesRemoved(const QList<AbstractProperty>& propertyList)
@@ -157,11 +156,10 @@ void ModelToTextMerger::nodeReparented(const ModelNode &node, const NodeAbstract
if (oldPropertyParent.isNodeProperty()) {
// ignore, the subsequent remove property will take care of all
} else if (oldPropertyParent.isNodeListProperty()) {
- if (!oldPropertyParent.isDefaultProperty() && oldPropertyParent.toNodeListProperty().toModelNodeList().size() == 0) {
+ if (!oldPropertyParent.isDefaultProperty() && oldPropertyParent.toNodeListProperty().toModelNodeList().size() == 0)
schedule(new RemovePropertyRewriteAction(oldPropertyParent));
- } else {
+ else
schedule(new RemoveNodeRewriteAction(node));
- }
} else {
schedule(new RemoveNodeRewriteAction(node));
}
@@ -253,9 +251,8 @@ void ModelToTextMerger::applyChanges()
for (int i = 0; i < m_rewriteActions.size(); ++i) {
RewriteAction* action = m_rewriteActions.at(i);
- if (DebugRewriteActions) {
+ if (DebugRewriteActions)
qDebug() << "Next rewrite action:" << qPrintable(action->info());
- }
ModelNodePositionStorage *positionStore = m_rewriterView->positionStorage();
bool success = action->execute(refactoring, *positionStore);
diff --git a/src/plugins/qmldesigner/designercore/model/modeltotextmerger.h b/src/plugins/qmldesigner/designercore/model/modeltotextmerger.h
index ca910dd674..d12481edb2 100644
--- a/src/plugins/qmldesigner/designercore/model/modeltotextmerger.h
+++ b/src/plugins/qmldesigner/designercore/model/modeltotextmerger.h
@@ -30,7 +30,7 @@
#ifndef MODELTOTEXTMERGER_H
#define MODELTOTEXTMERGER_H
-#include "corelib_global.h"
+#include "qmldesignercorelib_global.h"
#include <modelnode.h>
#include "abstractview.h"
#include "nodeabstractproperty.h"
@@ -46,7 +46,7 @@
namespace QmlDesigner {
-class CORESHARED_EXPORT RewriterView;
+class RewriterView;
namespace Internal {
diff --git a/src/plugins/qmldesigner/designercore/model/nodelistproperty.cpp b/src/plugins/qmldesigner/designercore/model/nodelistproperty.cpp
index 1f2bfafde3..9916a186ce 100644
--- a/src/plugins/qmldesigner/designercore/model/nodelistproperty.cpp
+++ b/src/plugins/qmldesigner/designercore/model/nodelistproperty.cpp
@@ -76,9 +76,8 @@ const QList<ModelNode> NodeListProperty::toModelNodeList() const
if (internalNode()->hasProperty(name())) {
Internal::InternalProperty::Pointer internalProperty = internalNode()->property(name());
- if (internalProperty->isNodeListProperty()) {
+ if (internalProperty->isNodeListProperty())
return internalNodesToModelNodes(internalProperty->toNodeListProperty()->nodeList(), model(), view());
- }
}
return QList<ModelNode>();
diff --git a/src/plugins/qmldesigner/designercore/model/painteventfilter.cpp b/src/plugins/qmldesigner/designercore/model/painteventfilter.cpp
index b7a48298c5..bf88ee9c8a 100644
--- a/src/plugins/qmldesigner/designercore/model/painteventfilter.cpp
+++ b/src/plugins/qmldesigner/designercore/model/painteventfilter.cpp
@@ -46,7 +46,7 @@ PaintEventFilter::PaintEventFilter(QObject *parent)
bool PaintEventFilter::eventFilter(QObject *object, QEvent *event)
{
- switch(event->type())
+ switch (event->type())
{
case QEvent::Paint :
{
diff --git a/src/plugins/qmldesigner/designercore/model/paster.cpp b/src/plugins/qmldesigner/designercore/model/paster.cpp
index 52f0662e8e..17c2fb4794 100644
--- a/src/plugins/qmldesigner/designercore/model/paster.cpp
+++ b/src/plugins/qmldesigner/designercore/model/paster.cpp
@@ -69,9 +69,8 @@ public:
Node::accept(sourceAST->imports, this);
- if (sourceAST->members && sourceAST->members->member) {
+ if (sourceAST->members && sourceAST->members->member)
visitRootMember(sourceAST->members->member);
- }
return m_locations.isEmpty();
}
@@ -136,18 +135,16 @@ protected:
switchStateName(prevStateName);
return false;
} else if (ast->qualifiedTypeNameId && ast->qualifiedTypeNameId->name && ast->qualifiedTypeNameId->name->asString() == "PropertyChanges") {
- if (m_locations.remove(toLocation(start, end))) {
+ if (m_locations.remove(toLocation(start, end)))
m_paster->addNodeState(m_stateName, textAt(start, end));
- }
return false;
} else {
return true;
}
} else {
- if (m_locations.remove(toLocation(start, end))) {
+ if (m_locations.remove(toLocation(start, end)))
m_paster->addNode(textAt(start, end));
- }
return false;
}
@@ -171,9 +168,8 @@ protected:
bool visit(UiScriptBinding *ast) {
if (m_inStates && ast->qualifiedId && ast->qualifiedId->name && ast->qualifiedId->name->asString() == "name") {
if (ExpressionStatement *stmt = AST::cast<ExpressionStatement *>(ast->statement)) {
- if (StringLiteral * str = AST::cast<StringLiteral *>(stmt->expression)) {
+ if (StringLiteral * str = AST::cast<StringLiteral *>(stmt->expression))
m_stateName = str->value->asString();
- }
}
}
diff --git a/src/plugins/qmldesigner/designercore/model/plaintexteditmodifier.cpp b/src/plugins/qmldesigner/designercore/model/plaintexteditmodifier.cpp
index ff86eb6c4c..0a1112a0a5 100644
--- a/src/plugins/qmldesigner/designercore/model/plaintexteditmodifier.cpp
+++ b/src/plugins/qmldesigner/designercore/model/plaintexteditmodifier.cpp
@@ -154,11 +154,10 @@ void PlainTextEditModifier::commitGroup()
void PlainTextEditModifier::textEditChanged()
{
- if (!m_ongoingTextChange && m_changeSignalsEnabled) {
+ if (!m_ongoingTextChange && m_changeSignalsEnabled)
emit textChanged();
- } else {
+ else
m_pendingChangeSignal = true;
- }
}
void PlainTextEditModifier::runRewriting(ChangeSet *changeSet)
diff --git a/src/plugins/qmldesigner/designercore/model/propertycontainer.cpp b/src/plugins/qmldesigner/designercore/model/propertycontainer.cpp
index c3b199cacc..54750f79e5 100644
--- a/src/plugins/qmldesigner/designercore/model/propertycontainer.cpp
+++ b/src/plugins/qmldesigner/designercore/model/propertycontainer.cpp
@@ -115,6 +115,15 @@ QDataStream &operator>>(QDataStream &stream, PropertyContainer &propertyContaine
return stream;
}
+QDebug operator<<(QDebug debug, const PropertyContainer &propertyContainer)
+{
+ debug << propertyContainer.m_name;
+ debug << propertyContainer.m_type;
+ debug << propertyContainer.m_value;
+
+ return debug.space();
+}
+
QDataStream &operator<<(QDataStream &stream, const QList<PropertyContainer> &propertyContainerList)
{
stream << propertyContainerList.count();
@@ -129,7 +138,7 @@ QDataStream &operator>>(QDataStream &stream, QList<PropertyContainer> &propertyC
int count;
stream >> count;
Q_ASSERT(count >= 0);
- for( int i = 0; i < count; i++) {
+ for ( int i = 0; i < count; i++) {
PropertyContainer propertyContainer;
stream >> propertyContainer;
propertyContainerList.append(propertyContainer);
@@ -138,6 +147,14 @@ QDataStream &operator>>(QDataStream &stream, QList<PropertyContainer> &propertyC
return stream;
}
+QDebug operator<<(QDebug debug, QList<PropertyContainer> &propertyContainerList)
+{
+ foreach (const PropertyContainer &propertyContainer, propertyContainerList)
+ debug << propertyContainer;
+
+ return debug.space();
+}
+
} //namespace QmlDesigner
diff --git a/src/plugins/qmldesigner/designercore/model/propertyparser.cpp b/src/plugins/qmldesigner/designercore/model/propertyparser.cpp
index bd43fa68de..c03f244072 100644
--- a/src/plugins/qmldesigner/designercore/model/propertyparser.cpp
+++ b/src/plugins/qmldesigner/designercore/model/propertyparser.cpp
@@ -59,8 +59,8 @@ static uchar fromHex(const uchar c, const uchar c2)
static uchar fromHex(const QString &s, int idx)
{
- uchar c = s.at(idx).toAscii();
- uchar c2 = s.at(idx + 1).toAscii();
+ uchar c = s.at(idx).toLatin1();
+ uchar c2 = s.at(idx + 1).toLatin1();
return fromHex(c, c2);
}
@@ -191,7 +191,7 @@ QVariant read(const QString &typeStr, const QString &str, const MetaInfo &)
QVariant read(const QString &typeStr, const QString &str)
{
- int type = QMetaType::type(typeStr.toAscii().constData());
+ int type = QMetaType::type(typeStr.toLatin1().constData());
if (type == 0) {
qWarning() << "Type " << typeStr
<< " is unknown to QMetaType system. Cannot create properly typed QVariant for value "
diff --git a/src/plugins/qmldesigner/designercore/model/qmlanchors.cpp b/src/plugins/qmldesigner/designercore/model/qmlanchors.cpp
index a2565e7e30..6b2e3cc362 100644
--- a/src/plugins/qmldesigner/designercore/model/qmlanchors.cpp
+++ b/src/plugins/qmldesigner/designercore/model/qmlanchors.cpp
@@ -69,25 +69,24 @@ bool AnchorLine::isVerticalAnchorLine(Type anchorline)
static AnchorLine::Type propertyNameToLineType(const QString & string)
{
- if (string == QLatin1String("left")) {
+ if (string == QLatin1String("left"))
return AnchorLine::Left;
- } else if (string == QLatin1String("top")) {
+ else if (string == QLatin1String("top"))
return AnchorLine::Top;
- } else if (string == QLatin1String("right")) {
+ else if (string == QLatin1String("right"))
return AnchorLine::Right;
- } else if (string == QLatin1String("bottom")) {
+ else if (string == QLatin1String("bottom"))
return AnchorLine::Bottom;
- } else if (string == QLatin1String("horizontalCenter")) {
+ else if (string == QLatin1String("horizontalCenter"))
return AnchorLine::HorizontalCenter;
- } else if (string == QLatin1String("verticalCenter")) {
+ else if (string == QLatin1String("verticalCenter"))
return AnchorLine::VerticalCenter;
- } else if (string == QLatin1String("baseline")) {
+ else if (string == QLatin1String("baseline"))
return AnchorLine::VerticalCenter;
- } else if (string == QLatin1String("centerIn")) {
+ else if (string == QLatin1String("centerIn"))
return AnchorLine::Center;
- } else if (string == QLatin1String("fill")) {
+ else if (string == QLatin1String("fill"))
return AnchorLine::Fill;
- }
return AnchorLine::Invalid;
}
diff --git a/src/plugins/qmldesigner/designercore/model/qmlchangeset.cpp b/src/plugins/qmldesigner/designercore/model/qmlchangeset.cpp
index 8603b9ae69..2e4773f163 100644
--- a/src/plugins/qmldesigner/designercore/model/qmlchangeset.cpp
+++ b/src/plugins/qmldesigner/designercore/model/qmlchangeset.cpp
@@ -37,11 +37,10 @@ namespace QmlDesigner {
ModelNode QmlModelStateOperation::target() const
{
- if (modelNode().property("target").isBindingProperty()) {
+ if (modelNode().property("target").isBindingProperty())
return modelNode().bindingProperty("target").resolveToModelNode();
- } else {
+ else
return ModelNode(); //exception?
- }
}
void QmlModelStateOperation::setTarget(const ModelNode &target)
@@ -56,7 +55,9 @@ bool QmlPropertyChanges::isValid() const
bool QmlModelStateOperation::isValid() const
{
- return QmlModelNodeFacade::isValid() && modelNode().metaInfo().isSubclassOf("<cpp>.QDeclarativeStateOperation", -1, -1);
+ return QmlModelNodeFacade::isValid() && (
+ modelNode().metaInfo().isSubclassOf("<cpp>.QDeclarative1StateOperation", -1, -1)
+ || modelNode().metaInfo().isSubclassOf("<cpp>.QDeclarativeStateOperation", -1, -1));
}
void QmlPropertyChanges::removeProperty(const QString &name)
diff --git a/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp b/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp
index 5c47e5474b..3e41936cf9 100644
--- a/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp
+++ b/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp
@@ -29,7 +29,6 @@
#include "qmlitemnode.h"
#include <metainfo.h>
-#include <QDeclarativeView>
#include "qmlchangeset.h"
#include "variantproperty.h"
#include "nodeproperty.h"
@@ -328,7 +327,7 @@ QmlModelState QmlModelStateGroup::addState(const QString &name)
PropertyListType propertyList;
propertyList.append(qMakePair(QString("name"), QVariant(name)));
- ModelNode newState = modelNode().view()->createModelNode("QtQuick.State", 1, 0, propertyList);
+ ModelNode newState = QmlObjectNode(modelNode()).qmlModelView()->createQmlState(propertyList);
modelNode().nodeListProperty("states").reparentHere(newState);
return newState;
diff --git a/src/plugins/qmldesigner/designercore/model/qmlmodelview.cpp b/src/plugins/qmldesigner/designercore/model/qmlmodelview.cpp
index 03f3a30ae2..868327344a 100644
--- a/src/plugins/qmldesigner/designercore/model/qmlmodelview.cpp
+++ b/src/plugins/qmldesigner/designercore/model/qmlmodelview.cpp
@@ -45,8 +45,9 @@
#include "rewriterview.h"
#include "plaintexteditmodifier.h"
#include "modelmerger.h"
-#include "modelnodecontextmenu.h"
+#include "nodemetainfo.h"
+#include <utils/qtcassert.h>
namespace QmlDesigner {
@@ -110,7 +111,7 @@ QmlItemNode QmlModelView::createQmlItemNodeFromImage(const QString &imageName, c
RewriterTransaction transaction = beginRewriterTransaction();
{
const QString newImportUrl = QLatin1String("QtQuick");
- const QString newImportVersion = QLatin1String("1.0");
+ const QString newImportVersion = QLatin1String("1.1");
Import newImport = Import::createLibraryImport(newImportUrl, newImportVersion);
foreach (const Import &import, model()->imports()) {
@@ -123,9 +124,8 @@ QmlItemNode QmlModelView::createQmlItemNodeFromImage(const QString &imageName, c
}
}
- if (!model()->imports().contains(newImport)) {
+ if (!model()->imports().contains(newImport))
model()->changeImports(QList<Import>() << newImport, QList<Import>());
- }
QList<QPair<QString, QVariant> > propertyPairList;
propertyPairList.append(qMakePair(QString("x"), QVariant( round(position.x(), 4))));
@@ -140,7 +140,7 @@ QmlItemNode QmlModelView::createQmlItemNodeFromImage(const QString &imageName, c
}
propertyPairList.append(qMakePair(QString("source"), QVariant(relativeImageName)));
- newNode = createQmlItemNode("QtQuick.Image", 1, 0, propertyPairList);
+ newNode = createQmlItemNode("QtQuick.Image", -1, -1, propertyPairList);
parentNode.nodeAbstractProperty("data").reparentHere(newNode);
Q_ASSERT(newNode.isValid());
@@ -179,6 +179,12 @@ QmlItemNode QmlModelView::createQmlItemNode(const ItemLibraryEntry &itemLibraryE
try {
RewriterTransaction transaction = beginRewriterTransaction();
+
+ NodeMetaInfo metaInfo = model()->metaInfo(itemLibraryEntry.typeName());
+
+ int minorVersion = metaInfo.minorVersion();
+ int majorVersion = metaInfo.majorVersion();
+
if (itemLibraryEntry.typeName().contains('.')) {
const QString newImportUrl = itemLibraryEntry.requiredImport();
@@ -197,9 +203,8 @@ QmlItemNode QmlModelView::createQmlItemNode(const ItemLibraryEntry &itemLibraryE
}
}
- if (!model()->hasImport(newImport, true, true)) {
+ if (!model()->hasImport(newImport, true, true))
model()->changeImports(QList<Import>() << newImport, QList<Import>());
- }
}
}
@@ -211,7 +216,7 @@ QmlItemNode QmlModelView::createQmlItemNode(const ItemLibraryEntry &itemLibraryE
foreach (const PropertyContainer &property, itemLibraryEntry.properties())
propertyPairList.append(qMakePair(property.name(), property.value()));
- newNode = createQmlItemNode(itemLibraryEntry.typeName(), itemLibraryEntry.majorVersion(), itemLibraryEntry.minorVersion(), propertyPairList);
+ newNode = createQmlItemNode(itemLibraryEntry.typeName(), majorVersion, minorVersion, propertyPairList);
} else {
QScopedPointer<Model> inputModel(Model::create("QtQuick.Rectangle", 1, 0, model()));
inputModel->setFileUrl(model()->fileUrl());
@@ -224,7 +229,7 @@ QmlItemNode QmlModelView::createQmlItemNode(const ItemLibraryEntry &itemLibraryE
QScopedPointer<RewriterView> rewriterView(new RewriterView(RewriterView::Amend, 0));
rewriterView->setCheckSemanticErrors(false);
rewriterView->setTextModifier(&modifier);
- inputModel->attachView(rewriterView.data());
+ inputModel->setRewriterView(rewriterView.data());
if (rewriterView->errors().isEmpty() && rewriterView->rootModelNode().isValid()) {
ModelNode rootModelNode = rewriterView->rootModelNode();
@@ -234,13 +239,12 @@ QmlItemNode QmlModelView::createQmlItemNode(const ItemLibraryEntry &itemLibraryE
rootModelNode.variantProperty("y") = propertyPairList.at(1).second;
ModelMerger merger(this);
- newNode = merger.insertModel(rootModelNode);
+ newNode = merger.insertModel(rootModelNode);
}
}
- if (parentNode.hasDefaultProperty()) {
+ if (parentNode.hasDefaultProperty())
parentNode.nodeAbstractProperty(parentNode.defaultProperty()).reparentHere(newNode);
- }
if (!newNode.isValid())
return newNode;
@@ -424,13 +428,6 @@ void QmlModelView::nodeSourceChanged(const ModelNode &, const QString & /*newNod
}
-void QmlModelView::showContextMenu(const QPoint &globalPos, const QPoint &scenePos, bool showSelection)
-{
- ModelNodeContextMenu contextMenu(this);
- contextMenu.setScenePos(scenePos);
- contextMenu.execute(globalPos, showSelection);
-}
-
void QmlModelView::rewriterBeginTransaction()
{
@@ -473,5 +470,16 @@ void QmlModelView::otherPropertyChanged(const QmlObjectNode &/*qmlObjectNode*/,
{
}
+ModelNode QmlModelView::createQmlState(const QmlDesigner::PropertyListType &propertyList)
+{
+
+ QTC_CHECK(rootModelNode().majorQtQuickVersion() < 3);
+
+ if (rootModelNode().majorQtQuickVersion() > 1)
+ return createModelNode("QtQuick.State", 2, 0, propertyList);
+ else
+ return createModelNode("QtQuick.State", 1, 0, propertyList);
+}
+
} //QmlDesigner
diff --git a/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp b/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp
index 8f5b53b924..3d0af0bb6a 100644
--- a/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp
+++ b/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp
@@ -96,7 +96,7 @@ instanciated instance of this object.
*/
QVariant QmlObjectNode::instanceValue(const QString &name) const
-{
+{
return nodeInstance().property(name);
}
@@ -356,7 +356,7 @@ QList<ModelNode> toModelNodeList(const QList<QmlObjectNode> &fxObjectNodeList)
{
QList<ModelNode> modelNodeList;
- foreach(const QmlObjectNode &fxObjectNode, fxObjectNodeList)
+ foreach (const QmlObjectNode &fxObjectNode, fxObjectNodeList)
modelNodeList.append(fxObjectNode.modelNode());
return modelNodeList;
@@ -366,7 +366,7 @@ QList<QmlObjectNode> toQmlObjectNodeList(const QList<ModelNode> &modelNodeList)
{
QList<QmlObjectNode> qmlObjectNodeList;
- foreach(const ModelNode &modelNode, modelNodeList) {
+ foreach (const ModelNode &modelNode, modelNodeList) {
QmlObjectNode objectNode(modelNode);
if (objectNode.isValid())
qmlObjectNodeList.append(objectNode);
@@ -464,9 +464,8 @@ QString QmlObjectNode::defaultProperty() const
void QmlObjectNode::setParent(QmlObjectNode newParent)
{
- if (newParent.hasDefaultProperty()) {
+ if (newParent.hasDefaultProperty())
newParent.modelNode().nodeAbstractProperty(newParent.defaultProperty()).reparentHere(modelNode());
- }
}
QmlItemNode QmlObjectNode::toQmlItemNode() const
diff --git a/src/plugins/qmldesigner/designercore/model/qmlstate.cpp b/src/plugins/qmldesigner/designercore/model/qmlstate.cpp
index 9d183991b5..ba6ce14543 100644
--- a/src/plugins/qmldesigner/designercore/model/qmlstate.cpp
+++ b/src/plugins/qmldesigner/designercore/model/qmlstate.cpp
@@ -118,7 +118,7 @@ bool QmlModelState::hasPropertyChanges(const ModelNode &node) const
if (isBaseState())
return false;
- foreach(const QmlPropertyChanges &changeSet, propertyChanges()) {
+ foreach (const QmlPropertyChanges &changeSet, propertyChanges()) {
if (changeSet.target().isValid() && changeSet.target() == node)
return true;
}
@@ -132,7 +132,7 @@ bool QmlModelState::hasStateOperation(const ModelNode &node) const
if (isBaseState())
return false;
- foreach(const QmlModelStateOperation &stateOperation, stateOperations()) {
+ foreach (const QmlModelStateOperation &stateOperation, stateOperations()) {
if (stateOperation.target() == node)
return true;
}
@@ -173,11 +173,15 @@ void QmlModelState::addChangeSetIfNotExists(const ModelNode &node)
if (!isValid())
throw new InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
- if (hasPropertyChanges(node)) {
+ if (hasPropertyChanges(node))
return; //changeSet already there
- }
- ModelNode newChangeSet = modelNode().view()->createModelNode("QtQuick.PropertyChanges", 1, 0);
+ ModelNode newChangeSet;
+ if (qmlModelView()->rootModelNode().majorQtQuickVersion() > 1)
+ newChangeSet = modelNode().view()->createModelNode("QtQuick.PropertyChanges", 2, 0);
+ else
+ newChangeSet = modelNode().view()->createModelNode("QtQuick.PropertyChanges", 1, 0);
+
modelNode().nodeListProperty("changes").reparentHere(newChangeSet);
QmlPropertyChanges(newChangeSet).setTarget(node);
@@ -244,7 +248,7 @@ bool QmlModelState::isValid() const
{
return QmlModelNodeFacade::isValid() &&
modelNode().metaInfo().isValid() &&
- (modelNode().metaInfo().isSubclassOf("QtQuick.State", 1, 0) || isBaseState());
+ (modelNode().metaInfo().isSubclassOf("QtQuick.State", -1, -1) || isBaseState());
}
/**
@@ -278,7 +282,7 @@ QmlModelState QmlModelState::duplicate(const QString &name) const
// QmlModelState newState(stateGroup().addState(name));
PropertyListType propertyList;
propertyList.append(qMakePair(QString("name"), QVariant(name)));
- QmlModelState newState ( qmlModelView()->createModelNode("QtQuick.State", 1, 0, propertyList) );
+ QmlModelState newState ( qmlModelView()->createQmlState(propertyList) );
foreach (const ModelNode &childNode, modelNode().nodeListProperty("changes").toModelNodeList()) {
ModelNode newModelNode(qmlModelView()->createModelNode(childNode.type(), childNode.majorVersion(), childNode.minorVersion()));
diff --git a/src/plugins/qmldesigner/designercore/model/qmltextgenerator.cpp b/src/plugins/qmldesigner/designercore/model/qmltextgenerator.cpp
index 39db7c9710..08cc254a4d 100644
--- a/src/plugins/qmldesigner/designercore/model/qmltextgenerator.cpp
+++ b/src/plugins/qmldesigner/designercore/model/qmltextgenerator.cpp
@@ -54,8 +54,12 @@ inline static QString properColorName(const QColor &color)
inline static QString doubleToString(double d)
{
QString string = QString::number(d, 'f', 3);
- if (string.endsWith(".000"))
- string.chop(4);
+ if (string.contains(QLatin1Char('.'))) {
+ while (string.at(string.length()- 1) == QLatin1Char('0'))
+ string.chop(1);
+ if (string.at(string.length()- 1) == QLatin1Char('.'))
+ string.chop(1);
+ }
return string;
}
diff --git a/src/plugins/qmldesigner/designercore/model/rewriteactioncompressor.cpp b/src/plugins/qmldesigner/designercore/model/rewriteactioncompressor.cpp
index 183eadb167..608c6b9327 100644
--- a/src/plugins/qmldesigner/designercore/model/rewriteactioncompressor.cpp
+++ b/src/plugins/qmldesigner/designercore/model/rewriteactioncompressor.cpp
@@ -306,13 +306,11 @@ void RewriteActionCompressor::compressAddEditActions(QList<RewriteAction *> &act
dirtyActions.insert(action);
}
} else if (ChangeIdRewriteAction *changeIdAction = action->asChangeIdRewriteAction()) {
- if (nodeOrParentInSet(changeIdAction->node(), addedNodes)) {
+ if (nodeOrParentInSet(changeIdAction->node(), addedNodes))
actionsToRemove.append(action);
- }
} else if (ChangeTypeRewriteAction *changeTypeAction = action->asChangeTypeRewriteAction()) {
- if (nodeOrParentInSet(changeTypeAction->node(), addedNodes)) {
+ if (nodeOrParentInSet(changeTypeAction->node(), addedNodes))
actionsToRemove.append(action);
- }
}
}
@@ -337,9 +335,8 @@ void RewriteActionCompressor::compressAddEditActions(QList<RewriteAction *> &act
}
const int idx = actions.indexOf(action);
- if (newAction && idx >= 0) {
+ if (newAction && idx >= 0)
actions[idx] = newAction;
- }
}
}
@@ -355,11 +352,10 @@ void RewriteActionCompressor::compressAddReparentActions(QList<RewriteAction *>
if (action->asAddPropertyRewriteAction() || action->asChangePropertyRewriteAction()) {
ModelNode containedNode;
- if (AddPropertyRewriteAction *addAction = action->asAddPropertyRewriteAction()) {
+ if (AddPropertyRewriteAction *addAction = action->asAddPropertyRewriteAction())
containedNode = addAction->containedModelNode();
- } else if (ChangePropertyRewriteAction *changeAction = action->asChangePropertyRewriteAction()) {
+ else if (ChangePropertyRewriteAction *changeAction = action->asChangePropertyRewriteAction())
containedNode = changeAction->containedModelNode();
- }
if (!containedNode.isValid())
continue;
diff --git a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp
index a069ef5b9a..4014ffe549 100644
--- a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp
+++ b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp
@@ -107,7 +107,7 @@ QString RewriterView::Error::toString() const
str += tr("line %1").arg(line());
}
- if(column() != -1) {
+ if (column() != -1) {
if (!str.isEmpty())
str += QLatin1Char(' ');
@@ -155,9 +155,8 @@ void RewriterView::modelAttached(Model *model)
ModelAmender differenceHandler(m_textToModelMerger.data());
const QString qmlSource = m_textModifier->text();
- if (m_textToModelMerger->load(qmlSource, differenceHandler)) {
+ if (m_textToModelMerger->load(qmlSource, differenceHandler))
lastCorrectQmlSource = qmlSource;
- }
}
void RewriterView::modelAboutToBeDetached(Model * /*model*/)
@@ -473,6 +472,16 @@ QString RewriterView::textModifierContent() const
return QString();
}
+void RewriterView::reactivateTextMofifierChangeSignals()
+{
+ textModifier()->reactivateChangeSignals();
+}
+
+void RewriterView::deactivateTextMofifierChangeSignals()
+{
+ textModifier()->deactivateChangeSignals();
+}
+
void RewriterView::applyModificationGroupChanges()
{
Q_ASSERT(transactionLevel == 0);
@@ -493,11 +502,12 @@ void RewriterView::applyChanges()
throw RewritingException(__LINE__, __FUNCTION__, __FILE__, "RewriterView::applyChanges() already in error state", content);
}
+ m_differenceHandling = Validate;
+
try {
modelToTextMerger()->applyChanges();
- if (!errors().isEmpty()) {
+ if (!errors().isEmpty())
enterErrorState(errors().first().description());
- }
} catch (Exception &e) {
const QString content = textModifierContent();
qDebug() << "RewriterException:" << m_rewritingErrorMessage;
@@ -505,6 +515,8 @@ void RewriterView::applyChanges()
enterErrorState(e.description());
}
+ m_differenceHandling = Amend;
+
if (inErrorState()) {
const QString content = textModifierContent();
qDebug() << "RewriterException:" << m_rewritingErrorMessage;
@@ -613,6 +625,31 @@ bool RewriterView::modificationGroupActive()
return m_modificationGroupActive;
}
+static bool isInNodeDefinition(int nodeTextOffset, int nodeTextLength, int cursorPosition)
+{
+ return (nodeTextOffset <= cursorPosition) && (nodeTextOffset + nodeTextLength > cursorPosition);
+}
+
+ModelNode RewriterView::nodeAtTextCursorPosition(int cursorPosition) const
+{
+ const QList<ModelNode> allNodes = allModelNodes();
+
+ ModelNode nearestNode;
+ int nearestNodeTextOffset = -1;
+
+ foreach (const ModelNode &currentNode, allNodes) {
+ const int nodeTextOffset = nodeOffset(currentNode);
+ const int nodeTextLength = nodeLength(currentNode);
+ if (isInNodeDefinition(nodeTextOffset, nodeTextLength, cursorPosition)
+ && (nodeTextOffset > nearestNodeTextOffset)) {
+ nearestNode = currentNode;
+ nearestNodeTextOffset = nodeTextOffset;
+ }
+ }
+
+ return nearestNode;
+}
+
bool RewriterView::renameId(const QString& oldId, const QString& newId)
{
if (textModifier())
@@ -677,6 +714,29 @@ QString RewriterView::convertTypeToImportAlias(const QString &type) const
return result;
}
+QString RewriterView::pathForImport(const Import &import)
+{
+ if (scopeChain() && scopeChain()->context() && document()) {
+ const QString importStr = import.isFileImport() ? import.file() : import.url();
+ const QmlJS::Imports *imports = scopeChain()->context()->imports(document());
+
+ QmlJS::ImportInfo importInfo;
+
+ foreach (QmlJS::Import qmljsImport, imports->all()) {
+ if (qmljsImport.info.name() == importStr)
+ importInfo = qmljsImport.info;
+ }
+ const QString importPath = importInfo.path();
+ return importPath;
+ }
+
+ return QString();
+}
+
+QWidget *RewriterView::widget()
+{
+ return 0;
+}
void RewriterView::qmlTextChanged()
{
@@ -695,9 +755,8 @@ void RewriterView::qmlTextChanged()
switch (m_differenceHandling) {
case Validate: {
ModelValidator differenceHandler(m_textToModelMerger.data());
- if (m_textToModelMerger->load(newQmlText.toUtf8(), differenceHandler)) {
+ if (m_textToModelMerger->load(newQmlText.toUtf8(), differenceHandler))
lastCorrectQmlSource = newQmlText;
- }
break;
}
@@ -705,9 +764,8 @@ void RewriterView::qmlTextChanged()
default: {
emitCustomNotification(StartRewriterAmend);
ModelAmender differenceHandler(m_textToModelMerger.data());
- if (m_textToModelMerger->load(newQmlText, differenceHandler)) {
+ if (m_textToModelMerger->load(newQmlText, differenceHandler))
lastCorrectQmlSource = newQmlText;
- }
emitCustomNotification(EndRewriterAmend);
break;
}
diff --git a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp
index 4c425d9a4a..b439d850e5 100644
--- a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp
+++ b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp
@@ -32,6 +32,7 @@
#include "filemanager/firstdefinitionfinder.h"
#include "filemanager/objectlengthcalculator.h"
#include "filemanager/qmlrefactoring.h"
+#include "filemanager/qmlwarningdialog.h"
#include "rewriteaction.h"
#include "nodeproperty.h"
#include "propertyparser.h"
@@ -66,7 +67,7 @@ namespace {
static inline QStringList supportedVersionsList()
{
QStringList list;
- list << QLatin1String("1.0") << QLatin1String("1.1");
+ list << QLatin1String("1.0") << QLatin1String("1.1") << QLatin1String("2.0");
return list;
}
@@ -138,27 +139,6 @@ static inline QString fixEscapedUnicodeChar(const QString &value) //convert "\u2
}
return value;
}
-
-static inline int fixUpMajorVersionForQt(const QString &value, int i)
-{
- if (i == 4 && value == "Qt")
- return 1;
- else return i;
-}
-
-static inline int fixUpMinorVersionForQt(const QString &value, int i)
-{
- if (i == 7 && value == "Qt")
- return 0;
- else return i;
-}
-
-static inline QString fixUpPackeNameForQt(const QString &value)
-{
- if (value == "Qt")
- return "QtQuick";
- return value;
-}
static inline bool isSignalPropertyName(const QString &signalName)
{
@@ -278,15 +258,14 @@ static bool isCustomParserType(const QString &type)
static bool isPropertyChangesType(const QString &type)
-{
+{
return type == QLatin1String("PropertyChanges") || type == QLatin1String("QtQuick.PropertyChanges") || type == QLatin1String("Qt.PropertyChanges");
}
static bool propertyIsComponentType(const QmlDesigner::NodeAbstractProperty &property, const QString &type, QmlDesigner::Model *model)
{
- if (model->metaInfo(type, -1, -1).isSubclassOf(QLatin1String("QtQuick.Component"), -1, -1) && !isComponentType(type)) {
+ if (model->metaInfo(type, -1, -1).isSubclassOf(QLatin1String("QtQuick.Component"), -1, -1) && !isComponentType(type))
return false; //If the type is already a subclass of Component keep it
- }
return property.parentModelNode().isValid() &&
isComponentType(property.parentModelNode().metaInfo().propertyTypeName(property.name()));
@@ -301,16 +280,14 @@ static inline QString extractComponentFromQml(const QString &source)
if (source.contains("Component")) { //explicit component
QmlDesigner::FirstDefinitionFinder firstDefinitionFinder(source);
int offset = firstDefinitionFinder(0);
- if (offset < 0) {
+ if (offset < 0)
return QString(); //No object definition found
- }
QmlDesigner::ObjectLengthCalculator objectLengthCalculator;
unsigned length;
- if (objectLengthCalculator(source, offset, length)) {
+ if (objectLengthCalculator(source, offset, length))
result = source.mid(offset, length);
- } else {
+ else
result = source;
- }
} else {
result = source; //implicit component
}
@@ -357,11 +334,10 @@ public:
const CppComponentValue * qmlValue = value_cast<CppComponentValue>(value);
if (qmlValue) {
- typeName = fixUpPackeNameForQt(qmlValue->moduleName()) + QLatin1String(".") + qmlValue->className();
+ typeName = qmlValue->moduleName() + QLatin1String(".") + qmlValue->className();
- //### todo this is just a hack to support QtQuick 1.0
- majorVersion = fixUpMajorVersionForQt(qmlValue->moduleName(), qmlValue->componentVersion().majorVersion());
- minorVersion = fixUpMinorVersionForQt(qmlValue->moduleName(), qmlValue->componentVersion().minorVersion());
+ majorVersion = qmlValue->componentVersion().majorVersion();
+ minorVersion = qmlValue->componentVersion().minorVersion();
} else {
for (UiQualifiedId *iter = astTypeNode; iter; iter = iter->next)
if (!iter->next && !iter->name.isEmpty())
@@ -550,20 +526,25 @@ public:
}
}
- QVariant v(cleanedValue);
+ if (property->asColorValue())
+ return PropertyParser::read(QVariant::Color, cleanedValue);
+ else if (property->asUrlValue())
+ return PropertyParser::read(QVariant::Url, cleanedValue);
+
+ QVariant value(cleanedValue);
if (property->asBooleanValue()) {
- v.convert(QVariant::Bool);
- } else if (property->asColorValue()) {
- v.convert(QVariant::Color);
+ value.convert(QVariant::Bool);
+ return value;
} else if (property->asNumberValue()) {
- v.convert(QVariant::Double);
+ value.convert(QVariant::Double);
+ return value;
} else if (property->asStringValue()) {
// nothing to do
} else { //property alias et al
if (!hasQuotes)
return cleverConvert(cleanedValue);
}
- return v;
+ return value;
}
QVariant convertToEnum(Statement *rhs, const QString &propertyPrefix, UiQualifiedId *propertyId)
@@ -574,9 +555,8 @@ public:
const ObjectValue *containingObject = 0;
QString name;
- if (!lookupProperty(propertyPrefix, propertyId, 0, &containingObject, &name)) {
+ if (!lookupProperty(propertyPrefix, propertyId, 0, &containingObject, &name))
return QVariant();
- }
if (containingObject)
containingObject->lookupMember(name, m_context, &containingObject);
@@ -648,16 +628,14 @@ static inline bool smartVeryFuzzyCompare(QVariant value1, QVariant value2)
if (!ok1 || !ok2)
return false;
- if (qFuzzyCompare(a, b)) {
+ if (qFuzzyCompare(a, b))
return true;
- }
int ai = qRound(a * 1000);
int bi = qRound(b * 1000);
- if (qFuzzyCompare((qreal(ai) / 1000), (qreal(bi) / 1000))) {
+ if (qFuzzyCompare((qreal(ai) / 1000), (qreal(bi) / 1000)))
return true;
- }
}
return false;
}
@@ -762,6 +740,7 @@ bool TextToModelMerger::load(const QString &data, DifferenceHandler &differenceH
m_document = doc;
QList<RewriterView::Error> errors;
+ QList<RewriterView::Error> warnings;
foreach (const QmlJS::DiagnosticMessage &diagnosticMessage, ctxt.diagnosticLinkMessages()) {
errors.append(RewriterView::Error(diagnosticMessage, QUrl::fromLocalFile(doc->fileName())));
@@ -788,9 +767,26 @@ bool TextToModelMerger::load(const QString &data, DifferenceHandler &differenceH
check.disableMessage(StaticAnalysis::ErrPrototypeCycle);
check.disableMessage(StaticAnalysis::ErrCouldNotResolvePrototype);
check.disableMessage(StaticAnalysis::ErrCouldNotResolvePrototypeOf);
+
+ foreach (StaticAnalysis::Type type, StaticAnalysis::Message::allMessageTypes()) {
+ StaticAnalysis::Message message(type, AST::SourceLocation());
+ if (message.severity == StaticAnalysis::MaybeWarning
+ || message.severity == StaticAnalysis::Warning) {
+ check.disableMessage(type);
+ }
+ }
+
+ check.enableMessage(StaticAnalysis::WarnImperativeCodeNotEditableInVisualDesigner);
+ check.enableMessage(StaticAnalysis::WarnUnsupportedTypeInVisualDesigner);
+ check.enableMessage(StaticAnalysis::WarnReferenceToParentItemNotSupportedByVisualDesigner);
+ check.enableMessage(StaticAnalysis::WarnUndefinedValueForVisualDesigner);
+ check.enableMessage(StaticAnalysis::WarnStatesOnlyInRootItemForVisualDesigner);
+
foreach (const StaticAnalysis::Message &message, check()) {
if (message.severity == StaticAnalysis::Error)
errors.append(RewriterView::Error(message.toDiagnosticMessage(), QUrl::fromLocalFile(doc->fileName())));
+ if (message.severity == StaticAnalysis::Warning)
+ warnings.append(RewriterView::Error(message.toDiagnosticMessage(), QUrl::fromLocalFile(doc->fileName())));
}
if (!errors.isEmpty()) {
@@ -798,6 +794,27 @@ bool TextToModelMerger::load(const QString &data, DifferenceHandler &differenceH
setActive(false);
return false;
}
+
+ if (!warnings.isEmpty() && differenceHandler.isValidator()) {
+
+ QString title = QCoreApplication::translate("QmlDesigner::TextToModelMerger warning message", "This .qml file contains features"
+ "which are not supported by Qt Quick Designer");
+
+ QStringList message;
+
+ foreach (const RewriterView::Error &warning, warnings) {
+ QString string = QLatin1String("Line: ") + QString::number(warning.line()) + QLatin1String(": ") + warning.description();
+ //string += QLatin1String(" <a href=\"") + QString::number(warning.line()) + QLatin1String("\">Go to error</a>") + QLatin1String("<p>");
+ message << string;
+ }
+
+ QmlWarningDialog warningDialog(0, message);
+ if (warningDialog.warningsEnabled() && warningDialog.exec()) {
+ m_rewriterView->setErrors(warnings);
+ setActive(false);
+ return false;
+ }
+ }
}
UiObjectMember *astRootNode = 0;
@@ -929,11 +946,10 @@ void TextToModelMerger::syncNode(ModelNode &modelNode,
QString name;
if (context->lookupProperty(QString(), binding->qualifiedId, &propertyType, &containingObject, &name) || isPropertyChangesType(typeName)) {
AbstractProperty modelProperty = modelNode.property(astPropertyName);
- if (context->isArrayProperty(propertyType, containingObject, name)) {
+ if (context->isArrayProperty(propertyType, containingObject, name))
syncArrayProperty(modelProperty, QList<QmlJS::AST::UiObjectMember*>() << member, context, differenceHandler);
- } else {
+ else
syncNodeProperty(modelProperty, binding, context, differenceHandler);
- }
modelPropertyNames.remove(astPropertyName);
} else {
qWarning() << "Skipping invalid node property" << astPropertyName
@@ -1406,11 +1422,10 @@ void ModelAmender::bindingExpressionsDiffer(BindingProperty &modelProperty,
const QString &javascript,
const QString &astType)
{
- if (astType.isEmpty()) {
+ if (astType.isEmpty())
modelProperty.setExpression(javascript);
- } else {
+ else
modelProperty.setDynamicTypeNameAndExpression(astType, javascript);
- }
}
void ModelAmender::shouldBeBindingProperty(AbstractProperty &modelProperty,
@@ -1419,11 +1434,10 @@ void ModelAmender::shouldBeBindingProperty(AbstractProperty &modelProperty,
{
ModelNode theNode = modelProperty.parentModelNode();
BindingProperty newModelProperty = theNode.bindingProperty(modelProperty.name());
- if (astType.isEmpty()) {
+ if (astType.isEmpty())
newModelProperty.setExpression(javascript);
- } else {
+ else
newModelProperty.setDynamicTypeNameAndExpression(astType, javascript);
- }
}
void ModelAmender::shouldBeNodeListProperty(AbstractProperty &modelProperty,
@@ -1543,7 +1557,7 @@ ModelNode ModelAmender::listPropertyMissingModelNode(NodeListProperty &modelProp
modelProperty.reparentHere(newNode);
} else { //The default property could a NodeProperty implicitly (delegate:)
modelProperty.parentModelNode().removeProperty(modelProperty.name());
- modelProperty.reparentHere(newNode);
+ modelProperty.reparentHere(newNode);
}
} else {
modelProperty.reparentHere(newNode);
@@ -1611,9 +1625,8 @@ void TextToModelMerger::setupComponent(const ModelNode &node)
QString result = extractComponentFromQml(componentText);
- if (result.isEmpty()) {
+ if (result.isEmpty())
return; //No object definition found
- }
if (node.nodeSource() != result)
ModelNode(node).setNodeSource(result);
diff --git a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.h b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.h
index 6e304247d6..2299f8e9c6 100644
--- a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.h
+++ b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.h
@@ -30,7 +30,7 @@
#ifndef TEXTTOMODELMERGER_H
#define TEXTTOMODELMERGER_H
-#include "corelib_global.h"
+#include "qmldesignercorelib_global.h"
#include "import.h"
#include "nodelistproperty.h"
#include "modelnode.h"
@@ -43,7 +43,7 @@
namespace QmlDesigner {
-class CORESHARED_EXPORT RewriterView;
+class RewriterView;
namespace Internal {
diff --git a/src/plugins/qmldesigner/designercore/model/variantproperty.cpp b/src/plugins/qmldesigner/designercore/model/variantproperty.cpp
index 801081a334..a8418b5e8f 100644
--- a/src/plugins/qmldesigner/designercore/model/variantproperty.cpp
+++ b/src/plugins/qmldesigner/designercore/model/variantproperty.cpp
@@ -102,9 +102,8 @@ void VariantProperty::setDynamicTypeNameAndValue(const QString &type, const QVar
throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
- if (type.isEmpty()) {
+ if (type.isEmpty())
throw InvalidArgumentException(__LINE__, __FUNCTION__, __FILE__, name());
- }
if (internalNode()->hasProperty(name())) { //check if oldValue != value
Internal::InternalProperty::Pointer internalProperty = internalNode()->property(name());
diff --git a/src/plugins/qmldesigner/designercore/model/viewlogger.cpp b/src/plugins/qmldesigner/designercore/model/viewlogger.cpp
index 7db3c3a025..584ff80b2e 100644
--- a/src/plugins/qmldesigner/designercore/model/viewlogger.cpp
+++ b/src/plugins/qmldesigner/designercore/model/viewlogger.cpp
@@ -31,6 +31,7 @@
#include <QDebug>
#include <QTemporaryFile>
#include <QDir>
+#include <QUrl>
#include <variantproperty.h>
#include <bindingproperty.h>
#include <nodeabstractproperty.h>
@@ -64,23 +65,24 @@ QString ViewLogger::time() const
ViewLogger::ViewLogger(QObject *parent)
: AbstractView(parent)
{
- const QString path = QDir::tempPath() + QString("/qmldesigner-logger-%1-XXXXXX.txt").
+ m_timer.start();
+}
+
+void ViewLogger::modelAttached(Model *model)
+{
+ static const QString path = QDir::tempPath() + QString("/qmldesigner-logger-%1-XXXXXX.txt").
arg(QDateTime::currentDateTime().toString(Qt::ISODate).
replace(':', '-'));
- QTemporaryFile *temporaryFile = new QTemporaryFile(path, this);
+ static QTemporaryFile *temporaryFile = new QTemporaryFile(path, this);
temporaryFile->setAutoRemove(false);
- if (temporaryFile->open()) {
+ static bool fileOpen = temporaryFile->open();
+ if (fileOpen) {
qDebug() << "QmlDesigner: Log file is:" << temporaryFile->fileName();
m_output.setDevice(temporaryFile);
} else {
qDebug() << "QmlDesigner: failed to open:" << temporaryFile->fileName();
}
- m_timer.start();
-}
-
-void ViewLogger::modelAttached(Model *model)
-{
m_output << time() << indent("modelAttached:") << model << endl;
AbstractView::modelAttached(model);
}
@@ -139,14 +141,14 @@ void ViewLogger::propertiesRemoved(const QList<AbstractProperty> &propertyList)
void ViewLogger::variantPropertiesChanged(const QList<VariantProperty>& propertyList, PropertyChangeFlags propertyChange)
{
m_output << time() << indent("variantPropertiesChanged:") << serialize(propertyChange) << endl;
- foreach(const VariantProperty &property, propertyList)
+ foreach (const VariantProperty &property, propertyList)
m_output << time() << indent() << property << endl;
}
void ViewLogger::bindingPropertiesChanged(const QList<BindingProperty>& propertyList, PropertyChangeFlags propertyChange)
{
m_output << time() << indent("bindingPropertiesChanged:") << serialize(propertyChange) << endl;
- foreach(const BindingProperty &property, propertyList)
+ foreach (const BindingProperty &property, propertyList)
m_output << time() << indent() << property << endl;
}
@@ -159,9 +161,9 @@ void ViewLogger::selectedNodesChanged(const QList<ModelNode> &selectedNodeList,
const QList<ModelNode> &lastSelectedNodeList)
{
m_output << time() << indent("selectedNodesChanged:") << endl;
- foreach(const ModelNode &node, selectedNodeList)
+ foreach (const ModelNode &node, selectedNodeList)
m_output << time() << indent("new: ") << node << endl;
- foreach(const ModelNode &node, lastSelectedNodeList)
+ foreach (const ModelNode &node, lastSelectedNodeList)
m_output << time() << indent("old: ") << node << endl;
}
@@ -183,18 +185,18 @@ void ViewLogger::auxiliaryDataChanged(const ModelNode &node, const QString &name
void ViewLogger::importsChanged(const QList<Import> &addedImports, const QList<Import> &removedImports)
{
m_output << time() << indent("importsChanged:") << endl;
- foreach(const Import &import, addedImports)
+ foreach (const Import &import, addedImports)
m_output << time() << indent("import added: ") << import.toString() << endl;
- foreach(const Import &import, removedImports)
+ foreach (const Import &import, removedImports)
m_output << time() << indent("import removed: ") << import.toString() << endl;
}
void ViewLogger::customNotification(const AbstractView *view, const QString &identifier, const QList<ModelNode> &nodeList, const QList<QVariant> &data)
{
m_output << time() << indent("customNotification:") << view << identifier << endl;
- foreach(const ModelNode &node, nodeList)
+ foreach (const ModelNode &node, nodeList)
m_output << time() << indent("node: ") << node << endl;
- foreach(const QVariant &variant, data)
+ foreach (const QVariant &variant, data)
m_output << time() << indent("data: ") << variant.toString() << endl;
}
@@ -208,7 +210,7 @@ void ViewLogger::instancePropertyChange(const QList<QPair<ModelNode, QString> >
typedef QPair<ModelNode, QString> PropertyPair;
m_output << time() << indent("instancePropertyChange:") << endl;
- foreach(const PropertyPair &propertyPair, propertyList)
+ foreach (const PropertyPair &propertyPair, propertyList)
m_output << time() << indent("property: ") << propertyPair.first << propertyPair.second << endl;
}
@@ -216,7 +218,7 @@ void ViewLogger::instancesCompleted(const QVector<ModelNode> &completedNodeList)
{
m_output << time() << indent("instancesCompleted:") << endl;
- foreach(const ModelNode &node, completedNodeList)
+ foreach (const ModelNode &node, completedNodeList)
m_output << time() << indent("node: ") << node << endl;
}
@@ -237,7 +239,7 @@ void ViewLogger::instancesRenderImageChanged(const QVector<ModelNode> &nodeList)
{
m_output << time() << indent("instancesRenderImageChanged:") << endl;
- foreach(const ModelNode &node, nodeList)
+ foreach (const ModelNode &node, nodeList)
m_output << time() << indent("node: ") << node << endl;
}
@@ -245,7 +247,7 @@ void ViewLogger::instancesPreviewImageChanged(const QVector<ModelNode> &nodeList
{
m_output << time() << indent("instancesPreviewImageChanged:") << endl;
- foreach(const ModelNode &node, nodeList)
+ foreach (const ModelNode &node, nodeList)
m_output << time() << indent("node: ") << node << endl;
}
@@ -253,7 +255,7 @@ void ViewLogger::instancesChildrenChanged(const QVector<ModelNode> &nodeList)
{
m_output << time() << indent("instancesChildrenChanged:") << endl;
- foreach(const ModelNode &node, nodeList)
+ foreach (const ModelNode &node, nodeList)
m_output << time() << indent("node: ") << node << endl;
}
@@ -284,5 +286,10 @@ void ViewLogger::actualStateChanged(const ModelNode &node)
{
m_output << time() << indent("actualStateChanged:") << node << endl;
}
+
+QWidget *ViewLogger::widget()
+{
+ return 0;
+}
} // namespace Internal
} // namespace QmlDesigner
diff --git a/src/plugins/qmldesigner/designercore/model/viewlogger.h b/src/plugins/qmldesigner/designercore/model/viewlogger.h
index 0ca17dad41..58ca0c167c 100644
--- a/src/plugins/qmldesigner/designercore/model/viewlogger.h
+++ b/src/plugins/qmldesigner/designercore/model/viewlogger.h
@@ -42,7 +42,7 @@ class ViewLogger : public QmlDesigner::AbstractView
{
Q_OBJECT
public:
- ViewLogger(QObject *parent);
+ ViewLogger(QObject *parent = 0);
void modelAttached(Model *model);
void modelAboutToBeDetached(Model *model);
@@ -87,6 +87,8 @@ public:
void actualStateChanged(const ModelNode &node);
+ QWidget *widget();
+
protected:
QString time() const;
diff --git a/src/plugins/qmldesigner/designercore/model/viewmanager.cpp b/src/plugins/qmldesigner/designercore/model/viewmanager.cpp
new file mode 100644
index 0000000000..24eda7730d
--- /dev/null
+++ b/src/plugins/qmldesigner/designercore/model/viewmanager.cpp
@@ -0,0 +1,201 @@
+#include "viewmanager.h"
+
+#include "designdocument.h"
+#include "componentaction.h"
+#include "itemlibrarywidget.h"
+#include "designmodewidget.h"
+#include "formeditorwidget.h"
+#include "toolbox.h"
+#include "designeractionmanager.h"
+
+#include <qmldesigner/qmldesignerplugin.h>
+
+#include <utils/crumblepath.h>
+#include <qtsupport/baseqtversion.h>
+#include <qtsupport/qtversionmanager.h>
+#include <qtsupport/qtsupportconstants.h>
+
+namespace QmlDesigner {
+
+ViewManager::ViewManager()
+{
+ //QObject::connect(&m_nodeInstanceView, SIGNAL(qmlPuppetCrashed()), designModeWidget, SLOT(qmlPuppetCrashed()));
+ //QObject::connect(m_formEditorView.crumblePath(), SIGNAL(elementClicked(QVariant)), designModeWidget, SLOT(onCrumblePathElementClicked(QVariant)));
+ m_formEditorView.formEditorWidget()->toolBox()->addLeftSideAction(m_componentView.action()); // ugly hack
+}
+
+DesignDocument *ViewManager::currentDesignDocument() const
+{
+ return QmlDesignerPlugin::instance()->documentManager().currentDesignDocument();
+}
+
+QString ViewManager::pathToQt() const
+{
+ QtSupport::BaseQtVersion *activeQtVersion = QtSupport::QtVersionManager::instance()->version(currentDesignDocument()->qtVersionId());
+ if (activeQtVersion && (activeQtVersion->qtVersion() >= QtSupport::QtVersionNumber(4, 7, 1))
+ && (activeQtVersion->type() == QLatin1String(QtSupport::Constants::DESKTOPQT)
+ || activeQtVersion->type() == QLatin1String(QtSupport::Constants::SIMULATORQT)))
+ return activeQtVersion->qmakeProperty("QT_INSTALL_DATA");
+
+ return QString();
+}
+
+void ViewManager::attachNodeInstanceView()
+{
+ setNodeInstanceViewQtPath(pathToQt());
+ currentModel()->setNodeInstanceView(&m_nodeInstanceView);
+}
+
+void ViewManager::attachRewriterView(TextModifier *textModifier)
+{
+ if (currentDesignDocument()->rewriterView()) {
+ currentDesignDocument()->rewriterView()->setTextModifier(textModifier);
+ currentDesignDocument()->rewriterView()->reactivateTextMofifierChangeSignals();
+ currentModel()->setRewriterView(currentDesignDocument()->rewriterView());
+ }
+}
+
+void ViewManager::detachRewriterView()
+{
+ if (currentDesignDocument()->rewriterView()) {
+ currentDesignDocument()->rewriterView()->deactivateTextMofifierChangeSignals();
+ currentModel()->setRewriterView(0);
+ }
+}
+
+void ViewManager::switchStateEditorViewToBaseState()
+{
+ if (m_statesEditorView.isAttached()) {
+ m_savedState = m_statesEditorView.currentState();
+ m_statesEditorView.setCurrentState(m_statesEditorView.baseState());
+ }
+}
+
+void ViewManager::switchStateEditorViewToSavedState()
+{
+ if (m_savedState.isValid() && m_statesEditorView.isAttached())
+ m_statesEditorView.setCurrentState(m_savedState);
+}
+
+void ViewManager::resetPropertyEditorView()
+{
+ m_propertyEditorView.resetView();
+}
+
+void ViewManager::detachViewsExceptRewriterAndComponetView()
+{
+ switchStateEditorViewToBaseState();
+ currentModel()->detachView(DesignerActionManager::view());
+ currentModel()->detachView(&m_formEditorView);
+ currentModel()->detachView(&m_navigatorView);
+ currentModel()->detachView(&m_itemLibraryView);
+ currentModel()->detachView(&m_statesEditorView);
+ currentModel()->detachView(&m_propertyEditorView);
+ currentModel()->setNodeInstanceView(0);
+
+ static bool enableViewLogger = !qgetenv("QTC_ENABLE_QMLDESIGNER_LOGGER").isEmpty();
+ if (enableViewLogger)
+ currentModel()->detachView(&m_viewLogger);
+}
+
+void ViewManager::attachItemLibraryView()
+{
+ setItemLibraryViewResourcePath(QFileInfo(currentDesignDocument()->fileName()).absolutePath());
+ currentModel()->attachView(&m_itemLibraryView);
+}
+
+void ViewManager::attachComponentView()
+{
+ documentModel()->attachView(&m_componentView);
+ QObject::connect(m_componentView.action(), SIGNAL(currentComponentChanged(ModelNode)), currentDesignDocument(), SLOT(changeCurrentModelTo(ModelNode)));
+}
+
+void ViewManager::detachComponentView()
+{
+ QObject::disconnect(m_componentView.action(), SIGNAL(currentComponentChanged(ModelNode)), currentDesignDocument(), SLOT(changeCurrentModelTo(ModelNode)));
+ documentModel()->detachView(&m_componentView);
+}
+
+void ViewManager::attachViewsExceptRewriterAndComponetView()
+{
+ static bool enableViewLogger = !qgetenv("QTC_ENABLE_QMLDESIGNER_LOGGER").isEmpty();
+ if (enableViewLogger)
+ currentModel()->attachView(&m_viewLogger);
+
+ attachNodeInstanceView();
+ currentModel()->attachView(&m_formEditorView);
+ currentModel()->attachView(&m_navigatorView);
+ attachItemLibraryView();
+ currentModel()->attachView(&m_statesEditorView);
+ currentModel()->attachView(&m_propertyEditorView);
+ currentModel()->attachView(DesignerActionManager::view());
+ switchStateEditorViewToSavedState();
+}
+
+void ViewManager::setItemLibraryViewResourcePath(const QString &resourcePath)
+{
+ m_itemLibraryView.setResourcePath(resourcePath);
+}
+
+void ViewManager::setComponentNode(const ModelNode &componentNode)
+{
+ m_componentView.setComponentNode(componentNode);
+}
+
+void ViewManager::setNodeInstanceViewQtPath(const QString &qtPath)
+{
+ m_nodeInstanceView.setPathToQt(qtPath);
+}
+
+QWidget *ViewManager::formEditorWidget()
+{
+ return m_formEditorView.widget();
+}
+
+QWidget *ViewManager::propertyEditorWidget()
+{
+ return m_propertyEditorView.widget();
+}
+
+QWidget *ViewManager::itemLibraryWidget()
+{
+ return m_itemLibraryView.widget();
+}
+
+QWidget *ViewManager::navigatorWidget()
+{
+ return m_navigatorView.widget();
+}
+
+QWidget *ViewManager::statesEditorWidget()
+{
+ return m_statesEditorView.widget();
+}
+
+void ViewManager::pushFileOnCrambleBar(const QString &fileName)
+{
+ m_formEditorView.formEditorWidget()->formEditorCrumbleBar()->pushFile(fileName);
+}
+
+void ViewManager::pushInFileComponentOnCrambleBar(const QString &componentId)
+
+{
+ m_formEditorView.formEditorWidget()->formEditorCrumbleBar()->pushInFileComponent(componentId);
+}
+
+void ViewManager::nextFileIsCalledInternally()
+{
+ m_formEditorView.formEditorWidget()->formEditorCrumbleBar()->nextFileIsCalledInternally();
+}
+
+Model *ViewManager::currentModel() const
+{
+ return currentDesignDocument()->currentModel();
+}
+
+Model *ViewManager::documentModel() const
+{
+ return currentDesignDocument()->documentModel();
+}
+
+} // namespace QmlDesigner