wrote handler for #281

This commit is contained in:
itsmattkc
2019-01-09 20:40:45 +11:00
parent d9f173f4dd
commit b7f1fae028
11 changed files with 308 additions and 237 deletions
+30 -42
View File
@@ -2,6 +2,7 @@
#include "mainwindow.h"
#include "panels/panels.h"
#include "panels/effectcontrols.h"
#include "panels/project.h"
#include "project/footage.h"
#include "io/config.h"
@@ -13,6 +14,7 @@
#include "io/previewgenerator.h"
#include "dialogs/loaddialog.h"
#include "project/media.h"
#include "effects/internal/voideffect.h"
#include "debug.h"
#include <QFile>
@@ -32,7 +34,7 @@ LoadThread::LoadThread(LoadDialog* l, bool a) : ld(l), autorecovery(a), cancelle
connect(this, SIGNAL(success()), this, SLOT(success_func()));
connect(this, SIGNAL(error()), this, SLOT(error_func()));
connect(this, SIGNAL(start_create_dual_transition(const TransitionData*,Clip*,Clip*,const EffectMeta*)), this, SLOT(create_dual_transition(const TransitionData*,Clip*,Clip*,const EffectMeta*)));
connect(this, SIGNAL(start_create_effect_ui(QXmlStreamReader*, Clip*, int, const EffectMeta*, long, bool)), this, SLOT(create_effect_ui(QXmlStreamReader*, Clip*, int, const EffectMeta*, long, bool)));
connect(this, SIGNAL(start_create_effect_ui(QXmlStreamReader*, Clip*, int, const QString*, const EffectMeta*, long, bool)), this, SLOT(create_effect_ui(QXmlStreamReader*, Clip*, int, const QString*, const EffectMeta*, long, bool)));
}
const EffectMeta* get_meta_from_name(const QString& name) {
@@ -60,28 +62,10 @@ void LoadThread::load_effect(QXmlStreamReader& stream, Clip* c) {
} else if (attr.name() == "length") {
effect_length = attr.value().toLong();
}
}
// backwards compatibility with 180820
if (stream.name() == "effect" && effect_id != -1) {
switch (effect_id) {
case 0: effect_name = (c->track < 0) ? "Transform" : "Volume"; break;
case 1: effect_name = (c->track < 0) ? "Shake" : "Pan"; break;
case 2: effect_name = (c->track < 0) ? "Text" : "Noise"; break;
case 3: effect_name = (c->track < 0) ? "Solid" : "Tone"; break;
case 4: effect_name = "Invert"; break;
case 5: effect_name = "Chroma Key"; break;
case 6: effect_name = "Gaussian Blur"; break;
case 7: effect_name = "Crop"; break;
case 8: effect_name = "Flip"; break;
case 9: effect_name = "Box Blur"; break;
case 10: effect_name = "Wave"; break;
case 11: effect_name = "Temperature"; break;
}
}
}
// wait for effects to be loaded
effects_loaded.lock();
panel_effect_controls->effects_loaded.lock();
const EffectMeta* meta = NULL;
@@ -90,26 +74,21 @@ void LoadThread::load_effect(QXmlStreamReader& stream, Clip* c) {
meta = get_meta_from_name(effect_name);
}
effects_loaded.unlock();
panel_effect_controls->effects_loaded.unlock();
if (meta == NULL) {
dout << "[WARNING] An effect used by this project is missing. It was not loaded.";
} else {
QString tag = stream.name().toString();
QString tag = stream.name().toString();
int type;
if (tag == "opening") {
type = TA_OPENING_TRANSITION;
} else if (tag == "closing") {
type = TA_CLOSING_TRANSITION;
} else {
type = TA_NO_TRANSITION;
}
int type;
if (tag == "opening") {
type = TA_OPENING_TRANSITION;
} else if (tag == "closing") {
type = TA_CLOSING_TRANSITION;
} else {
type = TA_NO_TRANSITION;
}
emit start_create_effect_ui(&stream, c, type, meta, effect_length, effect_enabled);
waitCond.wait(&mutex);
}
emit start_create_effect_ui(&stream, c, type, &effect_name, meta, effect_length, effect_enabled);
waitCond.wait(&mutex);
}
void LoadThread::read_next(QXmlStreamReader &stream) {
@@ -678,6 +657,7 @@ void LoadThread::create_effect_ui(
QXmlStreamReader* stream,
Clip* c,
int type,
const QString* effect_name,
const EffectMeta* meta,
long effect_length,
bool effect_enabled)
@@ -705,11 +685,19 @@ void LoadThread::create_effect_ui(
if (cancelled) return;
if (type == TA_NO_TRANSITION) {
Effect* e = create_effect(c, meta);
e->set_enabled(effect_enabled);
e->load(*stream);
if (meta == NULL) {
// create void effect
VoidEffect* ve = new VoidEffect(c, *effect_name);
ve->set_enabled(effect_enabled);
ve->load(*stream);
c->effects.append(ve);
} else {
Effect* e = create_effect(c, meta);
e->set_enabled(effect_enabled);
e->load(*stream);
c->effects.append(e);
c->effects.append(e);
}
} else {
int transition_index = create_transition(c, NULL, meta);
Transition* t = c->sequence->transitions.at(transition_index);