diff --git a/src/plugins/qmldesigner/designercore/include/qmltimelinekeyframes.h b/src/plugins/qmldesigner/designercore/include/qmltimelinekeyframes.h index 06d3565fa28..52228e6ba98 100644 --- a/src/plugins/qmldesigner/designercore/include/qmltimelinekeyframes.h +++ b/src/plugins/qmldesigner/designercore/include/qmltimelinekeyframes.h @@ -65,6 +65,9 @@ public: static bool isValidKeyframe(const ModelNode &node); static QmlTimelineFrames keyframesForKeyframe(const ModelNode &node); + + void moveAllFrames(qreal offset); + void scaleAllFrames(qreal factor); }; } //QmlDesigner diff --git a/src/plugins/qmldesigner/designercore/include/qmltimelinemutator.h b/src/plugins/qmldesigner/designercore/include/qmltimelinemutator.h index 1d184fcce1b..291381fece6 100644 --- a/src/plugins/qmldesigner/designercore/include/qmltimelinemutator.h +++ b/src/plugins/qmldesigner/designercore/include/qmltimelinemutator.h @@ -57,6 +57,9 @@ public: qreal minActualFrame(const ModelNode &target) const; qreal maxActualFrame(const ModelNode &target) const; + void moveAllFrames(const ModelNode &target, qreal offset); + void scaleAllFrames(const ModelNode &target, qreal factor); + QList allTargets() const; QList framesForTarget(const ModelNode &target) const; void destroyFramesForTarget(const ModelNode &target); diff --git a/src/plugins/qmldesigner/designercore/model/qmltimelinekeyframes.cpp b/src/plugins/qmldesigner/designercore/model/qmltimelinekeyframes.cpp index b2cab942d33..784a9f8bf8b 100644 --- a/src/plugins/qmldesigner/designercore/model/qmltimelinekeyframes.cpp +++ b/src/plugins/qmldesigner/designercore/model/qmltimelinekeyframes.cpp @@ -182,4 +182,23 @@ QmlTimelineFrames QmlTimelineFrames::keyframesForKeyframe(const ModelNode &node) return QmlTimelineFrames(); } +void QmlTimelineFrames::moveAllFrames(qreal offset) +{ + for (const ModelNode &childNode : modelNode().defaultNodeListProperty().toModelNodeList()) { + auto property = childNode.variantProperty("frame"); + if (property.isValid()) + property.setValue(property.value().toReal() + offset); + } +} + +void QmlTimelineFrames::scaleAllFrames(qreal factor) +{ + for (const ModelNode &childNode : modelNode().defaultNodeListProperty().toModelNodeList()) { + auto property = childNode.variantProperty("frame"); + + if (property.isValid()) + property.setValue(property.value().toReal() * factor); + } +} + } // QmlDesigner diff --git a/src/plugins/qmldesigner/designercore/model/qmltimelinemutator.cpp b/src/plugins/qmldesigner/designercore/model/qmltimelinemutator.cpp index ec6c2c6b020..07fc0004d2b 100644 --- a/src/plugins/qmldesigner/designercore/model/qmltimelinemutator.cpp +++ b/src/plugins/qmldesigner/designercore/model/qmltimelinemutator.cpp @@ -156,6 +156,19 @@ qreal QmlTimelineMutator::maxActualFrame(const ModelNode &target) const return max; } +void QmlTimelineMutator::moveAllFrames(const ModelNode &target, qreal offset) +{ + for (QmlTimelineFrames &frames : framesForTarget(target)) + frames.moveAllFrames(offset); + +} + +void QmlTimelineMutator::scaleAllFrames(const ModelNode &target, qreal factor) +{ + for (QmlTimelineFrames &frames : framesForTarget(target)) + frames.scaleAllFrames(factor); +} + QList QmlTimelineMutator::allTargets() const { QList result;