QPair<QString, ServerNodeInstance> QmlGraphicsItemNodeInstance::anchor(const QString &name) const { if (!isValidAnchorName(name) || !hasAnchor(name)) return GraphicsObjectNodeInstance::anchor(name); QObject *targetObject = 0; QString targetName; if (name == "anchors.fill") { targetObject = anchors()->fill(); } else if (name == "anchors.centerIn") { targetObject = anchors()->centerIn(); } else { QDeclarativeProperty metaProperty(object(), name, context()); if (!metaProperty.isValid()) return GraphicsObjectNodeInstance::anchor(name); QDeclarativeAnchorLine anchorLine = metaProperty.read().value<QDeclarativeAnchorLine>(); if (anchorLine.anchorLine != QDeclarativeAnchorLine::Invalid) { targetObject = anchorLine.item; targetName = propertyNameForAnchorLine(anchorLine.anchorLine); } } if (targetObject && nodeInstanceServer()->hasInstanceForObject(targetObject)) { return qMakePair(targetName, nodeInstanceServer()->instanceForObject(targetObject)); } else { return GraphicsObjectNodeInstance::anchor(name); } }
void QmlStateNodeInstance::activateState() { if (!QmlPrivateGate::States::isStateActive(object(), context()) && nodeInstanceServer()->hasInstanceForObject(object())) { nodeInstanceServer()->setStateInstance(nodeInstanceServer()->instanceForObject(object())); QmlPrivateGate::States::activateState(object(), context()); } }
void QmlStateNodeInstance::activateState() { if (stateGroup()) { if (!isStateActive()) { nodeInstanceServer()->setStateInstance(nodeInstanceServer()->instanceForObject(object())); stateGroup()->setState(property("name").toString()); } } }
void NodeInstanceView::nodeCreated(const ModelNode &createdNode) { NodeInstance instance = loadNode(createdNode); if (isSkippedNode(createdNode)) return; nodeInstanceServer()->createInstances(createCreateInstancesCommand(QList<NodeInstance>() << instance)); nodeInstanceServer()->changePropertyValues(createChangeValueCommand(createdNode.variantProperties())); nodeInstanceServer()->completeComponent(createComponentCompleteCommand(QList<NodeInstance>() << instance)); }
QList<ServerNodeInstance> QmlGraphicsItemNodeInstance::stateInstances() const { QList<ServerNodeInstance> instanceList; QList<QDeclarativeState *> stateList = QDeclarativeItemPrivate::get(qmlGraphicsItem())->_states()->states(); foreach(QDeclarativeState *state, stateList) { if (state && nodeInstanceServer()->hasInstanceForObject(state)) instanceList.append(nodeInstanceServer()->instanceForObject(state)); } return instanceList; }
QList<ServerNodeInstance> QuickItemNodeInstance::stateInstances() const { QList<ServerNodeInstance> instanceList; QList<QObject*> stateList = DesignerSupport::statesForItem(quickItem()); foreach (QObject *state, stateList) { if (state && nodeInstanceServer()->hasInstanceForObject(state)) instanceList.append(nodeInstanceServer()->instanceForObject(state)); } return instanceList; }
void NodeInstanceView::modelAboutToBeDetached(Model * model) { removeAllInstanceNodeRelationships(); nodeInstanceServer()->clearScene(createClearSceneCommand()); delete nodeInstanceServer(); m_statePreviewImage.clear(); m_baseStatePreviewImage = QImage(); removeAllInstanceNodeRelationships(); m_activeStateInstance = NodeInstance(); m_rootNodeInstance = NodeInstance(); AbstractView::modelAboutToBeDetached(model); }
void NodeInstanceView::propertiesAboutToBeRemoved(const QList<AbstractProperty>& propertyList) { QList<ModelNode> nodeList; QList<AbstractProperty> nonNodePropertyList; foreach (const AbstractProperty &property, propertyList) { if (property.isNodeAbstractProperty()) nodeList.append(property.toNodeAbstractProperty().allSubNodes()); else nonNodePropertyList.append(property); } RemoveInstancesCommand removeInstancesCommand = createRemoveInstancesCommand(nodeList); if (!removeInstancesCommand.instanceIds().isEmpty()) nodeInstanceServer()->removeInstances(removeInstancesCommand); nodeInstanceServer()->removeSharedMemory(createRemoveSharedMemoryCommand("Image", nodeList)); nodeInstanceServer()->removeProperties(createRemovePropertiesCommand(nonNodePropertyList)); foreach (const AbstractProperty &property, propertyList) { const PropertyName &name = property.name(); if (name == "anchors.fill") { resetHorizontalAnchors(property.parentModelNode()); resetVerticalAnchors(property.parentModelNode()); } else if (name == "anchors.centerIn") { resetHorizontalAnchors(property.parentModelNode()); resetVerticalAnchors(property.parentModelNode()); } else if (name == "anchors.top") { resetVerticalAnchors(property.parentModelNode()); } else if (name == "anchors.left") { resetHorizontalAnchors(property.parentModelNode()); } else if (name == "anchors.right") { resetHorizontalAnchors(property.parentModelNode()); } else if (name == "anchors.bottom") { resetVerticalAnchors(property.parentModelNode()); } else if (name == "anchors.horizontalCenter") { resetHorizontalAnchors(property.parentModelNode()); } else if (name == "anchors.verticalCenter") { resetVerticalAnchors(property.parentModelNode()); } else if (name == "anchors.baseline") { resetVerticalAnchors(property.parentModelNode()); } } foreach (const ModelNode &node, nodeList) removeInstanceNodeRelationship(node); }
void QmlPropertyChangesNodeInstance::setPropertyVariant(const QString &name, const QVariant &value) { QMetaObject metaObject = QQuickPropertyChanges::staticMetaObject; if (metaObject.indexOfProperty(name.toLatin1()) > 0) { // 'restoreEntryValues', 'explicit' ObjectNodeInstance::setPropertyVariant(name, value); } else { changesObject()->changeValue(name.toLatin1(), value); QObject *targetObject = changesObject()->object(); if (targetObject && nodeInstanceServer()->activeStateInstance().isWrappingThisObject(changesObject()->state())) { ServerNodeInstance targetInstance = nodeInstanceServer()->instanceForObject(targetObject); targetInstance.setPropertyVariant(name, value); } } }
void QuickItemNodeInstance::initialize(const ObjectNodeInstance::Pointer &objectNodeInstance) { if (instanceId() == 0) { DesignerSupport::setRootItem(nodeInstanceServer()->quickView(), quickItem()); } else { quickItem()->setParentItem(qobject_cast<QQuickItem*>(nodeInstanceServer()->quickView()->rootObject())); } if (s_createEffectItem || instanceId() == 0) designerSupport()->refFromEffectItem(quickItem()); ObjectNodeInstance::initialize(objectNodeInstance); quickItem()->update(); }
void NodeInstanceView::nodeCreated(const ModelNode &createdNode) { NodeInstance instance = loadNode(createdNode); if (isSkippedNode(createdNode)) return; QList<VariantProperty> propertyList; propertyList.append(createdNode.variantProperty("x")); propertyList.append(createdNode.variantProperty("y")); updatePosition(propertyList); nodeInstanceServer()->createInstances(createCreateInstancesCommand(QList<NodeInstance>() << instance)); nodeInstanceServer()->changePropertyValues(createChangeValueCommand(createdNode.variantProperties())); nodeInstanceServer()->completeComponent(createComponentCompleteCommand(QList<NodeInstance>() << instance)); }
void NodeInstanceView::nodeReparented(const ModelNode &node, const NodeAbstractProperty &newPropertyParent, const NodeAbstractProperty &oldPropertyParent, AbstractView::PropertyChangeFlags /*propertyChange*/) { if (!isSkippedNode(node)) { updateChildren(newPropertyParent); nodeInstanceServer()->reparentInstances(createReparentInstancesCommand(node, newPropertyParent, oldPropertyParent)); } }
QTransform QuickItemNodeInstance::contentItemTransform() const { if (contentItem()) return contentItemTransformForItem(contentItem(), nodeInstanceServer()); return QTransform(); }
QVariant ObjectNodeInstance::property(const PropertyName &name) const { if (ignoredProperties().contains(name)) return QVariant(); // TODO: handle model nodes if (QmlPrivateGate::isPropertyBlackListed(name)) return QVariant(); QQmlProperty property(object(), QString::fromUtf8(name), context()); if (property.property().isEnumType()) { QVariant value = property.read(); return property.property().enumerator().valueToKey(value.toInt()); } if (property.propertyType() == QVariant::Url) { QUrl url = property.read().toUrl(); if (url.isEmpty()) return QVariant(); if (url.scheme() == "file") { int basePathLength = nodeInstanceServer()->fileUrl().toLocalFile().lastIndexOf('/'); return QUrl(url.toLocalFile().mid(basePathLength + 1)); } } return property.read(); }
void NodeInstanceView::nodeIdChanged(const ModelNode& node, const QString& /*newId*/, const QString& /*oldId*/) { if (hasInstanceForModelNode(node)) { NodeInstance instance = instanceForModelNode(node); nodeInstanceServer()->changeIds(createChangeIdsCommand(QList<NodeInstance>() << instance)); } }
void QmlStateNodeInstance::deactivateState() { if (QmlPrivateGate::States::isStateActive(object(), context())) { nodeInstanceServer()->clearStateInstance(); QmlPrivateGate::States::deactivateState(object()); } }
void NodeInstanceView::nodeSourceChanged(const ModelNode &node, const QString & newNodeSource) { if (hasInstanceForModelNode(node)) { NodeInstance instance = instanceForModelNode(node); ChangeNodeSourceCommand changeNodeSourceCommand(instance.instanceId(), newNodeSource); nodeInstanceServer()->changeNodeSource(changeNodeSourceCommand); } }
void QmlStateNodeInstance::deactivateState() { if (stateGroup()) { if (isStateActive()) { nodeInstanceServer()->clearStateInstance(); stateGroup()->setState(QString()); } } }
void ObjectNodeInstance::removeFromOldProperty(QObject *object, QObject *oldParent, const PropertyName &oldParentProperty) { QQmlProperty property(oldParent, QString::fromUtf8(oldParentProperty), context()); if (!property.isValid()) return; if (isList(property)) { removeObjectFromList(property, object, nodeInstanceServer()->engine()); } else if (isObject(property)) { if (nodeInstanceServer()->hasInstanceForObject(oldParent)) { nodeInstanceServer()->instanceForObject(oldParent).resetProperty(oldParentProperty); } } if (object && object->parent()) object->setParent(0); }
void NodeInstanceView::restartProcess() { if (model()) { delete nodeInstanceServer(); m_nodeInstanceServer = new NodeInstanceServerProxy(this, m_runModus, m_currentKit); connect(m_nodeInstanceServer.data(), SIGNAL(processCrashed()), this, SLOT(handleChrash())); if (!isSkippedRootNode(rootModelNode())) nodeInstanceServer()->createScene(createCreateSceneCommand()); ModelNode stateNode = currentStateNode(); if (stateNode.isValid() && stateNode.metaInfo().isSubclassOf("QtQuick.State", 1, 0)) { NodeInstance newStateInstance = instanceForModelNode(stateNode); activateState(newStateInstance); } } }
void ObjectNodeInstance::setPropertyVariant(const PropertyName &name, const QVariant &value) { if (ignoredProperties().contains(name)) return; QQmlProperty property(object(), QString::fromUtf8(name), context()); if (!property.isValid()) return; QVariant adjustedValue; if (value.canConvert<Enumeration>()) adjustedValue = convertEnumToValue(value, name); else adjustedValue = QmlPrivateGate::fixResourcePaths(value); QVariant oldValue = property.read(); if (oldValue.type() == QVariant::Url) { QUrl url = oldValue.toUrl(); QString path = url.toLocalFile(); if (QFileInfo(path).exists() && nodeInstanceServer() && !path.isEmpty()) nodeInstanceServer()->removeFilePropertyFromFileSystemWatcher(object(), name, path); } if (hasValidResetBinding(name)) { QmlPrivateGate::keepBindingFromGettingDeleted(object(), context(), name); } bool isWritten = property.write(convertSpecialCharacter(adjustedValue)); if (!isWritten) qDebug() << "ObjectNodeInstance.setPropertyVariant: Cannot be written: " << object() << name << adjustedValue; QVariant newValue = property.read(); if (newValue.type() == QVariant::Url) { QUrl url = newValue.toUrl(); QString path = url.toLocalFile(); if (QFileInfo(path).exists() && nodeInstanceServer() && !path.isEmpty()) nodeInstanceServer()->addFilePropertyToFileSystemWatcher(object(), name, path); } }
void NodeInstanceView::resetVerticalAnchors(const ModelNode &modelNode) { QList<BindingProperty> bindingList; QList<VariantProperty> valueList; if (modelNode.hasBindingProperty("yx")) bindingList.append(modelNode.bindingProperty("yx")); else if (modelNode.hasVariantProperty("y")) valueList.append(modelNode.variantProperty("y")); if (modelNode.hasBindingProperty("height")) bindingList.append(modelNode.bindingProperty("height")); else if (modelNode.hasVariantProperty("height")) valueList.append(modelNode.variantProperty("height")); if (!valueList.isEmpty()) nodeInstanceServer()->changePropertyValues(createChangeValueCommand(valueList)); if (!bindingList.isEmpty()) nodeInstanceServer()->changePropertyBindings(createChangeBindingCommand(bindingList)); }
void NodeInstanceView::auxiliaryDataChanged(const ModelNode &node, const PropertyName &name, const QVariant &data) { if ((node.isRootNode() && (name == "width" || name == "height")) || name.endsWith(PropertyName("@NodeInstance"))) { if (hasInstanceForModelNode(node)) { NodeInstance instance = instanceForModelNode(node); QVariant value = data; if (value.isValid()) { PropertyValueContainer container(instance.instanceId(), name, value, TypeName()); ChangeAuxiliaryCommand changeAuxiliaryCommand(QVector<PropertyValueContainer>() << container); nodeInstanceServer()->changeAuxiliaryValues(changeAuxiliaryCommand); } else { if (node.hasVariantProperty(name)) { PropertyValueContainer container(instance.instanceId(), name, node.variantProperty(name).value(), TypeName()); ChangeValuesCommand changeValueCommand(QVector<PropertyValueContainer>() << container); nodeInstanceServer()->changePropertyValues(changeValueCommand); } else if (node.hasBindingProperty(name)) { PropertyBindingContainer container(instance.instanceId(), name, node.bindingProperty(name).expression(), TypeName()); ChangeBindingsCommand changeValueCommand(QVector<PropertyBindingContainer>() << container); nodeInstanceServer()->changePropertyBindings(changeValueCommand); } } } } }
void NodeInstanceView::nodeOrderChanged(const NodeListProperty & listProperty, const ModelNode & /*movedNode*/, int /*oldIndex*/) { QVector<ReparentContainer> containerList; PropertyName propertyName = listProperty.name(); qint32 containerInstanceId = -1; ModelNode containerNode = listProperty.parentModelNode(); if (hasInstanceForModelNode(containerNode)) containerInstanceId = instanceForModelNode(containerNode).instanceId(); foreach (const ModelNode &node, listProperty.toModelNodeList()) { qint32 instanceId = -1; if (hasInstanceForModelNode(node)) { instanceId = instanceForModelNode(node).instanceId(); ReparentContainer container(instanceId, containerInstanceId, propertyName, containerInstanceId, propertyName); containerList.append(container); } } nodeInstanceServer()->reparentInstances(ReparentInstancesCommand(containerList)); }
void NodeInstanceView::bindingPropertiesChanged(const QList<BindingProperty>& propertyList, PropertyChangeFlags /*propertyChange*/) { nodeInstanceServer()->changePropertyBindings(createChangeBindingCommand(propertyList)); }
/*! Destructs a node instance view object. */ NodeInstanceView::~NodeInstanceView() { removeAllInstanceNodeRelationships(); delete nodeInstanceServer(); m_currentKit = 0; }
void NodeInstanceView::variantPropertiesChanged(const QList<VariantProperty>& propertyList, PropertyChangeFlags /*propertyChange*/) { updatePosition(propertyList); nodeInstanceServer()->changePropertyValues(createChangeValueCommand(propertyList)); }
void NodeInstanceView::fileUrlChanged(const QUrl &/*oldUrl*/, const QUrl &newUrl) { nodeInstanceServer()->changeFileUrl(createChangeFileUrlCommand(newUrl)); }
/*! Notifies the view that \a removedNode will be removed. */ void NodeInstanceView::nodeAboutToBeRemoved(const ModelNode &removedNode) { nodeInstanceServer()->removeInstances(createRemoveInstancesCommand(removedNode)); nodeInstanceServer()->removeSharedMemory(createRemoveSharedMemoryCommand("Image", removedNode.internalId())); removeInstanceAndSubInstances(removedNode); }
Qt5NodeInstanceServer *QuickItemNodeInstance::qt5NodeInstanceServer() const { return qobject_cast<Qt5NodeInstanceServer*>(nodeInstanceServer()); }