m_effects.at(i)->slotSyncEffectsPos(pos);
}
+void EffectStackView2::slotClipItemUpdate()
+{
+ int inPoint = m_clipref->cropStart().frames(KdenliveSettings::project_fps());
+ int outPoint = m_clipref->cropDuration().frames(KdenliveSettings::project_fps()) + inPoint;
+ for (int i = 0; i < m_effects.count(); i++) {
+ m_effects.at(i)->setRange(inPoint, outPoint);
+ }
+}
+
void EffectStackView2::slotClipItemSelected(ClipItem* c)
{
if (c && !c->isEnabled()) return;
if (c && c == m_clipref) {
-
} else {
+ if (m_clipref) disconnect(m_clipref, SIGNAL(updateRange()), this, SLOT(slotClipItemUpdate()));
m_clipref = c;
if (c) {
+ connect(m_clipref, SIGNAL(updateRange()), this, SLOT(slotClipItemUpdate()));
QString cname = m_clipref->clipName();
if (cname.length() > 30) {
- m_ui.checkAll->setToolTip(i18n("Effects for %1").arg(cname));
+ m_ui.checkAll->setToolTip(i18n("Effects for %1", cname));
cname.truncate(27);
- m_ui.checkAll->setText(i18n("Effects for %1").arg(cname) + "...");
+ m_ui.checkAll->setText(i18n("Effects for %1", cname) + "...");
} else {
m_ui.checkAll->setToolTip(QString());
- m_ui.checkAll->setText(i18n("Effects for %1").arg(cname));
+ m_ui.checkAll->setText(i18n("Effects for %1", cname));
}
m_ui.checkAll->setEnabled(true);
QString size = c->baseClip()->getProperty("frame_size");
m_trackInfo = info;
setEnabled(true);
m_ui.checkAll->setToolTip(QString());
- m_ui.checkAll->setText(i18n("Effects for track %1").arg(info.trackName.isEmpty() ? QString::number(ix) : info.trackName));
+ m_ui.checkAll->setText(i18n("Effects for track %1", info.trackName.isEmpty() ? QString::number(ix) : info.trackName));
m_ui.checkAll->setEnabled(true);
m_trackindex = ix;
setupListView();
// Check drag & drop
currentEffect->installEventFilter( this );
connect(currentEffect, SIGNAL(parameterChanged(const QDomElement, const QDomElement, int)), this , SLOT(slotUpdateEffectParams(const QDomElement, const QDomElement, int)));
- connect(currentEffect, SIGNAL(startFilterJob(QString,QString,QString,QString,QString,QString)), this , SLOT(slotStartFilterJob(QString,QString,QString,QString,QString,QString)));
+ connect(currentEffect, SIGNAL(startFilterJob(QString,QString,QString,QString,const QMap <QString, QString>)), this , SLOT(slotStartFilterJob(QString,QString,QString,QString,const QMap <QString, QString>)));
connect(currentEffect, SIGNAL(deleteEffect(const QDomElement)), this , SLOT(slotDeleteEffect(const QDomElement)));
connect(currentEffect, SIGNAL(reloadEffects()), this , SIGNAL(reloadEffects()));
connect(currentEffect, SIGNAL(resetEffect(int)), this , SLOT(slotResetEffect(int)));
connect(currentEffect, SIGNAL(addEffect(QDomElement)), this , SLOT(slotAddEffect(QDomElement)));
connect(currentEffect, SIGNAL(createRegion(int,KUrl)), this, SLOT(slotCreateRegion(int,KUrl)));
connect(currentEffect, SIGNAL(deleteGroup(QDomDocument)), this , SLOT(slotDeleteGroup(QDomDocument)));
+ connect(currentEffect, SIGNAL(importClipKeyframes()), this, SIGNAL(importClipKeyframes()));
}
void EffectStackView2::slotCheckWheelEventFilter()
QPixmap pixmap;
if (m_draggedEffect) {
QDomElement effect = m_draggedEffect->effect().cloneNode().toElement();
+ if (m_effectMetaInfo.trackMode) {
+ // Keep clip crop start in case we want to paste effect
+ effect.setAttribute("clipstart", 0);
+ }
+ else {
+ // Keep clip crop start in case we want to paste effect
+ effect.setAttribute("clipstart", m_clipref->cropStart().frames(KdenliveSettings::project_fps()));
+ }
doc.appendChild(doc.importNode(effect, true));
pixmap = QPixmap::grabWidget(m_draggedEffect->title);
}
else if (m_draggedGroup) {
doc = m_draggedGroup->effectsData();
+ if (m_effectMetaInfo.trackMode) {
+ doc.documentElement().setAttribute("clipstart", 0);
+ }
+ else {
+ doc.documentElement().setAttribute("clipstart", m_clipref->cropStart().frames(KdenliveSettings::project_fps()));
+ }
pixmap = QPixmap::grabWidget(m_draggedGroup->title());
}
else return;
// Disable all effects
QList <int> indexes;
for (int i = 0; i < m_effects.count(); i++) {
- m_effects.at(i)->slotEnable(disabled, false);
+ m_effects.at(i)->slotDisable(disabled, false);
indexes << m_effects.at(i)->effectIndex();
}
// Take care of groups
else emit changeEffectPosition(m_clipref, -1, indexes, endPos);
}
-void EffectStackView2::slotStartFilterJob(const QString&filterName, const QString&filterParams, const QString&finalFilterName, const QString&consumer, const QString&consumerParams, const QString&properties)
+void EffectStackView2::slotStartFilterJob(const QString&filterName, const QString&filterParams, const QString&consumer, const QString&consumerParams, const QMap <QString, QString> &extraParams)
{
if (!m_clipref) return;
- emit startFilterJob(m_clipref->info(), m_clipref->clipProducer(), filterName, filterParams, finalFilterName, consumer, consumerParams, properties);
+ emit startFilterJob(m_clipref->info(), m_clipref->clipProducer(), filterName, filterParams, consumer, consumerParams, extraParams);
}
void EffectStackView2::slotResetEffect(int ix)
info.startPos = GenTime(-1);
info.track = 0;
}
- else {
+ else if (m_clipref) {
info = m_clipref->info();
}
CollapsibleEffect *current = getEffectByIndex(ix);
if (m_effectMetaInfo.trackMode) {
isSelected = currentEffect->effectIndex() == 1;
}
- else {
+ else if (m_clipref) {
isSelected = currentEffect->effectIndex() == m_clipref->selectedEffectIndex();
}
if (isSelected) currentEffect->setActive(true);
connectGroup(group);
l->insertWidget(groupPos, group);
group->installEventFilter( this );
- group->addGroupEffect(effectToMove);
+ if (effectToMove)
+ group->addGroupEffect(effectToMove);
}
void EffectStackView2::connectGroup(CollapsibleGroup *group)
processDroppedEffect(doc.documentElement(), event);
}
+void EffectStackView2::setKeyframes(const QString data, int maximum)
+{
+ for (int i = 0; i < m_effects.count(); i++) {
+ if (m_effects.at(i)->isActive()) {
+ m_effects.at(i)->setKeyframes(data, maximum);
+ break;
+ }
+ }
+}
+
//static
const QString EffectStackView2::getStyleSheet()
{