static ModelNode createNodeFromNode(const ModelNode &modelNode,const QHash<QString, QString> &idRenamingHash, AbstractView *view) { QList<QPair<QString, QVariant> > propertyList; QList<QPair<QString, QVariant> > variantPropertyList; foreach (const VariantProperty &variantProperty, modelNode.variantProperties()) { propertyList.append(QPair<QString, QVariant>(variantProperty.name(), variantProperty.value())); } ModelNode newNode(view->createModelNode(modelNode.type(),modelNode.majorVersion(),modelNode.minorVersion(), propertyList, variantPropertyList, modelNode.nodeSource(), modelNode.nodeSourceType())); syncBindingProperties(newNode, modelNode, idRenamingHash); syncId(newNode, modelNode, idRenamingHash); syncNodeProperties(newNode, modelNode, idRenamingHash, view); syncNodeListProperties(newNode, modelNode, idRenamingHash, view); return newNode; }
void ModelToTextMerger::nodeIdChanged(const ModelNode& node, const QString& newId, const QString& oldId) { if (!node.isInHierarchy()) return; schedule(new ChangeIdRewriteAction(node, oldId, newId)); }
void NestedListModel::setProperty(int index, const QString& property, const QVariant& value, QList<int> *roles) { Q_ASSERT(index >=0 && index < count()); ModelNode *node = qvariant_cast<ModelNode *>(_root->values.at(index)); bool emitItemsChanged = node->setProperty(property, value); if (!emitItemsChanged) return; int r = roleStrings.indexOf(property); if (r < 0) { r = roleStrings.count(); roleStrings << property; } roles->append(r); }
int TextTool::wantHandleItem(const ModelNode &modelNode) const { if (modelNode.metaInfo().hasProperty("text")) return 20; return 0; }
void DocumentManager::goIntoComponent(const ModelNode &modelNode) { if (modelNode.isValid() && modelNode.isComponent()) { QmlDesignerPlugin::instance()->viewManager().setComponentNode(modelNode); if (isFileComponent(modelNode)) openFileComponent(modelNode); else if (hasDelegateWithFileComponent(modelNode)) openFileComponentForDelegate(modelNode); else if (hasSourceWithFileComponent(modelNode)) openSourcePropertyOfLoader(modelNode); else if (isLoaderWithSourceComponent(modelNode)) openComponentSourcePropertyOfLoader(modelNode); else openInlineComponent(modelNode); } }
void ComponentView::removeSingleNodeFromList(const ModelNode &node) { for (int row = 0; row < m_standardItemModel->rowCount(); row++) { if (m_standardItemModel->item(row)->data(ModelNodeRole).toInt() == node.internalId()) m_standardItemModel->removeRow(row); } }
ModelStructure::ModelStructure(const ModelNode &node) : m_latestNode(new ModelStructureTreeNode(node)), m_latestIndent(0) { Q_ASSERT(node.indent()==0); m_roots << m_latestNode; }
int ColorTool::wantHandleItem(const ModelNode &modelNode) const { if (modelNode.metaInfo().hasProperty("color")) return 10; return 0; }
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)); }
/*! Returns the node instance for \a node, which must be valid. Returns an invalid node instance if no node instance for this model node exists. \sa NodeInstance */ NodeInstance NodeInstanceView::instanceForModelNode(const ModelNode &node) const { Q_ASSERT(node.isValid()); Q_ASSERT(m_nodeInstanceHash.contains(node)); Q_ASSERT(m_nodeInstanceHash.value(node).modelNode() == node); return m_nodeInstanceHash.value(node); }
void NodeInstanceView::modelAttached(Model *model) { AbstractView::modelAttached(model); m_nodeInstanceServer = new NodeInstanceServerProxy(this, m_runModus, m_currentKit); m_lastCrashTime.start(); 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 NavigatorTreeModel::propagateInvisible(const ModelNode &node, const bool &invisible) { QList <ModelNode> children = node.allDirectSubModelNodes(); foreach (ModelNode child, children) { child.setAuxiliaryData("childOfInvisible",invisible); if (!child.auxiliaryData("invisible").toBool()) propagateInvisible(child,invisible); }
int ComponentView::indexForNode(const ModelNode &node) const { for (int row = 0; row < m_standardItemModel->rowCount(); row++) { if (m_standardItemModel->item(row)->data(ModelNodeRole).toInt() == node.internalId()) return row; } return -1; }
static QList<ModelNode> acceptedModelNodeChildren(const ModelNode &parentNode) { QList<ModelNode> children; PropertyNameList properties; if (parentNode.metaInfo().hasDefaultProperty()) properties.append(parentNode.metaInfo().defaultPropertyName()); #ifndef DISABLE_VISIBLE_PROPERTIES properties.append(visibleProperties(parentNode)); #endif foreach (const PropertyName &propertyName, properties) { AbstractProperty property(parentNode.property(propertyName)); if (property.isNodeAbstractProperty()) children.append(property.toNodeAbstractProperty().directSubNodes()); }
int NodeAbstractProperty::indexOf(const ModelNode &node) const { Internal::InternalNodeAbstractProperty::Pointer property = internalNode()->nodeAbstractProperty(name()); if (property.isNull()) return 0; return property->indexOf(node.internalNode()); }
void GradientLineQmlAdaptor::setupGradient() { if (!active()) return; ModelNode modelNode = m_itemNode.modelNode(); QLinearGradient newGradient; QVector<QGradientStop> stops; if (!modelNode.isValid()) return; if (modelNode.hasBindingProperty(gradientName())) return; if (modelNode.hasProperty(gradientName())) { //gradient exists ModelNode gradientNode = modelNode.nodeProperty(gradientName()).modelNode(); QList<ModelNode> stopList = gradientNode.nodeListProperty("stops").toModelNodeList(); foreach (const ModelNode &stopNode, stopList) { QmlObjectNode stopObjectNode = stopNode; if (stopObjectNode.isValid()) { qreal position = stopObjectNode.modelValue("position").toReal(); QColor color = stopObjectNode.modelValue("color").value<QColor>(); stops.append( QPair<qreal, QColor>(position, color)); } }
void NodeAbstractProperty::reparentHere(const ModelNode &modelNode, bool isNodeList) { if (modelNode.hasParentProperty() && modelNode.parentProperty() == *this) return; Internal::WriteLocker locker(model()); if (!isValid()) throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__); if (isNodeProperty()) { NodeProperty nodeProperty(toNodeProperty()); if (nodeProperty.modelNode().isValid()) throw InvalidReparentingException(__LINE__, __FUNCTION__, __FILE__); } if (modelNode.isAncestorOf(parentModelNode())) throw InvalidReparentingException(__LINE__, __FUNCTION__, __FILE__); if (internalNode()->hasProperty(name()) && !internalNode()->property(name())->isNodeAbstractProperty()) model()->d->removeProperty(internalNode()->property(name())); if (modelNode.hasParentProperty()) { Internal::InternalNodeAbstractProperty::Pointer oldParentProperty = modelNode.internalNode()->parentProperty(); model()->d->reparentNode(internalNode(), name(), modelNode.internalNode(), isNodeList); Q_ASSERT(!oldParentProperty.isNull()); } else { model()->d->reparentNode(internalNode(), name(), modelNode.internalNode(), isNodeList); } }
/** Updates the sibling position of the item, depending on the position in the model. */ void NavigatorTreeModel::updateItemRowOrder(const ModelNode &node) { if (!containsNode(node)) return; ItemRow itemRow = itemRowForNode(node); int currentRow = itemRow.idItem->row(); int newRow = currentRow; if (node.parentProperty().parentModelNode().isValid()) newRow = modelNodeChildren(node.parentProperty().parentModelNode()).indexOf(node); Q_ASSERT(newRow >= 0); if (currentRow != newRow) { QStandardItem *parentIdItem = itemRow.idItem->parent(); QList<QStandardItem*> items = parentIdItem->takeRow(currentRow); parentIdItem->insertRow(newRow, items); } }
void ModelToTextMerger::nodeTypeChanged(const ModelNode &node,const QString &/*type*/, int /*majorVersion*/, int /*minorVersion*/) { if (!node.isInHierarchy()) return; // TODO: handle the majorVersion and the minorVersion schedule(new ChangeTypeRewriteAction(node)); }
void ModelNode::setListValue(const QScriptValue& valuelist) { QScriptValueIterator it(valuelist); values.clear(); int size = valuelist.property(QLatin1String("length")).toInt32(); for (int i=0; i<size; i++) { ModelNode *value = new ModelNode; QScriptValue v = valuelist.property(i); if (v.isArray()) { value->isArray = true; value->setListValue(v); } else if (v.isObject()) { value->setObjectValue(v); } else { value->values << v.toVariant(); } values.append(qVariantFromValue(value)); } }
void NestedListModel::set(int index, const QScriptValue& valuemap, QList<int> *roles) { Q_ASSERT(index >=0 && index < count()); ModelNode *node = qvariant_cast<ModelNode *>(_root->values.at(index)); node->setObjectValue(valuemap); QScriptValueIterator it(valuemap); while (it.hasNext()) { it.next(); int r = roleStrings.indexOf(it.name()); if (r < 0) { r = roleStrings.count(); roleStrings << it.name(); } roles->append(r); } }
void DesignDocument::changeToSubComponentAndPushOnCrumblePath(const ModelNode &componentNode) { if (QmlDesignerPlugin::instance()->currentDesignDocument() != this) return; changeToSubComponent(componentNode); QmlDesignerPlugin::instance()->viewManager().pushInFileComponentOnCrambleBar(componentNode.id()); }
bool isSkippedNode(const ModelNode &node) { static const PropertyNameList skipList({"QtQuick.XmlRole", "Qt.XmlRole", "QtQuick.ListElement", "Qt.ListElement"}); if (skipList.contains(node.type())) return true; return false; }
bool isSkippedRootNode(const ModelNode &node) { static QStringList skipList = QStringList() << "Qt.ListModel" << "QtQuick.ListModel" << "Qt.ListModel" << "QtQuick.ListModel"; if (skipList.contains(node.type())) return true; return false; }
void NodeInstanceView::currentStateChanged(const ModelNode &node) { NodeInstance newStateInstance = instanceForModelNode(node); if (newStateInstance.isValid() && node.metaInfo().isSubclassOf("QtQuick.State", 1, 0)) nodeInstanceView()->activateState(newStateInstance); else nodeInstanceView()->activateBaseState(); }
bool isSkippedNode(const ModelNode &node) { static QStringList skipList = QStringList() << "QtQuick.XmlRole" << "Qt.XmlRole" << "QtQuick.ListElement" << "Qt.ListElement"; if (skipList.contains(node.type())) return true; return false; }
void DrawValue(const BVariant& value, BRect rect, BView* targetView) { // draw the node's value with the designated renderer if (value.Type() == VALUE_NODE_TYPE) { ModelNode* node = dynamic_cast<ModelNode*>(value.ToReferenceable()); if (node != NULL && node->GetValue() != NULL && node->TableCellRenderer() != NULL) { node->TableCellRenderer()->RenderValue(node->GetValue(), rect, targetView); return; } } // fall back to drawing an empty string fField.SetString(""); fField.SetWidth(Width()); fColumn.DrawField(&fField, rect, targetView); }
static inline void openInlineComponent(const ModelNode &modelNode) { if (!modelNode.metaInfo().isValid()) return; handleComponent(modelNode); handleDelegate(modelNode); handleTabComponent(modelNode); }
void VariablesView::VariableTableModel::ValueNodeValueChanged(ValueNode* valueNode) { if (fContainer == NULL) return; AutoLocker<ValueNodeContainer> containerLocker(fContainer); // check whether we know the node ValueNodeChild* nodeChild = valueNode->NodeChild(); if (nodeChild == NULL) return; ModelNode* modelNode = fNodeTable.Lookup(nodeChild); if (modelNode == NULL) return; // check whether the value actually changed Value* value = valueNode->GetValue(); if (value == modelNode->GetValue()) return; // get a value handler ValueHandler* valueHandler; status_t error = ValueHandlerRoster::Default()->FindValueHandler(value, valueHandler); if (error != B_OK) return; BReference<ValueHandler> handlerReference(valueHandler, true); // create a table cell renderer for the value TableCellValueRenderer* renderer = NULL; error = valueHandler->GetTableCellValueRenderer(value, renderer); if (error != B_OK) return; // set value/handler/renderer modelNode->SetValue(value); modelNode->SetValueHandler(valueHandler); modelNode->SetTableCellRenderer(renderer); // notify table model listeners NotifyNodeChanged(modelNode); }
void DocumentManager::goIntoComponent(const ModelNode &modelNode) { if (modelNode.isValid() && modelNode.isComponent() && designDocument()) { QmlDesignerPlugin::instance()->viewManager().setComponentNode(modelNode); QHash<PropertyName, QVariant> oldProperties = getProperties(modelNode); if (isFileComponent(modelNode)) openFileComponent(modelNode); else if (hasDelegateWithFileComponent(modelNode)) openFileComponentForDelegate(modelNode); else if (hasSourceWithFileComponent(modelNode)) openSourcePropertyOfLoader(modelNode); else if (isLoaderWithSourceComponent(modelNode)) openComponentSourcePropertyOfLoader(modelNode); else openInlineComponent(modelNode); ModelNode rootModelNode = designDocument()->rewriterView()->rootModelNode(); applyProperties(rootModelNode, oldProperties); } }