diff options
author | Simon Hausmann <simon.hausmann@qt.io> | 2020-03-24 11:21:25 +0100 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@qt.io> | 2020-04-02 22:23:04 +0200 |
commit | e40098c5303e7af4b12c64093b120405c63fdf8d (patch) | |
tree | 9636894ed820567731f9b4dd41870392ce052a70 /src/qml/qml/qqmlpropertybinding.cpp | |
parent | 63bf6ac4c483cc64b48c410c6e1afb404f2bcbd1 (diff) |
Add support for translation bindings on QProperty based properties
Change-Id: I439653123cdc96df97a1801664655c9d28a8b9b5
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'src/qml/qml/qqmlpropertybinding.cpp')
-rw-r--r-- | src/qml/qml/qqmlpropertybinding.cpp | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/src/qml/qml/qqmlpropertybinding.cpp b/src/qml/qml/qqmlpropertybinding.cpp index ca64cf412a..9fffafa649 100644 --- a/src/qml/qml/qqmlpropertybinding.cpp +++ b/src/qml/qml/qqmlpropertybinding.cpp @@ -57,7 +57,7 @@ QUntypedPropertyBinding QQmlPropertyBinding::create(const QQmlPropertyData *pd, void QQmlPropertyBinding::expressionChanged() { - setDirty(true); + markDirtyAndNotifyObservers(); } QQmlPropertyBinding::QQmlPropertyBinding(const QMetaType &mt) @@ -98,4 +98,26 @@ QUntypedPropertyBinding::BindingEvaluationResult QQmlPropertyBinding::evaluateAn return true; } +QUntypedPropertyBinding QQmlTranslationPropertyBinding::create(const QQmlPropertyData *pd, const QQmlRefPointer<QV4::ExecutableCompilationUnit> &compilationUnit, const QV4::CompiledData::Binding *binding) +{ + auto translationBinding = [compilationUnit, binding](const QMetaType &metaType, void *dataPtr) { + // Create a dependency to the uiLanguage + QJSEnginePrivate::get(compilationUnit->engine)->uiLanguage.value(); + + QVariant resultVariant(compilationUnit->bindingValueAsString(binding)); + if (metaType.id() != QMetaType::QString) + resultVariant.convert(metaType.id()); + + int compareResult = 0; + if (QMetaType::compare(dataPtr, resultVariant.constData(), metaType.id(), &compareResult) + && compareResult == 0) + return false; + QMetaType::destruct(metaType.id(), dataPtr); + QMetaType::construct(metaType.id(), dataPtr, resultVariant.constData()); + return true; + }; + + return QUntypedPropertyBinding(QMetaType(pd->propType()), translationBinding, QPropertyBindingSourceLocation()); +} + QT_END_NAMESPACE |