diff --git a/effects/audio/paneffect.cpp b/effects/audio/paneffect.cpp index df34eedb6..c8065cdce 100644 --- a/effects/audio/paneffect.cpp +++ b/effects/audio/paneffect.cpp @@ -20,14 +20,6 @@ PanEffect::PanEffect(Clip* c) : Effect(c, EFFECT_TYPE_AUDIO, AUDIO_PAN_EFFECT) { connect(pan_val, SIGNAL(changed()), this, SLOT(field_changed())); } -void PanEffect::refresh() {} - -Effect* PanEffect::copy(Clip* c) { - PanEffect* p = new PanEffect(c); - copy_field_keyframes(p); - return p; -} - void PanEffect::process_audio(quint8 *samples, int nb_bytes) { double pval = pan_val->get_double_value(-1); if (pval != 0) { diff --git a/effects/audio/paneffect.h b/effects/audio/paneffect.h index 1386497d0..701239ba1 100644 --- a/effects/audio/paneffect.h +++ b/effects/audio/paneffect.h @@ -5,10 +5,8 @@ class PanEffect : public Effect { public: - PanEffect(Clip* c); - void refresh(); - void process_audio(quint8* samples, int nb_bytes); - Effect* copy(Clip* c); + PanEffect(Clip* c); + void process_audio(quint8* samples, int nb_bytes); EffectField* pan_val; }; diff --git a/effects/audio/volumeeffect.cpp b/effects/audio/volumeeffect.cpp index 5f7c25fb5..d089ca62e 100644 --- a/effects/audio/volumeeffect.cpp +++ b/effects/audio/volumeeffect.cpp @@ -21,14 +21,6 @@ VolumeEffect::VolumeEffect(Clip* c) : Effect(c, EFFECT_TYPE_AUDIO, AUDIO_VOLUME_ connect(volume_val, SIGNAL(changed()), this, SLOT(field_changed())); } -void VolumeEffect::refresh() {} - -Effect* VolumeEffect::copy(Clip* c) { - VolumeEffect* v = new VolumeEffect(c); - copy_field_keyframes(v); - return v; -} - void VolumeEffect::process_audio(quint8* samples, int nb_bytes) { double vol_val = volume_val->get_double_value(-1); if (vol_val != 100) { diff --git a/effects/audio/volumeeffect.h b/effects/audio/volumeeffect.h index 8757f32c1..9599d1ffe 100644 --- a/effects/audio/volumeeffect.h +++ b/effects/audio/volumeeffect.h @@ -5,10 +5,8 @@ class VolumeEffect : public Effect { public: - VolumeEffect(Clip* c); - void refresh(); - void process_audio(quint8* samples, int nb_bytes); - Effect* copy(Clip* c); + VolumeEffect(Clip* c); + void process_audio(quint8* samples, int nb_bytes); EffectField* volume_val; }; diff --git a/effects/effect.cpp b/effects/effect.cpp index a67e6894b..95bfaf699 100644 --- a/effects/effect.cpp +++ b/effects/effect.cpp @@ -101,10 +101,12 @@ Effect::~Effect() { void Effect::copy_field_keyframes(Effect* e) { for (int i=0;irows.at(i)->keyframing = rows.at(i)->keyframing; e->rows.at(i)->keyframe_times = rows.at(i)->keyframe_times; e->rows.at(i)->keyframe_types = rows.at(i)->keyframe_types; for (int j=0;jfieldCount();j++) { EffectField* field = row->field(j); + e->rows.at(i)->field(j)->set_current_data(field->get_current_data()); e->rows.at(i)->field(j)->keyframe_data = field->keyframe_data; } } @@ -229,7 +231,12 @@ void Effect::save(QXmlStreamWriter* stream) { } } -Effect* Effect::copy(Clip*) {return NULL;} +Effect* Effect::copy(Clip* c) { + Effect* copy = create_effect(id, c); + copy_field_keyframes(copy); + return copy; +} + void Effect::process_image(long, QImage&) {} void Effect::process_gl(long, QOpenGLShaderProgram&, int*, int*) {} void Effect::process_audio(uint8_t*, int) {} @@ -364,6 +371,17 @@ QVariant EffectField::get_current_data() { return QVariant(); } +void EffectField::set_current_data(const QVariant& data) { + switch (type) { + case EFFECT_FIELD_DOUBLE: return static_cast(ui_element)->set_value(data.toDouble(), false); break; + case EFFECT_FIELD_COLOR: return static_cast(ui_element)->set_color(data.value()); break; + case EFFECT_FIELD_STRING: return static_cast(ui_element)->setPlainText(data.toString()); break; + case EFFECT_FIELD_BOOL: return static_cast(ui_element)->setChecked(data.toBool()); break; + case EFFECT_FIELD_COMBO: return static_cast(ui_element)->setCurrentIndexEx(data.toInt()); break; + case EFFECT_FIELD_FONT: return static_cast(ui_element)->setCurrentTextEx(data.toString()); break; + } +} + void EffectField::set_keyframe_data(int i) { if (i == -1) { keyframe_data.append(get_current_data()); diff --git a/effects/effect.h b/effects/effect.h index 65b6dd6b4..e90e29ba1 100644 --- a/effects/effect.h +++ b/effects/effect.h @@ -61,6 +61,7 @@ public: int type; QVariant get_current_data(); + void set_current_data(const QVariant&); void set_keyframe_data(int i); void get_keyframe_data(long frame, int* before, int *after, double* d); void validate_keyframe_data(long frame); @@ -151,7 +152,7 @@ public: virtual void refresh(); - virtual Effect* copy(Clip* c); + Effect* copy(Clip* c); void copy_field_keyframes(Effect *e); void load(QXmlStreamReader* stream); diff --git a/effects/video/inverteffect.cpp b/effects/video/inverteffect.cpp index 581eda38d..cf9a1dbf2 100644 --- a/effects/video/inverteffect.cpp +++ b/effects/video/inverteffect.cpp @@ -22,12 +22,6 @@ InvertEffect::InvertEffect(Clip* c) : Effect(c, EFFECT_TYPE_VIDEO, VIDEO_INVERT_ connect(amount_val, SIGNAL(changed()), this, SLOT(field_changed())); } -Effect* InvertEffect::copy(Clip* c) { - InvertEffect* i = new InvertEffect(c); - copy_field_keyframes(i); - return i; -} - void InvertEffect::process_gl(long p, QOpenGLShaderProgram& shader_prog, int* anchor_x, int* anchor_y) { double value = amount_val->get_double_value(p)*0.01; diff --git a/effects/video/inverteffect.h b/effects/video/inverteffect.h index 05565637c..fa46f8ea3 100644 --- a/effects/video/inverteffect.h +++ b/effects/video/inverteffect.h @@ -9,8 +9,7 @@ class InvertEffect : public Effect { Q_OBJECT public: InvertEffect(Clip* c); - void process_gl(long p, QOpenGLShaderProgram& shader_prog, int *anchor_x, int *anchor_y); - Effect* copy(Clip *c); + void process_gl(long p, QOpenGLShaderProgram& shader_prog, int *anchor_x, int *anchor_y); EffectField* amount_val; private: diff --git a/effects/video/shakeeffect.cpp b/effects/video/shakeeffect.cpp index 77ca62da0..4176acd94 100644 --- a/effects/video/shakeeffect.cpp +++ b/effects/video/shakeeffect.cpp @@ -49,12 +49,6 @@ void ShakeEffect::refresh() { } } -Effect* ShakeEffect::copy(Clip* c) { - ShakeEffect* e = new ShakeEffect(c); - copy_field_keyframes(e); - return e; -} - void ShakeEffect::process_gl(long p, QOpenGLShaderProgram&, int*, int*) { if (shake_progress > shake_limit) { double ival = intensity_val->get_double_value(p); diff --git a/effects/video/shakeeffect.h b/effects/video/shakeeffect.h index e18f704cb..d5f4725c3 100644 --- a/effects/video/shakeeffect.h +++ b/effects/video/shakeeffect.h @@ -7,8 +7,7 @@ class ShakeEffect : public Effect { Q_OBJECT public: ShakeEffect(Clip* c); - void process_gl(long p, QOpenGLShaderProgram& shader_prog, int* anchor_x, int* anchor_y); - Effect* copy(Clip *c); + void process_gl(long p, QOpenGLShaderProgram& shader_prog, int* anchor_x, int* anchor_y); EffectField* intensity_val; EffectField* rotation_val; diff --git a/effects/video/texteffect.cpp b/effects/video/texteffect.cpp index acec66314..8c058a350 100644 --- a/effects/video/texteffect.cpp +++ b/effects/video/texteffect.cpp @@ -357,9 +357,3 @@ void TextEffect::process_image(long frame, QImage& img) { p.setBrush(set_color_button->get_color_value(frame)); p.drawPath(path); } - -Effect* TextEffect::copy(Clip* c) { - TextEffect* e = new TextEffect(c); - copy_field_keyframes(e); - return e; -} diff --git a/effects/video/texteffect.h b/effects/video/texteffect.h index 919d72bf9..b22173d50 100644 --- a/effects/video/texteffect.h +++ b/effects/video/texteffect.h @@ -9,8 +9,7 @@ class TextEffect : public Effect { Q_OBJECT public: TextEffect(Clip* c); - void process_image(long frame, QImage& img); - Effect* copy(Clip* c); + void process_image(long frame, QImage& img); EffectField* text_val; EffectField* size_val; diff --git a/effects/video/transformeffect.cpp b/effects/video/transformeffect.cpp index 4a413e647..9d189c39e 100644 --- a/effects/video/transformeffect.cpp +++ b/effects/video/transformeffect.cpp @@ -78,12 +78,6 @@ TransformEffect::TransformEffect(Clip* c) : Effect(c, EFFECT_TYPE_VIDEO, VIDEO_T connect(uniform_scale_field, SIGNAL(toggled(bool)), this, SLOT(toggle_uniform_scale(bool))); } -Effect* TransformEffect::copy(Clip* c) { - TransformEffect* t = new TransformEffect(c); - copy_field_keyframes(t); - return t; -} - void TransformEffect::refresh() { if (parent_clip->sequence != NULL) { double default_pos_x = parent_clip->sequence->width/2; diff --git a/effects/video/transformeffect.h b/effects/video/transformeffect.h index 7eaf485b4..1f5d06672 100644 --- a/effects/video/transformeffect.h +++ b/effects/video/transformeffect.h @@ -8,8 +8,7 @@ class TransformEffect : public Effect { public: TransformEffect(Clip* c); void refresh(); - void process_gl(long p, QOpenGLShaderProgram& shader_prog, int* anchor_x, int* anchor_y); - Effect* copy(Clip *c); + void process_gl(long p, QOpenGLShaderProgram& shader_prog, int* anchor_x, int* anchor_y); EffectField* position_x; EffectField* position_y; diff --git a/panels/effectcontrols.cpp b/panels/effectcontrols.cpp index 83e15ebd7..e5b904767 100644 --- a/panels/effectcontrols.cpp +++ b/panels/effectcontrols.cpp @@ -283,7 +283,7 @@ bool EffectControls::is_focused() { EffectsArea::EffectsArea(QWidget* parent) : QWidget(parent) {} -void EffectsArea::resizeEvent(QResizeEvent *event) { +void EffectsArea::resizeEvent(QResizeEvent*) { parent_widget->setMinimumWidth(sizeHint().width()); keyframe_area->setMinimumHeight(height() - header->height()); }