QMap<QString, QImage> EffectStackEdit::iconCache;
-EffectStackEdit::EffectStackEdit(QFrame* frame, QWidget *parent): QObject(parent) {
+EffectStackEdit::EffectStackEdit(QFrame* frame, QWidget *parent): QObject(parent), m_in(0), m_out(0) {
QScrollArea *area;
QVBoxLayout *vbox1 = new QVBoxLayout(frame);
QVBoxLayout *vbox2 = new QVBoxLayout(frame);
m_profile = profile;
}
-void EffectStackEdit::transferParamDesc(const QDomElement& d, int , int) {
+void EffectStackEdit::transferParamDesc(const QDomElement& d, int in, int out) {
kDebug() << "in";
params = d;
-
+ m_in = in;
+ m_out = out;
clearAllItems();
if (params.isNull()) return;
} else if (type == "geometry") {
Geometryval *geo = new Geometryval(m_profile);
connect(geo, SIGNAL(parameterChanged()), this, SLOT(collectAllParameters()));
+ connect(geo, SIGNAL(seekToPos(int)), this, SLOT(slotSeekToPos(int)));
geo->setupParam(pa, minFrame, maxFrame);
vbox->addWidget(geo);
valueItems[paramName+"geometry"] = geo;
}
}
+void EffectStackEdit::slotSeekToPos(int pos) {
+ emit seekTimeline(m_in + pos);
+}
+
wipeInfo EffectStackEdit::getWipeInfo(QString value) {
wipeInfo info;
QString start = value.section(";", 0, 0);
wipeInfo getWipeInfo(QString value);
QString getWipeString(wipeInfo info);
MltVideoProfile m_profile;
+ int m_in;
+ int m_out;
public slots:
void transferParamDesc(const QDomElement&, int , int);
void slotSliderMoved(int);
void collectAllParameters();
+private slots:
+ void slotSeekToPos(int);
+
signals:
void parameterChanged(const QDomElement&, const QDomElement&);
+ void seekTimeline(int);
};
#endif
#include "graphicsscenerectmove.h"
#include "geometryval.h"
+#include "kdenlivesettings.h"
Geometryval::Geometryval(const MltVideoProfile profile, QWidget* parent): QWidget(parent), m_profile(profile) {
ui.setupUi(this);
m_alignMenu->addAction(i18n("Top"), this, SLOT(slotAlignTop()));
m_alignMenu->addAction(i18n("Bottom"), this, SLOT(slotAlignBottom()));
+
+ m_syncAction = configMenu->addAction(i18n("Sync timeline cursor"), this, SLOT(slotSyncCursor()));
+ m_syncAction->setCheckable(true);
+ m_syncAction->setChecked(KdenliveSettings::transitionfollowcursor());
+
//scene->setSceneRect(0, 0, profile.width * 2, profile.height * 2);
//view->fitInView(m_frameBorder, Qt::KeepAspectRatio);
const double sc = 100.0 / profile.height * 0.8;
emit parameterChanged();
}
+void Geometryval::slotSyncCursor() {
+ KdenliveSettings::setTransitionfollowcursor(m_syncAction->isChecked());
+}
+
void Geometryval::slotPositionChanged(int pos) {
+ if (KdenliveSettings::transitionfollowcursor()) emit seekToPos(pos);
ui.spinPos->setValue(pos);
m_helper->setValue(pos);
Mlt::GeometryItem item;
QGraphicsPathItem *m_path;
QMenu *m_scaleMenu;
QMenu *m_alignMenu;
+ QAction *m_syncAction;
void updateTransitionPath();
void slotAlignCenter();
void slotAlignHCenter();
void slotAlignVCenter();
+ void slotSyncCursor();
signals:
void parameterChanged();
+ void seekToPos(int);
};
#endif
//thumbnailer.prepareThumbnailsCall(imagelist);
} else if (name == "composite") {
- paramList.append(quickParameterFill(ret, "Geometry", "geometry", "geometry", "0%,0%:100%x100%:100;-1=0%,0%:100%x100%:100", "-500;-500;-500;-500;0", "500;500;500;500;100"));
+ paramList.append(quickParameterFill(ret, "Geometry", "geometry", "geometry", "0%,0%:100%x100%:100", "-500;-500;-500;-500;0", "500;500;500;500;100"));
paramList.append(quickParameterFill(ret, "Distort", "distort", "bool", "1", "1", "1"));
tname.appendChild(ret.createTextNode("Composite"));
QDomDocument ret1;
<default>true</default>
</entry>
+ <entry name="transitionfollowcursor" type="Bool">
+ <label>When editing a composite transition, move timeline cursor for better preview.</label>
+ <default>true</default>
+ </entry>
+
</group>
</kcfg>
\ No newline at end of file
disconnect(effectStack, SIGNAL(refreshEffectStack(ClipItem*)), m_activeTimeline->projectView(), SLOT(slotRefreshEffects(ClipItem*)));
disconnect(effectStack, SIGNAL(reloadEffects()), this, SLOT(slotReloadEffects()));
disconnect(transitionConfig, SIGNAL(transitionUpdated(Transition *, QDomElement)), trackView->projectView() , SLOT(slotTransitionUpdated(Transition *, QDomElement)));
+ disconnect(transitionConfig, SIGNAL(seekTimeline(int)), trackView->projectView() , SLOT(setCursorPos(int)));
disconnect(m_activeTimeline->projectView(), SIGNAL(activateDocumentMonitor()), m_projectMonitor, SLOT(activateMonitor()));
effectStack->clear();
}
connect(effectStack, SIGNAL(changeEffectPosition(ClipItem*, int, int)), trackView->projectView(), SLOT(slotChangeEffectPosition(ClipItem*, int, int)));
connect(effectStack, SIGNAL(refreshEffectStack(ClipItem*)), trackView->projectView(), SLOT(slotRefreshEffects(ClipItem*)));
connect(transitionConfig, SIGNAL(transitionUpdated(Transition *, QDomElement)), trackView->projectView() , SLOT(slotTransitionUpdated(Transition *, QDomElement)));
+ connect(transitionConfig, SIGNAL(seekTimeline(int)), trackView->projectView() , SLOT(setCursorPos(int)));
connect(effectStack, SIGNAL(reloadEffects()), this, SLOT(slotReloadEffects()));
connect(trackView->projectView(), SIGNAL(activateDocumentMonitor()), m_projectMonitor, SLOT(activateMonitor()));
#include "transition.h"
#include "effectslist.h"
#include "effectstackedit.h"
+#include "kdenlivesettings.h"
#include "mainwindow.h"
TransitionSettings::TransitionSettings(QWidget* parent): QWidget(parent) {
ui.setupUi(this);
effectEdit = new EffectStackEdit(ui.frame, this);
+ connect(effectEdit, SIGNAL(seekTimeline(int)), this, SIGNAL(seekTimeline(int)));
setEnabled(false);
ui.listWidget->addItems(MainWindow::transitions.effectNames());
kDebug() << MainWindow::transitions.effectNames().size();
if (reinit) {
QDomElement newTransition = MainWindow::transitions.getEffectByName(ui.listWidget->currentItem()->text());
slotUpdateEffectParams(e, newTransition);
- emit transferParamDesc(newTransition, 0, 0);
+ emit transferParamDesc(newTransition, m_usedTransition->startPos().frames(KdenliveSettings::project_fps()), m_usedTransition->endPos().frames(KdenliveSettings::project_fps()));
} else {
//slotUpdateEffectParams(e, e);
- emit transferParamDesc(e, 0, 0);
+ emit transferParamDesc(e, m_usedTransition->startPos().frames(KdenliveSettings::project_fps()), m_usedTransition->endPos().frames(KdenliveSettings::project_fps()));
}
}
signals:
void transitionUpdated(Transition *, QDomElement);
void transferParamDesc(const QDomElement&, int , int);
+ void seekTimeline(int);
};
#endif