aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleksei German <aleksei.german@qt.io>2019-11-27 16:05:34 +0100
committerAleksei German <aleksei.german@qt.io>2019-11-27 16:03:12 +0000
commit7cf6632d7d0b23fa78bc770fee8b4ce76e052383 (patch)
treea95ec34a43d818181c4fbaac8bc8941fa806e431
parent2ebffd3eaf4e2660dfe6c6fc5c8328c682fae351 (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 <thomas.hartmann@qt.io>
-rw-r--r--src/plugins/qmldesigner/components/bindingeditor/bindingeditor.cpp31
-rw-r--r--src/plugins/qmldesigner/components/bindingeditor/bindingeditor.h1
-rw-r--r--src/plugins/qmldesigner/components/bindingeditor/bindingeditordialog.cpp7
-rw-r--r--src/plugins/qmldesigner/components/bindingeditor/bindingeditordialog.h3
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 a6fcffa3fb..fe3871c6c1 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 5da06d2ecf..8f9a77baec 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 08cb5d8bd3..51bd771843 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 f1b224a716..6cb0c00361 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")};
};
}