started on editing multiple effects at once

This commit is contained in:
itsmattkc
2019-03-15 01:26:46 +11:00
parent ab0052e08e
commit 058e5b25c5
6 changed files with 80 additions and 19 deletions
+7 -1
View File
@@ -31,7 +31,13 @@ void BoolField::UpdateWidgetValue(QWidget *widget, double timecode)
cb->blockSignals(true);
cb->setChecked(GetBoolAt(timecode));
if (qIsNaN(timecode)) {
cb->setTristate(true);
cb->setCheckState(Qt::PartiallyChecked);
} else {
cb->setTristate(false);
cb->setChecked(GetBoolAt(timecode));
}
cb->blockSignals(false);
+5 -1
View File
@@ -86,7 +86,11 @@ QWidget *DoubleField::CreateWidget()
void DoubleField::UpdateWidgetValue(QWidget *widget, double timecode)
{
static_cast<LabelSlider*>(widget)->SetValue(GetDoubleAt(timecode));
if (qIsNaN(timecode)) {
static_cast<LabelSlider*>(widget)->SetValue(qSNaN());
} else {
static_cast<LabelSlider*>(widget)->SetValue(GetDoubleAt(timecode));
}
}
void DoubleField::ValueHasBeenSet()
-3
View File
@@ -179,9 +179,6 @@ void RichTextEffect::redraw(double timecode)
p.translate(-shadow_x_offset, -shadow_y_offset);
clip_rect.translate(shadow_x_offset, shadow_y_offset);
}
td.drawContents(&p, clip_rect);
+15 -13
View File
@@ -133,18 +133,7 @@ void EffectControls::menu_select(QAction* q) {
void EffectControls::update_keyframes() {
for (int i=0;i<open_effects_.size();i++) {
EffectUI* ui = open_effects_.at(i);
Effect* effect = ui->GetEffect();
for (int j=0;j<effect->row_count();j++) {
EffectRow* row = effect->row(j);
for (int k=0;k<row->FieldCount();k++) {
EffectField* field = row->Field(k);
field->UpdateWidgetValue(ui->Widget(j, k), field->Now());
}
}
ui->UpdateFromEffect();
}
headers->update_zoom(zoom);
@@ -607,7 +596,20 @@ 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 we've already opened an effect of this type before
bool already_opened = false;
for (int k=0;k<open_effects_.size();k++) {
if (open_effects_.at(k)->GetEffect()->meta == c->effects.at(j)->meta) {
open_effects_.at(k)->AddAdditionalEffect(c->effects.at(j).get());
already_opened = true;
break;
}
}
if (!already_opened) {
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.
+46
View File
@@ -83,6 +83,11 @@ EffectUI::EffectUI(Effect* e) :
connect(enabled_check, SIGNAL(toggled(bool)), e, SLOT(FieldChanged()));
}
void EffectUI::AddAdditionalEffect(Effect *e)
{
additional_effects_.append(e);
}
Effect *EffectUI::GetEffect()
{
return effect_;
@@ -96,6 +101,47 @@ int EffectUI::GetRowY(int row, QWidget* mapToWidget) {
- title_bar->height();
}
void EffectUI::UpdateFromEffect()
{
Effect* effect = GetEffect();
for (int j=0;j<effect->row_count();j++) {
EffectRow* row = effect->row(j);
for (int k=0;k<row->FieldCount();k++) {
EffectField* field = row->Field(k);
// Check if this UI object is attached to one effect or many
if (additional_effects_.isEmpty()) {
field->UpdateWidgetValue(Widget(j, k), field->Now());
} else {
bool same_value = true;
for (int i=0;i<additional_effects_.size();i++) {
EffectField* previous_field = i > 0 ? additional_effects_.at(i-1)->row(j)->Field(k) : field;
EffectField* additional_field = additional_effects_.at(i)->row(j)->Field(k);
if (additional_field->GetValueAt(additional_field->Now()) != previous_field->GetValueAt(previous_field->Now())) {
same_value = false;
break;
}
}
if (same_value) {
field->UpdateWidgetValue(Widget(j, k), field->Now());
} else {
field->UpdateWidgetValue(Widget(j, k), qSNaN());
}
}
}
}
}
QWidget *EffectUI::Widget(int row, int field)
{
return widgets_.at(row).at(field);
+7 -1
View File
@@ -9,17 +9,23 @@ class EffectUI : public CollapsibleWidget {
public:
EffectUI(Effect* e);
void AddAdditionalEffect(Effect* e);
Effect* GetEffect();
int GetRowY(int row, QWidget *mapToWidget);
QWidget* Widget(int row, int field);
void UpdateFromEffect();
signals:
void CutRequested();
void CopyRequested();
void TitleBarContextMenuRequested(const QPoint&);
private:
QWidget* Widget(int row, int field);
Effect* effect_;
QVector<Effect*> additional_effects_;
QGridLayout* layout_;
QVector<QLabel*> labels_;
QVector< QVector<QWidget*> > widgets_;