forked from qt-creator/qt-creator
QmlDesigner: Add support for timeline items
Change-Id: Ie7e05c78c2d817da9dd91c345f1949daa640c6bc Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
@@ -70,6 +70,10 @@ public:
|
|||||||
|
|
||||||
void moveAllFrames(qreal offset);
|
void moveAllFrames(qreal offset);
|
||||||
void scaleAllFrames(qreal factor);
|
void scaleAllFrames(qreal factor);
|
||||||
|
int getSupposedTargetIndex(qreal newFrame) const;
|
||||||
|
|
||||||
|
int indexOfFrame(const ModelNode &frame) const;
|
||||||
|
void slideFrame(int sourceIndex, int targetIndex);
|
||||||
};
|
};
|
||||||
|
|
||||||
} //QmlDesigner
|
} //QmlDesigner
|
||||||
|
@@ -54,6 +54,8 @@ public:
|
|||||||
qreal currentFrame() const;
|
qreal currentFrame() const;
|
||||||
qreal duration() const;
|
qreal duration() const;
|
||||||
|
|
||||||
|
bool isEnabled() const;
|
||||||
|
|
||||||
qreal minActualFrame(const ModelNode &target) const;
|
qreal minActualFrame(const ModelNode &target) const;
|
||||||
qreal maxActualFrame(const ModelNode &target) const;
|
qreal maxActualFrame(const ModelNode &target) const;
|
||||||
|
|
||||||
|
@@ -90,6 +90,35 @@ void QmlTimelineFrames::setPropertyName(const PropertyName &propertyName)
|
|||||||
modelNode().variantProperty("property").setValue(QString::fromUtf8(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)
|
void QmlTimelineFrames::setValue(const QVariant &value, qreal currentFrame)
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -104,7 +133,14 @@ void QmlTimelineFrames::setValue(const QVariant &value, qreal currentFrame)
|
|||||||
{PropertyName("value"), value}};
|
{PropertyName("value"), value}};
|
||||||
|
|
||||||
ModelNode frame = modelNode().view()->createModelNode("QtQuick.Timeline.Keyframe", 1, 0, propertyPairList);
|
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
|
QVariant QmlTimelineFrames::value(qreal frame) const
|
||||||
|
@@ -130,6 +130,11 @@ qreal QmlTimelineMutator::duration() const
|
|||||||
return endFrame() - startFrame();
|
return endFrame() - startFrame();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool QmlTimelineMutator::isEnabled() const
|
||||||
|
{
|
||||||
|
return QmlObjectNode(modelNode()).modelValue("enabled").toBool();
|
||||||
|
}
|
||||||
|
|
||||||
qreal QmlTimelineMutator::minActualFrame(const ModelNode &target) const
|
qreal QmlTimelineMutator::minActualFrame(const ModelNode &target) const
|
||||||
{
|
{
|
||||||
qreal min = std::numeric_limits<double>::max();
|
qreal min = std::numeric_limits<double>::max();
|
||||||
|
Reference in New Issue
Block a user