fixed the graph editor
This commit is contained in:
@@ -339,6 +339,16 @@ Effect::~Effect() {
|
||||
if (isOpen) {
|
||||
close();
|
||||
}
|
||||
|
||||
// Clear graph editor if it's using one of these rows
|
||||
if (panel_graph_editor != nullptr) {
|
||||
for (int i=0;i<row_count();i++) {
|
||||
if (row(i) == panel_graph_editor->get_row()) {
|
||||
panel_graph_editor->set_row(nullptr);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Effect::AddRow(EffectRow *row)
|
||||
|
||||
@@ -273,11 +273,6 @@ void EffectControls::Clear(bool clear_cache) {
|
||||
// clear existing clips
|
||||
deselect_all_effects(nullptr);
|
||||
|
||||
// clear graph editor
|
||||
if (panel_graph_editor != nullptr) {
|
||||
panel_graph_editor->set_row(nullptr);
|
||||
}
|
||||
|
||||
for (int i=0;i<open_effects_.size();i++) {
|
||||
delete open_effects_.at(i);
|
||||
}
|
||||
@@ -593,6 +588,8 @@ void EffectControls::SetClips(const QVector<Clip*> &clips, int mode)
|
||||
}
|
||||
|
||||
void EffectControls::Load() {
|
||||
bool graph_editor_row_is_still_active = false;
|
||||
|
||||
// load in new clips
|
||||
for (int i=0;i<selected_clips_.size();i++) {
|
||||
Clip* c = selected_clips_.at(i);
|
||||
@@ -610,6 +607,18 @@ void EffectControls::Load() {
|
||||
if (mode_ == kTransitionNone) {
|
||||
for (int j=0;j<c->effects.size();j++) {
|
||||
open_effect(layout, c->effects.at(j).get());
|
||||
|
||||
// Check if one of the open effects contains the row currently active in the graph editor. If not, we'll have
|
||||
// to clear the graph editor later.
|
||||
if (!graph_editor_row_is_still_active) {
|
||||
for (int k=0;k<c->effects.at(j)->row_count();k++) {
|
||||
EffectRow* row = c->effects.at(j)->row(k);
|
||||
if (row == panel_graph_editor->get_row()) {
|
||||
graph_editor_row_is_still_active = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (mode_ == kTransitionOpening && c->opening_transition != nullptr) {
|
||||
open_effect(layout, c->opening_transition.get());
|
||||
@@ -628,6 +637,11 @@ void EffectControls::Load() {
|
||||
QTimer::singleShot(50, this, SLOT(queue_post_update()));
|
||||
}
|
||||
|
||||
// If the graph editor's currently active row is not part of the current effects, clear it
|
||||
if (!graph_editor_row_is_still_active) {
|
||||
panel_graph_editor->set_row(nullptr);
|
||||
}
|
||||
|
||||
UpdateTitle();
|
||||
update_keyframes();
|
||||
}
|
||||
|
||||
+20
-31
@@ -130,6 +130,11 @@ GraphEditor::GraphEditor(QWidget* parent) : Panel(parent), row(nullptr) {
|
||||
Retranslate();
|
||||
}
|
||||
|
||||
EffectRow *GraphEditor::get_row()
|
||||
{
|
||||
return row;
|
||||
}
|
||||
|
||||
void GraphEditor::Retranslate() {
|
||||
setWindowTitle(tr("Graph Editor"));
|
||||
linear_button->setText(tr("Linear"));
|
||||
@@ -144,11 +149,7 @@ void GraphEditor::update_panel() {
|
||||
for (int i=0;i<row->FieldCount();i++) {
|
||||
EffectField* field = row->Field(i);
|
||||
if (field->type() == EffectField::EFFECT_FIELD_DOUBLE) {
|
||||
slider_proxies.at(slider_index)->SetValue(
|
||||
row->Field(i)->GetValueAt(
|
||||
playhead_to_clip_seconds(field->GetParentRow()->GetParentEffect()->parent_clip,
|
||||
olive::ActiveSequence->playhead)).toDouble()
|
||||
);
|
||||
field->UpdateWidgetValue(field_sliders_.at(slider_index), field->Now());
|
||||
slider_index++;
|
||||
}
|
||||
}
|
||||
@@ -160,19 +161,18 @@ void GraphEditor::update_panel() {
|
||||
}
|
||||
|
||||
void GraphEditor::set_row(EffectRow *r) {
|
||||
for (int i=0;i<slider_proxies.size();i++) {
|
||||
delete slider_proxies.at(i);
|
||||
delete slider_proxy_buttons.at(i);
|
||||
for (int i=0;i<field_sliders_.size();i++) {
|
||||
delete field_sliders_.at(i);
|
||||
delete field_enable_buttons.at(i);
|
||||
}
|
||||
slider_proxies.clear();
|
||||
slider_proxy_buttons.clear();
|
||||
slider_proxy_sources.clear();
|
||||
field_sliders_.clear();
|
||||
field_enable_buttons.clear();
|
||||
|
||||
if (row != nullptr) {
|
||||
// clear old row connections
|
||||
disconnect(keyframe_nav, SIGNAL(goto_previous_key()), row, SLOT(goto_previous_key()));
|
||||
disconnect(keyframe_nav, SIGNAL(toggle_key()), row, SLOT(toggle_key()));
|
||||
disconnect(keyframe_nav, SIGNAL(goto_next_key()), row, SLOT(goto_next_key()));
|
||||
disconnect(keyframe_nav, SIGNAL(goto_previous_key()), row, SLOT(GoToPreviousKeyframe()));
|
||||
disconnect(keyframe_nav, SIGNAL(toggle_key()), row, SLOT(ToggleKeyframe()));
|
||||
disconnect(keyframe_nav, SIGNAL(goto_next_key()), row, SLOT(GoToNextKeyframe()));
|
||||
}
|
||||
|
||||
bool found_vals = false;
|
||||
@@ -188,17 +188,14 @@ void GraphEditor::set_row(EffectRow *r) {
|
||||
slider_button->setProperty("field", i);
|
||||
slider_button->setIconSize(slider_button->iconSize()*0.5);
|
||||
connect(slider_button, SIGNAL(toggled(bool)), this, SLOT(set_field_visibility(bool)));
|
||||
slider_proxy_buttons.append(slider_button);
|
||||
field_enable_buttons.append(slider_button);
|
||||
value_layout->addWidget(slider_button);
|
||||
|
||||
LabelSlider* slider = new LabelSlider();
|
||||
LabelSlider* slider = static_cast<LabelSlider*>(field->CreateWidget());
|
||||
slider->SetColor(get_curve_color(i, r->FieldCount()).name());
|
||||
connect(slider, SIGNAL(valueChanged()), this, SLOT(passthrough_slider_value()));
|
||||
slider_proxies.append(slider);
|
||||
field_sliders_.append(slider);
|
||||
value_layout->addWidget(slider);
|
||||
|
||||
//slider_proxy_sources.append(static_cast<LabelSlider*>(field->ui_element));
|
||||
|
||||
found_vals = true;
|
||||
}
|
||||
}
|
||||
@@ -211,9 +208,9 @@ void GraphEditor::set_row(EffectRow *r) {
|
||||
+ " :: " + row->name());
|
||||
header->set_visible_in(r->GetParentEffect()->parent_clip->timeline_in());
|
||||
|
||||
connect(keyframe_nav, SIGNAL(goto_previous_key()), row, SLOT(goto_previous_key()));
|
||||
connect(keyframe_nav, SIGNAL(toggle_key()), row, SLOT(toggle_key()));
|
||||
connect(keyframe_nav, SIGNAL(goto_next_key()), row, SLOT(goto_next_key()));
|
||||
connect(keyframe_nav, SIGNAL(goto_previous_key()), row, SLOT(GoToPreviousKeyframe()));
|
||||
connect(keyframe_nav, SIGNAL(toggle_key()), row, SLOT(ToggleKeyframe()));
|
||||
connect(keyframe_nav, SIGNAL(goto_next_key()), row, SLOT(GoToNextKeyframe()));
|
||||
} else {
|
||||
row = nullptr;
|
||||
current_row_desc->setText(nullptr);
|
||||
@@ -247,14 +244,6 @@ void GraphEditor::set_key_button_enabled(bool e, int type) {
|
||||
hold_button->setChecked(type == EFFECT_KEYFRAME_HOLD);
|
||||
}
|
||||
|
||||
void GraphEditor::passthrough_slider_value() {
|
||||
for (int i=0;i<slider_proxies.size();i++) {
|
||||
if (slider_proxies.at(i) == sender()) {
|
||||
slider_proxy_sources.at(i)->SetValue(slider_proxies.at(i)->value());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void GraphEditor::set_keyframe_type() {
|
||||
linear_button->setChecked(linear_button == sender());
|
||||
bezier_button->setChecked(bezier_button == sender());
|
||||
|
||||
@@ -37,8 +37,10 @@ class GraphEditor : public Panel {
|
||||
public:
|
||||
GraphEditor(QWidget* parent = nullptr);
|
||||
|
||||
void update_panel();
|
||||
EffectRow* get_row();
|
||||
void set_row(EffectRow* r);
|
||||
|
||||
void update_panel();
|
||||
bool view_is_focused();
|
||||
bool view_is_under_mouse();
|
||||
void delete_selected_keys();
|
||||
@@ -50,9 +52,8 @@ private:
|
||||
GraphView* view;
|
||||
TimelineHeader* header;
|
||||
QHBoxLayout* value_layout;
|
||||
QVector<LabelSlider*> slider_proxies;
|
||||
QVector<QPushButton*> slider_proxy_buttons;
|
||||
QVector<LabelSlider*> slider_proxy_sources;
|
||||
QVector<LabelSlider*> field_sliders_;
|
||||
QVector<QPushButton*> field_enable_buttons;
|
||||
QLabel* current_row_desc;
|
||||
EffectRow* row;
|
||||
KeyframeNavigator* keyframe_nav;
|
||||
@@ -61,7 +62,6 @@ private:
|
||||
QPushButton* hold_button;
|
||||
private slots:
|
||||
void set_key_button_enabled(bool e, int type);
|
||||
void passthrough_slider_value();
|
||||
void set_keyframe_type();
|
||||
void set_field_visibility(bool b);
|
||||
};
|
||||
|
||||
@@ -38,7 +38,6 @@
|
||||
#include "ui/rectangleselect.h"
|
||||
#include "global/debug.h"
|
||||
|
||||
|
||||
const double kGraphZoomSpeed = 0.05;
|
||||
const int kGraphSize = 100;
|
||||
const int kBezierHandleSize = 3;
|
||||
|
||||
Reference in New Issue
Block a user