started on editing multiple effects at once
This commit is contained in:
@@ -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);
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
@@ -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.
|
||||
|
||||
@@ -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
@@ -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_;
|
||||
|
||||
Reference in New Issue
Block a user