keyframes: implemented deleting keyframes with the delete shortcut

This commit is contained in:
itsmattkc
2020-05-01 17:01:16 +10:00
parent ca323b7bfd
commit e67dabf1ff
12 changed files with 67 additions and 0 deletions
+13
View File
@@ -737,6 +737,19 @@ void NodeInput::remove_keyframe(NodeKeyframePtr key)
emit_time_range(time_affected); emit_time_range(time_affected);
} }
NodeKeyframePtr NodeInput::get_keyframe_shared_ptr_from_raw(NodeKeyframe* raw) const
{
foreach (const KeyframeTrack& track, keyframe_tracks_) {
foreach (NodeKeyframePtr key, track) {
if (key.get() == raw) {
return key;
}
}
}
return nullptr;
}
void NodeInput::KeyframeTimeChanged() void NodeInput::KeyframeTimeChanged()
{ {
NodeKeyframe* key = static_cast<NodeKeyframe*>(sender()); NodeKeyframe* key = static_cast<NodeKeyframe*>(sender());
+5
View File
@@ -172,6 +172,11 @@ public:
*/ */
void remove_keyframe(NodeKeyframePtr key); void remove_keyframe(NodeKeyframePtr key);
/**
* @brief Hacky convenience function to turn a raw pointer into a shared pointer
*/
NodeKeyframePtr get_keyframe_shared_ptr_from_raw(NodeKeyframe *raw) const;
/** /**
* @brief Return whether a keyframe exists at this time * @brief Return whether a keyframe exists at this time
* *
+5
View File
@@ -37,6 +37,11 @@ NodeInput *CurvePanel::GetInput() const
return static_cast<CurveWidget*>(GetTimeBasedWidget())->GetInput(); return static_cast<CurveWidget*>(GetTimeBasedWidget())->GetInput();
} }
void CurvePanel::DeleteSelected()
{
static_cast<CurveWidget*>(GetTimeBasedWidget())->DeleteSelected();
}
void CurvePanel::SetInput(NodeInput *input) void CurvePanel::SetInput(NodeInput *input)
{ {
static_cast<CurveWidget*>(GetTimeBasedWidget())->SetInput(input); static_cast<CurveWidget*>(GetTimeBasedWidget())->SetInput(input);
+2
View File
@@ -34,6 +34,8 @@ public:
NodeInput* GetInput() const; NodeInput* GetInput() const;
virtual void DeleteSelected() override;
public slots: public slots:
void SetInput(NodeInput* input); void SetInput(NodeInput* input);
+5
View File
@@ -59,6 +59,11 @@ void ParamPanel::SetTimestamp(const int64_t &timestamp)
} }
} }
void ParamPanel::DeleteSelected()
{
static_cast<NodeParamView*>(GetTimeBasedWidget())->DeleteSelected();
}
void ParamPanel::Retranslate() void ParamPanel::Retranslate()
{ {
SetTitle(tr("Parameter Editor")); SetTitle(tr("Parameter Editor"));
+2
View File
@@ -38,6 +38,8 @@ public slots:
virtual void SetTimestamp(const int64_t& timestamp) override; virtual void SetTimestamp(const int64_t& timestamp) override;
virtual void DeleteSelected() override;
signals: signals:
void TimeTargetChanged(Node* node); void TimeTargetChanged(Node* node);
+5
View File
@@ -168,6 +168,11 @@ void CurveWidget::SetVerticalScale(const double &vscale)
view_->SetYScale(vscale); view_->SetYScale(vscale);
} }
void CurveWidget::DeleteSelected()
{
view_->DeleteSelected();
}
void CurveWidget::changeEvent(QEvent *e) void CurveWidget::changeEvent(QEvent *e)
{ {
if (e->type() == QEvent::LanguageChange) { if (e->type() == QEvent::LanguageChange) {
+2
View File
@@ -47,6 +47,8 @@ public:
const double& GetVerticalScale(); const double& GetVerticalScale();
void SetVerticalScale(const double& vscale); void SetVerticalScale(const double& vscale);
void DeleteSelected();
protected: protected:
virtual void changeEvent(QEvent *) override; virtual void changeEvent(QEvent *) override;
@@ -73,6 +73,25 @@ void KeyframeViewBase::SetYScale(const double &y_scale)
} }
} }
void KeyframeViewBase::DeleteSelected()
{
QUndoCommand* command = new QUndoCommand();
QMap<NodeKeyframe*, KeyframeViewItem*>::const_iterator i;
for (i=item_map_.constBegin(); i!=item_map_.constEnd(); i++) {
if (i.value()->isSelected()) {
NodeInput* input_parent = i.key()->parent();
new NodeParamRemoveKeyframeCommand(input_parent,
input_parent->get_keyframe_shared_ptr_from_raw(i.key()),
command);
}
}
Core::instance()->undo_stack()->pushIfHasChildren(command);
}
void KeyframeViewBase::RemoveKeyframe(NodeKeyframePtr key) void KeyframeViewBase::RemoveKeyframe(NodeKeyframePtr key)
{ {
KeyframeAboutToBeRemoved(key.get()); KeyframeAboutToBeRemoved(key.get());
@@ -40,6 +40,8 @@ public:
const double& GetYScale() const; const double& GetYScale() const;
void SetYScale(const double& y_scale); void SetYScale(const double& y_scale);
void DeleteSelected();
public slots: public slots:
void RemoveKeyframe(NodeKeyframePtr key); void RemoveKeyframe(NodeKeyframePtr key);
@@ -225,6 +225,11 @@ Node *NodeParamView::GetTimeTarget() const
return keyframe_view_->GetTimeTarget(); return keyframe_view_->GetTimeTarget();
} }
void NodeParamView::DeleteSelected()
{
keyframe_view_->DeleteSelected();
}
void NodeParamView::UpdateItemTime(const int64_t &timestamp) void NodeParamView::UpdateItemTime(const int64_t &timestamp)
{ {
rational time = Timecode::timestamp_to_time(timestamp, keyframe_view_->timebase()); rational time = Timecode::timestamp_to_time(timestamp, keyframe_view_->timebase());
+2
View File
@@ -42,6 +42,8 @@ public:
Node* GetTimeTarget() const; Node* GetTimeTarget() const;
void DeleteSelected();
signals: signals:
void InputDoubleClicked(NodeInput* input); void InputDoubleClicked(NodeInput* input);