QVariantHash TemplateOptionsPage::templateOptions() const { QVariantHash values; foreach (const SourceFileTemplate::ConfigOption& entry, d->entries) { Q_ASSERT(d->controls.contains(entry.name)); Q_ASSERT(d->typeProperties.contains(entry.type)); values.insert(entry.name, d->controls[entry.name]->property(d->typeProperties[entry.type])); } kDebug() << values.size() << d->entries.size(); return values; }
FormGenAcceptResult FormGenChoiceComposition::acceptsValueImpl(const QVariant &val) const { if( variantType(val) != QMetaType::QVariantHash ) return FormGenAcceptResult::reject({}, val); QVariantHash hash = val.toHash(); if( hash.size() != 1 ) return FormGenAcceptResult::reject({}, hash); auto it = mTagIndexMap.find(hash.cbegin().key()); if( it == mTagIndexMap.cend() ) return FormGenAcceptResult::reject({}, hash); auto elementAccepts = mElements.at(it.value()).element->acceptsValue(hash.cbegin().value()); if( ! elementAccepts.acceptable ) { QString path = it.key(); if( ! elementAccepts.path.isEmpty() ) path += QString("/%1").arg(elementAccepts.path); return FormGenAcceptResult::reject(path, elementAccepts.value); } QString keyValue = FormGenElement::keyStringValuePair(it.key(), elementAccepts.valueString); return FormGenAcceptResult::accept(val, FormGenElement::objectString(QStringList({keyValue}))); }
void mafViewCompoundConfigurator::parseDocument(QDomNode current, QObject *parent) { QDomNodeList dnl = current.childNodes(); for (int n=0; n < dnl.count(); ++n) { QDomNode node = dnl.item(n); if (node.nodeType() == QDomNode::ElementNode) { QDomElement ce = node.toElement(); QDomNamedNodeMap attributes = ce.attributes(); QString elem_name = ce.tagName(); if (elem_name == "splitter") { mafSplitter *splitter = new mafSplitter(Qt::Horizontal, (QWidget *)parent); if (parent == NULL) { // parent is the root object, this is the first splitter created m_RootObject = splitter; } QString sepThikness = attributes.namedItem("separatorThikness").nodeValue(); QString sepEnabled = attributes.namedItem("enableSeparator").nodeValue(); splitter->setHandleWidth(sepThikness.toInt()); QString orientation = attributes.namedItem("orientation").nodeValue(); if (orientation == "vertical") { // Check only for vertical, horizontal is the default. splitter->setOrientation(Qt::Vertical); } QStringList sizesString = attributes.namedItem("sizes").nodeValue().split(",", QString::SkipEmptyParts); QList<int> sizes; for (int s = 0; s < sizesString.count(); ++s) { sizes.append(sizesString[s].toInt()); } splitter->setSizes(sizes); // Check if there are children and parse them... QDomNodeList splitter_dnl = node.childNodes(); if (splitter_dnl.count() > 0) { parseDocument(node, splitter); } QSplitterHandle *handler = splitter->handle(1); handler->setEnabled(sepEnabled.toInt() != 0); } else if (elem_name == "view") { // view objects are added at the parent splitter. QString viewClassType = attributes.namedItem("classtype").nodeValue(); // Instantiate the class type mafCore::mafObjectBase *obj = mafNEWFromString(viewClassType); // Then extract all the attributes representing the object's properties. int s = attributes.size(); int i = 0; for (; i < s; ++i) { QDomNode n(attributes.item(i)); if (n.nodeName() != "classtype") { QByteArray ba(n.nodeName().toAscii()); bool isOk(obj->setProperty(ba.constData(), n.nodeValue())); if (!isOk) { qWarning() << mafTr("Problem assigning property named: %1 to view of type: %2").arg(n.nodeName(), viewClassType); } } } mafSplitter *parentSplitter = qobject_cast<mafSplitter *>(parent); if (parentSplitter) { // and add it to the splitter. parentSplitter->addView(obj); } // Check if there are children and parse them... QDomNodeList view_dnl = node.childNodes(); if (view_dnl.count() > 0) { parseDocument(node, obj); } // The splitter retain the view object, so we can release the instance. mafDEL(obj); } else if (elem_name == "visualpipe") { // Visual pipe to plug into the previous created view... QVariant visualPipeClassType(attributes.namedItem("classtype").nodeValue()); QString dataType(attributes.namedItem("datatype").nodeValue()); QVariantHash h; h.insert(dataType, visualPipeClassType); mafCore::mafObjectBase *viewObj = dynamic_cast<mafCore::mafObjectBase *>(parent); if (viewObj) { viewObj->setProperty("visualPipeHash", h); int s = attributes.size(); int i = 0; QVariantHash propertyHash; for (; i < s; ++i) { QDomNode n(attributes.item(i)); if (n.nodeName() != "classtype" && n.nodeName() != "datatype") { propertyHash.insert(n.nodeName(), n.nodeValue()); } } if (propertyHash.size() > 0) { // Found some custom properties used to initialize the pipe QString vp(visualPipeClassType.toString()); bool isOk(viewObj->metaObject()->invokeMethod(viewObj, "plugPipeParametersHashItem", Q_ARG(QString, vp), Q_ARG(QVariantHash, propertyHash))); if (!isOk) { qWarning() << mafTr("Problem invoking method used to plug the pipe's parameter for pipe: %1").arg(visualPipeClassType.toString()); } } } } else { qWarning() << mafTr("Unrecognized element named: ") << elem_name; } } } }