diff options
author | Thomas Hartmann <Thomas.Hartmann@nokia.com> | 2010-03-08 17:39:25 +0100 |
---|---|---|
committer | con <qtc-committer@nokia.com> | 2010-03-08 17:51:07 +0100 |
commit | 7a639246cdbade8b85798b472c6f4552e0dd469a (patch) | |
tree | 525e74537777d0b707754c7ace3e9335f3ee69a0 | |
parent | 32cba976cc9276a7d9c7b72effe17fcaece64533 (diff) |
QmlDesigner.propertyEditor: fixing crashes in expression editing
(cherry picked from commit efc471af5e35c4acf400a471a7c62908ceb68d05)
-rw-r--r-- | src/plugins/qmldesigner/components/propertyeditor/propertyeditor.cpp | 32 |
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())); } } } |