diff --git a/src/plugins/qmldesigner/designercore/include/qmltimelinekeyframegroup.h b/src/plugins/qmldesigner/designercore/include/qmltimelinekeyframegroup.h index 1b6c5655862..f5d708d8563 100644 --- a/src/plugins/qmldesigner/designercore/include/qmltimelinekeyframegroup.h +++ b/src/plugins/qmldesigner/designercore/include/qmltimelinekeyframegroup.h @@ -33,6 +33,7 @@ namespace QmlDesigner { class AbstractViewAbstractVieweGroup; class QmlObjectNode; +class QmlTimeline; class QMLDESIGNERCORE_EXPORT QmlTimelineKeyframeGroup : public QmlModelNodeFacade { @@ -75,6 +76,11 @@ public: int indexOfKeyframe(const ModelNode &frame) const; void slideKeyframe(int sourceIndex, int targetIndex); + + bool isRecording() const; + void toogleRecording(bool b) const; + + QmlTimeline timeline() const; }; } //QmlDesigner diff --git a/src/plugins/qmldesigner/designercore/model/qmltimelinekeyframegroup.cpp b/src/plugins/qmldesigner/designercore/model/qmltimelinekeyframegroup.cpp index e457e5cdaab..e105fb279b9 100644 --- a/src/plugins/qmldesigner/designercore/model/qmltimelinekeyframegroup.cpp +++ b/src/plugins/qmldesigner/designercore/model/qmltimelinekeyframegroup.cpp @@ -72,17 +72,23 @@ ModelNode QmlTimelineKeyframeGroup::target() const void QmlTimelineKeyframeGroup::setTarget(const ModelNode &target) { + QTC_ASSERT(isValid(), return); + modelNode().bindingProperty("target").setExpression(target.id()); } PropertyName QmlTimelineKeyframeGroup::propertyName() const { + QTC_ASSERT(isValid(), return {}); + return modelNode().variantProperty("property").value().toString().toUtf8(); } void QmlTimelineKeyframeGroup::setPropertyName(const PropertyName &propertyName) { + QTC_ASSERT(isValid(), return); + modelNode().variantProperty("property").setValue(QString::fromUtf8(propertyName)); } @@ -106,6 +112,8 @@ int QmlTimelineKeyframeGroup::getSupposedTargetIndex(qreal newFrame) const int QmlTimelineKeyframeGroup::indexOfKeyframe(const ModelNode &frame) const { + QTC_ASSERT(isValid(), return -1); + return modelNode().defaultNodeListProperty().indexOf(frame); } @@ -117,8 +125,38 @@ void QmlTimelineKeyframeGroup::slideKeyframe(int /*sourceIndex*/, int /*targetIn */ } +bool QmlTimelineKeyframeGroup::isRecording() const +{ + QTC_ASSERT(isValid(), return false); + + return modelNode().hasAuxiliaryData("REC@Internal"); +} + +void QmlTimelineKeyframeGroup::toogleRecording(bool record) const +{ + QTC_ASSERT(isValid(), return); + + if (!record) { + if (isRecording()) + modelNode().removeAuxiliaryData("REC@Internal"); + } else { + modelNode().setAuxiliaryData("REC@Internal", true); + } +} + +QmlTimeline QmlTimelineKeyframeGroup::timeline() const +{ + QTC_ASSERT(isValid(), return {}); + + if (modelNode().hasParentProperty()) + return modelNode().parentProperty().parentModelNode(); + + return {}; +} + void QmlTimelineKeyframeGroup::setValue(const QVariant &value, qreal currentFrame) { + QTC_ASSERT(isValid(), return); for (const ModelNode &childNode : modelNode().defaultNodeListProperty().toModelNodeList()) { if (qFuzzyCompare(childNode.variantProperty("frame").value().toReal(), currentFrame)) { @@ -143,6 +181,8 @@ void QmlTimelineKeyframeGroup::setValue(const QVariant &value, qreal currentFram QVariant QmlTimelineKeyframeGroup::value(qreal frame) const { + QTC_ASSERT(isValid(), return {}); + for (const ModelNode &childNode : modelNode().defaultNodeListProperty().toModelNodeList()) { if (qFuzzyCompare(childNode.variantProperty("frame").value().toReal(), frame)) { return childNode.variantProperty("value").value(); @@ -154,6 +194,8 @@ QVariant QmlTimelineKeyframeGroup::value(qreal frame) const TypeName QmlTimelineKeyframeGroup::valueType() const { + QTC_ASSERT(isValid(), return {}); + const ModelNode targetNode = target(); if (targetNode.isValid() && targetNode.hasMetaInfo()) @@ -174,6 +216,8 @@ bool QmlTimelineKeyframeGroup::hasKeyframe(qreal frame) qreal QmlTimelineKeyframeGroup::minActualKeyframe() const { + QTC_ASSERT(isValid(), return -1); + qreal min = std::numeric_limits::max(); for (const ModelNode &childNode : modelNode().defaultNodeListProperty().toModelNodeList()) { QVariant value = childNode.variantProperty("frame").value(); @@ -186,6 +230,8 @@ qreal QmlTimelineKeyframeGroup::minActualKeyframe() const qreal QmlTimelineKeyframeGroup::maxActualKeyframe() const { + QTC_ASSERT(isValid(), return -1); + qreal max = std::numeric_limits::min(); for (const ModelNode &childNode : modelNode().defaultNodeListProperty().toModelNodeList()) { QVariant value = childNode.variantProperty("frame").value();