]> git.sesse.net Git - kdenlive/commitdiff
* Fix several transition move problems
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Mon, 29 Dec 2008 12:47:39 +0000 (12:47 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Mon, 29 Dec 2008 12:47:39 +0000 (12:47 +0000)
* Add default shortcuts to play zone and loop zone
* increment version number f0r 0.7.1 release

svn path=/branches/KDE4/; revision=2854

src/customtrackview.cpp
src/customtrackview.h
src/kdenlivedoc.cpp
src/kdenliveui.rc
src/main.cpp
src/mainwindow.cpp
src/mainwindow.h
src/monitor.cpp
src/monitor.h
src/monitormanager.cpp
src/monitormanager.h

index 85bf44d813429fda6efa6b381b26e03061c30ce1..9f513bd57af88eea16de7ef1d53f550582050396 100644 (file)
@@ -1673,19 +1673,19 @@ void CustomTrackView::moveCursorPos(int delta) {
     m_cursorPos += delta;
     m_cursorLine->setPos(m_cursorPos, 0);
     m_document->renderer()->seek(GenTime(m_cursorPos, m_document->fps()));
-    //if (m_autoScroll && m_scale < 50) checkScrolling();
+}
+
+void CustomTrackView::initCursorPos(int pos) {
+    emit cursorMoved((int)(m_cursorPos), (int)(pos));
+    m_cursorPos = pos;
+    m_cursorLine->setPos(pos, 0);
+    checkScrolling();
 }
 
 void CustomTrackView::checkScrolling() {
     int vert = verticalScrollBar()->value();
     int hor = cursorPos();
     ensureVisible(hor, vert + 10, 2, 2, 50, 0);
-    //centerOn(QPointF(cursorPos(), m_tracksHeight));
-    /*QRect rectInView = viewport()->rect();
-    int delta = rectInView.width() / 3;
-    int max = rectInView.right() + horizontalScrollBar()->value() - delta;
-    //kDebug() << "CURSOR POS: "<<m_cursorPos<< "Scale: "<<m_scale;
-    if (m_cursorPos * m_scale >= max) horizontalScrollBar()->setValue((int)(horizontalScrollBar()->value() + 1 + m_scale));*/
 }
 
 void CustomTrackView::mouseReleaseEvent(QMouseEvent * event) {
@@ -1783,12 +1783,14 @@ void CustomTrackView::mouseReleaseEvent(QMouseEvent * event) {
                     // Also move automatic transitions (on lower track)
                     Transition *tr = getTransitionItemAtStart(m_dragItemInfo.startPos, m_dragItemInfo.track);
                     if (tr && tr->isAutomatic()) {
-                        tr->updateTransitionEndTrack(getPreviousVideoTrack(info.track));
                         ItemInfo trInfo = tr->info();
                         ItemInfo newTrInfo = trInfo;
+                        newTrInfo.track = info.track;
                         newTrInfo.startPos = m_dragItem->startPos();
-                        if (m_dragItemInfo.track == info.track && !item->baseClip()->isTransparent() && !getClipItemAtEnd(newTrInfo.endPos, m_document->tracksCount() - tr->transitionEndTrack())) {
-                            // transition end should be adjusted to clip on lower track
+                        if (m_dragItemInfo.track == info.track && !item->baseClip()->isTransparent() && getClipItemAtEnd(newTrInfo.endPos, m_document->tracksCount() - tr->transitionEndTrack())) {
+                            // transition end should stay the same
+                        } else {
+                            // transition end should be adjusted to clip
                             newTrInfo.endPos = newTrInfo.endPos + (newTrInfo.startPos - trInfo.startPos);
                         }
                         new MoveTransitionCommand(this, trInfo, newTrInfo, true, moveCommand);
@@ -1797,12 +1799,14 @@ void CustomTrackView::mouseReleaseEvent(QMouseEvent * event) {
                         // Check if there is a transition at clip end
                         tr = getTransitionItemAtEnd(m_dragItemInfo.endPos, m_dragItemInfo.track);
                         if (tr && tr->isAutomatic()) {
-                            tr->updateTransitionEndTrack(getPreviousVideoTrack(info.track));
                             ItemInfo trInfo = tr->info();
                             ItemInfo newTrInfo = trInfo;
+                            newTrInfo.track = info.track;
                             newTrInfo.endPos = m_dragItem->endPos();
-                            if (m_dragItemInfo.track == info.track && !item->baseClip()->isTransparent() && !getClipItemAtStart(trInfo.startPos, m_document->tracksCount() - tr->transitionEndTrack())) {
-                                // transition end should be moved
+                            if (m_dragItemInfo.track == info.track && !item->baseClip()->isTransparent() && getClipItemAtStart(trInfo.startPos, m_document->tracksCount() - tr->transitionEndTrack())) {
+                                // transition start should stay the same
+                            } else {
+                                // transition start should be moved
                                 newTrInfo.startPos = newTrInfo.startPos + (newTrInfo.endPos - trInfo.endPos);
                             }
                             new MoveTransitionCommand(this, trInfo, newTrInfo, true, moveCommand);
@@ -1815,11 +1819,13 @@ void CustomTrackView::mouseReleaseEvent(QMouseEvent * event) {
                         ItemInfo newTrInfo = trInfo;
                         newTrInfo.startPos = m_dragItem->startPos();
                         ClipItem * upperClip = getClipItemAt(m_dragItemInfo.startPos, m_dragItemInfo.track - 1);
-                        if ((!upperClip || !upperClip->baseClip()->isTransparent()) && !getClipItemAtEnd(newTrInfo.endPos, tr->track())) {
-                            // transition end should be adjusted to clip on upper track
-                            newTrInfo.endPos = newTrInfo.endPos + (newTrInfo.startPos - trInfo.startPos);
+                        if (!upperClip || !upperClip->baseClip()->isTransparent()) {
+                            if (!getClipItemAtEnd(newTrInfo.endPos, tr->track())) {
+                                // transition end should be adjusted to clip on upper track
+                                newTrInfo.endPos = newTrInfo.endPos + (newTrInfo.startPos - trInfo.startPos);
+                            }
+                            new MoveTransitionCommand(this, trInfo, newTrInfo, true, moveCommand);
                         }
-                        new MoveTransitionCommand(this, trInfo, newTrInfo, true, moveCommand);
                     }
                     if (m_dragItemInfo.track == info.track && (tr == NULL || tr->endPos() < m_dragItemInfo.endPos)) {
                         // Check if there is a transition at clip end
@@ -1829,11 +1835,13 @@ void CustomTrackView::mouseReleaseEvent(QMouseEvent * event) {
                             ItemInfo newTrInfo = trInfo;
                             newTrInfo.endPos = m_dragItem->endPos();
                             ClipItem * upperClip = getClipItemAt(m_dragItemInfo.startPos, m_dragItemInfo.track - 1);
-                            if ((!upperClip || !upperClip->baseClip()->isTransparent()) && !getClipItemAtStart(trInfo.startPos, tr->track())) {
-                                // transition start should be moved
-                                newTrInfo.startPos = newTrInfo.startPos + (newTrInfo.endPos - trInfo.endPos);
+                            if (!upperClip || !upperClip->baseClip()->isTransparent()) {
+                                if (!getClipItemAtStart(trInfo.startPos, tr->track())) {
+                                    // transition start should be moved
+                                    newTrInfo.startPos = newTrInfo.startPos + (newTrInfo.endPos - trInfo.endPos);
+                                }
+                                new MoveTransitionCommand(this, trInfo, newTrInfo, true, moveCommand);
                             }
-                            new MoveTransitionCommand(this, trInfo, newTrInfo, true, moveCommand);
                         }
                     }
                     m_commandStack->push(moveCommand);
@@ -1940,7 +1948,10 @@ void CustomTrackView::mouseReleaseEvent(QMouseEvent * event) {
                     ItemInfo trInfo = transition->info();
                     ItemInfo newTrInfo = trInfo;
                     newTrInfo.startPos = m_dragItem->startPos();
-                    new MoveTransitionCommand(this, trInfo, newTrInfo, true, resizeCommand);
+                    ClipItem * upperClip = getClipItemAt(m_dragItemInfo.startPos, m_dragItemInfo.track - 1);
+                    if (!upperClip || !upperClip->baseClip()->isTransparent()) {
+                        new MoveTransitionCommand(this, trInfo, newTrInfo, true, resizeCommand);
+                    }
                 }
                 updateClipFade(static_cast <ClipItem *>(m_dragItem));
                 new ResizeClipCommand(this, m_dragItemInfo, info, false, resizeCommand);
@@ -1973,26 +1984,19 @@ void CustomTrackView::mouseReleaseEvent(QMouseEvent * event) {
                     ItemInfo trInfo = tr->info();
                     ItemInfo newTrInfo = trInfo;
                     newTrInfo.endPos = m_dragItem->endPos();
-                    if (!static_cast<ClipItem*>(m_dragItem)->baseClip()->isTransparent() && !getClipItemAtStart(trInfo.startPos, m_document->tracksCount() - tr->transitionEndTrack())) {
-                        // transition start should be moved
-                        newTrInfo.startPos = newTrInfo.startPos + (newTrInfo.endPos - trInfo.endPos);
-                    }
                     new MoveTransitionCommand(this, trInfo, newTrInfo, true, resizeCommand);
                 }
 
                 // Check if there is an automatic transition on that clip (upper track)
                 tr = getTransitionItemAtEnd(m_dragItemInfo.endPos, m_dragItemInfo.track - 1);
-                if (tr) kDebug() << "TRANS TRK: " << tr->transitionEndTrack() << ", CLP TRK:" << m_dragItemInfo.track << ", CALC: " << m_document->tracksCount() - tr->transitionEndTrack();
                 if (tr && tr->isAutomatic() && (m_document->tracksCount() - tr->transitionEndTrack()) == m_dragItemInfo.track) {
-                    kDebug() << ".............. GOT TRANSITION";
                     ItemInfo trInfo = tr->info();
                     ItemInfo newTrInfo = trInfo;
                     newTrInfo.endPos = m_dragItem->endPos();
-                    if (!static_cast<ClipItem*>(m_dragItem)->baseClip()->isTransparent() && !getClipItemAtStart(trInfo.startPos, trInfo.track)) {
-                        // transition start should be moved
-                        newTrInfo.startPos = newTrInfo.startPos + (newTrInfo.endPos - trInfo.endPos);
+                    ClipItem * upperClip = getClipItemAtEnd(m_dragItemInfo.endPos, m_dragItemInfo.track - 1);
+                    if (!upperClip || !upperClip->baseClip()->isTransparent()) {
+                        new MoveTransitionCommand(this, trInfo, newTrInfo, true, resizeCommand);
                     }
-                    new MoveTransitionCommand(this, trInfo, newTrInfo, true, resizeCommand);
                 }
 
                 new ResizeClipCommand(this, m_dragItemInfo, info, false, resizeCommand);
@@ -2213,9 +2217,10 @@ void CustomTrackView::slotUpdateClip(const QString &clipId) {
 }
 
 ClipItem *CustomTrackView::getClipItemAtEnd(GenTime pos, int track) {
-    QList<QGraphicsItem *> list = scene()->items(QPointF(pos.frames(m_document->fps()) - 1, track * m_tracksHeight + m_tracksHeight / 2));
+    int framepos = (int)(pos.frames(m_document->fps()));
+    QList<QGraphicsItem *> list = scene()->items(QPointF(framepos - 1, track * m_tracksHeight + m_tracksHeight / 2));
     ClipItem *clip = NULL;
-    for (int i = 0; i < list.size(); ++i) {
+    for (int i = 0; i < list.size(); i++) {
         if (list.at(i)->type() == AVWIDGET) {
             ClipItem *test = static_cast <ClipItem *>(list.at(i));
             if (test->endPos() == pos) clip = test;
@@ -2228,7 +2233,7 @@ ClipItem *CustomTrackView::getClipItemAtEnd(GenTime pos, int track) {
 ClipItem *CustomTrackView::getClipItemAtStart(GenTime pos, int track) {
     QList<QGraphicsItem *> list = scene()->items(QPointF(pos.frames(m_document->fps()), track * m_tracksHeight + m_tracksHeight / 2));
     ClipItem *clip = NULL;
-    for (int i = 0; i < list.size(); ++i) {
+    for (int i = 0; i < list.size(); i++) {
         if (list.at(i)->type() == AVWIDGET) {
             ClipItem *test = static_cast <ClipItem *>(list.at(i));
             if (test->startPos() == pos) clip = test;
@@ -2241,7 +2246,7 @@ ClipItem *CustomTrackView::getClipItemAtStart(GenTime pos, int track) {
 ClipItem *CustomTrackView::getClipItemAt(int pos, int track) {
     QList<QGraphicsItem *> list = scene()->items(QPointF(pos , track * m_tracksHeight + m_tracksHeight / 2));
     ClipItem *clip = NULL;
-    for (int i = 0; i < list.size(); ++i) {
+    for (int i = 0; i < list.size(); i++) {
         if (list.at(i)->type() == AVWIDGET) {
             clip = static_cast <ClipItem *>(list.at(i));
             break;
@@ -2258,7 +2263,7 @@ ClipItem *CustomTrackView::getClipItemAt(GenTime pos, int track) {
 Transition *CustomTrackView::getTransitionItemAt(int pos, int track) {
     QList<QGraphicsItem *> list = scene()->items(QPointF(pos, (track + 1) * m_tracksHeight));
     Transition *clip = NULL;
-    for (int i = 0; i < list.size(); ++i) {
+    for (int i = 0; i < list.size(); i++) {
         if (list.at(i)->type() == TRANSITIONWIDGET) {
             clip = static_cast <Transition *>(list.at(i));
             break;
@@ -2276,7 +2281,7 @@ Transition *CustomTrackView::getTransitionItemAtEnd(GenTime pos, int track) {
     int framepos = (int)(pos.frames(m_document->fps()));
     QList<QGraphicsItem *> list = scene()->items(QPointF(framepos - 1, (track + 1) * m_tracksHeight));
     Transition *clip = NULL;
-    for (int i = 0; i < list.size(); ++i) {
+    for (int i = 0; i < list.size(); i++) {
         if (list.at(i)->type() == TRANSITIONWIDGET) {
             Transition *test = static_cast <Transition *>(list.at(i));
             if (test->endPos() == pos) clip = test;
index 5129b56370de641ac4ea4e4ac197fb44566a7eca..046ef36e38d1c6c8e08cbecb0d2ab06e396881ae 100644 (file)
@@ -107,6 +107,7 @@ public:
     void saveThumbnails();
     void autoTransition();
     QStringList getLadspaParams(QDomElement effect) const;
+    void initCursorPos(int pos);
 
 public slots:
     void setCursorPos(int pos, bool seek = true);
index ec7322e7b4ea5eecb5f85eccca27749070ef8c2c..9f671ecc652d028c3de24a20185419d042088912 100644 (file)
@@ -847,7 +847,7 @@ bool KdenliveDoc::saveSceneList(const QString &path, QDomDocument sceneList) {
 
     QDomElement addedXml = sceneList.createElement("kdenlivedoc");
     QDomElement markers = sceneList.createElement("markers");
-    addedXml.setAttribute("version", "0.8");
+    addedXml.setAttribute("version", "0.81");
     addedXml.setAttribute("profile", profilePath());
     addedXml.setAttribute("position", m_render->seekPosition().frames(m_fps));
     addedXml.setAttribute("projectfolder", m_projectFolder.path());
index 1a83d98bfec558de4f9fe2541e2b9fa787078ef7..070744a7b0454e8b0f2b8001149e86f17a2dcaa6 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE kpartgui SYSTEM "kpartgui.dtd">
-<gui name="kdenlive" version="28">
+<gui name="kdenlive" version="29">
   <ToolBar name="extraToolBar" >
     <text>Extra Toolbar</text>
        <Action name="project_render" />
@@ -72,6 +72,8 @@
     </Menu>
     <Menu name="monitor" ><text>Monitor</text>
       <Action name="monitor_play" />
+      <Action name="monitor_play_zone" />
+      <Action name="monitor_loop_zone" />
       <Separator />      
       <Menu name="monitor_go" ><text>Go To</text>
            <Action name="seek_start" />
index 0b93c0722218f258595e32472bc021394fe30e61..20a73bc6ac9f3bbf3e3ea2325d601d2c198090f9 100644 (file)
@@ -28,7 +28,7 @@
 
 int main(int argc, char *argv[]) {
     KAboutData aboutData(QByteArray("kdenlive"), QByteArray("kdenlive"),
-                         ki18n("Kdenlive"), QByteArray("0.7"),
+                         ki18n("Kdenlive"), QByteArray("0.7.1"),
                          ki18n("An open source video editor."),
                          KAboutData::License_GPL,
                          ki18n("Copyright (c) 2008 Development team"));
index 85dcd0adc09ba10d4426f62612419b2a8ab82e1d..a206254548b28e9adc9279624b70d902d2326b55 100644 (file)
@@ -213,8 +213,8 @@ MainWindow::MainWindow(const QString &MltPath, const KUrl & Url, QWidget *parent
     setupGUI();
     //kDebug() << factory() << " " << factory()->container("video_effects_menu", this);
 
-    m_projectMonitor->setupMenu(static_cast<QMenu*>(factory()->container("monitor_go", this)));
-    m_clipMonitor->setupMenu(static_cast<QMenu*>(factory()->container("monitor_go", this)), static_cast<QMenu*>(factory()->container("marker_menu", this)));
+    m_projectMonitor->setupMenu(static_cast<QMenu*>(factory()->container("monitor_go", this)), m_playZone, m_loopZone);
+    m_clipMonitor->setupMenu(static_cast<QMenu*>(factory()->container("monitor_go", this)), m_playZone, m_loopZone, static_cast<QMenu*>(factory()->container("marker_menu", this)));
 
     // build effects menus
     QAction *action;
@@ -715,6 +715,16 @@ void MainWindow::setupActions() {
     collection->addAction("monitor_play", monitorPlay);
     connect(monitorPlay, SIGNAL(triggered(bool)), m_monitorManager, SLOT(slotPlay()));
 
+    m_playZone = new KAction(KIcon("media-playback-start"), i18n("Play Zone"), this);
+    m_playZone->setShortcut(Qt::CTRL + Qt::Key_Space);
+    collection->addAction("monitor_play_zone", m_playZone);
+    connect(m_playZone, SIGNAL(triggered(bool)), m_monitorManager, SLOT(slotPlayZone()));
+
+    m_loopZone = new KAction(KIcon("media-playback-start"), i18n("Loop Zone"), this);
+    m_loopZone->setShortcut(Qt::ALT + Qt::Key_Space);
+    collection->addAction("monitor_loop_zone", m_loopZone);
+    connect(m_loopZone, SIGNAL(triggered(bool)), m_monitorManager, SLOT(slotLoopZone()));
+
     KAction *markIn = collection->addAction("mark_in");
     markIn->setText(i18n("Set In Point"));
     markIn->setShortcut(Qt::Key_I);
@@ -1137,7 +1147,8 @@ void MainWindow::doOpenFile(const KUrl &url, KAutoSaveFile *stale) {
     m_timelineArea->setCurrentIndex(m_timelineArea->addTab(trackView, KIcon("kdenlive"), doc->description()));
     m_timelineArea->setTabToolTip(m_timelineArea->currentIndex(), doc->url().path());
     trackView->setDuration(trackView->duration());
-    trackView->projectView()->setCursorPos(m_projectMonitor->render->seekPosition().frames(doc->fps()));
+    trackView->projectView()->initCursorPos(m_projectMonitor->render->seekPosition().frames(doc->fps()));
+
     if (m_timelineArea->count() > 1) m_timelineArea->setTabBarHidden(false);
     slotGotProgressInfo(QString(), -1);
     m_clipMonitor->refreshMonitor(true);
index 629b1519e01679724a31a0ceafae02de8a802eae..7788f4b6b1a8ba09864ae089226170d1c4ce61cb 100644 (file)
@@ -164,6 +164,8 @@ private:
     KAction *m_saveAction;
     KAction *m_closeAction;
     QSlider *m_zoomSlider;
+    QAction *m_loopZone;
+    QAction *m_playZone;
     StatusBarMessageLabel *m_messageLabel;
 
     bool m_findActivated;
index a8ce6abb93b2cd78533a758c0707912a06d8672f..c04369434e8e2a41c96388dd5a60724524c40b20 100644 (file)
@@ -67,8 +67,6 @@ Monitor::Monitor(QString name, MonitorManager *manager, QWidget *parent)
     m_playAction = m_playMenu->addAction(m_playIcon, i18n("Play"));
     m_playAction->setCheckable(true);
     connect(m_playAction, SIGNAL(triggered()), this, SLOT(slotPlay()));
-    m_playMenu->addAction(m_playIcon, i18n("Play Zone"), this, SLOT(slotPlayZone()));
-    m_playMenu->addAction(m_playIcon, i18n("Loop Zone"), this, SLOT(slotLoopZone()));
 
     playButton->setMenu(m_playMenu);
     playButton->setPopupMode(QToolButton::MenuButtonPopup);
@@ -146,12 +144,15 @@ QString Monitor::name() const {
     return m_name;
 }
 
-void Monitor::setupMenu(QMenu *goMenu, QMenu *markerMenu) {
+void Monitor::setupMenu(QMenu *goMenu, QAction *playZone, QAction *loopZone, QMenu *markerMenu) {
     m_contextMenu = new QMenu(this);
     m_contextMenu->addMenu(m_playMenu);
     m_contextMenu->addMenu(goMenu);
     if (markerMenu) m_contextMenu->addMenu(markerMenu);
 
+    m_playMenu->addAction(playZone);
+    m_playMenu->addAction(loopZone);
+
     //TODO: add save zone to timeline monitor when fixed
     if (m_name == "clip") m_contextMenu->addAction(KIcon("document-save"), i18n("Save zone"), this, SLOT(slotSaveZone()));
 
index 3d3054ba453c92e2a6a459c35590acc6f619ae95..907ccf353b8cf732c578a18110ab939858c87235 100644 (file)
@@ -70,7 +70,7 @@ public:
     void resetSize();
     bool isActive() const;
     void pause();
-    void setupMenu(QMenu *goMenu, QMenu *markerMenu = NULL);
+    void setupMenu(QMenu *goMenu, QAction *playZone, QAction *loopZone, QMenu *markerMenu = NULL);
     QDomDocument sceneList();
     DocClipBase *activeClip();
     GenTime position();
index a0ed893a012e1d6f92433d3b9cfd993f8221c37b..8788f385f335f8e3adb595aae1fc92966c712410 100644 (file)
@@ -77,6 +77,16 @@ void MonitorManager::slotPlay() {
     else m_projectMonitor->slotPlay();
 }
 
+void MonitorManager::slotPlayZone() {
+    if (m_clipMonitor->isActive()) m_clipMonitor->slotPlayZone();
+    else m_projectMonitor->slotPlayZone();
+}
+
+void MonitorManager::slotLoopZone() {
+    if (m_clipMonitor->isActive()) m_clipMonitor->slotLoopZone();
+    else m_projectMonitor->slotLoopZone();
+}
+
 void MonitorManager::slotRewind(double speed) {
     if (m_clipMonitor->isActive()) m_clipMonitor->slotRewind(speed);
     else m_projectMonitor->slotRewind(speed);
index 4dfcd4d8ff1a5a9e36457fcfe8f046018ca08ba3..9029407cc55ca185cfaf11a3da6dd1e168dab184 100644 (file)
@@ -40,6 +40,8 @@ public:
 public slots:
     void activateMonitor(QString name = QString::null);
     void slotPlay();
+    void slotPlayZone();
+    void slotLoopZone();
     void slotRewind(double speed = 0);
     void slotForward(double speed = 0);
     void slotRewindOneFrame();