aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Hartmann <Thomas.Hartmann@digia.com>2013-04-02 12:27:45 +0200
committerThomas Hartmann <Thomas.Hartmann@digia.com>2013-04-02 14:32:09 +0200
commitbb1a76c0a475186103d2276667403dfe18d38788 (patch)
tree6d64bcaea2a5dfd12be1594a2216d0f81af8a0e2
parentd5e41c08f54bc2ffaff73041290468eb8a4ea92c (diff)
QmlDesigner.Model: Adding SignalHandlerProperty
SignalHandlerProperty allows editing convenient editing of signal handlers like onMousePress in the model. The interface is analogous to BindingProperty. Since mos views do not care about SignalHandlerProperties and they should not be mixed up with BindingProperties they are different types. I also added the signalHandlerPropertiesChanged() notifier to AbstractView. Change-Id: I68bc7d2c5d3b991944e8f8d698212a1dfef218bf Reviewed-by: Marco Bubke <marco.bubke@digia.com>
-rw-r--r--src/plugins/qmldesigner/components/debugview/debugview.cpp14
-rw-r--r--src/plugins/qmldesigner/components/debugview/debugview.h1
-rw-r--r--src/plugins/qmldesigner/components/formeditor/formeditorview.cpp4
-rw-r--r--src/plugins/qmldesigner/components/formeditor/formeditorview.h1
-rw-r--r--src/plugins/qmldesigner/components/integration/componentview.cpp1
-rw-r--r--src/plugins/qmldesigner/components/integration/componentview.h2
-rw-r--r--src/plugins/qmldesigner/components/integration/designdocumentview.cpp3
-rw-r--r--src/plugins/qmldesigner/components/integration/designdocumentview.h1
-rw-r--r--src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp4
-rw-r--r--src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.h2
-rw-r--r--src/plugins/qmldesigner/components/navigator/navigatorview.cpp5
-rw-r--r--src/plugins/qmldesigner/components/navigator/navigatorview.h1
-rw-r--r--src/plugins/qmldesigner/components/propertyeditor/propertyeditor.cpp5
-rw-r--r--src/plugins/qmldesigner/components/propertyeditor/propertyeditor.h1
-rw-r--r--src/plugins/qmldesigner/components/stateseditor/stateseditorview.cpp6
-rw-r--r--src/plugins/qmldesigner/components/stateseditor/stateseditorview.h1
-rw-r--r--src/plugins/qmldesigner/designercore/designercore-lib.pri8
-rw-r--r--src/plugins/qmldesigner/designercore/include/abstractproperty.h3
-rw-r--r--src/plugins/qmldesigner/designercore/include/abstractview.h1
-rw-r--r--src/plugins/qmldesigner/designercore/include/forwardview.h7
-rw-r--r--src/plugins/qmldesigner/designercore/include/modelnode.h2
-rw-r--r--src/plugins/qmldesigner/designercore/include/nodeinstanceview.h1
-rw-r--r--src/plugins/qmldesigner/designercore/include/qmlmodelview.h1
-rw-r--r--src/plugins/qmldesigner/designercore/include/rewriterview.h1
-rw-r--r--src/plugins/qmldesigner/designercore/include/signalhandlerproperty.h58
-rw-r--r--src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp5
-rw-r--r--src/plugins/qmldesigner/designercore/model/abstractproperty.cpp27
-rw-r--r--src/plugins/qmldesigner/designercore/model/internalnode.cpp15
-rw-r--r--src/plugins/qmldesigner/designercore/model/internalnode_p.h3
-rw-r--r--src/plugins/qmldesigner/designercore/model/internalproperty.cpp12
-rw-r--r--src/plugins/qmldesigner/designercore/model/internalproperty.h3
-rw-r--r--src/plugins/qmldesigner/designercore/model/internalsignalhandlerproperty.cpp71
-rw-r--r--src/plugins/qmldesigner/designercore/model/internalsignalhandlerproperty.h62
-rw-r--r--src/plugins/qmldesigner/designercore/model/model.cpp55
-rw-r--r--src/plugins/qmldesigner/designercore/model/model_p.h4
-rw-r--r--src/plugins/qmldesigner/designercore/model/modelnode.cpp9
-rw-r--r--src/plugins/qmldesigner/designercore/model/modeltotextmerger.cpp2
-rw-r--r--src/plugins/qmldesigner/designercore/model/qmlmodelview.cpp1
-rw-r--r--src/plugins/qmldesigner/designercore/model/qmltextgenerator.cpp3
-rw-r--r--src/plugins/qmldesigner/designercore/model/rewriterview.cpp17
-rw-r--r--src/plugins/qmldesigner/designercore/model/signalhandlerproperty.cpp102
-rw-r--r--src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp68
-rw-r--r--src/plugins/qmldesigner/designercore/model/texttomodelmerger.h16
-rw-r--r--src/plugins/qmldesigner/designercore/model/viewlogger.cpp4
-rw-r--r--src/plugins/qmldesigner/designercore/model/viewlogger.h1
45 files changed, 604 insertions, 10 deletions
diff --git a/src/plugins/qmldesigner/components/debugview/debugview.cpp b/src/plugins/qmldesigner/components/debugview/debugview.cpp
index a2ac1cd62b..8c27ebaf63 100644
--- a/src/plugins/qmldesigner/components/debugview/debugview.cpp
+++ b/src/plugins/qmldesigner/components/debugview/debugview.cpp
@@ -34,6 +34,7 @@
#include <designersettings.h>
#include <bindingproperty.h>
+#include <signalhandlerproperty.h>
#include <nodeabstractproperty.h>
#include <variantproperty.h>
@@ -185,6 +186,19 @@ void DebugView::bindingPropertiesChanged(const QList<BindingProperty> &propertyL
}
}
+void DebugView::signalHandlerPropertiesChanged(const QVector<SignalHandlerProperty> &propertyList, AbstractView::PropertyChangeFlags propertyChange)
+{
+ if (isDebugViewEnabled()) {
+ QTextStream message;
+ QString string;
+ message.setString(&string);
+ foreach (const SignalHandlerProperty &property, propertyList) {
+ message << property;
+ }
+ log(tr("SignalHandlerProperties changed:"), string);
+ }
+}
+
void DebugView::rootNodeTypeChanged(const QString &type, int majorVersion, int minorVersion)
{
if (isDebugViewEnabled()) {
diff --git a/src/plugins/qmldesigner/components/debugview/debugview.h b/src/plugins/qmldesigner/components/debugview/debugview.h
index 92088f1a49..d0ca29c2d8 100644
--- a/src/plugins/qmldesigner/components/debugview/debugview.h
+++ b/src/plugins/qmldesigner/components/debugview/debugview.h
@@ -60,6 +60,7 @@ public:
void propertiesAboutToBeRemoved(const QList<AbstractProperty>& propertyList) QTC_OVERRIDE;
void variantPropertiesChanged(const QList<VariantProperty>& propertyList, PropertyChangeFlags propertyChange) QTC_OVERRIDE;
void bindingPropertiesChanged(const QList<BindingProperty>& propertyList, PropertyChangeFlags propertyChange) QTC_OVERRIDE;
+ void signalHandlerPropertiesChanged(const QVector<SignalHandlerProperty>& propertyList, PropertyChangeFlags propertyChange) QTC_OVERRIDE;
void rootNodeTypeChanged(const QString &type, int majorVersion, int minorVersion) QTC_OVERRIDE;
void selectedNodesChanged(const QList<ModelNode> &selectedNodeList,
diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp
index dfc6de7622..a3e3f2ba64 100644
--- a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp
@@ -279,6 +279,10 @@ void FormEditorView::bindingPropertiesChanged(const QList<BindingProperty>& prop
QmlModelView::bindingPropertiesChanged(propertyList, propertyChange);
}
+void FormEditorView::signalHandlerPropertiesChanged(const QVector<SignalHandlerProperty> & /*propertyList*/, AbstractView::PropertyChangeFlags /*propertyChange*/)
+{
+}
+
WidgetInfo FormEditorView::widgetInfo()
{
return createWidgetInfo(m_formEditorWidget.data(), 0, "FormEditor", WidgetInfo::CentralPane, 0, tr("Form Editor"));
diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorview.h b/src/plugins/qmldesigner/components/formeditor/formeditorview.h
index deabbee8a4..e89b6b7e4e 100644
--- a/src/plugins/qmldesigner/components/formeditor/formeditorview.h
+++ b/src/plugins/qmldesigner/components/formeditor/formeditorview.h
@@ -78,6 +78,7 @@ public:
void propertiesAboutToBeRemoved(const QList<AbstractProperty>& propertyList) QTC_OVERRIDE;
void variantPropertiesChanged(const QList<VariantProperty>& propertyList, PropertyChangeFlags propertyChange) QTC_OVERRIDE;
void bindingPropertiesChanged(const QList<BindingProperty>& propertyList, PropertyChangeFlags propertyChange) QTC_OVERRIDE;
+ void signalHandlerPropertiesChanged(const QVector<SignalHandlerProperty>& propertyList, PropertyChangeFlags propertyChange) QTC_OVERRIDE;
void rootNodeTypeChanged(const QString &type, int majorVersion, int minorVersion) QTC_OVERRIDE;
void selectedNodesChanged(const QList<ModelNode> &selectedNodeList,
diff --git a/src/plugins/qmldesigner/components/integration/componentview.cpp b/src/plugins/qmldesigner/components/integration/componentview.cpp
index 465a10325b..49fb7df80b 100644
--- a/src/plugins/qmldesigner/components/integration/componentview.cpp
+++ b/src/plugins/qmldesigner/components/integration/componentview.cpp
@@ -188,6 +188,7 @@ void ComponentView::propertiesAboutToBeRemoved(const QList<AbstractProperty>& /*
void ComponentView::propertiesRemoved(const QList<AbstractProperty>& /*propertyList*/) {}
void ComponentView::variantPropertiesChanged(const QList<VariantProperty>& /*propertyList*/, PropertyChangeFlags /*propertyChange*/) {}
void ComponentView::bindingPropertiesChanged(const QList<BindingProperty>& /*propertyList*/, PropertyChangeFlags /*propertyChange*/) {}
+void ComponentView::signalHandlerPropertiesChanged(const QVector<SignalHandlerProperty> & /*propertyList*/, AbstractView::PropertyChangeFlags /*propertyChange*/) {}
void ComponentView::rootNodeTypeChanged(const QString &/*type*/, int /*majorVersion*/, int /*minorVersion*/) {}
void ComponentView::scriptFunctionsChanged(const ModelNode &/*node*/, const QStringList &/*scriptFunctionList*/) {}
void ComponentView::instancePropertyChange(const QList<QPair<ModelNode, PropertyName> > &/*propertyList*/) {}
diff --git a/src/plugins/qmldesigner/components/integration/componentview.h b/src/plugins/qmldesigner/components/integration/componentview.h
index 43d7e9b1bd..f3287940aa 100644
--- a/src/plugins/qmldesigner/components/integration/componentview.h
+++ b/src/plugins/qmldesigner/components/integration/componentview.h
@@ -78,6 +78,8 @@ public:
PropertyChangeFlags propertyChange) QTC_OVERRIDE;
void bindingPropertiesChanged(const QList<BindingProperty>& propertyList,
PropertyChangeFlags propertyChange) QTC_OVERRIDE;
+ void signalHandlerPropertiesChanged(const QVector<SignalHandlerProperty>& propertyList,
+ PropertyChangeFlags propertyChange) QTC_OVERRIDE;
void rootNodeTypeChanged(const QString &type, int majorVersion, int minorVersion) QTC_OVERRIDE;
void scriptFunctionsChanged(const ModelNode &node, const QStringList &scriptFunctionList) QTC_OVERRIDE;
void instancePropertyChange(const QList<QPair<ModelNode, PropertyName> > &propertyList) QTC_OVERRIDE;
diff --git a/src/plugins/qmldesigner/components/integration/designdocumentview.cpp b/src/plugins/qmldesigner/components/integration/designdocumentview.cpp
index 7e152dd524..4a34d31c1e 100644
--- a/src/plugins/qmldesigner/components/integration/designdocumentview.cpp
+++ b/src/plugins/qmldesigner/components/integration/designdocumentview.cpp
@@ -59,6 +59,9 @@ void DesignDocumentView::propertiesAboutToBeRemoved(const QList<AbstractProperty
void DesignDocumentView::propertiesRemoved(const QList<AbstractProperty>& /*propertyList*/) {}
void DesignDocumentView::variantPropertiesChanged(const QList<VariantProperty>& /*propertyList*/, AbstractView::PropertyChangeFlags /*propertyChange*/) {}
void DesignDocumentView::bindingPropertiesChanged(const QList<BindingProperty>& /*propertyList*/, AbstractView::PropertyChangeFlags /*propertyChange*/) {}
+void DesignDocumentView::signalHandlerPropertiesChanged(const QVector<SignalHandlerProperty> & /*propertyList*/,
+ AbstractView::PropertyChangeFlags /*propertyChange*/)
+{}
void DesignDocumentView::rootNodeTypeChanged(const QString & /*type*/, int /*majorVersion*/, int /*minorVersion*/) {}
void DesignDocumentView::selectedNodesChanged(const QList<ModelNode> & /*selectedNodeList*/,
diff --git a/src/plugins/qmldesigner/components/integration/designdocumentview.h b/src/plugins/qmldesigner/components/integration/designdocumentview.h
index 271f041a2f..d2ef379fec 100644
--- a/src/plugins/qmldesigner/components/integration/designdocumentview.h
+++ b/src/plugins/qmldesigner/components/integration/designdocumentview.h
@@ -58,6 +58,7 @@ public:
virtual void propertiesRemoved(const QList<AbstractProperty>& propertyList) QTC_OVERRIDE;
virtual void variantPropertiesChanged(const QList<VariantProperty>& propertyList, PropertyChangeFlags propertyChange) QTC_OVERRIDE;
virtual void bindingPropertiesChanged(const QList<BindingProperty>& propertyList, PropertyChangeFlags propertyChange) QTC_OVERRIDE;
+ virtual void signalHandlerPropertiesChanged(const QVector<SignalHandlerProperty>& propertyList, PropertyChangeFlags propertyChange) QTC_OVERRIDE;
virtual void rootNodeTypeChanged(const QString &type, int majorVersion, int minorVersion) QTC_OVERRIDE;
virtual void selectedNodesChanged(const QList<ModelNode> &selectedNodeList,
diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp
index f7dfb121c1..82ea759fe2 100644
--- a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp
+++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp
@@ -103,6 +103,10 @@ void ItemLibraryView::bindingPropertiesChanged(const QList<BindingProperty> &, P
}
+void ItemLibraryView::signalHandlerPropertiesChanged(const QVector<SignalHandlerProperty> &, AbstractView::PropertyChangeFlags)
+{
+}
+
void ItemLibraryView::nodeAboutToBeRemoved(const ModelNode &)
{
diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.h b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.h
index 277dac312a..dc156d61e2 100644
--- a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.h
+++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.h
@@ -65,6 +65,8 @@ public:
PropertyChangeFlags propertyChange) QTC_OVERRIDE;
void bindingPropertiesChanged(const QList<BindingProperty> &propertyList,
PropertyChangeFlags propertyChange) QTC_OVERRIDE;
+ void signalHandlerPropertiesChanged(const QVector<SignalHandlerProperty>& propertyList,
+ PropertyChangeFlags propertyChange) QTC_OVERRIDE;
void nodeAboutToBeRemoved(const ModelNode &removedNode) QTC_OVERRIDE;
void nodeOrderChanged(const NodeListProperty &listProperty, const ModelNode &movedNode, int oldIndex) QTC_OVERRIDE;
diff --git a/src/plugins/qmldesigner/components/navigator/navigatorview.cpp b/src/plugins/qmldesigner/components/navigator/navigatorview.cpp
index dbc1ae1bdd..b685e92715 100644
--- a/src/plugins/qmldesigner/components/navigator/navigatorview.cpp
+++ b/src/plugins/qmldesigner/components/navigator/navigatorview.cpp
@@ -162,6 +162,11 @@ void NavigatorView::bindingPropertiesChanged(const QList<BindingProperty> & /*pr
{
}
+void NavigatorView::signalHandlerPropertiesChanged(const QVector<SignalHandlerProperty> & /*propertyList*/,
+ AbstractView::PropertyChangeFlags /*propertyChange*/)
+{
+}
+
void NavigatorView::nodeAboutToBeRemoved(const ModelNode &removedNode)
{
if (m_treeModel->isInTree(removedNode))
diff --git a/src/plugins/qmldesigner/components/navigator/navigatorview.h b/src/plugins/qmldesigner/components/navigator/navigatorview.h
index 2a802d7a26..2aa159367f 100644
--- a/src/plugins/qmldesigner/components/navigator/navigatorview.h
+++ b/src/plugins/qmldesigner/components/navigator/navigatorview.h
@@ -70,6 +70,7 @@ public:
void propertiesRemoved(const QList<AbstractProperty> &propertyList) QTC_OVERRIDE;
void variantPropertiesChanged(const QList<VariantProperty> &propertyList, PropertyChangeFlags propertyChange) QTC_OVERRIDE;
void bindingPropertiesChanged(const QList<BindingProperty> &propertyList, PropertyChangeFlags propertyChange) QTC_OVERRIDE;
+ void signalHandlerPropertiesChanged(const QVector<SignalHandlerProperty>& propertyList,PropertyChangeFlags propertyChange) QTC_OVERRIDE;
void nodeAboutToBeRemoved(const ModelNode &removedNode) QTC_OVERRIDE;
void nodeOrderChanged(const NodeListProperty &listProperty, const ModelNode &movedNode, int oldIndex) QTC_OVERRIDE;
diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.cpp b/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.cpp
index 07be74f046..d4329cc674 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.cpp
+++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.cpp
@@ -916,6 +916,11 @@ void PropertyEditor::bindingPropertiesChanged(const QList<BindingProperty>& prop
}
}
+void PropertyEditor::signalHandlerPropertiesChanged(const QVector<SignalHandlerProperty> & /*propertyList*/,
+ AbstractView::PropertyChangeFlags /*propertyChange*/)
+{
+}
+
void PropertyEditor::instanceInformationsChange(const QMultiHash<ModelNode, InformationName> &informationChangeHash)
{
diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.h b/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.h
index a1d9be92bb..2aa52ad07d 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.h
+++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.h
@@ -100,6 +100,7 @@ public:
void variantPropertiesChanged(const QList<VariantProperty>& propertyList, PropertyChangeFlags propertyChange) QTC_OVERRIDE;
void bindingPropertiesChanged(const QList<BindingProperty>& propertyList, PropertyChangeFlags propertyChange) QTC_OVERRIDE;
+ void signalHandlerPropertiesChanged(const QVector<SignalHandlerProperty>& propertyList,PropertyChangeFlags propertyChange) QTC_OVERRIDE;
void instanceInformationsChange(const QMultiHash<ModelNode, InformationName> &informationChangeHash) QTC_OVERRIDE;
diff --git a/src/plugins/qmldesigner/components/stateseditor/stateseditorview.cpp b/src/plugins/qmldesigner/components/stateseditor/stateseditorview.cpp
index ffea5bfe2e..58f52e9d8d 100644
--- a/src/plugins/qmldesigner/components/stateseditor/stateseditorview.cpp
+++ b/src/plugins/qmldesigner/components/stateseditor/stateseditorview.cpp
@@ -342,6 +342,12 @@ void StatesEditorView::bindingPropertiesChanged(const QList<BindingProperty> &/*
}
+void StatesEditorView::signalHandlerPropertiesChanged(const QVector<SignalHandlerProperty> & /*propertyList*/,
+ AbstractView::PropertyChangeFlags /*propertyChange*/)
+{
+
+}
+
void StatesEditorView::selectedNodesChanged(const QList<ModelNode> &/*selectedNodeList*/, const QList<ModelNode> &/*lastSelectedNodeList*/)
{
diff --git a/src/plugins/qmldesigner/components/stateseditor/stateseditorview.h b/src/plugins/qmldesigner/components/stateseditor/stateseditorview.h
index a218c71e58..369353f3e3 100644
--- a/src/plugins/qmldesigner/components/stateseditor/stateseditorview.h
+++ b/src/plugins/qmldesigner/components/stateseditor/stateseditorview.h
@@ -76,6 +76,7 @@ public:
void scriptFunctionsChanged(const ModelNode &node, const QStringList &scriptFunctionList) QTC_OVERRIDE;
void nodeIdChanged(const ModelNode &node, const QString &newId, const QString &oldId) QTC_OVERRIDE;
void bindingPropertiesChanged(const QList<BindingProperty> &propertyList, PropertyChangeFlags propertyChange) QTC_OVERRIDE;
+ void signalHandlerPropertiesChanged(const QVector<SignalHandlerProperty>& propertyList,PropertyChangeFlags propertyChange) QTC_OVERRIDE;
void selectedNodesChanged(const QList<ModelNode> &selectedNodeList, const QList<ModelNode> &lastSelectedNodeList) QTC_OVERRIDE;
void instancesPreviewImageChanged(const QVector<ModelNode> &nodeList) QTC_OVERRIDE;
diff --git a/src/plugins/qmldesigner/designercore/designercore-lib.pri b/src/plugins/qmldesigner/designercore/designercore-lib.pri
index 96609f2ac6..edd64602c1 100644
--- a/src/plugins/qmldesigner/designercore/designercore-lib.pri
+++ b/src/plugins/qmldesigner/designercore/designercore-lib.pri
@@ -76,7 +76,9 @@ SOURCES += $$PWD/model/abstractview.cpp \
$$PWD/model/qmltextgenerator.cpp \
$$PWD/model/modelmerger.cpp \
$$PWD/exceptions/rewritingexception.cpp \
- $$PWD/model/viewmanager.cpp
+ $$PWD/model/viewmanager.cpp \
+ $$PWD/model/signalhandlerproperty.cpp \
+ $$PWD/model/internalsignalhandlerproperty.cpp
HEADERS += $$PWD/include/qmldesignercorelib_global.h \
$$PWD/include/abstractview.h \
@@ -147,7 +149,9 @@ HEADERS += $$PWD/include/qmldesignercorelib_global.h \
$$PWD/include/mathutils.h \
$$PWD/include/customnotifications.h \
$$PWD/include/rewritingexception.h \
- $$PWD/include/viewmanager.h
+ $$PWD/include/viewmanager.h \
+ $$PWD/include/signalhandlerproperty.h \
+ $$PWD/model/internalsignalhandlerproperty.h
contains(CONFIG, plugin) {
# If core.pri has been included in the qmldesigner plugin
diff --git a/src/plugins/qmldesigner/designercore/include/abstractproperty.h b/src/plugins/qmldesigner/designercore/include/abstractproperty.h
index 36a993d538..86e7381ce5 100644
--- a/src/plugins/qmldesigner/designercore/include/abstractproperty.h
+++ b/src/plugins/qmldesigner/designercore/include/abstractproperty.h
@@ -57,6 +57,7 @@ class QMLDESIGNERCORE_EXPORT NodeListProperty;
class QMLDESIGNERCORE_EXPORT NodeAbstractProperty;
class QMLDESIGNERCORE_EXPORT BindingProperty;
class QMLDESIGNERCORE_EXPORT NodeProperty;
+class QMLDESIGNERCORE_EXPORT SignalHandlerProperty;
class QmlObjectNode;
@@ -93,12 +94,14 @@ public:
NodeAbstractProperty toNodeAbstractProperty() const;
BindingProperty toBindingProperty() const;
NodeProperty toNodeProperty() const;
+ SignalHandlerProperty toSignalHandlerProperty() const;
bool isVariantProperty() const;
bool isNodeListProperty() const;
bool isNodeAbstractProperty() const;
bool isBindingProperty() const;
bool isNodeProperty() const;
+ bool isSignalHandlerProperty() const;
bool isDynamic() const;
TypeName dynamicTypeName() const;
diff --git a/src/plugins/qmldesigner/designercore/include/abstractview.h b/src/plugins/qmldesigner/designercore/include/abstractview.h
index cad3f5946a..13063fb701 100644
--- a/src/plugins/qmldesigner/designercore/include/abstractview.h
+++ b/src/plugins/qmldesigner/designercore/include/abstractview.h
@@ -190,6 +190,7 @@ public:
virtual void propertiesRemoved(const QList<AbstractProperty>& propertyList) = 0;
virtual void variantPropertiesChanged(const QList<VariantProperty>& propertyList, PropertyChangeFlags propertyChange) = 0;
virtual void bindingPropertiesChanged(const QList<BindingProperty>& propertyList, PropertyChangeFlags propertyChange) = 0;
+ virtual void signalHandlerPropertiesChanged(const QVector<SignalHandlerProperty>& propertyList, PropertyChangeFlags propertyChange) = 0;
virtual void rootNodeTypeChanged(const QString &type, int majorVersion, int minorVersion) = 0;
virtual void instancePropertyChange(const QList<QPair<ModelNode, PropertyName> > &propertyList) = 0;
diff --git a/src/plugins/qmldesigner/designercore/include/forwardview.h b/src/plugins/qmldesigner/designercore/include/forwardview.h
index 82b4398aca..7ebd6ca67d 100644
--- a/src/plugins/qmldesigner/designercore/include/forwardview.h
+++ b/src/plugins/qmldesigner/designercore/include/forwardview.h
@@ -62,6 +62,7 @@ public:
void propertiesRemoved(const QList<AbstractProperty>& propertyList);
void variantPropertiesChanged(const QList<VariantProperty>& propertyList, PropertyChangeFlags propertyChange);
void bindingPropertiesChanged(const QList<BindingProperty>& propertyList, PropertyChangeFlags propertyChange);
+ void signalHandlerPropertiesChanged(const QVector<SignalHandlerProperty>& propertyList,PropertyChangeFlags propertyChange);
void rootNodeTypeChanged(const QString &type, int majorVersion, int minorVersion);
void selectedNodesChanged(const QList<ModelNode> &selectedNodeList,
@@ -185,6 +186,12 @@ void ForwardView<ViewType>::bindingPropertiesChanged(const QList<BindingProperty
view->bindingPropertiesChanged(adjustedList(propertyList, view.data()), propertyChange);
}
+void ForwardView::signalHandlerPropertiesChanged(const QVector<SignalHandlerProperty> &propertyList, AbstractView::PropertyChangeFlags propertyChange)
+{
+ foreach (const ViewTypePointer &view, m_targetViewList)
+ view->signalHandlerPropertiesChanged(adjustedList(propertyList, view.data()), propertyChange);
+}
+
template <class ViewType>
void ForwardView<ViewType>::rootNodeTypeChanged(const QString &type, int majorVersion, int minorVersion)
{
diff --git a/src/plugins/qmldesigner/designercore/include/modelnode.h b/src/plugins/qmldesigner/designercore/include/modelnode.h
index ed322f49d9..baadebb656 100644
--- a/src/plugins/qmldesigner/designercore/include/modelnode.h
+++ b/src/plugins/qmldesigner/designercore/include/modelnode.h
@@ -56,6 +56,7 @@ class NodeMetaInfo;
class AbstractProperty;
class BindingProperty;
class VariantProperty;
+class SignalHandlerProperty;
class Model;
class AbstractView;
class NodeListProperty;
@@ -120,6 +121,7 @@ public:
AbstractProperty property(const PropertyName &name) const;
VariantProperty variantProperty(const PropertyName &name) const;
BindingProperty bindingProperty(const PropertyName &name) const;
+ SignalHandlerProperty signalHandlerProperty(const PropertyName &name) const;
NodeListProperty nodeListProperty(const PropertyName &name) const;
NodeProperty nodeProperty(const PropertyName &name) const;
NodeAbstractProperty nodeAbstractProperty(const PropertyName &name) const;
diff --git a/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h b/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h
index 734211c29f..205355edd9 100644
--- a/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h
+++ b/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h
@@ -91,6 +91,7 @@ public:
void propertiesRemoved(const QList<AbstractProperty>& propertyList) QTC_OVERRIDE;
void variantPropertiesChanged(const QList<VariantProperty>& propertyList, PropertyChangeFlags propertyChange) QTC_OVERRIDE;
void bindingPropertiesChanged(const QList<BindingProperty>& propertyList, PropertyChangeFlags propertyChange) QTC_OVERRIDE;
+ void signalHandlerPropertiesChanged(const QVector<SignalHandlerProperty> &propertyList, PropertyChangeFlags propertyChange) QTC_OVERRIDE;
void nodeAboutToBeReparented(const ModelNode &node,
const NodeAbstractProperty &newPropertyParent,
const NodeAbstractProperty &oldPropertyParent,
diff --git a/src/plugins/qmldesigner/designercore/include/qmlmodelview.h b/src/plugins/qmldesigner/designercore/include/qmlmodelview.h
index a24059b601..8807f2cff4 100644
--- a/src/plugins/qmldesigner/designercore/include/qmlmodelview.h
+++ b/src/plugins/qmldesigner/designercore/include/qmlmodelview.h
@@ -118,6 +118,7 @@ public:
void propertiesRemoved(const QList<AbstractProperty>& propertyList) QTC_OVERRIDE;
void variantPropertiesChanged(const QList<VariantProperty>& propertyList, PropertyChangeFlags propertyChange) QTC_OVERRIDE;
void bindingPropertiesChanged(const QList<BindingProperty>& propertyList, PropertyChangeFlags propertyChange) QTC_OVERRIDE;
+ void signalHandlerPropertiesChanged(const QVector<SignalHandlerProperty>& propertyList,PropertyChangeFlags propertyChange) QTC_OVERRIDE;
void scriptFunctionsChanged(const ModelNode &node, const QStringList &scriptFunctionList) QTC_OVERRIDE;
void selectedNodesChanged(const QList<ModelNode> &selectedNodeList, const QList<ModelNode> &lastSelectedNodeList) QTC_OVERRIDE;
diff --git a/src/plugins/qmldesigner/designercore/include/rewriterview.h b/src/plugins/qmldesigner/designercore/include/rewriterview.h
index 5ffdfef2b4..ff65fb09ac 100644
--- a/src/plugins/qmldesigner/designercore/include/rewriterview.h
+++ b/src/plugins/qmldesigner/designercore/include/rewriterview.h
@@ -127,6 +127,7 @@ public:
void propertiesRemoved(const QList<AbstractProperty>& propertyList) QTC_OVERRIDE;
void variantPropertiesChanged(const QList<VariantProperty>& propertyList, PropertyChangeFlags propertyChange) QTC_OVERRIDE;
void bindingPropertiesChanged(const QList<BindingProperty>& propertyList, PropertyChangeFlags propertyChange) QTC_OVERRIDE;
+ void signalHandlerPropertiesChanged(const QVector<SignalHandlerProperty>& propertyList,PropertyChangeFlags propertyChange) QTC_OVERRIDE;
void nodeAboutToBeReparented(const ModelNode &node, const NodeAbstractProperty &newPropertyParent,
const NodeAbstractProperty &oldPropertyParent,
AbstractView::PropertyChangeFlags propertyChange) QTC_OVERRIDE;
diff --git a/src/plugins/qmldesigner/designercore/include/signalhandlerproperty.h b/src/plugins/qmldesigner/designercore/include/signalhandlerproperty.h
new file mode 100644
index 0000000000..649e9846fc
--- /dev/null
+++ b/src/plugins/qmldesigner/designercore/include/signalhandlerproperty.h
@@ -0,0 +1,58 @@
+/****************************************************************************
+**
+** 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 SIGNALHANDLERPROPERTY_H
+#define SIGNALHANDLERPROPERTY_H
+
+#include "qmldesignercorelib_global.h"
+#include "abstractproperty.h"
+
+namespace QmlDesigner {
+
+class QMLDESIGNERCORE_EXPORT SignalHandlerProperty : public QmlDesigner::AbstractProperty
+{
+ friend class QmlDesigner::ModelNode;
+ friend class QmlDesigner::Internal::ModelPrivate;
+ friend class QmlDesigner::AbstractProperty;
+
+public:
+ void setSource(const QString &source);
+ QString source() const;
+ SignalHandlerProperty& operator= (const QString &source);
+
+ SignalHandlerProperty();
+ SignalHandlerProperty(const SignalHandlerProperty &property, AbstractView *view);
+
+protected:
+ SignalHandlerProperty(const PropertyName &propertyName, const Internal::InternalNodePointer &internalNode, Model* model, AbstractView *view);
+};
+
+} // namespace QmlDesigner
+
+#endif // SIGNALHANDLERPROPERTY_H
diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp
index 479e12db1b..c1a3a3d124 100644
--- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp
+++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp
@@ -376,6 +376,11 @@ void NodeInstanceView::bindingPropertiesChanged(const QList<BindingProperty>& pr
nodeInstanceServer()->changePropertyBindings(createChangeBindingCommand(propertyList));
}
+void NodeInstanceView::signalHandlerPropertiesChanged(const QVector<SignalHandlerProperty> & /*propertyList*/,
+ AbstractView::PropertyChangeFlags /*propertyChange*/)
+{
+}
+
/*! \brief Notifing the view that a AbstractProperty value was changed to a ModelNode.
The property will be set for the NodeInstance.
diff --git a/src/plugins/qmldesigner/designercore/model/abstractproperty.cpp b/src/plugins/qmldesigner/designercore/model/abstractproperty.cpp
index dd86adcb31..51cac9a412 100644
--- a/src/plugins/qmldesigner/designercore/model/abstractproperty.cpp
+++ b/src/plugins/qmldesigner/designercore/model/abstractproperty.cpp
@@ -37,6 +37,7 @@
#include "invalidpropertyexception.h"
#include "variantproperty.h"
#include "bindingproperty.h"
+#include "signalhandlerproperty.h"
#include "nodeproperty.h"
#include "nodeabstractproperty.h"
#include "nodelistproperty.h"
@@ -257,6 +258,19 @@ NodeProperty AbstractProperty::toNodeProperty() const
return NodeProperty();
}
+SignalHandlerProperty AbstractProperty::toSignalHandlerProperty() const
+{
+ if (!isValid())
+ throw InvalidPropertyException(__LINE__, __FUNCTION__, __FILE__, m_propertyName);
+
+ SignalHandlerProperty propertyNode(name(), internalNode(), model(), view());
+
+ if (propertyNode.isSignalHandlerProperty())
+ return propertyNode;
+
+ return SignalHandlerProperty();
+}
+
NodeListProperty AbstractProperty::toNodeListProperty() const
{
if (!isValid())
@@ -348,6 +362,19 @@ bool AbstractProperty::isNodeProperty() const
return false;
}
+bool AbstractProperty::isSignalHandlerProperty() const
+{
+ if (!isValid())
+ throw InvalidPropertyException(__LINE__, __FUNCTION__, __FILE__, m_propertyName);
+
+ if (internalNode()->hasProperty(name())) {
+ Q_ASSERT(internalNode()->property(name()));
+ return internalNode()->property(name())->isSignalHandlerProperty();
+ }
+
+ return false;
+}
+
bool AbstractProperty::isBindingProperty() const
{
diff --git a/src/plugins/qmldesigner/designercore/model/internalnode.cpp b/src/plugins/qmldesigner/designercore/model/internalnode.cpp
index f73d210d8c..8c452eb523 100644
--- a/src/plugins/qmldesigner/designercore/model/internalnode.cpp
+++ b/src/plugins/qmldesigner/designercore/model/internalnode.cpp
@@ -200,6 +200,15 @@ InternalBindingProperty::Pointer InternalNode::bindingProperty(const PropertyNam
return InternalBindingProperty::Pointer();
}
+InternalSignalHandlerProperty::Pointer InternalNode::signalHandlerProperty(const PropertyName &name) const
+{
+ InternalProperty::Pointer property = m_namePropertyHash.value(name);
+ if (property->isSignalHandlerProperty())
+ return property.staticCast<InternalSignalHandlerProperty>();
+
+ return InternalSignalHandlerProperty::Pointer();
+}
+
InternalVariantProperty::Pointer InternalNode::variantProperty(const PropertyName &name) const
{
InternalProperty::Pointer property = m_namePropertyHash.value(name);
@@ -215,6 +224,12 @@ void InternalNode::addBindingProperty(const PropertyName &name)
m_namePropertyHash.insert(name, newProperty);
}
+void InternalNode::addSignalHandlerProperty(const PropertyName &name)
+{
+ InternalProperty::Pointer newProperty(InternalSignalHandlerProperty::create(name, internalPointer()));
+ m_namePropertyHash.insert(name, newProperty);
+}
+
InternalNodeListProperty::Pointer InternalNode::nodeListProperty(const PropertyName &name) const
{
InternalProperty::Pointer property = m_namePropertyHash.value(name);
diff --git a/src/plugins/qmldesigner/designercore/model/internalnode_p.h b/src/plugins/qmldesigner/designercore/model/internalnode_p.h
index b1edde9d94..37c249f47b 100644
--- a/src/plugins/qmldesigner/designercore/model/internalnode_p.h
+++ b/src/plugins/qmldesigner/designercore/model/internalnode_p.h
@@ -38,6 +38,7 @@
#include "internalproperty.h"
#include "internalvariantproperty.h"
#include "internalbindingproperty.h"
+#include "internalsignalhandlerproperty.h"
#include "internalnodelistproperty.h"
#include "internalnodeproperty.h"
#include "internalnodeabstractproperty.h"
@@ -93,12 +94,14 @@ public:
InternalProperty::Pointer property(const PropertyName &name) const;
InternalBindingProperty::Pointer bindingProperty(const PropertyName &name) const;
+ InternalSignalHandlerProperty::Pointer signalHandlerProperty(const PropertyName &name) const;
InternalVariantProperty::Pointer variantProperty(const PropertyName &name) const;
InternalNodeListProperty::Pointer nodeListProperty(const PropertyName &name) const;
InternalNodeAbstractProperty::Pointer nodeAbstractProperty(const PropertyName &name) const;
InternalNodeProperty::Pointer nodeProperty(const PropertyName &name) const;
void addBindingProperty(const PropertyName &name);
+ void addSignalHandlerProperty(const PropertyName &name);
void addNodeListProperty(const PropertyName &name);
void addVariantProperty(const PropertyName &name);
void addNodeProperty(const PropertyName &name);
diff --git a/src/plugins/qmldesigner/designercore/model/internalproperty.cpp b/src/plugins/qmldesigner/designercore/model/internalproperty.cpp
index c5fc9e3438..2ae1307550 100644
--- a/src/plugins/qmldesigner/designercore/model/internalproperty.cpp
+++ b/src/plugins/qmldesigner/designercore/model/internalproperty.cpp
@@ -32,6 +32,7 @@
#include "internalvariantproperty.h"
#include "internalnodelistproperty.h"
#include "internalnodeproperty.h"
+#include "internalsignalhandlerproperty.h"
#include "internalnode_p.h"
#include <QVariant>
#include <QString>
@@ -116,6 +117,11 @@ bool InternalProperty::isNodeAbstractProperty() const
return false;
}
+bool InternalProperty::isSignalHandlerProperty() const
+{
+ return false;
+}
+
QSharedPointer<InternalVariantProperty> InternalProperty::toVariantProperty() const
{
@@ -146,6 +152,12 @@ QSharedPointer<InternalNodeAbstractProperty> InternalProperty::toNodeAbstractPro
return internalPointer().staticCast<InternalNodeAbstractProperty>();
}
+QSharedPointer<InternalSignalHandlerProperty> InternalProperty::toSignalHandlerProperty() const
+{
+ Q_ASSERT(internalPointer().dynamicCast<InternalSignalHandlerProperty>());
+ return internalPointer().staticCast<InternalSignalHandlerProperty>();
+}
+
void InternalProperty::remove()
{
propertyOwner()->removeProperty(name());
diff --git a/src/plugins/qmldesigner/designercore/model/internalproperty.h b/src/plugins/qmldesigner/designercore/model/internalproperty.h
index 8aabd3fe65..14d72a68a5 100644
--- a/src/plugins/qmldesigner/designercore/model/internalproperty.h
+++ b/src/plugins/qmldesigner/designercore/model/internalproperty.h
@@ -46,6 +46,7 @@ namespace QmlDesigner {
namespace Internal {
class InternalBindingProperty;
+class InternalSignalHandlerProperty;
class InternalVariantProperty;
class InternalNodeListProperty;
class InternalNodeProperty;
@@ -74,12 +75,14 @@ public:
virtual bool isNodeListProperty() const;
virtual bool isNodeProperty() const;
virtual bool isNodeAbstractProperty() const;
+ virtual bool isSignalHandlerProperty() const;
QSharedPointer<InternalBindingProperty> toBindingProperty() const;
QSharedPointer<InternalVariantProperty> toVariantProperty() const;
QSharedPointer<InternalNodeListProperty> toNodeListProperty() const;
QSharedPointer<InternalNodeProperty> toNodeProperty() const;
QSharedPointer<InternalNodeAbstractProperty> toNodeAbstractProperty() const;
+ QSharedPointer<InternalSignalHandlerProperty> toSignalHandlerProperty() const;
InternalNodePointer propertyOwner() const;
diff --git a/src/plugins/qmldesigner/designercore/model/internalsignalhandlerproperty.cpp b/src/plugins/qmldesigner/designercore/model/internalsignalhandlerproperty.cpp
new file mode 100644
index 0000000000..73fd1c399c
--- /dev/null
+++ b/src/plugins/qmldesigner/designercore/model/internalsignalhandlerproperty.cpp
@@ -0,0 +1,71 @@
+/****************************************************************************
+**
+** 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 "InternalSignalHandlerProperty.h"
+
+namespace QmlDesigner {
+namespace Internal {
+
+InternalSignalHandlerProperty::InternalSignalHandlerProperty(const PropertyName &name, const InternalNodePointer &propertyOwner)
+ : InternalProperty(name, propertyOwner)
+{
+}
+
+
+InternalSignalHandlerProperty::Pointer InternalSignalHandlerProperty::create(const PropertyName &name, const InternalNodePointer &propertyOwner)
+{
+ InternalSignalHandlerProperty *newPointer(new InternalSignalHandlerProperty(name, propertyOwner));
+ InternalSignalHandlerProperty::Pointer smartPointer(newPointer);
+
+ newPointer->setInternalWeakPointer(smartPointer);
+
+ return smartPointer;
+}
+
+bool InternalSignalHandlerProperty::isValid() const
+{
+ return InternalProperty::isValid() && isSignalHandlerProperty();
+}
+
+QString InternalSignalHandlerProperty::source() const
+{
+ return m_source;
+}
+void InternalSignalHandlerProperty::setSource(const QString &source)
+{
+ m_source = source;
+}
+
+bool InternalSignalHandlerProperty::isSignalHandlerProperty() const
+{
+ return true;
+}
+
+} // namespace Internal
+} // namespace QmlDesigner
diff --git a/src/plugins/qmldesigner/designercore/model/internalsignalhandlerproperty.h b/src/plugins/qmldesigner/designercore/model/internalsignalhandlerproperty.h
new file mode 100644
index 0000000000..335ceb8199
--- /dev/null
+++ b/src/plugins/qmldesigner/designercore/model/internalsignalhandlerproperty.h
@@ -0,0 +1,62 @@
+/****************************************************************************
+**
+** 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 INTERNALSIGNALHANDLERPROPERTY_H
+#define INTERNALSIGNALHANDLERPROPERTY_H
+
+#include "internalproperty.h"
+
+namespace QmlDesigner {
+namespace Internal {
+
+class InternalSignalHandlerProperty : public InternalProperty
+{
+public:
+ typedef QSharedPointer<InternalSignalHandlerProperty> Pointer;
+
+ static Pointer create(const PropertyName &name, const InternalNodePointer &propertyOwner);
+
+ bool isValid() const;
+
+ QString source() const;
+ void setSource(const QString &source);
+
+ bool isSignalHandlerProperty() const;
+
+protected:
+ InternalSignalHandlerProperty(const PropertyName &name, const InternalNodePointer &propertyOwner);
+
+private:
+ QString m_source;
+};
+
+} // namespace Internal
+} // namespace QmlDesigner
+
+#endif // INTERNALSIGNALHANDLERPROPERTY_H
diff --git a/src/plugins/qmldesigner/designercore/model/model.cpp b/src/plugins/qmldesigner/designercore/model/model.cpp
index eb32bf1b90..23b71ef0fa 100644
--- a/src/plugins/qmldesigner/designercore/model/model.cpp
+++ b/src/plugins/qmldesigner/designercore/model/model.cpp
@@ -52,6 +52,7 @@
#include "subcomponentmanager.h"
#include "internalproperty.h"
#include "internalnodelistproperty.h"
+#include "internalsignalhandlerproperty.h"
#include "internalnodeabstractproperty.h"
#include "invalidmodelnodeexception.h"
#include "invalidmodelstateexception.h"
@@ -60,6 +61,7 @@
#include "abstractproperty.h"
#include "variantproperty.h"
#include "bindingproperty.h"
+#include "signalhandlerproperty.h"
#include "nodeabstractproperty.h"
#include "nodelistproperty.h"
#include "rewritertransaction.h"
@@ -1009,6 +1011,46 @@ void ModelPrivate::notifyBindingPropertiesChanged(const QList<InternalBindingPro
resetModelByRewriter(description);
}
+void ModelPrivate::notifySignalHandlerPropertiesChanged(const QVector<InternalSignalHandlerPropertyPointer> &internalPropertyList, AbstractView::PropertyChangeFlags propertyChange)
+{
+ bool resetModel = false;
+ QString description;
+
+ try {
+ if (rewriterView()) {
+ QVector<SignalHandlerProperty> propertyList;
+ foreach (const InternalSignalHandlerPropertyPointer &signalHandlerProperty, internalPropertyList) {
+ propertyList.append(SignalHandlerProperty(signalHandlerProperty->name(), signalHandlerProperty->propertyOwner(), model(), rewriterView()));
+ }
+ rewriterView()->signalHandlerPropertiesChanged(propertyList, propertyChange);
+ }
+ } catch (RewritingException &e) {
+ description = e.description();
+ resetModel = true;
+ }
+
+ foreach (const QWeakPointer<AbstractView> &view, m_viewList) {
+ Q_ASSERT(view != 0);
+ QVector<SignalHandlerProperty> propertyList;
+ foreach (const InternalSignalHandlerPropertyPointer &signalHandlerProperty, internalPropertyList) {
+ propertyList.append(SignalHandlerProperty(signalHandlerProperty->name(), signalHandlerProperty->propertyOwner(), model(), view.data()));
+ }
+ view->signalHandlerPropertiesChanged(propertyList, propertyChange);
+
+ }
+
+ if (nodeInstanceView()) {
+ QVector<SignalHandlerProperty> propertyList;
+ foreach (const InternalSignalHandlerPropertyPointer &signalHandlerProperty, internalPropertyList) {
+ propertyList.append(SignalHandlerProperty(signalHandlerProperty->name(), signalHandlerProperty->propertyOwner(), model(), nodeInstanceView()));
+ }
+ nodeInstanceView()->signalHandlerPropertiesChanged(propertyList, propertyChange);
+ }
+
+ if (resetModel)
+ resetModelByRewriter(description);
+}
+
void ModelPrivate::notifyScriptFunctionsChanged(const InternalNodePointer &internalNodePointer, const QStringList &scriptFunctionList)
{
bool resetModel = false;
@@ -1392,6 +1434,19 @@ void ModelPrivate::setBindingProperty(const InternalNode::Pointer &internalNode,
notifyBindingPropertiesChanged(QList<InternalBindingPropertyPointer>() << bindingProperty, propertyChange);
}
+void ModelPrivate::setSignalHandlerProperty(const InternalNodePointer &internalNode, const PropertyName &name, const QString &source)
+{
+ AbstractView::PropertyChangeFlags propertyChange = AbstractView::NoAdditionalChanges;
+ if (!internalNode->hasProperty(name)) {
+ internalNode->addSignalHandlerProperty(name);
+ propertyChange = AbstractView::PropertiesAdded;
+ }
+
+ InternalSignalHandlerProperty::Pointer signalHandlerProperty = internalNode->signalHandlerProperty(name);
+ signalHandlerProperty->setSource(source);
+ notifySignalHandlerPropertiesChanged(QVector<InternalSignalHandlerPropertyPointer>() << signalHandlerProperty, propertyChange);
+}
+
void ModelPrivate::setVariantProperty(const InternalNode::Pointer &internalNode, const PropertyName &name, const QVariant &value)
{
AbstractView::PropertyChangeFlags propertyChange = AbstractView::NoAdditionalChanges;
diff --git a/src/plugins/qmldesigner/designercore/model/model_p.h b/src/plugins/qmldesigner/designercore/model/model_p.h
index 57ff11e4da..ae0f156eb5 100644
--- a/src/plugins/qmldesigner/designercore/model/model_p.h
+++ b/src/plugins/qmldesigner/designercore/model/model_p.h
@@ -56,6 +56,7 @@ namespace Internal {
class InternalNode;
class InternalProperty;
class InternalBindingProperty;
+class InternalSignalHandlerProperty;
class InternalVariantProperty;
class InternalNodeAbstractProperty;
class InternalNodeListProperty;
@@ -63,6 +64,7 @@ class InternalNodeListProperty;
typedef QSharedPointer<InternalNode> InternalNodePointer;
typedef QSharedPointer<InternalProperty> InternalPropertyPointer;
typedef QSharedPointer<InternalBindingProperty> InternalBindingPropertyPointer;
+typedef QSharedPointer<InternalSignalHandlerProperty> InternalSignalHandlerPropertyPointer;
typedef QSharedPointer<InternalVariantProperty> InternalVariantPropertyPointer;
typedef QSharedPointer<InternalNodeAbstractProperty> InternalNodeAbstractPropertyPointer;
typedef QSharedPointer<InternalNodeListProperty> InternalNodeListPropertyPointer;
@@ -137,6 +139,7 @@ public:
void notifyPropertiesRemoved(const QList<PropertyPair> &propertyList);
void notifyPropertiesAboutToBeRemoved(const QList<InternalPropertyPointer> &propertyList);
void notifyBindingPropertiesChanged(const QList<InternalBindingPropertyPointer> &propertyList, AbstractView::PropertyChangeFlags propertyChange);
+ void notifySignalHandlerPropertiesChanged(const QVector<InternalSignalHandlerPropertyPointer> &propertyList, AbstractView::PropertyChangeFlags propertyChange);
void notifyVariantPropertiesChanged(const InternalNodePointer &internalNodePointer, const PropertyNameList &propertyNameList, AbstractView::PropertyChangeFlags propertyChange);
void notifyScriptFunctionsChanged(const InternalNodePointer &internalNodePointer, const QStringList &scriptFunctionList);
@@ -187,6 +190,7 @@ public:
void removeProperty(const InternalPropertyPointer &property);
void setBindingProperty(const InternalNodePointer &internalNode, const PropertyName &name, const QString &expression);
+ void setSignalHandlerProperty(const InternalNodePointer &internalNode, const PropertyName &name, const QString &source);
void setVariantProperty(const InternalNodePointer &internalNode, const PropertyName &name, const QVariant &value);
void setDynamicVariantProperty(const InternalNodePointer &internalNode, const PropertyName &name, const TypeName &propertyType, const QVariant &value);
void setDynamicBindingProperty(const InternalNodePointer &internalNode, const PropertyName &name, const TypeName &dynamicPropertyType, const QString &expression);
diff --git a/src/plugins/qmldesigner/designercore/model/modelnode.cpp b/src/plugins/qmldesigner/designercore/model/modelnode.cpp
index 1266241b12..b1752c3c7f 100644
--- a/src/plugins/qmldesigner/designercore/model/modelnode.cpp
+++ b/src/plugins/qmldesigner/designercore/model/modelnode.cpp
@@ -44,6 +44,7 @@
#include "model_p.h"
#include "variantproperty.h"
#include "bindingproperty.h"
+#include "signalhandlerproperty.h"
#include "nodeabstractproperty.h"
#include "nodelistproperty.h"
#include "nodeproperty.h"
@@ -404,6 +405,14 @@ BindingProperty ModelNode::bindingProperty(const PropertyName &name) const
return BindingProperty(name, m_internalNode, model(), view());
}
+SignalHandlerProperty ModelNode::signalHandlerProperty(const PropertyName &name) const
+{
+ if (!isValid())
+ throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
+
+ return SignalHandlerProperty(name, m_internalNode, model(), view());
+}
+
/*!
\brief Returns a NodeProperty
diff --git a/src/plugins/qmldesigner/designercore/model/modeltotextmerger.cpp b/src/plugins/qmldesigner/designercore/model/modeltotextmerger.cpp
index 511ea6c44e..53d0bab0fb 100644
--- a/src/plugins/qmldesigner/designercore/model/modeltotextmerger.cpp
+++ b/src/plugins/qmldesigner/designercore/model/modeltotextmerger.cpp
@@ -315,7 +315,7 @@ void ModelToTextMerger::schedule(RewriteAction *action)
QmlDesigner::QmlRefactoring::PropertyType ModelToTextMerger::propertyType(const AbstractProperty &property, const QString &textValue)
{
- if (property.isBindingProperty()) {
+ if (property.isBindingProperty() || property.isSignalHandlerProperty()) {
QString val = textValue.trimmed();
if (val.isEmpty())
return QmlDesigner::QmlRefactoring::ObjectBinding;
diff --git a/src/plugins/qmldesigner/designercore/model/qmlmodelview.cpp b/src/plugins/qmldesigner/designercore/model/qmlmodelview.cpp
index 655b821d37..0b41ad18ee 100644
--- a/src/plugins/qmldesigner/designercore/model/qmlmodelview.cpp
+++ b/src/plugins/qmldesigner/designercore/model/qmlmodelview.cpp
@@ -366,6 +366,7 @@ void QmlModelView::propertiesAboutToBeRemoved(const QList<AbstractProperty>& /*p
void QmlModelView::propertiesRemoved(const QList<AbstractProperty>& /*propertyList*/) {}
void QmlModelView::variantPropertiesChanged(const QList<VariantProperty>& /*propertyList*/, PropertyChangeFlags /*propertyChange*/) {}
void QmlModelView::bindingPropertiesChanged(const QList<BindingProperty>& /*propertyList*/, PropertyChangeFlags /*propertyChange*/) {}
+void QmlModelView::signalHandlerPropertiesChanged(const QVector<SignalHandlerProperty> & /*propertyList*/, AbstractView::PropertyChangeFlags /*propertyChange*/) {}
void QmlModelView::rootNodeTypeChanged(const QString &/*type*/, int, int /*minorVersion*/) {}
void QmlModelView::scriptFunctionsChanged(const ModelNode &/*node*/, const QStringList &/*scriptFunctionList*/) {}
void QmlModelView::selectedNodesChanged(const QList<ModelNode> &/*selectedNodeList*/, const QList<ModelNode> &/*lastSelectedNodeList*/) {}
diff --git a/src/plugins/qmldesigner/designercore/model/qmltextgenerator.cpp b/src/plugins/qmldesigner/designercore/model/qmltextgenerator.cpp
index ebd001a292..1fe6d0e027 100644
--- a/src/plugins/qmldesigner/designercore/model/qmltextgenerator.cpp
+++ b/src/plugins/qmldesigner/designercore/model/qmltextgenerator.cpp
@@ -33,6 +33,7 @@
#include <QColor>
#include "bindingproperty.h"
+#include "signalhandlerproperty.h"
#include "nodeproperty.h"
#include "nodelistproperty.h"
#include "variantproperty.h"
@@ -74,6 +75,8 @@ QString QmlTextGenerator::toQml(const AbstractProperty &property, int indentDept
{
if (property.isBindingProperty()) {
return property.toBindingProperty().expression();
+ } else if (property.isSignalHandlerProperty()) {
+ return property.toSignalHandlerProperty().source();
} else if (property.isNodeProperty()) {
return toQml(property.toNodeProperty().modelNode(), indentDepth);
} else if (property.isNodeListProperty()) {
diff --git a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp
index 139c4c99ab..1934399d44 100644
--- a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp
+++ b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp
@@ -43,6 +43,7 @@
#include "modeltotextmerger.h"
#include "nodelistproperty.h"
#include "nodeproperty.h"
+#include "signalhandlerproperty.h"
#include "invalidmodelnodeexception.h"
@@ -264,6 +265,22 @@ void RewriterView::bindingPropertiesChanged(const QList<BindingProperty>& proper
applyChanges();
}
+void RewriterView::signalHandlerPropertiesChanged(const QVector<SignalHandlerProperty> &propertyList, AbstractView::PropertyChangeFlags propertyChange)
+{
+ Q_ASSERT(textModifier());
+ if (textToModelMerger()->isActive())
+ return;
+
+ QList<AbstractProperty> usefulPropertyList;
+ foreach (const SignalHandlerProperty &property, propertyList)
+ usefulPropertyList.append(property);
+
+ modelToTextMerger()->propertiesChanged(usefulPropertyList, propertyChange);
+
+ if (!isModificationGroupActive())
+ applyChanges();
+}
+
void RewriterView::nodeReparented(const ModelNode &node, const NodeAbstractProperty &newPropertyParent, const NodeAbstractProperty &oldPropertyParent, AbstractView::PropertyChangeFlags propertyChange)
{
Q_ASSERT(textModifier());
diff --git a/src/plugins/qmldesigner/designercore/model/signalhandlerproperty.cpp b/src/plugins/qmldesigner/designercore/model/signalhandlerproperty.cpp
new file mode 100644
index 0000000000..fd03f46848
--- /dev/null
+++ b/src/plugins/qmldesigner/designercore/model/signalhandlerproperty.cpp
@@ -0,0 +1,102 @@
+/****************************************************************************
+**
+** 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 "SignalHandlerProperty.h"
+#include "nodeabstractproperty.h"
+#include "nodeproperty.h"
+#include "internalproperty.h"
+#include "internalSignalHandlerProperty.h"
+#include "invalidmodelnodeexception.h"
+#include "invalidpropertyexception.h"
+#include "invalidargumentexception.h"
+#include "internalnode_p.h"
+#include "model.h"
+#include "model_p.h"
+namespace QmlDesigner {
+
+SignalHandlerProperty::SignalHandlerProperty()
+{
+}
+
+SignalHandlerProperty::SignalHandlerProperty(const SignalHandlerProperty &property, AbstractView *view)
+ : AbstractProperty(property.name(), property.internalNode(), property.model(), view)
+{
+}
+
+
+SignalHandlerProperty::SignalHandlerProperty(const PropertyName &propertyName, const Internal::InternalNodePointer &internalNode, Model* model, AbstractView *view)
+ : AbstractProperty(propertyName, internalNode, model, view)
+{
+}
+
+
+void SignalHandlerProperty::setSource(const QString &source)
+{
+ Internal::WriteLocker locker(model());
+ if (!isValid())
+ throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
+
+ if (name() == "id") { // the ID for a node is independent of the state, so it has to be set with ModelNode::setId
+ throw InvalidPropertyException(__LINE__, __FUNCTION__, __FILE__, name());
+ }
+
+ if (source.isEmpty())
+ throw InvalidArgumentException(__LINE__, __FUNCTION__, __FILE__, name());
+
+ if (internalNode()->hasProperty(name())) { //check if oldValue != value
+ Internal::InternalProperty::Pointer internalProperty = internalNode()->property(name());
+ if (internalProperty->isSignalHandlerProperty()
+ && internalProperty->toSignalHandlerProperty()->source() == source)
+
+ return;
+ }
+
+ if (internalNode()->hasProperty(name()) && !internalNode()->property(name())->isSignalHandlerProperty())
+ model()->d->removeProperty(internalNode()->property(name()));
+
+ model()->d->setSignalHandlerProperty(internalNode(), name(), source);
+}
+
+QString SignalHandlerProperty::source() const
+{
+ if (internalNode()->hasProperty(name())
+ && internalNode()->property(name())->isSignalHandlerProperty())
+ return internalNode()->signalHandlerProperty(name())->source();
+
+ return QString();
+}
+
+SignalHandlerProperty& SignalHandlerProperty::operator= (const QString &source)
+{
+ setSource(source);
+
+ return *this;
+}
+
+} // namespace QmlDesigner
diff --git a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp
index de6c4d75d8..540e0d49a0 100644
--- a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp
+++ b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp
@@ -40,6 +40,7 @@
#include "textmodifier.h"
#include "rewriterview.h"
#include "variantproperty.h"
+#include "signalhandlerproperty.h"
#include "nodemetainfo.h"
#include "qmldesignercorelib_global.h"
@@ -263,6 +264,11 @@ static bool isPropertyChangesType(const QmlDesigner::TypeName &type)
return type == "PropertyChanges" || type == "QtQuick.PropertyChanges" || type == "Qt.PropertyChanges";
}
+static bool isConnectionsType(const QmlDesigner::TypeName &type)
+{
+ return type == "Connections" || type == "QtQuick.Connections" || type == "Qt.Connections";
+}
+
static bool propertyIsComponentType(const QmlDesigner::NodeAbstractProperty &property, const QmlDesigner::TypeName &type, QmlDesigner::Model *model)
{
if (model->metaInfo(type, -1, -1).isSubclassOf("QtQuick.Component", -1, -1) && !isComponentType(type))
@@ -916,7 +922,7 @@ void TextToModelMerger::syncNode(ModelNode &modelNode,
if (UiArrayBinding *array = cast<UiArrayBinding *>(member)) {
const QString astPropertyName = toString(array->qualifiedId);
- if (isPropertyChangesType(typeName) || context->lookupProperty(QString(), array->qualifiedId)) {
+ if (isPropertyChangesType(typeName) || isConnectionsType(typeName) || context->lookupProperty(QString(), array->qualifiedId)) {
AbstractProperty modelProperty = modelNode.property(astPropertyName.toUtf8());
QList<UiObjectMember *> arrayMembers;
for (UiArrayMemberList *iter = array->members; iter; iter = iter->next)
@@ -950,7 +956,9 @@ void TextToModelMerger::syncNode(ModelNode &modelNode,
const Value *propertyType = 0;
const ObjectValue *containingObject = 0;
QString name;
- if (context->lookupProperty(QString(), binding->qualifiedId, &propertyType, &containingObject, &name) || isPropertyChangesType(typeName)) {
+ if (context->lookupProperty(QString(), binding->qualifiedId, &propertyType, &containingObject, &name)
+ || isPropertyChangesType(typeName)
+ || isConnectionsType(typeName)) {
AbstractProperty modelProperty = modelNode.property(astPropertyName.toUtf8());
if (context->isArrayProperty(propertyType, containingObject, name))
syncArrayProperty(modelProperty, QList<QmlJS::AST::UiObjectMember*>() << member, context, differenceHandler);
@@ -1050,11 +1058,15 @@ QmlDesigner::PropertyName TextToModelMerger::syncScriptBinding(ModelNode &modelN
return astPropertyName.toUtf8();
}
- if (isSignalPropertyName(astPropertyName))
- return PropertyName();
+ if (isSignalPropertyName(astPropertyName)) {
+ AbstractProperty modelProperty = modelNode.property(astPropertyName.toUtf8());
+ syncSignalHandler(modelProperty, astValue, differenceHandler);
+ return astPropertyName.toUtf8();
+ }
if (isLiteralValue(script)) {
- if (isPropertyChangesType(modelNode.type())) {
+ if (isPropertyChangesType(modelNode.type())
+ || isConnectionsType(modelNode.type())) {
AbstractProperty modelProperty = modelNode.property(astPropertyName.toUtf8());
const QVariant variantValue(deEscape(stripQuotes(astValue)));
syncVariantProperty(modelProperty, variantValue, TypeName(), differenceHandler);
@@ -1079,7 +1091,9 @@ QmlDesigner::PropertyName TextToModelMerger::syncScriptBinding(ModelNode &modelN
syncVariantProperty(modelProperty, enumValue, TypeName(), differenceHandler); // TODO: parse type
return astPropertyName.toUtf8();
} else { // Not an enum, so:
- if (isPropertyChangesType(modelNode.type()) || context->lookupProperty(prefix, script->qualifiedId)) {
+ if (isPropertyChangesType(modelNode.type())
+ || isConnectionsType(modelNode.type())
+ || context->lookupProperty(prefix, script->qualifiedId)) {
AbstractProperty modelProperty = modelNode.property(astPropertyName.toUtf8());
syncExpressionProperty(modelProperty, astValue, TypeName(), differenceHandler); // TODO: parse type
return astPropertyName.toUtf8();
@@ -1159,6 +1173,21 @@ void TextToModelMerger::syncExpressionProperty(AbstractProperty &modelProperty,
}
}
+void TextToModelMerger::syncSignalHandler(AbstractProperty &modelProperty,
+ const QString &javascript,
+ DifferenceHandler &differenceHandler)
+{
+ if (modelProperty.isSignalHandlerProperty()) {
+ SignalHandlerProperty signalHandlerProperty = modelProperty.toSignalHandlerProperty();
+ if (signalHandlerProperty.source() != javascript) {
+ differenceHandler.signalHandlerSourceDiffer(signalHandlerProperty, javascript);
+ }
+ } else {
+ differenceHandler.shouldBeSignalHandlerProperty(modelProperty, javascript);
+ }
+}
+
+
void TextToModelMerger::syncArrayProperty(AbstractProperty &modelProperty,
const QList<UiObjectMember *> &arrayMembers,
ReadingContext *context,
@@ -1321,6 +1350,21 @@ void ModelValidator::shouldBeBindingProperty(AbstractProperty &modelProperty,
Q_ASSERT(0);
}
+void ModelValidator::signalHandlerSourceDiffer(SignalHandlerProperty &modelProperty, const QString &javascript)
+{
+ Q_UNUSED(modelProperty)
+ Q_UNUSED(javascript)
+ Q_ASSERT(modelProperty.source() == javascript);
+ Q_ASSERT(0);
+}
+
+void ModelValidator::shouldBeSignalHandlerProperty(AbstractProperty &modelProperty, const QString &javascript)
+{
+ Q_UNUSED(modelProperty)
+ Q_ASSERT(modelProperty.isSignalHandlerProperty());
+ Q_ASSERT(0);
+}
+
void ModelValidator::shouldBeNodeListProperty(AbstractProperty &modelProperty,
const QList<UiObjectMember *> /*arrayMembers*/,
ReadingContext * /*context*/)
@@ -1450,6 +1494,18 @@ void ModelAmender::shouldBeBindingProperty(AbstractProperty &modelProperty,
newModelProperty.setDynamicTypeNameAndExpression(astType, javascript);
}
+void ModelAmender::signalHandlerSourceDiffer(SignalHandlerProperty &modelProperty, const QString &javascript)
+{
+ modelProperty.setSource(javascript);
+}
+
+void ModelAmender::shouldBeSignalHandlerProperty(AbstractProperty &modelProperty, const QString &javascript)
+{
+ ModelNode theNode = modelProperty.parentModelNode();
+ SignalHandlerProperty newModelProperty = theNode.signalHandlerProperty(modelProperty.name());
+ newModelProperty.setSource(javascript);
+}
+
void ModelAmender::shouldBeNodeListProperty(AbstractProperty &modelProperty,
const QList<UiObjectMember *> arrayMembers,
ReadingContext *context)
diff --git a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.h b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.h
index 81c4797d6f..68e9a4778c 100644
--- a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.h
+++ b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.h
@@ -94,6 +94,9 @@ public:
const QString &javascript,
const TypeName &astType,
DifferenceHandler &differenceHandler);
+ void syncSignalHandler(AbstractProperty &modelProperty,
+ const QString &javascript,
+ DifferenceHandler &differenceHandler);
void syncArrayProperty(AbstractProperty &modelProperty,
const QList<QmlJS::AST::UiObjectMember *> &arrayMembers,
ReadingContext *context,
@@ -123,7 +126,6 @@ public:
void setupCustomParserNodeDelayed(const ModelNode &node, bool synchron);
void delayedSetup();
-
private:
void setupCustomParserNode(const ModelNode &node);
void setupComponent(const ModelNode &node);
@@ -158,9 +160,13 @@ public:
virtual void bindingExpressionsDiffer(BindingProperty &modelProperty,
const QString &javascript,
const TypeName &astType) = 0;
+ virtual void signalHandlerSourceDiffer(SignalHandlerProperty &modelProperty,
+ const QString &javascript) = 0;
virtual void shouldBeBindingProperty(AbstractProperty &modelProperty,
const QString &javascript,
const TypeName &astType) = 0;
+ virtual void shouldBeSignalHandlerProperty(AbstractProperty &modelProperty,
+ const QString &javascript) = 0;
virtual void shouldBeNodeListProperty(AbstractProperty &modelProperty,
const QList<QmlJS::AST::UiObjectMember *> arrayMembers,
ReadingContext *context) = 0;
@@ -208,6 +214,10 @@ public:
virtual void shouldBeBindingProperty(AbstractProperty &modelProperty,
const QString &javascript,
const TypeName &astType);
+ virtual void signalHandlerSourceDiffer(SignalHandlerProperty &modelProperty,
+ const QString &javascript);
+ virtual void shouldBeSignalHandlerProperty(AbstractProperty &modelProperty,
+ const QString &javascript);
virtual void shouldBeNodeListProperty(AbstractProperty &modelProperty,
const QList<QmlJS::AST::UiObjectMember *> arrayMembers,
ReadingContext *context);
@@ -252,6 +262,10 @@ public:
virtual void shouldBeBindingProperty(AbstractProperty &modelProperty,
const QString &javascript,
const TypeName &astType);
+ virtual void signalHandlerSourceDiffer(SignalHandlerProperty &modelProperty,
+ const QString &javascript);
+ virtual void shouldBeSignalHandlerProperty(AbstractProperty &modelProperty,
+ const QString &javascript);
virtual void shouldBeNodeListProperty(AbstractProperty &modelProperty,
const QList<QmlJS::AST::UiObjectMember *> arrayMembers,
ReadingContext *context);
diff --git a/src/plugins/qmldesigner/designercore/model/viewlogger.cpp b/src/plugins/qmldesigner/designercore/model/viewlogger.cpp
index c0871e08c3..95c76f7417 100644
--- a/src/plugins/qmldesigner/designercore/model/viewlogger.cpp
+++ b/src/plugins/qmldesigner/designercore/model/viewlogger.cpp
@@ -152,6 +152,10 @@ void ViewLogger::bindingPropertiesChanged(const QList<BindingProperty>& property
m_output << time() << indent() << property << endl;
}
+void ViewLogger::signalHandlerPropertiesChanged(const QVector<SignalHandlerProperty> & /*propertyList*/, AbstractView::PropertyChangeFlags /*propertyChange*/)
+{
+}
+
void ViewLogger::rootNodeTypeChanged(const QString &type, int majorVersion, int minorVersion)
{
m_output << time() << indent("rootNodeTypeChanged:") << rootModelNode() << type << majorVersion << minorVersion << endl;
diff --git a/src/plugins/qmldesigner/designercore/model/viewlogger.h b/src/plugins/qmldesigner/designercore/model/viewlogger.h
index 1c1f2444ff..baa94550ac 100644
--- a/src/plugins/qmldesigner/designercore/model/viewlogger.h
+++ b/src/plugins/qmldesigner/designercore/model/viewlogger.h
@@ -57,6 +57,7 @@ public:
void propertiesRemoved(const QList<AbstractProperty>& propertyList);
void variantPropertiesChanged(const QList<VariantProperty>& propertyList, PropertyChangeFlags propertyChange);
void bindingPropertiesChanged(const QList<BindingProperty>& propertyList, PropertyChangeFlags propertyChange);
+ void signalHandlerPropertiesChanged(const QVector<SignalHandlerProperty> &propertyList, PropertyChangeFlags propertyChange);
void rootNodeTypeChanged(const QString &type, int majorVersion, int minorVersion);
void selectedNodesChanged(const QList<ModelNode> &selectedNodeList,