diff options
author | Aleksei German <aleksei.german@qt.io> | 2020-07-06 18:00:17 +0200 |
---|---|---|
committer | Aleksei German <aleksei.german@qt.io> | 2020-07-06 16:07:24 +0000 |
commit | f5d9091f56246710a48746ea96a68951b3332812 (patch) | |
tree | c672605b05be4021aa6662810634725b2f126f21 | |
parent | 8951ddfd62c127934f5723933ec3c3d40eb15984 (diff) |
QmlDesigner: Add Singleton support to BindingModel
Task: QDS-2477
Change-Id: I8aa25325e2f4fe714af26038280ed774aef1216f
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
-rw-r--r-- | src/plugins/qmldesigner/components/connectioneditor/bindingmodel.cpp | 30 | ||||
-rw-r--r-- | src/plugins/qmldesigner/components/connectioneditor/delegates.cpp | 11 |
2 files changed, 34 insertions, 7 deletions
diff --git a/src/plugins/qmldesigner/components/connectioneditor/bindingmodel.cpp b/src/plugins/qmldesigner/components/connectioneditor/bindingmodel.cpp index 2cff12b044d..55220d123b1 100644 --- a/src/plugins/qmldesigner/components/connectioneditor/bindingmodel.cpp +++ b/src/plugins/qmldesigner/components/connectioneditor/bindingmodel.cpp @@ -33,6 +33,7 @@ #include <variantproperty.h> #include <rewritingexception.h> #include <rewritertransaction.h> +#include <rewriterview.h> #include <QMessageBox> #include <QTimer> @@ -151,6 +152,7 @@ QStringList BindingModel::possibleSourceProperties(const BindingProperty &bindin { const QString expression = bindingProperty.expression(); const QStringList stringlist = expression.split(QLatin1String(".")); + QStringList possibleProperties; TypeName typeName; @@ -165,26 +167,44 @@ QStringList BindingModel::possibleSourceProperties(const BindingProperty &bindin ModelNode modelNode = getNodeByIdOrParent(id, bindingProperty.parentModelNode()); if (!modelNode.isValid()) { + //if it's not a valid model node, maybe it's a singleton + if (RewriterView* rv = connectionView()->rewriterView()) { + for (const QmlTypeData &data : rv->getQMLTypes()) { + if (!data.typeName.isEmpty()) { + if (data.typeName == id) { + NodeMetaInfo metaInfo = connectionView()->model()->metaInfo(data.typeName.toUtf8()); + + if (metaInfo.isValid()) { + for (const PropertyName &propertyName : metaInfo.propertyNames()) { + //without check for now + possibleProperties << QString::fromUtf8(propertyName); + } + + return possibleProperties; + } + } + } + } + } + qWarning() << " BindingModel::possibleSourcePropertiesForRow invalid model node"; return QStringList(); } NodeMetaInfo metaInfo = modelNode.metaInfo(); - QStringList possibleProperties; - - foreach (VariantProperty variantProperty, modelNode.variantProperties()) { + for (VariantProperty variantProperty : modelNode.variantProperties()) { if (variantProperty.isDynamic()) possibleProperties << QString::fromUtf8(variantProperty.name()); } - foreach (BindingProperty bindingProperty, modelNode.bindingProperties()) { + for (BindingProperty bindingProperty : modelNode.bindingProperties()) { if (bindingProperty.isDynamic()) possibleProperties << QString::fromUtf8((bindingProperty.name())); } if (metaInfo.isValid()) { - foreach (const PropertyName &propertyName, metaInfo.propertyNames()) { + for (const PropertyName &propertyName : metaInfo.propertyNames()) { if (metaInfo.propertyTypeName(propertyName) == typeName) //### todo proper check possibleProperties << QString::fromUtf8(propertyName); } diff --git a/src/plugins/qmldesigner/components/connectioneditor/delegates.cpp b/src/plugins/qmldesigner/components/connectioneditor/delegates.cpp index 8107690cea3..b0999fb1e66 100644 --- a/src/plugins/qmldesigner/components/connectioneditor/delegates.cpp +++ b/src/plugins/qmldesigner/components/connectioneditor/delegates.cpp @@ -152,11 +152,18 @@ QWidget *BindingDelegate::createEditor(QWidget *parent, const QStyleOptionViewIt bindingComboBox->addItems(model->possibleTargetProperties(bindingProperty)); } break; case BindingModel::SourceModelNodeRow: { - foreach (const ModelNode &modelNode, model->connectionView()->allModelNodes()) { + for (const ModelNode &modelNode : model->connectionView()->allModelNodes()) { if (!modelNode.id().isEmpty()) { bindingComboBox->addItem(modelNode.id()); } } + if (RewriterView* rv = model->connectionView()->rewriterView()) { + for (const QmlTypeData &data : rv->getQMLTypes()) { + if (!data.typeName.isEmpty()) { + bindingComboBox->addItem(data.typeName); + } + } + } if (!bindingProperty.parentModelNode().isRootNode()) bindingComboBox->addItem(QLatin1String("parent")); } break; @@ -312,7 +319,7 @@ QWidget *ConnectionDelegate::createEditor(QWidget *parent, const QStyleOptionVie connectionComboBox->addItem(itemText, source); connectionComboBox->disableValidator(); - foreach (const QmlModelState &state, QmlItemNode(rootModelNode).states().allStates()) { + for (const QmlModelState &state : QmlItemNode(rootModelNode).states().allStates()) { QString itemText = tr("Change state to %1").arg(state.name()); QString source = QString::fromLatin1("{ %1.state = \"%2\" }").arg(rootModelNode.id()).arg(state.name()); connectionComboBox->addItem(itemText, source); |