keyframecontrol: update state if keyframe time changes

This commit is contained in:
itsmattkc
2021-01-24 12:08:23 +11:00
parent eb132d93de
commit 4dd2b64c6d
3 changed files with 24 additions and 18 deletions
+15 -13
View File
@@ -190,22 +190,24 @@ void NodeInput::childEvent(QChildEvent *event)
if (event->type() == QEvent::ChildAdded) {
GetImmediate(key->element())->insert_keyframe(key);
connect(key, &NodeKeyframe::TimeChanged, this, &NodeInput::InvalidateFromKeyframeTimeChange);
connect(key, &NodeKeyframe::TimeChanged, this, &NodeInput::KeyframeTimeChanged);
connect(key, &NodeKeyframe::ValueChanged, this, &NodeInput::KeyframeValueChanged);
connect(key, &NodeKeyframe::TypeChanged, this, &NodeInput::KeyframeTypeChanged);
connect(key, &NodeKeyframe::BezierControlInChanged, this, &NodeInput::KeyframeBezierInChanged);
connect(key, &NodeKeyframe::BezierControlOutChanged, this, &NodeInput::KeyframeBezierOutChanged);
connect(key, &NodeKeyframe::ValueChanged, this, &NodeInput::InvalidateFromKeyframeValueChange);
connect(key, &NodeKeyframe::TypeChanged, this, &NodeInput::InvalidateFromKeyframeTypeChanged);
connect(key, &NodeKeyframe::BezierControlInChanged, this, &NodeInput::InvalidateFromKeyframeBezierInChange);
connect(key, &NodeKeyframe::BezierControlOutChanged, this, &NodeInput::InvalidateFromKeyframeBezierOutChange);
emit KeyframeAdded(key);
emit ValueChanged(get_range_affected_by_keyframe(key), key->element());
} else if (event->type() == QEvent::ChildRemoved) {
TimeRange time_affected = get_range_affected_by_keyframe(key);
disconnect(key, &NodeKeyframe::TimeChanged, this, &NodeInput::InvalidateFromKeyframeTimeChange);
disconnect(key, &NodeKeyframe::TimeChanged, this, &NodeInput::KeyframeTimeChanged);
disconnect(key, &NodeKeyframe::ValueChanged, this, &NodeInput::KeyframeValueChanged);
disconnect(key, &NodeKeyframe::TypeChanged, this, &NodeInput::KeyframeTypeChanged);
disconnect(key, &NodeKeyframe::BezierControlInChanged, this, &NodeInput::KeyframeBezierInChanged);
disconnect(key, &NodeKeyframe::BezierControlOutChanged, this, &NodeInput::KeyframeBezierOutChanged);
disconnect(key, &NodeKeyframe::ValueChanged, this, &NodeInput::InvalidateFromKeyframeValueChange);
disconnect(key, &NodeKeyframe::TypeChanged, this, &NodeInput::InvalidateFromKeyframeTypeChanged);
disconnect(key, &NodeKeyframe::BezierControlInChanged, this, &NodeInput::InvalidateFromKeyframeBezierInChange);
disconnect(key, &NodeKeyframe::BezierControlOutChanged, this, &NodeInput::InvalidateFromKeyframeBezierOutChange);
GetImmediate(key->element())->remove_keyframe(key);
@@ -701,7 +703,7 @@ void NodeInput::set_combobox_strings(const QStringList &strings)
setProperty("combo_str", strings);
}
void NodeInput::KeyframeBezierInChanged()
void NodeInput::InvalidateFromKeyframeBezierInChange()
{
NodeKeyframe* key = static_cast<NodeKeyframe*>(sender());
const NodeKeyframeTrack& track = GetTrackFromKeyframe(key);
@@ -717,7 +719,7 @@ void NodeInput::KeyframeBezierInChanged()
emit ValueChanged(TimeRange(start, end), key->element());
}
void NodeInput::KeyframeBezierOutChanged()
void NodeInput::InvalidateFromKeyframeBezierOutChange()
{
NodeKeyframe* key = static_cast<NodeKeyframe*>(sender());
const NodeKeyframeTrack& track = GetTrackFromKeyframe(key);
@@ -733,7 +735,7 @@ void NodeInput::KeyframeBezierOutChanged()
emit ValueChanged(TimeRange(start, end), key->element());
}
void NodeInput::KeyframeTimeChanged()
void NodeInput::InvalidateFromKeyframeTimeChange()
{
NodeKeyframe* key = static_cast<NodeKeyframe*>(sender());
NodeInputImmediate* immediate = GetImmediate(key->element());
@@ -760,13 +762,13 @@ void NodeInput::KeyframeTimeChanged()
}
}
void NodeInput::KeyframeValueChanged()
void NodeInput::InvalidateFromKeyframeValueChange()
{
NodeKeyframe* key = static_cast<NodeKeyframe*>(sender());
emit ValueChanged(get_range_affected_by_keyframe(key), key->element());
}
void NodeInput::KeyframeTypeChanged()
void NodeInput::InvalidateFromKeyframeTypeChanged()
{
NodeKeyframe* key = static_cast<NodeKeyframe*>(sender());
const NodeKeyframeTrack& track = GetTrackFromKeyframe(key);
+7 -5
View File
@@ -347,6 +347,8 @@ signals:
void KeyframeRemoved(NodeKeyframe* key);
void KeyframeTimeChanged();
void PropertyChanged(const QString& s, const QVariant& v);
void ArraySizeChanged(int size);
@@ -445,27 +447,27 @@ private slots:
/**
* @brief Slot when a keyframe's time changes to keep the keyframes correctly sorted by time
*/
void KeyframeTimeChanged();
void InvalidateFromKeyframeTimeChange();
/**
* @brief Slot when a keyframe's value changes to signal that the cache needs updating
*/
void KeyframeValueChanged();
void InvalidateFromKeyframeValueChange();
/**
* @brief Slot when a keyframe's type changes to signal that the cache needs updating
*/
void KeyframeTypeChanged();
void InvalidateFromKeyframeTypeChanged();
/**
* @brief Slot when a keyframe's bezier in value changes to signal that the cache needs updating
*/
void KeyframeBezierInChanged();
void InvalidateFromKeyframeBezierInChange();
/**
* @brief Slot when a keyframe's bezier out value changes to signal that the cache needs updating
*/
void KeyframeBezierOutChanged();
void InvalidateFromKeyframeBezierOutChange();
};
@@ -77,6 +77,7 @@ void NodeParamViewKeyframeControl::SetInput(NodeInput *input, int element)
disconnect(input_, &NodeInput::KeyframeEnableChanged, enable_key_btn_, &QPushButton::setChecked);
disconnect(input_, &NodeInput::KeyframeAdded, this, &NodeParamViewKeyframeControl::UpdateState);
disconnect(input_, &NodeInput::KeyframeRemoved, this, &NodeParamViewKeyframeControl::UpdateState);
disconnect(input_, &NodeInput::KeyframeTimeChanged, this, &NodeParamViewKeyframeControl::UpdateState);
}
input_ = input;
@@ -93,6 +94,7 @@ void NodeParamViewKeyframeControl::SetInput(NodeInput *input, int element)
connect(input_, &NodeInput::KeyframeEnableChanged, enable_key_btn_, &QPushButton::setChecked);
connect(input_, &NodeInput::KeyframeAdded, this, &NodeParamViewKeyframeControl::UpdateState);
connect(input_, &NodeInput::KeyframeRemoved, this, &NodeParamViewKeyframeControl::UpdateState);
connect(input_, &NodeInput::KeyframeTimeChanged, this, &NodeParamViewKeyframeControl::UpdateState);
}
}