]> git.sesse.net Git - kdenlive/commitdiff
Add option to move timeline cursor when editing a composite transition for better...
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Mon, 22 Sep 2008 00:53:51 +0000 (00:53 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Mon, 22 Sep 2008 00:53:51 +0000 (00:53 +0000)
svn path=/branches/KDE4/; revision=2400

src/effectstackedit.cpp
src/effectstackedit.h
src/geometryval.cpp
src/geometryval.h
src/initeffects.cpp
src/kdenlivesettings.kcfg
src/mainwindow.cpp
src/transitionsettings.cpp
src/transitionsettings.h

index b235c58207910ce1c519f78e0a906d8e8e637a7b..816bf266d1d1974e680abe3186bcc9613ed971ac 100644 (file)
@@ -36,7 +36,7 @@
 
 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);
@@ -77,10 +77,11 @@ void EffectStackEdit::updateProjectFormat(MltVideoProfile profile) {
     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;
 
@@ -176,6 +177,7 @@ void EffectStackEdit::transferParamDesc(const QDomElement& d, int , int) {
         } 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;
@@ -259,6 +261,10 @@ void EffectStackEdit::transferParamDesc(const QDomElement& d, int , int) {
     }
 }
 
+void EffectStackEdit::slotSeekToPos(int pos) {
+    emit seekTimeline(m_in + pos);
+}
+
 wipeInfo EffectStackEdit::getWipeInfo(QString value) {
     wipeInfo info;
     QString start = value.section(";", 0, 0);
index df2b21268d521ad20b1ff26f4aab49fc39d99d23..23de5c0c278dd921694b9d3276c70bc71966ba4e 100644 (file)
@@ -56,14 +56,20 @@ private:
     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
index f8ab32894a09dcfe09bba9bb031e34b7a60a9fea..629ed7cb526710a9e38693146138dcf4b77eacaa 100644 (file)
@@ -28,6 +28,7 @@
 
 #include "graphicsscenerectmove.h"
 #include "geometryval.h"
+#include "kdenlivesettings.h"
 
 Geometryval::Geometryval(const MltVideoProfile profile, QWidget* parent): QWidget(parent), m_profile(profile) {
     ui.setupUi(this);
@@ -86,6 +87,11 @@ Geometryval::Geometryval(const MltVideoProfile profile, QWidget* parent): QWidge
     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;
@@ -233,7 +239,12 @@ void Geometryval::slotTransparencyChanged(int transp) {
     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;
index 6e9786ab3395aed6b24e55a8c411a2c2d9ededa4..bc379fe2dc065f9e0afe603cc06748592dfa2dd8 100644 (file)
@@ -53,6 +53,7 @@ private:
     QGraphicsPathItem *m_path;
     QMenu *m_scaleMenu;
     QMenu *m_alignMenu;
+    QAction *m_syncAction;
 
     void updateTransitionPath();
 
@@ -77,9 +78,11 @@ private slots:
     void slotAlignCenter();
     void slotAlignHCenter();
     void slotAlignVCenter();
+    void slotSyncCursor();
 
 signals:
     void parameterChanged();
+    void seekToPos(int);
 };
 
 #endif
index 5bb491fa6adb41475603e3801e47820046db46b7..27496efcbcc57eb3d320d79e86386f1eef676366 100644 (file)
@@ -546,7 +546,7 @@ void initEffects::fillTransitionsList(Mlt::Repository * repository, EffectsList*
                 //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;
index 8bc071eec0fb1507ae91342a53a5fd499cc1c5e7..9def02186c24d4e2fa02ac6b93e838e92ba5d044 100644 (file)
       <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
index 649cc865b2a5ced53eb2aeb32dd22caa8cc205b3..ca97c25dd4eab7693010f1b6520d9f0c67cd251d 100644 (file)
@@ -1114,6 +1114,7 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc) { //cha
             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();
         }
@@ -1163,6 +1164,7 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc) { //cha
     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()));
index dc196cb9d92775b5a5d643f5ed52dfb9d818d27e..bf32b94a25b5c4fe74bea21dd75427f808b5bbde 100644 (file)
 #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();
@@ -48,10 +50,10 @@ void TransitionSettings::slotTransitionChanged(bool reinit) {
     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()));
     }
 }
 
index 6f16fa947fe3821e13ff8cf18fe573710ed2ce6c..2d7bf2bc18f691d0bf47ed86185b6f9985bcbf50 100644 (file)
@@ -46,6 +46,7 @@ public slots:
 signals:
     void transitionUpdated(Transition *, QDomElement);
     void transferParamDesc(const QDomElement&, int , int);
+    void seekTimeline(int);
 };
 
 #endif