aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/qmldesigner/components/timelineeditor
diff options
context:
space:
mode:
authorKnud Dollereder <knud.dollereder@qt.io>2020-02-10 16:21:23 +0100
committerKnud Dollereder <knud.dollereder@qt.io>2020-02-11 12:13:00 +0000
commit841f5be97eac3b8ad25901217b9420626c03720a (patch)
tree2006188cd50c9e478c0e8837797f561eee806b93 /src/plugins/qmldesigner/components/timelineeditor
parentdebc304bf868310d19483d6079b1a841f9341e64 (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.cpp17
-rw-r--r--src/plugins/qmldesigner/components/timelineeditor/timelinewidget.cpp18
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();