aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleksei German <aleksei.german@qt.io>2020-07-06 18:00:17 +0200
committerAleksei German <aleksei.german@qt.io>2020-07-06 16:07:24 +0000
commitf5d9091f56246710a48746ea96a68951b3332812 (patch)
treec672605b05be4021aa6662810634725b2f126f21
parent8951ddfd62c127934f5723933ec3c3d40eb15984 (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.cpp30
-rw-r--r--src/plugins/qmldesigner/components/connectioneditor/delegates.cpp11
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);