void PropertyEditorQmlBackend::setValue(const QmlObjectNode & qmlObjectNode, const PropertyName &name, const QVariant &value) { PropertyName propertyName = name; propertyName.replace('.', '_'); PropertyEditorValue *propertyValue = qobject_cast<PropertyEditorValue*>(variantToQObject(m_backendValuesPropertyMap.value(propertyName))); if (propertyValue) { propertyValue->setValue(value); if (!qmlObjectNode.hasBindingProperty(name)) propertyValue->setExpression(value.toString()); else propertyValue->setExpression(qmlObjectNode.expression(name)); } }
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*>(variantToQObject(m_backendValuesPropertyMap.value(propertyName))); if (propertyValue) { propertyValue->setValue(value); if (!fxObjectNode.hasBindingProperty(name)) propertyValue->setExpression(value.toString()); else propertyValue->setExpression(fxObjectNode.expression(name)); } }
QVariant properDefaultLayoutAttachedProperties(const QmlObjectNode &qmlObjectNode, const PropertyName &propertyName) { QVariant value = qmlObjectNode.modelValue(propertyName); if (value.isValid()) return value; if ("fillHeight" == propertyName || "fillWidth" == propertyName) return false; if ("minimumWidth" == propertyName || "minimumHeight" == propertyName) return 0; if ("preferredWidth" == propertyName || "preferredHeight" == propertyName) return -1; if ("maximumWidth" == propertyName || "maximumHeight" == propertyName) return 0xffff; if ("columnSpan" == propertyName || "rowSpan" == propertyName) return 1; if ("topMargin" == propertyName || "bottomMargin" == propertyName) return 0; if ("leftMargin" == propertyName || "rightMargin" == propertyName) return 0; return QVariant(); }
void PropertyEditorQmlBackend::createPropertyEditorValue(const QmlObjectNode &qmlObjectNode, const PropertyName &name, const QVariant &value, PropertyEditorView *propertyEditor) { PropertyName propertyName(name); propertyName.replace('.', '_'); PropertyEditorValue *valueObject = qobject_cast<PropertyEditorValue*>(variantToQObject(backendValuesPropertyMap().value(propertyName))); if (!valueObject) { valueObject = new PropertyEditorValue(&backendValuesPropertyMap()); QObject::connect(valueObject, SIGNAL(valueChanged(QString,QVariant)), &backendValuesPropertyMap(), SIGNAL(valueChanged(QString,QVariant))); QObject::connect(valueObject, SIGNAL(expressionChanged(QString)), propertyEditor, SLOT(changeExpression(QString))); backendValuesPropertyMap().insert(QString::fromUtf8(propertyName), QVariant::fromValue(valueObject)); } valueObject->setName(name); valueObject->setModelNode(qmlObjectNode); if (qmlObjectNode.propertyAffectedByCurrentState(name) && !(qmlObjectNode.modelNode().property(name).isBindingProperty())) valueObject->setValue(qmlObjectNode.modelValue(name)); else valueObject->setValue(value); if (propertyName != "id" && qmlObjectNode.currentState().isBaseState() && qmlObjectNode.modelNode().property(propertyName).isBindingProperty()) { valueObject->setExpression(qmlObjectNode.modelNode().bindingProperty(propertyName).expression()); } else { valueObject->setExpression(qmlObjectNode.instanceValue(name).toString()); } }
void createPropertyEditorValue(const QmlObjectNode &fxObjectNode, const QString &name, const QVariant &value, QDeclarativePropertyMap *propertyMap, PropertyEditor *propertyEditor) { QString propertyName(name); propertyName.replace(QLatin1Char('.'), QLatin1Char('_')); PropertyEditorValue *valueObject = qobject_cast<PropertyEditorValue*>(variantToQObject(propertyMap->value(propertyName))); if (!valueObject) { valueObject = new PropertyEditorValue(propertyMap); QObject::connect(valueObject, SIGNAL(valueChanged(QString,QVariant)), propertyMap, SIGNAL(valueChanged(QString,QVariant))); QObject::connect(valueObject, SIGNAL(expressionChanged(QString)), propertyEditor, SLOT(changeExpression(QString))); propertyMap->insert(propertyName, QVariant::fromValue(valueObject)); } valueObject->setName(name); valueObject->setModelNode(fxObjectNode); if (fxObjectNode.propertyAffectedByCurrentState(name) && !(fxObjectNode.modelNode().property(name).isBindingProperty())) { valueObject->setValue(fxObjectNode.modelValue(name)); } else { valueObject->setValue(value); } if (propertyName != QLatin1String("id") && fxObjectNode.currentState().isBaseState() && fxObjectNode.modelNode().property(propertyName).isBindingProperty()) { valueObject->setExpression(fxObjectNode.modelNode().bindingProperty(propertyName).expression()); } else { valueObject->setExpression(fxObjectNode.instanceValue(name).toString()); } }
static void removeAliasExports(const QmlObjectNode &node) { PropertyName propertyName = node.id().toUtf8(); ModelNode rootNode = node.view()->rootModelNode(); bool hasAliasExport = !propertyName.isEmpty() && rootNode.isValid() && rootNode.hasBindingProperty(propertyName) && rootNode.bindingProperty(propertyName).isAliasExport(); if (hasAliasExport) rootNode.removeProperty(propertyName); foreach (const ModelNode &childNode, node.modelNode().directSubModelNodes()) { removeAliasExports(childNode); } }
void QmlModelView::deselectQmlObjectNode(const QmlObjectNode &node) { deselectModelNode(node.modelNode()); }
void PropertyEditorQmlBackend::setup(const QmlObjectNode &qmlObjectNode, const QString &stateName, const QUrl &qmlSpecificsFile, PropertyEditorView *propertyEditor) { if (!qmlObjectNode.isValid()) return; if (qmlObjectNode.isValid()) { foreach (const PropertyName &propertyName, qmlObjectNode.modelNode().metaInfo().propertyNames()) createPropertyEditorValue(qmlObjectNode, propertyName, qmlObjectNode.instanceValue(propertyName), propertyEditor); // className PropertyEditorValue *valueObject = qobject_cast<PropertyEditorValue*>(variantToQObject(m_backendValuesPropertyMap.value("className"))); if (!valueObject) valueObject = new PropertyEditorValue(&m_backendValuesPropertyMap); valueObject->setName("className"); valueObject->setModelNode(qmlObjectNode.modelNode()); valueObject->setValue(qmlObjectNode.modelNode().simplifiedTypeName()); QObject::connect(valueObject, SIGNAL(valueChanged(QString,QVariant)), &m_backendValuesPropertyMap, SIGNAL(valueChanged(QString,QVariant))); m_backendValuesPropertyMap.insert("className", QVariant::fromValue(valueObject)); // id valueObject = qobject_cast<PropertyEditorValue*>(variantToQObject(m_backendValuesPropertyMap.value("id"))); if (!valueObject) valueObject = new PropertyEditorValue(&m_backendValuesPropertyMap); valueObject->setName("id"); valueObject->setValue(qmlObjectNode.id()); QObject::connect(valueObject, SIGNAL(valueChanged(QString,QVariant)), &m_backendValuesPropertyMap, SIGNAL(valueChanged(QString,QVariant))); m_backendValuesPropertyMap.insert("id", QVariant::fromValue(valueObject)); // anchors m_backendAnchorBinding.setup(QmlItemNode(qmlObjectNode.modelNode())); context()->setContextProperty("anchorBackend", &m_backendAnchorBinding); context()->setContextProperty("transaction", m_propertyEditorTransaction.data()); contextObject()->setSpecificsUrl(qmlSpecificsFile); contextObject()->setStateName(stateName); if (!qmlObjectNode.isValid()) return; context()->setContextProperty("propertyCount", QVariant(qmlObjectNode.modelNode().properties().count())); contextObject()->setIsBaseState(qmlObjectNode.isInBaseState()); contextObject()->setSelectionChanged(false); contextObject()->setSelectionChanged(false); NodeMetaInfo metaInfo = qmlObjectNode.modelNode().metaInfo(); if (metaInfo.isValid()) { contextObject()->setMajorVersion(metaInfo.majorVersion()); contextObject()->setMinorVersion(metaInfo.minorVersion()); } else { contextObject()->setMajorVersion(-1); contextObject()->setMinorVersion(-1); } } else {
void PropertyEditor::NodeType::setup(const QmlObjectNode &fxObjectNode, const QString &stateName, const QUrl &qmlSpecificsFile, PropertyEditor *propertyEditor) { if (!fxObjectNode.isValid()) { return; } QDeclarativeContext *ctxt = m_view->rootContext(); if (fxObjectNode.isValid()) { foreach (const QString &propertyName, fxObjectNode.modelNode().metaInfo().propertyNames()) createPropertyEditorValue(fxObjectNode, propertyName, fxObjectNode.instanceValue(propertyName), &m_backendValuesPropertyMap, propertyEditor); // className PropertyEditorValue *valueObject = qobject_cast<PropertyEditorValue*>(variantToQObject(m_backendValuesPropertyMap.value("className"))); if (!valueObject) valueObject = new PropertyEditorValue(&m_backendValuesPropertyMap); valueObject->setName("className"); valueObject->setModelNode(fxObjectNode.modelNode()); valueObject->setValue(fxObjectNode.modelNode().simplifiedTypeName()); QObject::connect(valueObject, SIGNAL(valueChanged(QString,QVariant)), &m_backendValuesPropertyMap, SIGNAL(valueChanged(QString,QVariant))); m_backendValuesPropertyMap.insert("className", QVariant::fromValue(valueObject)); // id valueObject = qobject_cast<PropertyEditorValue*>(variantToQObject(m_backendValuesPropertyMap.value("id"))); if (!valueObject) valueObject = new PropertyEditorValue(&m_backendValuesPropertyMap); valueObject->setName("id"); valueObject->setValue(fxObjectNode.id()); QObject::connect(valueObject, SIGNAL(valueChanged(QString,QVariant)), &m_backendValuesPropertyMap, SIGNAL(valueChanged(QString,QVariant))); m_backendValuesPropertyMap.insert("id", QVariant::fromValue(valueObject)); // anchors m_backendAnchorBinding.setup(QmlItemNode(fxObjectNode.modelNode())); ctxt->setContextProperty("anchorBackend", &m_backendAnchorBinding); ctxt->setContextProperty("transaction", m_propertyEditorTransaction.data()); m_contextObject->setSpecificsUrl(qmlSpecificsFile); m_contextObject->setStateName(stateName); if (!fxObjectNode.isValid()) return; ctxt->setContextProperty("propertyCount", QVariant(fxObjectNode.modelNode().properties().count())); m_contextObject->setIsBaseState(fxObjectNode.isInBaseState()); m_contextObject->setSelectionChanged(false); m_contextObject->setSelectionChanged(false); } else {