QmlModelState QmlModelState::duplicate(const QString &name) const { if (!isValid()) throw new InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__); QmlItemNode parentNode(modelNode().parentProperty().parentModelNode()); if (!parentNode.isValid()) throw new InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__); // QmlModelState newState(stateGroup().addState(name)); PropertyListType propertyList; propertyList.append(qMakePair(QString("name"), QVariant(name))); QmlModelState newState ( qmlModelView()->createQmlState(propertyList) ); foreach (const ModelNode &childNode, modelNode().nodeListProperty("changes").toModelNodeList()) { ModelNode newModelNode(qmlModelView()->createModelNode(childNode.type(), childNode.majorVersion(), childNode.minorVersion())); foreach (const BindingProperty &bindingProperty, childNode.bindingProperties()) newModelNode.bindingProperty(bindingProperty.name()).setExpression(bindingProperty.expression()); foreach (const VariantProperty &variantProperty, childNode.variantProperties()) newModelNode.variantProperty(variantProperty.name()) = variantProperty.value(); newState.modelNode().nodeListProperty("changes").reparentHere(newModelNode); } modelNode().parentProperty().reparentHere(newState); return newState; }
void QmlPropertyChanges::removeProperty(const QString &name) { RewriterTransaction transaction(qmlModelView()->beginRewriterTransaction()); if (name == "name") return; modelNode().removeProperty(name); if (modelNode().variantProperties().isEmpty() && modelNode().bindingProperties().count() < 2) modelNode().destroy(); }
void DesignDocument::goIntoSelectedComponent() { if (currentModel()) return; QList<ModelNode> selectedNodes; if (rewriterView()) selectedNodes = qmlModelView()->selectedModelNodes(); if (selectedNodes.count() == 1) { viewManager().setComponentNode(selectedNodes.first()); ModelNodeOperations::goIntoComponent(selectedNodes.first()); } }
void DesignDocument::deleteSelected() { if (!currentModel()) return; try { RewriterTransaction transaction(rewriterView()); QList<ModelNode> toDelete = qmlModelView()->selectedModelNodes(); foreach (ModelNode node, toDelete) { if (node.isValid() && !node.isRootNode() && QmlObjectNode(node).isValid()) QmlObjectNode(node).destroy(); } } catch (RewritingException &e) { QMessageBox::warning(0, tr("Error"), e.description()); } }
void QmlModelState::addChangeSetIfNotExists(const ModelNode &node) { //### exception if not valid if (!isValid()) throw new InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__); if (hasPropertyChanges(node)) { return; //changeSet already there } ModelNode newChangeSet; if (qmlModelView()->rootModelNode().majorQtQuickVersion() > 1) { newChangeSet = modelNode().view()->createModelNode("QtQuick.PropertyChanges", 2, 0); } else { newChangeSet = modelNode().view()->createModelNode("QtQuick.PropertyChanges", 1, 0); } modelNode().nodeListProperty("changes").reparentHere(newChangeSet); QmlPropertyChanges(newChangeSet).setTarget(node); Q_ASSERT(QmlPropertyChanges(newChangeSet).isValid()); }
bool QmlModelNodeFacade::isValid() const { return modelNode().isValid() && qmlModelView() && qmlModelView()->nodeInstanceView() && qmlModelView()->hasInstanceForModelNode(modelNode()) && qmlModelView()->instanceForModelNode(modelNode()).isValid(); }