void TestPropertyEditor::createRect() { try { std::auto_ptr<QWidget> widget(new QWidget()); QScopedPointer<Model> model(Model::create("import Qt 4.6\n Item {}")); QVERIFY(model.data()); QScopedPointer<TestView> view(new TestView); QVERIFY(view.data()); model->attachView(view.data()); setupPropertyEditor(widget.get(), model.data()); QVERIFY(view->rootModelNode().isValid()); //selectThrough(view->rootModelNode()); ModelNode childNode = view->createModelNode("Qt/Rectangle", 4, 6); view->rootModelNode().nodeListProperty("data").reparentHere(childNode); QVERIFY(childNode.isValid()); QVERIFY(view->rootModelNode().allDirectSubModelNodes().contains(childNode)); QVERIFY(childNode.parentProperty().parentModelNode() == view->rootModelNode()); QCOMPARE(childNode.type(), QString("Qt/Rectangle")); QVERIFY(childNode.id().isEmpty()); childNode.setId("Rect01"); QCOMPARE(childNode.id(), QString("Rect01")); childNode.variantProperty("x") = 100; QCOMPARE(QmlObjectNode(childNode).instanceValue("x").toInt(), 100); childNode.variantProperty("y") = 100; QCOMPARE(QmlObjectNode(childNode).instanceValue("y").toInt(), 100); childNode.variantProperty("width") = 100; QCOMPARE(QmlObjectNode(childNode).instanceValue("width").toInt(), 100); childNode.variantProperty("height") = 100; QCOMPARE(QmlObjectNode(childNode).instanceValue("height").toInt(), 100); selectThrough(childNode); QCOMPARE(childNode.propertyNames().count(), 4); QCOMPARE(childNode.variantProperty("scale").value(), QVariant()); } catch (Exception &) { QFAIL("Exception thrown"); } }
static void selectThrough(ModelNode node, QWidget* propWidget = 0) { QVERIFY(node.isValid()); int numberOfProperties = node.propertyNames().count(); QList<AbstractProperty> properties = node.properties(); node.view()->clearSelectedModelNodes(); node.view()->selectModelNode(node); QString name = node.id(); qApp->processEvents(); QTest::qSleep(100); qApp->processEvents(); QTest::qSleep(100); qApp->processEvents(); inspectPropertyEditor(node, propWidget); //selecting should not effect any properties at all! QCOMPARE(node.propertyNames().count(), numberOfProperties); foreach (const AbstractProperty &property, properties) if (property.isVariantProperty()) { QCOMPARE(property.toVariantProperty().value(), node.variantProperty(property.name()).value()); } QList<ModelNode> childNodes = node.allDirectSubModelNodes(); foreach (const ModelNode &childNode, childNodes) selectThrough(childNode, propWidget); }
QString QmlTextGenerator::propertiesToQml(const ModelNode &node, int indentDepth) const { QString topPart; QString bottomPart; QStringList nodePropertyNames = node.propertyNames(); bool addToTop = true; foreach (const QString &propertyName, m_propertyOrder) { if (QLatin1String("id") == propertyName) { // the model handles the id property special, so: if (!node.id().isEmpty()) { QString idLine(indentDepth, QLatin1Char(' ')); idLine += QLatin1String("id: "); idLine += node.id(); idLine += QLatin1Char('\n'); if (addToTop) topPart.append(idLine); else bottomPart.append(idLine); } } else if (propertyName.isEmpty()) { addToTop = false; } else if (nodePropertyNames.removeAll(propertyName)) { const QString newContent = propertyToQml(node.property(propertyName), indentDepth); if (addToTop) topPart.append(newContent); else bottomPart.append(newContent); } } foreach (const QString &propertyName, nodePropertyNames) { bottomPart.prepend(propertyToQml(node.property(propertyName), indentDepth)); }