diff options
author | Aleksei German <[email protected]> | 2019-11-27 16:05:34 +0100 |
---|---|---|
committer | Aleksei German <[email protected]> | 2019-11-27 16:03:12 +0000 |
commit | 7cf6632d7d0b23fa78bc770fee8b4ce76e052383 (patch) | |
tree | a95ec34a43d818181c4fbaac8bc8941fa806e431 /src/plugins | |
parent | 2ebffd3eaf4e2660dfe6c6fc5c8328c682fae351 (diff) |
QmlDesigner Binding Editor UX improvement
Binding Editor now shows which property type it expects.
Binding Editor now works with alias and unknown types.
Change-Id: I23d0bed3db5126de5107cf2f1f6b46485b89e1ea
Reviewed-by: Thomas Hartmann <[email protected]>
Diffstat (limited to 'src/plugins')
4 files changed, 38 insertions, 4 deletions
diff --git a/src/plugins/qmldesigner/components/bindingeditor/bindingeditor.cpp b/src/plugins/qmldesigner/components/bindingeditor/bindingeditor.cpp index a6fcffa3fbf..fe3871c6c16 100644 --- a/src/plugins/qmldesigner/components/bindingeditor/bindingeditor.cpp +++ b/src/plugins/qmldesigner/components/bindingeditor/bindingeditor.cpp @@ -102,9 +102,16 @@ void BindingEditor::setBackendValue(const QVariant &backendValue) m_backendValue = backendValue; const QObject *backendValueObj = backendValue.value<QObject*>(); const PropertyEditorValue *propertyEditorValue = qobject_cast<const PropertyEditorValue *>(backendValueObj); + const ModelNode node = propertyEditorValue->modelNode(); - m_backendValueTypeName = propertyEditorValue->modelNode().metaInfo().propertyTypeName( - propertyEditorValue->name()); + if (node.isValid()) + { + m_backendValueTypeName = node.metaInfo().propertyTypeName(propertyEditorValue->name()); + + if (m_backendValueTypeName == "alias" || m_backendValueTypeName == "unknown") + if (QmlObjectNode::isValidQmlObjectNode(node)) + m_backendValueTypeName = QmlObjectNode(node).instanceType(propertyEditorValue->name()); + } emit backendValueChanged(); } @@ -154,8 +161,16 @@ void BindingEditor::prepareBindings() for (auto objnode : allNodes) { BindingEditorDialog::BindingOption binding; for (auto propertyName : objnode.metaInfo().propertyNames()) - if (m_backendValueTypeName == objnode.metaInfo().propertyTypeName(propertyName)) + { + TypeName propertyTypeName = objnode.metaInfo().propertyTypeName(propertyName); + + if ((propertyTypeName == "alias" || propertyTypeName == "unknown")) + if (QmlObjectNode::isValidQmlObjectNode(objnode)) + propertyTypeName = QmlObjectNode(objnode).instanceType(propertyName); + + if (m_backendValueTypeName == propertyTypeName) binding.properties.append(QString::fromUtf8(propertyName)); + } if (!binding.properties.isEmpty() && objnode.hasId()) { binding.item = objnode.displayName(); @@ -165,6 +180,16 @@ void BindingEditor::prepareBindings() if (!bindings.isEmpty() && !m_dialog.isNull()) m_dialog->setAllBindings(bindings); + + updateWindowName(); +} + +void BindingEditor::updateWindowName() +{ + if (!m_dialog.isNull() && !m_backendValueTypeName.isEmpty()) + { + m_dialog->setWindowTitle(m_dialog->defaultTitle() + " [" + m_backendValueTypeName + "]"); + } } QVariant BindingEditor::backendValue() const diff --git a/src/plugins/qmldesigner/components/bindingeditor/bindingeditor.h b/src/plugins/qmldesigner/components/bindingeditor/bindingeditor.h index 5da06d2ecf0..8f9a77baec1 100644 --- a/src/plugins/qmldesigner/components/bindingeditor/bindingeditor.h +++ b/src/plugins/qmldesigner/components/bindingeditor/bindingeditor.h @@ -62,6 +62,7 @@ public: void setStateModelNode(const QVariant &stateModelNode); Q_INVOKABLE void prepareBindings(); + Q_INVOKABLE void updateWindowName(); signals: void accepted(); diff --git a/src/plugins/qmldesigner/components/bindingeditor/bindingeditordialog.cpp b/src/plugins/qmldesigner/components/bindingeditor/bindingeditordialog.cpp index 08cb5d8bd36..51bd771843a 100644 --- a/src/plugins/qmldesigner/components/bindingeditor/bindingeditordialog.cpp +++ b/src/plugins/qmldesigner/components/bindingeditor/bindingeditordialog.cpp @@ -45,7 +45,7 @@ BindingEditorDialog::BindingEditorDialog(QWidget *parent) : QDialog(parent) { setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); - setWindowTitle(tr("Binding Editor")); + setWindowTitle(defaultTitle()); setModal(false); setupJSEditor(); @@ -153,6 +153,11 @@ void BindingEditorDialog::unregisterAutoCompletion() m_editorWidget->unregisterAutoCompletion(); } +QString BindingEditorDialog::defaultTitle() const +{ + return titleString; +} + void BindingEditorDialog::setupJSEditor() { static BindingEditorFactory f; diff --git a/src/plugins/qmldesigner/components/bindingeditor/bindingeditordialog.h b/src/plugins/qmldesigner/components/bindingeditor/bindingeditordialog.h index f1b224a716f..6cb0c003610 100644 --- a/src/plugins/qmldesigner/components/bindingeditor/bindingeditordialog.h +++ b/src/plugins/qmldesigner/components/bindingeditor/bindingeditordialog.h @@ -71,6 +71,8 @@ public: void unregisterAutoCompletion(); + QString defaultTitle() const; + private: void setupJSEditor(); void setupUIComponents(); @@ -92,6 +94,7 @@ private: QList<BindingEditorDialog::BindingOption> m_bindings; bool m_lock = false; const QString undefinedString = {"[Undefined]"}; + const QString titleString = {tr("Binding Editor")}; }; } |