forked from qt-creator/qt-creator
QmlDesigner: Variant types for Binding Editor
- Variant and alias types proper support - Extended instantiation options for Editor Task: QDS-2264 Change-Id: I95ff24fb81ce64b4effc64803304ff2b150a7ff6 Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
@@ -163,6 +163,19 @@ void BindingEditor::setStateModelNode(const QVariant &stateModelNode)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BindingEditor::setModelNode(const ModelNode &modelNode)
|
||||||
|
{
|
||||||
|
if (modelNode.isValid())
|
||||||
|
m_modelNode = modelNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
void BindingEditor::setBackendValueTypeName(const TypeName &backendValueTypeName)
|
||||||
|
{
|
||||||
|
m_backendValueTypeName = backendValueTypeName;
|
||||||
|
|
||||||
|
emit backendValueChanged();
|
||||||
|
}
|
||||||
|
|
||||||
void BindingEditor::prepareBindings()
|
void BindingEditor::prepareBindings()
|
||||||
{
|
{
|
||||||
if (!m_modelNode.isValid() || m_backendValueTypeName.isEmpty())
|
if (!m_modelNode.isValid() || m_backendValueTypeName.isEmpty())
|
||||||
@@ -172,25 +185,28 @@ void BindingEditor::prepareBindings()
|
|||||||
|
|
||||||
QList<BindingEditorDialog::BindingOption> bindings;
|
QList<BindingEditorDialog::BindingOption> bindings;
|
||||||
|
|
||||||
for (auto objnode : allNodes) {
|
const QList<TypeName> variantTypes = {"alias", "unknown", "variant", "var"};
|
||||||
|
const bool skipTypeFiltering = variantTypes.contains(m_backendValueTypeName);
|
||||||
|
|
||||||
|
for (const auto &objnode : allNodes) {
|
||||||
BindingEditorDialog::BindingOption binding;
|
BindingEditorDialog::BindingOption binding;
|
||||||
for (auto propertyName : objnode.metaInfo().propertyNames())
|
for (const auto &propertyName : objnode.metaInfo().propertyNames())
|
||||||
{
|
{
|
||||||
TypeName propertyTypeName = objnode.metaInfo().propertyTypeName(propertyName);
|
TypeName propertyTypeName = objnode.metaInfo().propertyTypeName(propertyName);
|
||||||
|
|
||||||
if ((propertyTypeName == "alias" || propertyTypeName == "unknown"))
|
if ((m_backendValueTypeName == propertyTypeName)
|
||||||
if (QmlObjectNode::isValidQmlObjectNode(objnode))
|
|| skipTypeFiltering
|
||||||
propertyTypeName = QmlObjectNode(objnode).instanceType(propertyName);
|
|| variantTypes.contains(propertyTypeName)) {
|
||||||
|
|
||||||
if (m_backendValueTypeName == propertyTypeName)
|
|
||||||
binding.properties.append(QString::fromUtf8(propertyName));
|
binding.properties.append(QString::fromUtf8(propertyName));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//dynamic properties:
|
//dynamic properties:
|
||||||
for (const BindingProperty &bindingProperty : objnode.bindingProperties()) {
|
for (const BindingProperty &bindingProperty : objnode.bindingProperties()) {
|
||||||
if (bindingProperty.isValid()) {
|
if (bindingProperty.isValid()) {
|
||||||
if (bindingProperty.isDynamic()) {
|
if (bindingProperty.isDynamic()) {
|
||||||
if (bindingProperty.dynamicTypeName() == m_backendValueTypeName) {
|
const TypeName dynamicTypeName = bindingProperty.dynamicTypeName();
|
||||||
|
if ((dynamicTypeName == m_backendValueTypeName) || variantTypes.contains(dynamicTypeName)) {
|
||||||
binding.properties.append(QString::fromUtf8(bindingProperty.name()));
|
binding.properties.append(QString::fromUtf8(bindingProperty.name()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -199,7 +215,8 @@ void BindingEditor::prepareBindings()
|
|||||||
for (const VariantProperty &variantProperty : objnode.variantProperties()) {
|
for (const VariantProperty &variantProperty : objnode.variantProperties()) {
|
||||||
if (variantProperty.isValid()) {
|
if (variantProperty.isValid()) {
|
||||||
if (variantProperty.isDynamic()) {
|
if (variantProperty.isDynamic()) {
|
||||||
if (variantProperty.dynamicTypeName() == m_backendValueTypeName) {
|
const TypeName dynamicTypeName = variantProperty.dynamicTypeName();
|
||||||
|
if ((dynamicTypeName == m_backendValueTypeName) || variantTypes.contains(dynamicTypeName)) {
|
||||||
binding.properties.append(QString::fromUtf8(variantProperty.name()));
|
binding.properties.append(QString::fromUtf8(variantProperty.name()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -58,10 +58,18 @@ public:
|
|||||||
QString bindingValue() const;
|
QString bindingValue() const;
|
||||||
void setBindingValue(const QString &text);
|
void setBindingValue(const QString &text);
|
||||||
|
|
||||||
|
//there are few ways to setup backend for binding editor:
|
||||||
|
//1. backend value + model node backend
|
||||||
void setBackendValue(const QVariant &backendValue);
|
void setBackendValue(const QVariant &backendValue);
|
||||||
void setModelNodeBackend(const QVariant &modelNodeBackend);
|
void setModelNodeBackend(const QVariant &modelNodeBackend);
|
||||||
|
|
||||||
|
//2. modelnode (this one also sets backend value type name to bool)
|
||||||
void setStateModelNode(const QVariant &stateModelNode);
|
void setStateModelNode(const QVariant &stateModelNode);
|
||||||
|
|
||||||
|
//3. modelnode + backend value type name
|
||||||
|
void setModelNode(const ModelNode &modelNode);
|
||||||
|
void setBackendValueTypeName(const TypeName &backendValueTypeName);
|
||||||
|
|
||||||
Q_INVOKABLE void prepareBindings();
|
Q_INVOKABLE void prepareBindings();
|
||||||
Q_INVOKABLE void updateWindowName();
|
Q_INVOKABLE void updateWindowName();
|
||||||
|
|
||||||
|
|||||||
@@ -225,7 +225,7 @@ void BindingEditorDialog::setupComboBoxes()
|
|||||||
m_comboBoxItem->clear();
|
m_comboBoxItem->clear();
|
||||||
m_comboBoxProperty->clear();
|
m_comboBoxProperty->clear();
|
||||||
|
|
||||||
for (auto bind : m_bindings)
|
for (const auto &bind : m_bindings)
|
||||||
m_comboBoxItem->addItem(bind.item);
|
m_comboBoxItem->addItem(bind.item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user