diff options
author | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2022-10-18 12:35:55 +0300 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2022-10-20 07:35:30 +0000 |
commit | c45f4eb654fd2a71c377f551bf8e5a55da54e2dc (patch) | |
tree | 56e6e270c8322e2f0b9f650bdda9a8121deed1ef | |
parent | 2d5512f2c4ef187a548b34077ba51fffe0f15460 (diff) |
QmlDesigner: Add support for easingCurve property to EasingCurveDialog
QtQuick3D.Particles3D.ScaleAffector has easingCurve property.
We want to use existing EasingCurveDialog to edit the value, but the
current dialog only supports property named 'easing' (used in
animations). Added support for 'easingCurve' property as well.
Task-number: QDS-8014
Change-Id: If0f47608f7ed3cb9db4a44f632d15b2135856800
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
-rw-r--r-- | src/plugins/qmldesigner/components/timelineeditor/easingcurvedialog.cpp | 22 | ||||
-rw-r--r-- | src/plugins/qmldesigner/components/timelineeditor/easingcurvedialog.h | 4 |
2 files changed, 19 insertions, 7 deletions
diff --git a/src/plugins/qmldesigner/components/timelineeditor/easingcurvedialog.cpp b/src/plugins/qmldesigner/components/timelineeditor/easingcurvedialog.cpp index 99e97d72de..79f8141bf0 100644 --- a/src/plugins/qmldesigner/components/timelineeditor/easingcurvedialog.cpp +++ b/src/plugins/qmldesigner/components/timelineeditor/easingcurvedialog.cpp @@ -159,9 +159,11 @@ EasingCurveDialog::EasingCurveDialog(const QList<ModelNode> &frames, QWidget *pa resize(QSize(1421, 918)); } -void EasingCurveDialog::initialize(const QString &curveString) +void EasingCurveDialog::initialize(const PropertyName &propName, const QString &curveString) { EasingCurve curve; + m_easingCurveProperty = propName; + if (curveString.isEmpty()) { QEasingCurve qcurve; qcurve.addCubicBezierSegment(QPointF(0.2, 0.2), QPointF(0.8, 0.8), QPointF(1.0, 1.0)); @@ -180,11 +182,19 @@ void EasingCurveDialog::runDialog(const QList<ModelNode> &frames, QWidget *paren EasingCurveDialog dialog(frames, parent); ModelNode current = frames.last(); + PropertyName propName; + + NodeMetaInfo metaInfo = current.metaInfo(); + if (metaInfo.hasProperty("easing")) + propName = "easing.bezierCurve"; + else if (metaInfo.hasProperty("easingCurve")) + propName = "easingCurve.bezierCurve"; + + QString expression; + if (!propName.isEmpty() && current.hasBindingProperty(propName)) + expression = current.bindingProperty(propName).expression(); - if (current.hasBindingProperty("easing.bezierCurve")) - dialog.initialize(current.bindingProperty("easing.bezierCurve").expression()); - else - dialog.initialize(""); + dialog.initialize(propName, expression); dialog.exec(); } @@ -207,7 +217,7 @@ bool EasingCurveDialog::apply() return view->executeInTransaction("EasingCurveDialog::apply", [this](){ auto expression = m_splineEditor->easingCurve().toString(); for (const auto &frame : qAsConst(m_frames)) - frame.bindingProperty("easing.bezierCurve").setExpression(expression); + frame.bindingProperty(m_easingCurveProperty).setExpression(expression); }); } diff --git a/src/plugins/qmldesigner/components/timelineeditor/easingcurvedialog.h b/src/plugins/qmldesigner/components/timelineeditor/easingcurvedialog.h index a8c026989c..3f6ea95a5e 100644 --- a/src/plugins/qmldesigner/components/timelineeditor/easingcurvedialog.h +++ b/src/plugins/qmldesigner/components/timelineeditor/easingcurvedialog.h @@ -49,7 +49,7 @@ class EasingCurveDialog : public QDialog public: EasingCurveDialog(const QList<ModelNode> &frames, QWidget *parent = nullptr); - void initialize(const QString &curveString); + void initialize(const PropertyName &propName, const QString &curveString); static void runDialog(const QList<ModelNode> &frames, QWidget *parent = nullptr); @@ -80,6 +80,8 @@ private: QLabel *m_label = nullptr; QList<ModelNode> m_frames; + + PropertyName m_easingCurveProperty; }; } // namespace QmlDesigner |