]> git.sesse.net Git - kdenlive/commitdiff
Check & update clip length in timeline when doing a "clip reload" from project tree...
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Mon, 13 Apr 2009 18:40:43 +0000 (18:40 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Mon, 13 Apr 2009 18:40:43 +0000 (18:40 +0000)
http://www.kdenlive.org/mantis/view.php?id=769

svn path=/trunk/kdenlive/; revision=3293

src/clipitem.cpp
src/clipitem.h
src/customtrackview.cpp
src/kdenlivedoc.cpp
src/kdenlivedoc.h
src/mainwindow.cpp
src/mainwindow.h
src/projectlist.cpp
src/projectlist.h

index 190343209baf75dba58a77d9bf366ef357fe71df..3c0ebdb8a8467c9251f8424954b4a857d1c38312 100644 (file)
@@ -402,9 +402,24 @@ void ClipItem::resetThumbs()
 }
 
 
-void ClipItem::refreshClip()
-{
-    m_maxDuration = m_clip->maxDuration();
+void ClipItem::refreshClip(bool checkDuration)
+{
+    if (checkDuration && (m_maxDuration != m_clip->maxDuration())) {
+        m_maxDuration = m_clip->maxDuration();
+        if (m_clipType != IMAGE && m_clipType != TEXT && m_clipType != COLOR) {
+            if (m_cropStart + m_cropDuration > m_maxDuration) {
+                // Clip duration changed, make sure to stay in correct range
+                if (m_cropStart > m_maxDuration) {
+                    m_cropStart = GenTime();
+                    m_cropDuration = qMin(m_cropDuration, m_maxDuration);
+                    updateRectGeometry();
+                } else {
+                    m_cropDuration = m_maxDuration;
+                    updateRectGeometry();
+                }
+            }
+        }
+    }
     if (m_clipType == COLOR) {
         QString colour = m_clip->getProperty("colour");
         colour = colour.replace(0, 2, "#");
index 16cf33d1636f0384ae89a61afeeacbc11c02d72b..9436033d97d919ce33baf95144f0d5c6f3b5f57c 100644 (file)
@@ -81,7 +81,7 @@ public:
     /** regenerate audio and video thumbnails */
     void resetThumbs();
     /** update clip properties from base clip */
-    void refreshClip();
+    void refreshClip(bool checkDuration);
     /** Returns a list of times for this clip's markers */
     QList <GenTime> snapMarkers() const;
     QList <CommentedTime> commentedSnapMarkers() const;
index b188368a1c54aa73c515305f40cb059ec56f79de..c74204daabbfb2cb824379bd8a76c3f71b096fcf 100644 (file)
@@ -2894,7 +2894,7 @@ void CustomTrackView::slotUpdateClip(const QString &clipId)
         if (list.at(i)->type() == AVWIDGET) {
             clip = static_cast <ClipItem *>(list.at(i));
             if (clip->clipProducer() == clipId) {
-                clip->refreshClip();
+                clip->refreshClip(true);
                 ItemInfo info = clip->info();
                 info.track = m_document->tracksCount() - clip->track();
                 m_document->renderer()->mltUpdateClip(info, clip->xml(), clip->baseClip()->producer());
@@ -3985,7 +3985,7 @@ void CustomTrackView::slotUpdateAllThumbs()
                     }
                 }
             }
-            item->refreshClip();
+            item->refreshClip(false);
             qApp->processEvents();
         }
     }
@@ -4457,4 +4457,5 @@ void CustomTrackView::updateClipTypeActions(ClipItem *clip)
     }
 }
 
+
 #include "customtrackview.moc"
index af49bf710daf189a0d05081611cc053c359b2385..197e2da9b28a413ec6865c241dd0504f2aea045e 100644 (file)
@@ -250,7 +250,9 @@ KdenliveDoc::~KdenliveDoc()
 void KdenliveDoc::setSceneList()
 {
     m_render->setSceneList(m_document.toString(), m_startPos);
-    //checkProjectClips();
+    // m_document xml is now useless, clear it
+    m_document.clear();
+    checkProjectClips();
 }
 
 QDomDocument KdenliveDoc::createEmptyDocument(const int videotracks, const int audiotracks)
@@ -1195,6 +1197,7 @@ void KdenliveDoc::setRenderer(Render *render) {
 
 void KdenliveDoc::checkProjectClips()
 {
+    kDebug() << "+++++++++++++ + + + + CHK PCLIPS";
     if (m_render == NULL) return;
     m_clipManager->resetProducersList(m_render->producersList());
     return;
@@ -1277,34 +1280,6 @@ QString KdenliveDoc::producerName(const QString &id)
     return result;
 }
 
-void KdenliveDoc::setProducerDuration(const QString &id, int duration)
-{
-    QDomNodeList prods = producersList();
-    int ct = prods.count();
-    for (int i = 0; i <  ct ; i++) {
-        QDomElement e = prods.item(i).toElement();
-        if (e.attribute("id") != "black" && e.attribute("id") == id) {
-            e.setAttribute("duration", QString::number(duration));
-            break;
-        }
-    }
-}
-
-int KdenliveDoc::getProducerDuration(const QString &id)
-{
-    int result = 0;
-    QDomNodeList prods = producersList();
-    int ct = prods.count();
-    for (int i = 0; i <  ct ; i++) {
-        QDomElement e = prods.item(i).toElement();
-        if (e.attribute("id") != "black" && e.attribute("id") == id) {
-            result = e.attribute("duration").toInt();
-            break;
-        }
-    }
-    return result;
-}
-
 QDomDocument KdenliveDoc::toXml()
 {
     return m_document;
index 47afa10bf42916e5ff45c11f0d1c3cfe10ca9e59..3b2d8ea3214ab209de7576cdc7b0ab3ad12bd620 100644 (file)
@@ -62,8 +62,6 @@ Q_OBJECT public:
     //void setRenderer(Render *render);
     QUndoStack *commandStack();
     QString producerName(const QString &id);
-    void setProducerDuration(const QString &id, int duration);
-    int getProducerDuration(const QString &id);
     Render *renderer();
     QDomDocument m_guidesXml;
     QDomElement guidesXml() const;
index 1cf0dd5a96294960747fd6e8d4d00f01680df76a..2bebce59a1a47c5a74151640106610f44fe6e46d 100644 (file)
@@ -389,8 +389,8 @@ bool MainWindow::queryClose()
             // save document here. If saving fails, return false;
             return saveFile();
         case KMessageBox::No :
-           // User does not want to save the changes, clear recovery files
-           m_activeDocument->m_autosave->resize(0);
+            // User does not want to save the changes, clear recovery files
+            m_activeDocument->m_autosave->resize(0);
             return true;
         default: // cancel
             return false;
@@ -568,8 +568,7 @@ void MainWindow::slotAddEffect(QDomElement effect, GenTime pos, int track)
         kDebug() << "--- ERROR, TRYING TO APPEND NULL EFFECT";
         return;
     }
-    TrackView *currentTimeLine = (TrackView *) m_timelineArea->currentWidget();
-    currentTimeLine->projectView()->slotAddEffect(effect.cloneNode().toElement(), pos, track);
+    m_activeTimeline->projectView()->slotAddEffect(effect.cloneNode().toElement(), pos, track);
 }
 
 void MainWindow::slotRaiseMonitor(bool clipMonitor)
@@ -578,17 +577,17 @@ void MainWindow::slotRaiseMonitor(bool clipMonitor)
     else m_projectMonitorDock->raise();
 }
 
-void MainWindow::slotSetClipDuration(const QString &id, int duration)
+void MainWindow::slotUpdateClip(const QString &id)
 {
     if (!m_activeDocument) return;
-    m_activeDocument->setProducerDuration(id, duration);
+    m_activeTimeline->projectView()->slotUpdateClip(id);
 }
 
 void MainWindow::slotConnectMonitors()
 {
 
     m_projectList->setRenderer(m_projectMonitor->render);
-    connect(m_projectList, SIGNAL(receivedClipDuration(const QString &, int)), this, SLOT(slotSetClipDuration(const QString &, int)));
+    connect(m_projectList, SIGNAL(receivedClipDuration(const QString &)), this, SLOT(slotUpdateClip(const QString &)));
     connect(m_projectList, SIGNAL(showClipProperties(DocClipBase *)), this, SLOT(slotShowClipProperties(DocClipBase *)));
     connect(m_projectList, SIGNAL(getFileProperties(const QDomElement &, const QString &, bool)), m_projectMonitor->render, SLOT(getFileProperties(const QDomElement &, const QString &, bool)));
     connect(m_projectMonitor->render, SIGNAL(replyGetImage(const QString &, const QPixmap &)), m_projectList, SLOT(slotReplyGetImage(const QString &, const QPixmap &)));
@@ -1563,10 +1562,10 @@ void MainWindow::slotDoRender(const QString &dest, const QString &render, const
     if (dest.isEmpty()) return;
     int in = 0;
     int out = 0;
-    TrackView *currentTab = (TrackView *) m_timelineArea->currentWidget();
-    if (currentTab && zoneOnly) {
-        in = currentTab->inPoint();
-        out = currentTab->outPoint();
+
+    if (m_activeTimeline && zoneOnly) {
+        in = m_activeTimeline->inPoint();
+        out = m_activeTimeline->outPoint();
     }
     KTemporaryFile temp;
     temp.setAutoRemove(false);
index 699b8cdd74bc50918aa154368591afd5424c788a..510280c6ac195222490335108af1794472d3a53a 100644 (file)
@@ -213,7 +213,7 @@ private slots:
     void updateConfiguration();
     void slotConnectMonitors();
     void slotRaiseMonitor(bool clipMonitor);
-    void slotSetClipDuration(const QString &id, int duration);
+    void slotUpdateClip(const QString &id);
     void slotUpdateMousePosition(int pos);
     void slotAddEffect(QDomElement effect, GenTime pos = GenTime(), int track = -1);
     void slotEditProfiles();
index d1be91f7e1a870cc21d98234c1fddb4f9c59a41b..4f229a7efd48837708ef871776f2ad9a286e98b6 100644 (file)
@@ -814,7 +814,11 @@ void ProjectList::slotReplyGetFileProperties(const QString &clipId, Mlt::Produce
         item->setProperties(properties, metadata);
         Q_ASSERT_X(item->referencedClip(), "void ProjectList::slotReplyGetFileProperties", QString("Item with groupName %1 does not have a clip associated").arg(item->groupName()).toLatin1());
         if (replace) item->referencedClip()->setProducer(producer);
-        emit receivedClipDuration(clipId, item->clipMaxDuration());
+        else {
+            // Check if duration changed.
+            emit receivedClipDuration(clipId);
+            delete producer;
+        }
         m_listView->blockSignals(false);
     } else kDebug() << "////////  COULD NOT FIND CLIP TO UPDATE PRPS...";
     if (!m_infoQueue.isEmpty()) QTimer::singleShot(300, this, SLOT(slotProcessNextClipInQueue()));
index a23dd8722dd7ea66122ef103a8a80271f42332f0..879ddd112ed689c52575a768218d6da4f53e8241 100644 (file)
@@ -193,7 +193,7 @@ private slots:
 signals:
     void clipSelected(DocClipBase *);
     void getFileProperties(const QDomElement&, const QString &, bool);
-    void receivedClipDuration(const QString &, int);
+    void receivedClipDuration(const QString &);
     void showClipProperties(DocClipBase *);
     void projectModified();
     void loadingIsOver();