diff options
author | Knud Dollereder <knud.dollereder@qt.io> | 2020-02-10 16:21:23 +0100 |
---|---|---|
committer | Knud Dollereder <knud.dollereder@qt.io> | 2020-02-11 12:13:00 +0000 |
commit | 841f5be97eac3b8ad25901217b9420626c03720a (patch) | |
tree | 2006188cd50c9e478c0e8837797f561eee806b93 /src/plugins/qmldesigner/components/timelineeditor | |
parent | debc304bf868310d19483d6079b1a841f9341e64 (diff) |
Implement locking and pinning of animation-curves
Fixes: QDS-550
Fixes: QDS-551
Change-Id: I53a120a3753bb98fe729106b7e996f475fbda2f1
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
Diffstat (limited to 'src/plugins/qmldesigner/components/timelineeditor')
-rw-r--r-- | src/plugins/qmldesigner/components/timelineeditor/animationcurveeditormodel.cpp | 17 | ||||
-rw-r--r-- | src/plugins/qmldesigner/components/timelineeditor/timelinewidget.cpp | 18 |
2 files changed, 29 insertions, 6 deletions
diff --git a/src/plugins/qmldesigner/components/timelineeditor/animationcurveeditormodel.cpp b/src/plugins/qmldesigner/components/timelineeditor/animationcurveeditormodel.cpp index 34f3afea96..ce7beba2c9 100644 --- a/src/plugins/qmldesigner/components/timelineeditor/animationcurveeditormodel.cpp +++ b/src/plugins/qmldesigner/components/timelineeditor/animationcurveeditormodel.cpp @@ -94,9 +94,10 @@ void AnimationCurveEditorModel::setTimeline(const QmlTimeline &timeline) m_maxTime = timeline.endKeyframe(); std::vector<DesignTools::TreeItem *> items; - for (auto &&target : timeline.allTargets()) + for (auto &&target : timeline.allTargets()) { if (DesignTools::TreeItem *item = createTopLevelItem(timeline, target)) items.push_back(item); + } reset(items); } @@ -113,8 +114,7 @@ void AnimationCurveEditorModel::setMaximumTime(double time) DesignTools::ValueType typeFrom(const QmlTimelineKeyframeGroup &group) { - if (group.valueType() == TypeName("double") - || group.valueType() == TypeName("real") + if (group.valueType() == TypeName("double") || group.valueType() == TypeName("real") || group.valueType() == TypeName("float")) return DesignTools::ValueType::Double; @@ -140,7 +140,16 @@ DesignTools::TreeItem *AnimationCurveEditorModel::createTopLevelItem(const QmlTi DesignTools::AnimationCurve curve = createAnimationCurve(grp); if (curve.isValid()) { QString name = QString::fromUtf8(grp.propertyName()); - nodeItem->addChild(new DesignTools::PropertyTreeItem(name, curve, typeFrom(grp))); + auto propertyItem = new DesignTools::PropertyTreeItem(name, curve, typeFrom(grp)); + + ModelNode target = grp.modelNode(); + if (target.hasAuxiliaryData("locked")) + propertyItem->setLocked(true); + + if (target.hasAuxiliaryData("pinned")) + propertyItem->setPinned(true); + + nodeItem->addChild(propertyItem); } } } diff --git a/src/plugins/qmldesigner/components/timelineeditor/timelinewidget.cpp b/src/plugins/qmldesigner/components/timelineeditor/timelinewidget.cpp index 914a16b056..e7f12fb5a2 100644 --- a/src/plugins/qmldesigner/components/timelineeditor/timelinewidget.cpp +++ b/src/plugins/qmldesigner/components/timelineeditor/timelinewidget.cpp @@ -328,6 +328,20 @@ void TimelineWidget::updateAnimationCurve(DesignTools::PropertyTreeItem *item) QmlTimelineKeyframeGroup group = timelineKeyframeGroup(currentTimeline, item); if (group.isValid()) { + ModelNode groupNode = group.modelNode(); + + if (groupNode.isValid()) { + if (item->locked()) + groupNode.setAuxiliaryData("locked", true); + else + groupNode.removeAuxiliaryData("locked"); + + if (item->pinned()) + groupNode.setAuxiliaryData("pinned", true); + else + groupNode.removeAuxiliaryData("pinned"); + } + auto replaceKeyframes = [&group, item, this]() { m_toolbar->setBlockReflection(true); for (auto frame : group.keyframes()) @@ -407,8 +421,8 @@ void TimelineWidget::init() QmlTimeline currentTimeline = m_timelineView->timelineForState(m_timelineView->currentState()); if (currentTimeline.isValid()) { setTimelineId(currentTimeline.modelNode().id()); - m_statusBar->setText(tr(TimelineConstants::statusBarPlayheadFrame) - .arg(getcurrentFrame(currentTimeline))); + m_statusBar->setText( + tr(TimelineConstants::statusBarPlayheadFrame).arg(getcurrentFrame(currentTimeline))); } else { setTimelineId({}); m_statusBar->clear(); |