connect(endThumbTimer, SIGNAL(timeout()), this, SLOT(slotGetEndThumb()));
connect(this, SIGNAL(getThumb(int, int)), clip->thumbProducer(), SLOT(extractImage(int, int)));
+ //connect(this, SIGNAL(getThumb(int, int)), clip->thumbProducer(), SLOT(getVideoThumbs(int, int)));
+
connect(clip->thumbProducer(), SIGNAL(thumbReady(int, QPixmap)), this, SLOT(slotThumbReady(int, QPixmap)));
connect(clip, SIGNAL(gotAudioData()), this, SLOT(slotGotAudioData()));
QTimer::singleShot(200, this, SLOT(slotFetchThumbs()));
return m_effectList.size();
}
+int ClipItem::hasEffect(const QString &tag, const QString &id) const {
+ return m_effectList.hasEffect(tag, id);
+}
+
QStringList ClipItem::effectNames() {
return m_effectList.effectNames();
}
void setSpeed(const double speed);
double speed() const;
GenTime maxDuration() const;
+ int hasEffect(const QString &tag, const QString &id) const;
protected:
//virtual void mouseMoveEvent(QGraphicsSceneMouseEvent * event);
} else if (m_operationMode == FADEIN) {
// resize fade in effect
ClipItem * item = (ClipItem *) m_dragItem;
- QStringList clipeffects = item->effectNames();
- if (clipeffects.contains(i18n("Fade in"))) {
- int ix = clipeffects.indexOf(i18n("Fade in"));
+ int ix = item->hasEffect("volume", "fadein");
+ if (ix != -1) {
QDomElement oldeffect = item->effectAt(ix);
int start = item->cropStart().frames(m_document->fps());
int end = item->fadeIn();
slotDeleteEffect(item, oldeffect);
} else {
end += start;
- QDomElement effect = MainWindow::audioEffects.getEffectByName("Fade in");
+ QDomElement effect = MainWindow::audioEffects.getEffectByTag("volume", "fadein");
EffectsList::setParameter(effect, "in", QString::number(start));
EffectsList::setParameter(effect, "out", QString::number(end));
slotUpdateClipEffect(item, oldeffect, effect, ix);
}
} else if (item->fadeIn() != 0) {
- QDomElement effect = MainWindow::audioEffects.getEffectByName("Fade in");
+ QDomElement effect = MainWindow::audioEffects.getEffectByTag("volume", "fadein");
int start = item->cropStart().frames(m_document->fps());
int end = item->fadeIn() + start;
EffectsList::setParameter(effect, "in", QString::number(start));
} else if (m_operationMode == FADEOUT) {
// resize fade in effect
ClipItem * item = (ClipItem *) m_dragItem;
- QStringList clipeffects = item->effectNames();
- if (clipeffects.contains(i18n("Fade out"))) {
- int ix = clipeffects.indexOf(i18n("Fade out"));
+ int ix = item->hasEffect("volume", "fadeout");
+ if (ix != -1) {
QDomElement oldeffect = item->effectAt(ix);
int end = (item->duration() + item->cropStart()).frames(m_document->fps());
int start = item->fadeOut();
slotDeleteEffect(item, oldeffect);
} else {
start = end - start;
- QDomElement effect = MainWindow::audioEffects.getEffectByName("Fade out");
+ QDomElement effect = MainWindow::audioEffects.getEffectByTag("volume", "fadeout");
EffectsList::setParameter(effect, "in", QString::number(start));
EffectsList::setParameter(effect, "out", QString::number(end));
slotUpdateClipEffect(item, oldeffect, effect, ix);
}
} else if (item->fadeOut() != 0) {
- QDomElement effect = MainWindow::audioEffects.getEffectByName("Fade out");
+ QDomElement effect = MainWindow::audioEffects.getEffectByTag("volume", "fadeout");
int end = (item->duration() + item->cropStart()).frames(m_document->fps());
int start = end - item->fadeOut();
EffectsList::setParameter(effect, "in", QString::number(start));
if (!id.isEmpty()) for (int i = 0; i < this->size(); ++i) {
QDomElement effect = this->at(i);
- kDebug() << "// SRCH EFFECT; " << id << ", LKING: " << effect.attribute("id");
+ //kDebug() << "// SRCH EFFECT; " << id << ", LKING: " << effect.attribute("id");
if (effect.attribute("id") == id) {
QDomNodeList params = effect.elementsByTagName("parameter");
for (int i = 0; i < params.count(); i++) {
return QDomElement();
}
+int EffectsList::hasEffect(const QString & tag, const QString & id) const {
+ for (int i = 0; i < this->size(); ++i) {
+ QDomElement effect = this->at(i);
+ if (!id.isEmpty()) {
+ if (effect.attribute("id") == id) return i;
+ } else if (!tag.isEmpty() && effect.attribute("tag") == tag) return i;
+ }
+ return -1;
+}
+
+QStringList EffectsList::effectIdInfo(const int ix) const {
+ QStringList info;
+ QDomElement effect = this->at(ix);
+ QDomNode namenode = effect.elementsByTagName("name").item(0);
+ info << namenode.toElement().text().toUtf8().data() << effect.attribute("tag") << effect.attribute("id");
+ return info;
+}
+
QStringList EffectsList::effectNames() {
QStringList list;
for (int i = 0; i < this->size(); ++i) {
return list;
}
-QString EffectsList::getInfo(QString effectName) {
+QString EffectsList::getInfo(const QString & tag, const QString & id) {
QString info;
- QDomElement effect = getEffectByName(effectName);
+ QDomElement effect = getEffectByTag(tag, id);
QDomNode namenode = effect.elementsByTagName("description").item(0);
if (!namenode.isNull()) info = i18n(namenode.toElement().text().toUtf8().data());
namenode = effect.elementsByTagName("author").item(0);
/** Returns an XML version of this Effect.*/
QDomElement getEffectByName(const QString & name) const;
QDomElement getEffectByTag(const QString & tag, const QString & id) const;
+ /** if the list contains effect defined by tag + id, returns effect index, otherwise -1 */
+ int hasEffect(const QString & tag, const QString & id) const;
+ QStringList effectIdInfo(const int ix) const;
QStringList effectNames();
- QString getInfo(QString effectName);
+ QString getInfo(const QString & tag, const QString & id);
QMap <QString, QString> effect(const QString & name);
static bool hasKeyFrames(QDomElement effect);
static void setParameter(QDomElement effect, QString name, QString value);
void EffectsListView::slotUpdateInfo() {
QString info = m_effectsList->currentInfo();
- if (!info.isEmpty()) ui.infopanel->setText(info);
+ ui.infopanel->setText(info);
}
KListWidget *EffectsListView::listView() {
static const int EFFECT_AUDIO = 2;
static const int EFFECT_CUSTOM = 3;
+const int TypeRole = Qt::UserRole;
+const int IdRole = TypeRole + 1;
+
EffectsListWidget::EffectsListWidget(QMenu *menu, QWidget *parent)
: KListWidget(parent), m_menu(menu) {
//setSelectionMode(QAbstractItemView::ExtendedSelection);
void EffectsListWidget::initList() {
clear();
- QStringList names = MainWindow::videoEffects.effectNames();
QListWidgetItem *item;
- foreach(const QString &str, names) {
- item = new QListWidgetItem(str, this);
- item->setData(Qt::UserRole, QString::number((int) EFFECT_VIDEO));
+ QString effectName;
+ QStringList effectInfo;
+ int ct = MainWindow::videoEffects.count();
+ for (int ix = 0; ix < ct; ix ++) {
+ effectInfo = MainWindow::videoEffects.effectIdInfo(ix);
+ if (!effectInfo.isEmpty()) {
+ item = new QListWidgetItem(effectInfo.takeFirst(), this);
+ item->setData(TypeRole, QString::number((int) EFFECT_VIDEO));
+ item->setData(IdRole, effectInfo);
+ }
}
- names = MainWindow::audioEffects.effectNames();
- foreach(const QString &str, names) {
- item = new QListWidgetItem(str, this);
- item->setData(Qt::UserRole, QString::number((int) EFFECT_AUDIO));
+ ct = MainWindow::audioEffects.count();
+ for (int ix = 0; ix < ct; ix ++) {
+ effectInfo = MainWindow::audioEffects.effectIdInfo(ix);
+ if (!effectInfo.isEmpty()) {
+ item = new QListWidgetItem(effectInfo.takeFirst(), this);
+ item->setData(TypeRole, QString::number((int) EFFECT_AUDIO));
+ item->setData(IdRole, effectInfo);
+ }
}
- names = MainWindow::customEffects.effectNames();
- foreach(const QString &str, names) {
- item = new QListWidgetItem(str, this);
- item->setData(Qt::UserRole, QString::number((int) EFFECT_CUSTOM));
+ ct = MainWindow::customEffects.count();
+ for (int ix = 0; ix < ct; ix ++) {
+ effectInfo = MainWindow::customEffects.effectIdInfo(ix);
+ if (!effectInfo.isEmpty()) {
+ item = new QListWidgetItem(effectInfo.takeFirst(), this);
+ item->setData(TypeRole, QString::number((int) EFFECT_CUSTOM));
+ item->setData(IdRole, effectInfo);
+ }
}
}
QDomElement EffectsListWidget::itemEffect(QListWidgetItem *item) {
QDomElement effect;
if (!item) return effect;
- switch (item->data(Qt::UserRole).toInt()) {
+ QStringList effectInfo = item->data(IdRole).toStringList();
+ kDebug() << "// EFFECT SELECTED: " << effectInfo;
+ switch (item->data(TypeRole).toInt()) {
case 1:
- effect = MainWindow::videoEffects.getEffectByName(item->text());
+ effect = MainWindow::videoEffects.getEffectByTag(effectInfo.at(0), effectInfo.at(1));
break;
case 2:
- effect = MainWindow::audioEffects.getEffectByName(item->text());
+ effect = MainWindow::audioEffects.getEffectByTag(effectInfo.at(0), effectInfo.at(1));
break;
default:
- effect = MainWindow::customEffects.getEffectByName(item->text());
+ effect = MainWindow::customEffects.getEffectByTag(effectInfo.at(0), effectInfo.at(1));
break;
}
return effect;
QListWidgetItem *item = currentItem();
if (!item) return QString();
QString info;
- switch (item->data(Qt::UserRole).toInt()) {
+ QStringList effectInfo = item->data(IdRole).toStringList();
+ switch (item->data(TypeRole).toInt()) {
case 1:
- info = MainWindow::videoEffects.getInfo(item->text());
+ info = MainWindow::videoEffects.getInfo(effectInfo.at(0), effectInfo.at(1));
break;
case 2:
- info = MainWindow::audioEffects.getInfo(item->text());
+ info = MainWindow::audioEffects.getInfo(effectInfo.at(0), effectInfo.at(1));
break;
default:
- info = MainWindow::customEffects.getInfo(item->text());
+ info = MainWindow::customEffects.getInfo(effectInfo.at(0), effectInfo.at(1));
break;
}
return info;
const QList <QListWidgetItem *>list = selectedItems();
QDomDocument doc;
foreach(QListWidgetItem *item, list) {
- doc.appendChild(doc.importNode(itemEffect(item), true));
+ QDomElement e = itemEffect(item);
+ if (!e.isNull()) doc.appendChild(doc.importNode(e, true));
}
QByteArray data;
data.append(doc.toString().toUtf8());
//virtual
void EffectsListWidget::contextMenuEvent(QContextMenuEvent * event) {
QListWidgetItem *item = itemAt(event->pos());
- if (item && item->data(Qt::UserRole).toInt() == EFFECT_CUSTOM) m_menu->popup(event->globalPos());
+ if (item && item->data(TypeRole).toInt() == EFFECT_CUSTOM) m_menu->popup(event->globalPos());
}
#include "effectslistwidget.moc"
// build effects menus
QAction *action;
QMenu *videoEffectsMenu = static_cast<QMenu*>(factory()->container("video_effects_menu", this));
+
+ int ix = 0;
QStringList effects = videoEffects.effectNames();
+ QStringList effectInfo;
foreach(const QString &name, effects) {
action = new QAction(name, this);
- action->setData(name);
+ effectInfo = videoEffects.effectIdInfo(ix);
+ action->setData(effectInfo);
videoEffectsMenu->addAction(action);
+ ix++;
}
QMenu *audioEffectsMenu = static_cast<QMenu*>(factory()->container("audio_effects_menu", this));
+
+ ix = 0;
effects = audioEffects.effectNames();
foreach(const QString &name, effects) {
action = new QAction(name, this);
- action->setData(name);
+ effectInfo = audioEffects.effectIdInfo(ix);
+ action->setData(effectInfo);
audioEffectsMenu->addAction(action);
+ ix++;
}
m_customEffectsMenu = static_cast<QMenu*>(factory()->container("custom_effects_menu", this));
effects = customEffects.effectNames();
if (effects.isEmpty()) m_customEffectsMenu->setEnabled(false);
else m_customEffectsMenu->setEnabled(true);
+ ix = 0;
foreach(const QString &name, effects) {
action = new QAction(name, this);
- action->setData(name);
+ effectInfo = videoEffects.effectIdInfo(ix);
+ action->setData(effectInfo);
m_customEffectsMenu->addAction(action);
+ ix++;
}
QMenu *newEffect = new QMenu(this);
void MainWindow::slotAddVideoEffect(QAction *result) {
if (!result) return;
- QDomElement effect = videoEffects.getEffectByName(result->data().toString());
+ QStringList info = result->data().toStringList();
+ if (info.isEmpty()) return;
+ QDomElement effect = videoEffects.getEffectByTag(info.at(1), info.at(2));
slotAddEffect(effect);
}
void MainWindow::slotAddAudioEffect(QAction *result) {
if (!result) return;
- QDomElement effect = audioEffects.getEffectByName(result->data().toString());
+ QStringList info = result->data().toStringList();
+ if (info.isEmpty()) return;
+ QDomElement effect = audioEffects.getEffectByTag(info.at(1), info.at(2));
slotAddEffect(effect);
}
void MainWindow::slotAddCustomEffect(QAction *result) {
if (!result) return;
- if (result->data().toString().isEmpty()) return;
- QDomElement effect = customEffects.getEffectByName(result->data().toString());
+ QStringList info = result->data().toStringList();
+ if (info.isEmpty()) return;
+ QDomElement effect = customEffects.getEffectByTag(info.at(1), info.at(2));
slotAddEffect(effect);
}