fixed the graph editor

This commit is contained in:
itsmattkc
2019-03-14 09:35:50 +11:00
parent 7b7ffc84d2
commit c6a4b9e8d6
5 changed files with 54 additions and 42 deletions
+10
View File
@@ -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)
+19 -5
View File
@@ -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
View File
@@ -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());
+5 -5
View File
@@ -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);
};
-1
View File
@@ -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;