aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Hartmann <thomas.hartmann@qt.io>2017-12-05 11:31:01 +0100
committerThomas Hartmann <thomas.hartmann@qt.io>2017-12-05 13:14:04 +0000
commit034e672509447ad99585b1c72323b8a019c91a4b (patch)
treef4847c7603c932ed739af9cfbefc86e608c3c222
parent2c93654e58b8c9c125e9ab08176acd8cd9009dd8 (diff)
QmlDesigner: Add support for timeline items
Change-Id: Ie7e05c78c2d817da9dd91c345f1949daa640c6bc Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
-rw-r--r--src/plugins/qmldesigner/designercore/include/qmltimelinekeyframes.h4
-rw-r--r--src/plugins/qmldesigner/designercore/include/qmltimelinemutator.h2
-rw-r--r--src/plugins/qmldesigner/designercore/model/qmltimelinekeyframes.cpp38
-rw-r--r--src/plugins/qmldesigner/designercore/model/qmltimelinemutator.cpp5
4 files changed, 48 insertions, 1 deletions
diff --git a/src/plugins/qmldesigner/designercore/include/qmltimelinekeyframes.h b/src/plugins/qmldesigner/designercore/include/qmltimelinekeyframes.h
index 076b2d8099..32d53a5b00 100644
--- a/src/plugins/qmldesigner/designercore/include/qmltimelinekeyframes.h
+++ b/src/plugins/qmldesigner/designercore/include/qmltimelinekeyframes.h
@@ -70,6 +70,10 @@ public:
void moveAllFrames(qreal offset);
void scaleAllFrames(qreal factor);
+ int getSupposedTargetIndex(qreal newFrame) const;
+
+ int indexOfFrame(const ModelNode &frame) const;
+ void slideFrame(int sourceIndex, int targetIndex);
};
} //QmlDesigner
diff --git a/src/plugins/qmldesigner/designercore/include/qmltimelinemutator.h b/src/plugins/qmldesigner/designercore/include/qmltimelinemutator.h
index 291381fece..8cddecba80 100644
--- a/src/plugins/qmldesigner/designercore/include/qmltimelinemutator.h
+++ b/src/plugins/qmldesigner/designercore/include/qmltimelinemutator.h
@@ -54,6 +54,8 @@ public:
qreal currentFrame() const;
qreal duration() const;
+ bool isEnabled() const;
+
qreal minActualFrame(const ModelNode &target) const;
qreal maxActualFrame(const ModelNode &target) const;
diff --git a/src/plugins/qmldesigner/designercore/model/qmltimelinekeyframes.cpp b/src/plugins/qmldesigner/designercore/model/qmltimelinekeyframes.cpp
index 0e49e1f27a..8770e78e30 100644
--- a/src/plugins/qmldesigner/designercore/model/qmltimelinekeyframes.cpp
+++ b/src/plugins/qmldesigner/designercore/model/qmltimelinekeyframes.cpp
@@ -90,6 +90,35 @@ void QmlTimelineFrames::setPropertyName(const PropertyName &propertyName)
modelNode().variantProperty("property").setValue(QString::fromUtf8(propertyName));
}
+int QmlTimelineFrames::getSupposedTargetIndex(qreal newFrame) const
+{
+ const NodeListProperty nodeListProperty = modelNode().defaultNodeListProperty();
+ int i = 0;
+ for (auto node : nodeListProperty.toModelNodeList()) {
+ if (node.hasVariantProperty("frame")) {
+ const qreal currentFrame = node.variantProperty("frame").value().toReal();
+ if (!qFuzzyCompare(currentFrame, newFrame)) { //Ignore the frame itself
+ if (currentFrame > newFrame)
+ return i;
+ ++i;
+ }
+ }
+ }
+
+ return nodeListProperty.count();
+}
+
+int QmlTimelineFrames::indexOfFrame(const ModelNode &frame) const
+{
+ return modelNode().defaultNodeListProperty().indexOf(frame);
+}
+
+void QmlTimelineFrames::slideFrame(int sourceIndex, int targetIndex)
+{
+ if (targetIndex != sourceIndex)
+ modelNode().defaultNodeListProperty().slide(sourceIndex, targetIndex);
+}
+
void QmlTimelineFrames::setValue(const QVariant &value, qreal currentFrame)
{
@@ -104,7 +133,14 @@ void QmlTimelineFrames::setValue(const QVariant &value, qreal currentFrame)
{PropertyName("value"), value}};
ModelNode frame = modelNode().view()->createModelNode("QtQuick.Timeline.Keyframe", 1, 0, propertyPairList);
- modelNode().defaultNodeListProperty().reparentHere(frame);
+ NodeListProperty nodeListProperty = modelNode().defaultNodeListProperty();
+
+ const int sourceIndex = nodeListProperty.count();
+ const int targetIndex = getSupposedTargetIndex(currentFrame);
+
+ nodeListProperty.reparentHere(frame);
+
+ slideFrame(sourceIndex, targetIndex);
}
QVariant QmlTimelineFrames::value(qreal frame) const
diff --git a/src/plugins/qmldesigner/designercore/model/qmltimelinemutator.cpp b/src/plugins/qmldesigner/designercore/model/qmltimelinemutator.cpp
index 07fc0004d2..8266051369 100644
--- a/src/plugins/qmldesigner/designercore/model/qmltimelinemutator.cpp
+++ b/src/plugins/qmldesigner/designercore/model/qmltimelinemutator.cpp
@@ -130,6 +130,11 @@ qreal QmlTimelineMutator::duration() const
return endFrame() - startFrame();
}
+bool QmlTimelineMutator::isEnabled() const
+{
+ return QmlObjectNode(modelNode()).modelValue("enabled").toBool();
+}
+
qreal QmlTimelineMutator::minActualFrame(const ModelNode &target) const
{
qreal min = std::numeric_limits<double>::max();