aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Hartmann <Thomas.Hartmann@nokia.com>2010-03-08 17:39:25 +0100
committercon <qtc-committer@nokia.com>2010-03-08 17:51:07 +0100
commit7a639246cdbade8b85798b472c6f4552e0dd469a (patch)
tree525e74537777d0b707754c7ace3e9335f3ee69a0
parent32cba976cc9276a7d9c7b72effe17fcaece64533 (diff)
QmlDesigner.propertyEditor: fixing crashes in expression editing
(cherry picked from commit efc471af5e35c4acf400a471a7c62908ceb68d05)
-rw-r--r--src/plugins/qmldesigner/components/propertyeditor/propertyeditor.cpp32
1 files changed, 25 insertions, 7 deletions
diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.cpp b/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.cpp
index 9021444679..6483fb0100 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.cpp
+++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.cpp
@@ -129,13 +129,16 @@ void createPropertyEditorValue(const QmlObjectNode &fxObjectNode, const QString
}
}
-void PropertyEditor::NodeType::setValue(const QmlObjectNode & /*fxObjectNode*/, const QString &name, const QVariant &value)
+void PropertyEditor::NodeType::setValue(const QmlObjectNode & fxObjectNode, const QString &name, const QVariant &value)
{
QString propertyName = name;
propertyName.replace(QLatin1Char('.'), QLatin1Char('_'));
PropertyEditorValue *propertyValue = qobject_cast<PropertyEditorValue*>(QDeclarativeMetaType::toQObject(m_backendValuesPropertyMap.value(propertyName)));
- if (propertyValue)
+ if (propertyValue) {
propertyValue->setValue(value);
+ if (!fxObjectNode.hasBindingProperty(name))
+ propertyValue->setExpression(value.toString());
+ }
}
void PropertyEditor::NodeType::setup(const QmlObjectNode &fxObjectNode, const QString &stateName, const QUrl &qmlSpecificsFile, PropertyEditor *propertyEditor)
@@ -355,7 +358,7 @@ void PropertyEditor::changeValue(const QString &propertyName)
}
try {
- if (!value->value().isValid()) {
+ if (!value->value().isValid()) { //reset
fxObjectNode.removeVariantProperty(propertyName);
} else {
if (castedValue.isValid() && !castedValue.isNull())
@@ -398,6 +401,20 @@ void PropertyEditor::changeExpression(const QString &name)
fxObjectNode.setVariantProperty(name, false);
return;
}
+ } else if (fxObjectNode.modelNode().metaInfo().property(name).type() == QLatin1String("int")) {
+ bool ok;
+ int intValue = value->expression().toInt(&ok);
+ if (ok) {
+ fxObjectNode.setVariantProperty(name, intValue);
+ return;
+ }
+ } else if (fxObjectNode.modelNode().metaInfo().property(name).type() == QLatin1String("qreal")) {
+ bool ok;
+ qreal realValue = value->expression().toFloat(&ok);
+ if (ok) {
+ fxObjectNode.setVariantProperty(name, realValue);
+ return;
+ }
}
if (!value) {
@@ -407,7 +424,8 @@ void PropertyEditor::changeExpression(const QString &name)
try {
if (fxObjectNode.currentState().isBaseState()) {
- fxObjectNode.modelNode().bindingProperty(name).setExpression(value->expression());
+ if (fxObjectNode.modelNode().bindingProperty(name).expression() != value->expression())
+ fxObjectNode.modelNode().bindingProperty(name).setExpression(value->expression());
}
}
@@ -585,9 +603,9 @@ void PropertyEditor::propertiesAboutToBeRemoved(const QList<AbstractProperty>& p
return;
foreach (const AbstractProperty &property, propertyList) {
- if (property.isVariantProperty() || property.isBindingProperty()) {
- ModelNode node(property.parentModelNode());
- setValue(node, property.name(), QmlObjectNode(node).instanceValue(property.name()));
+ ModelNode node(property.parentModelNode());
+ if (node == m_selectedNode || QmlObjectNode(m_selectedNode).propertyChangeForCurrentState() == node) {
+ setValue(m_selectedNode, property.name(), QmlObjectNode(m_selectedNode).instanceValue(property.name()));
}
}
}