From 227db9d6530e2cee20817afd630877b7846fc1b6 Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Fri, 27 Dec 2019 02:41:31 +1100 Subject: [PATCH] updated ParamPanel to be able to be connected with ViewerPanel and TimelinePanel --- app/panel/param/param.cpp | 6 +++ app/panel/param/param.h | 5 +++ app/project/item/sequence/sequence.cpp | 10 ++++- app/widget/nodeparamview/nodeparamview.cpp | 38 ++++++++++++------- app/widget/nodeparamview/nodeparamview.h | 9 ++++- .../nodeparamview/nodeparamviewitem.cpp | 7 +++- .../nodeparamviewwidgetbridge.cpp | 28 +++++++------- 7 files changed, 70 insertions(+), 33 deletions(-) diff --git a/app/panel/param/param.cpp b/app/panel/param/param.cpp index ce0810666..aadfe19d2 100644 --- a/app/panel/param/param.cpp +++ b/app/panel/param/param.cpp @@ -27,6 +27,7 @@ ParamPanel::ParamPanel(QWidget* parent) : setObjectName("ParamPanel"); view_ = new NodeParamView(this); + connect(view_, &NodeParamView::TimeChanged, this, &ParamPanel::TimeChanged); setWidget(view_); @@ -50,6 +51,11 @@ void ParamPanel::SetNodes(QList nodes) Retranslate(); } +void ParamPanel::SetTime(const int64_t ×tamp) +{ + view_->SetTime(timestamp); +} + void ParamPanel::changeEvent(QEvent *e) { if (e->type() == QEvent::LanguageChange) { diff --git a/app/panel/param/param.h b/app/panel/param/param.h index 07250453c..9aff4c9e0 100644 --- a/app/panel/param/param.h +++ b/app/panel/param/param.h @@ -37,6 +37,11 @@ public: public slots: void SetNodes(QList nodes); + void SetTime(const int64_t& timestamp); + +signals: + void TimeChanged(const int64_t& timestamp); + protected: virtual void changeEvent(QEvent* e) override; diff --git a/app/project/item/sequence/sequence.cpp b/app/project/item/sequence/sequence.cpp index 7a14bc8f9..d8645b4b6 100644 --- a/app/project/item/sequence/sequence.cpp +++ b/app/project/item/sequence/sequence.cpp @@ -26,6 +26,7 @@ #include "common/timecodefunctions.h" #include "panel/panelmanager.h" #include "panel/node/node.h" +#include "panel/param/param.h" #include "panel/timeline/timeline.h" #include "panel/viewer/viewer.h" #include "ui/icons/icons.h" @@ -43,13 +44,18 @@ void Sequence::Open(SequencePtr sequence) ViewerPanel* viewer_panel = PanelManager::instance()->MostRecentlyFocused(); TimelinePanel* timeline_panel = PanelManager::instance()->MostRecentlyFocused(); NodePanel* node_panel = PanelManager::instance()->MostRecentlyFocused(); + ParamPanel* param_panel = PanelManager::instance()->MostRecentlyFocused(); viewer_panel->ConnectViewerNode(sequence->viewer_output_); timeline_panel->ConnectTimelineNode(sequence->timeline_output_); node_panel->SetGraph(sequence.get()); - connect(timeline_panel, SIGNAL(TimeChanged(const int64_t&)), viewer_panel, SLOT(SetTime(const int64_t&))); - connect(viewer_panel, SIGNAL(TimeChanged(const int64_t&)), timeline_panel, SLOT(SetTime(const int64_t&))); + connect(timeline_panel, &TimelinePanel::TimeChanged, param_panel, &ParamPanel::SetTime); + connect(timeline_panel, &TimelinePanel::TimeChanged, viewer_panel, &ViewerPanel::SetTime); + connect(viewer_panel, &ViewerPanel::TimeChanged, param_panel, &ParamPanel::SetTime); + connect(viewer_panel, &ViewerPanel::TimeChanged, timeline_panel, &TimelinePanel::SetTime); + connect(param_panel, &ParamPanel::TimeChanged, viewer_panel, &ViewerPanel::SetTime); + connect(param_panel, &ParamPanel::TimeChanged, timeline_panel, &TimelinePanel::SetTime); } void Sequence::add_default_nodes() diff --git a/app/widget/nodeparamview/nodeparamview.cpp b/app/widget/nodeparamview/nodeparamview.cpp index 98f1e0c31..80cd55238 100644 --- a/app/widget/nodeparamview/nodeparamview.cpp +++ b/app/widget/nodeparamview/nodeparamview.cpp @@ -69,15 +69,18 @@ NodeParamView::NodeParamView(QWidget *parent) : keyframe_area_layout->addWidget(keyframe_view_); // Connect ruler and keyframe view together - connect(ruler_, SIGNAL(TimeChanged(const int64_t&)), keyframe_view_, SLOT(SetTime(const int64_t&))); - connect(keyframe_view_, SIGNAL(TimeChanged(const int64_t&)), ruler_, SLOT(SetTime(const int64_t&))); - connect(ruler_, SIGNAL(TimeChanged(const int64_t&)), this, SLOT(RulerTimeChanged(const int64_t&))); - connect(keyframe_view_, SIGNAL(TimeChanged(const int64_t&)), this, SLOT(RulerTimeChanged(const int64_t&))); + connect(ruler_, &TimeRuler::TimeChanged, keyframe_view_, &KeyframeView::SetTime); + connect(keyframe_view_, &KeyframeView::TimeChanged, ruler_, &TimeRuler::SetTime); + connect(ruler_, &TimeRuler::TimeChanged, this, &NodeParamView::RulerTimeChanged); + connect(keyframe_view_, &KeyframeView::TimeChanged, this, &NodeParamView::RulerTimeChanged); splitter->addWidget(keyframe_area); // Disable collapsing param view (but collapsing keyframe view is permitted) splitter->setCollapsible(0, false); + + // Set a default scale - FIXME: Hardcoded + SetScale(120); } void NodeParamView::SetNodes(QList nodes) @@ -101,9 +104,9 @@ void NodeParamView::SetNodes(QList nodes) // Insert the widget before the stretch param_layout_->insertWidget(param_layout_->count() - 1, item); - connect(item, SIGNAL(KeyframeAdded(NodeKeyframePtr, int)), keyframe_view_, SLOT(AddKeyframe(NodeKeyframePtr, int))); - connect(item, SIGNAL(KeyframeRemoved(NodeKeyframePtr)), keyframe_view_, SLOT(RemoveKeyframe(NodeKeyframePtr))); - connect(item, SIGNAL(RequestSetTime(const rational&)), this, SLOT(SetTime(const rational&))); + connect(item, &NodeParamViewItem::KeyframeAdded, keyframe_view_, &KeyframeView::AddKeyframe); + connect(item, &NodeParamViewItem::KeyframeRemoved, keyframe_view_, &KeyframeView::RemoveKeyframe); + connect(item, &NodeParamViewItem::RequestSetTime, this, &NodeParamView::ItemRequestedTimeChanged); items_.append(item); } @@ -135,14 +138,12 @@ void NodeParamView::SetScale(const double& scale) keyframe_view_->SetScale(scale); } -void NodeParamView::SetTime(const rational &time) +void NodeParamView::SetTime(const int64_t ×tamp) { - int64_t timestamp = Timecode::time_to_timestamp(time, keyframe_view_->timebase()); - ruler_->SetTime(timestamp); keyframe_view_->SetTime(timestamp); - UpdateItemTime(time); + UpdateItemTime(timestamp); } void NodeParamView::SetTimebase(const rational &timebase) @@ -151,8 +152,10 @@ void NodeParamView::SetTimebase(const rational &timebase) keyframe_view_->SetTimebase(timebase); } -void NodeParamView::UpdateItemTime(const rational &time) +void NodeParamView::UpdateItemTime(const int64_t ×tamp) { + rational time = Timecode::timestamp_to_time(timestamp, keyframe_view_->timebase()); + foreach (NodeParamViewItem* item, items_) { item->SetTime(time); } @@ -160,7 +163,14 @@ void NodeParamView::UpdateItemTime(const rational &time) void NodeParamView::RulerTimeChanged(const int64_t ×tamp) { - rational time = Timecode::timestamp_to_time(timestamp, keyframe_view_->timebase()); + UpdateItemTime(timestamp); - UpdateItemTime(time); + emit TimeChanged(timestamp); +} + +void NodeParamView::ItemRequestedTimeChanged(const rational &time) +{ + int64_t timestamp = Timecode::time_to_timestamp(time, keyframe_view_->timebase()); + SetTime(timestamp); + emit TimeChanged(timestamp); } diff --git a/app/widget/nodeparamview/nodeparamview.h b/app/widget/nodeparamview/nodeparamview.h index ad1d11db8..5d9a31e6f 100644 --- a/app/widget/nodeparamview/nodeparamview.h +++ b/app/widget/nodeparamview/nodeparamview.h @@ -42,12 +42,15 @@ public: void SetScale(const double &scale); public slots: - void SetTime(const rational& time); + void SetTime(const int64_t& timestamp); + +signals: + void TimeChanged(const int64_t& timestamp); private: void SetTimebase(const rational& timebase); - void UpdateItemTime(const rational& time); + void UpdateItemTime(const int64_t ×tamp); QVBoxLayout* param_layout_; @@ -62,6 +65,8 @@ private: private slots: void RulerTimeChanged(const int64_t& timestamp); + void ItemRequestedTimeChanged(const rational& time); + }; #endif // NODEPARAMVIEW_H diff --git a/app/widget/nodeparamview/nodeparamviewitem.cpp b/app/widget/nodeparamview/nodeparamviewitem.cpp index b0cd81dd8..c3ea054d8 100644 --- a/app/widget/nodeparamview/nodeparamviewitem.cpp +++ b/app/widget/nodeparamview/nodeparamviewitem.cpp @@ -54,7 +54,7 @@ NodeParamViewItem::NodeParamViewItem(Node *node, QWidget *parent) : // FIXME: Revise icon sizing algorithm (share with NodeViewItem) title_bar_collapse_btn_->setIconSize(QSize(fontMetrics().height()/2, fontMetrics().height()/2)); - connect(title_bar_collapse_btn_, SIGNAL(clicked(bool)), this, SLOT(SetExpanded(bool))); + connect(title_bar_collapse_btn_, &QPushButton::clicked, this, &NodeParamViewItem::SetExpanded); title_bar_layout->addWidget(title_bar_collapse_btn_); title_bar_lbl_ = new QLabel(title_bar_); @@ -285,6 +285,11 @@ void NodeParamViewItem::UserToggledKeyframe(bool e) } else if (!e && key) { // Remove a keyframe here new NodeParamRemoveKeyframeCommand(input, key, command); + + // If this was the last keyframe, we'll set the standard value to the value at this time too + if (input->keyframes().size() == 1) { + new NodeParamSetStandardValueCommand(input, key->value(), command); + } } Core::instance()->undo_stack()->pushIfHasChildren(command); diff --git a/app/widget/nodeparamview/nodeparamviewwidgetbridge.cpp b/app/widget/nodeparamview/nodeparamviewwidgetbridge.cpp index f1154727c..fd714fe8d 100644 --- a/app/widget/nodeparamview/nodeparamviewwidgetbridge.cpp +++ b/app/widget/nodeparamview/nodeparamviewwidgetbridge.cpp @@ -136,7 +136,7 @@ void NodeParamViewWidgetBridge::CreateWidgets() slider->SetMaximum(input_->maximum().toLongLong()); } - connect(slider, SIGNAL(ValueChanged(int64_t)), this, SLOT(WidgetCallback())); + connect(slider, &IntegerSlider::ValueChanged, this, &NodeParamViewWidgetBridge::WidgetCallback); widgets_.append(slider); break; @@ -153,7 +153,7 @@ void NodeParamViewWidgetBridge::CreateWidgets() slider->SetMaximum(input_->maximum().toDouble()); } - connect(slider, SIGNAL(ValueChanged(double)), this, SLOT(WidgetCallback())); + connect(slider, &FloatSlider::ValueChanged, this, &NodeParamViewWidgetBridge::WidgetCallback); widgets_.append(slider); break; @@ -162,45 +162,45 @@ void NodeParamViewWidgetBridge::CreateWidgets() { FloatSlider* x_slider = new FloatSlider(); widgets_.append(x_slider); - connect(x_slider, SIGNAL(ValueChanged(double)), this, SLOT(WidgetCallback())); + connect(x_slider, &FloatSlider::ValueChanged, this, &NodeParamViewWidgetBridge::WidgetCallback); FloatSlider* y_slider = new FloatSlider(); widgets_.append(y_slider); - connect(y_slider, SIGNAL(ValueChanged(double)), this, SLOT(WidgetCallback())); + connect(y_slider, &FloatSlider::ValueChanged, this, &NodeParamViewWidgetBridge::WidgetCallback); break; } case NodeParam::kVec3: { FloatSlider* x_slider = new FloatSlider(); widgets_.append(x_slider); - connect(x_slider, SIGNAL(ValueChanged(double)), this, SLOT(WidgetCallback())); + connect(x_slider, &FloatSlider::ValueChanged, this, &NodeParamViewWidgetBridge::WidgetCallback); FloatSlider* y_slider = new FloatSlider(); widgets_.append(y_slider); - connect(y_slider, SIGNAL(ValueChanged(double)), this, SLOT(WidgetCallback())); + connect(y_slider, &FloatSlider::ValueChanged, this, &NodeParamViewWidgetBridge::WidgetCallback); FloatSlider* z_slider = new FloatSlider(); widgets_.append(z_slider); - connect(z_slider, SIGNAL(ValueChanged(double)), this, SLOT(WidgetCallback())); + connect(z_slider, &FloatSlider::ValueChanged, this, &NodeParamViewWidgetBridge::WidgetCallback); break; } case NodeParam::kVec4: { FloatSlider* x_slider = new FloatSlider(); widgets_.append(x_slider); - connect(x_slider, SIGNAL(ValueChanged(double)), this, SLOT(WidgetCallback())); + connect(x_slider, &FloatSlider::ValueChanged, this, &NodeParamViewWidgetBridge::WidgetCallback); FloatSlider* y_slider = new FloatSlider(); widgets_.append(y_slider); - connect(y_slider, SIGNAL(ValueChanged(double)), this, SLOT(WidgetCallback())); + connect(y_slider, &FloatSlider::ValueChanged, this, &NodeParamViewWidgetBridge::WidgetCallback); FloatSlider* z_slider = new FloatSlider(); widgets_.append(z_slider); - connect(z_slider, SIGNAL(ValueChanged(double)), this, SLOT(WidgetCallback())); + connect(z_slider, &FloatSlider::ValueChanged, this, &NodeParamViewWidgetBridge::WidgetCallback); FloatSlider* w_slider = new FloatSlider(); widgets_.append(w_slider); - connect(w_slider, SIGNAL(ValueChanged(double)), this, SLOT(WidgetCallback())); + connect(w_slider, &FloatSlider::ValueChanged, this, &NodeParamViewWidgetBridge::WidgetCallback); break; } case NodeParam::kFile: @@ -213,14 +213,14 @@ void NodeParamViewWidgetBridge::CreateWidgets() { QLineEdit* line_edit = new QLineEdit(); widgets_.append(line_edit); - connect(line_edit, SIGNAL(textEdited(const QString &text)), this, SLOT(WidgetCallback())); + connect(line_edit, &QLineEdit::textEdited, this, &NodeParamViewWidgetBridge::WidgetCallback); break; } case NodeParam::kBoolean: { QCheckBox* check_box = new QCheckBox(); widgets_.append(check_box); - connect(check_box, SIGNAL(toggled(bool)), this, SLOT(WidgetCallback())); + connect(check_box, &QCheckBox::toggled, this, &NodeParamViewWidgetBridge::WidgetCallback); break; } case NodeParam::kFont: @@ -234,7 +234,7 @@ void NodeParamViewWidgetBridge::CreateWidgets() FootageComboBox* footage_combobox = new FootageComboBox(); footage_combobox->SetRoot(static_cast(input_->parentNode()->parent())->project()->root()); - connect(footage_combobox, SIGNAL(FootageChanged(StreamPtr)), this, SLOT(WidgetCallback())); + connect(footage_combobox, &FootageComboBox::FootageChanged, this, &NodeParamViewWidgetBridge::WidgetCallback); widgets_.append(footage_combobox);