]> git.sesse.net Git - kdenlive/commitdiff
Automatically update clips when they change on disk. It means you can now edit an...
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Sun, 19 Jul 2009 11:09:29 +0000 (11:09 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Sun, 19 Jul 2009 11:09:29 +0000 (11:09 +0000)
svn path=/trunk/kdenlive/; revision=3733

src/clipmanager.cpp
src/clipmanager.h
src/projectlist.cpp
src/projectlist.h

index c44367777597311faa5d466cb02ef18f9fd1b6c2..4764a6504fe1740ce0ffb515a0d175ce7ec28553 100644 (file)
@@ -43,6 +43,7 @@ ClipManager::ClipManager(KdenliveDoc *doc) :
 {
     m_clipIdCounter = 1;
     m_folderIdCounter = 1;
+    connect(&m_fileWatcher, SIGNAL(dirty(const QString &)), this, SLOT(slotClipModified(const QString &)));
 }
 
 ClipManager::~ClipManager()
@@ -136,6 +137,10 @@ QMap <QString, QString> ClipManager::documentFolderList() const
 void ClipManager::addClip(DocClipBase *clip)
 {
     m_clipList.append(clip);
+    if (clip->clipType() == IMAGE || clip->clipType() == AUDIO) {
+        // listen for file change
+        m_fileWatcher.addFile(clip->fileURL().path());
+    }
     const QString id = clip->getId();
     if (id.toInt() >= m_clipIdCounter) m_clipIdCounter = id.toInt() + 1;
     const QString gid = clip->getProperty("groupid");
@@ -155,6 +160,10 @@ void ClipManager::deleteClip(const QString &clipId)
 {
     for (int i = 0; i < m_clipList.count(); i++) {
         if (m_clipList.at(i)->getId() == clipId) {
+            if (m_clipList.at(i)->clipType() == IMAGE || m_clipList.at(i)->clipType() == AUDIO) {
+                // listen for file change
+                m_fileWatcher.removeFile(m_clipList.at(i)->fileURL().path());
+            }
             delete m_clipList.takeAt(i);
             break;
         }
@@ -444,3 +453,12 @@ QDomElement ClipManager::groupsXml() const
     }
     return doc.documentElement();
 }
+
+
+void ClipManager::slotClipModified(const QString &path)
+{
+    //kDebug()<<"// CLIP: "<<path<<" WAS MODIFIED";
+    DocClipBase *clip = getClipByResource(path);
+    if (clip == NULL) return;
+    emit reloadClip(clip->getId());
+}
\ No newline at end of file
index 272016ddc25835ffb20d9030610aa56fe1ab848e..4a7850f7b97dfecf80c7165d1c37f2ea61ec8df3 100644 (file)
@@ -30,6 +30,7 @@
 
 #include <KUrl>
 #include <KUndoStack>
+#include <KDirWatch>
 #include <klocale.h>
 
 #include "gentime.h"
@@ -85,6 +86,9 @@ Q_OBJECT public:
 public slots:
     void updatePreviewSettings();
 
+private slots:
+    void slotClipModified(const QString &path);
+
 private:   // Private attributes
     /** the list of clips in the document */
     QList <DocClipBase*> m_clipList;
@@ -98,7 +102,10 @@ private:   // Private attributes
     int m_folderIdCounter;
     bool m_audioThumbsEnabled;
     QString m_generatingAudioId;
+    KDirWatch m_fileWatcher;
 
+signals:
+    void reloadClip(const QString &);
 };
 
 #endif
index a36a0232c14bdf09bf555ec383f3e270cbdd8ccb..8668a1b8038847a20f4e90c7f579d8a335da1021 100644 (file)
@@ -207,9 +207,11 @@ void ProjectList::slotOpenClip()
     }
 }
 
-void ProjectList::slotReloadClip()
+void ProjectList::slotReloadClip(const QString &id)
 {
-    QList<QTreeWidgetItem *> selected = m_listView->selectedItems();
+    QList<QTreeWidgetItem *> selected;
+    if (id.isEmpty()) selected = m_listView->selectedItems();
+    else selected.append(getItemById(id));
     ProjectItem *item;
     for (int i = 0; i < selected.count(); i++) {
         item = static_cast <ProjectItem *>(selected.at(i));
@@ -761,6 +763,8 @@ void ProjectList::setDocument(KdenliveDoc *doc)
     m_commandStack = doc->commandStack();
     m_doc = doc;
 
+    connect(m_doc->clipManager(), SIGNAL(reloadClip(const QString &)), this, SLOT(slotReloadClip(const QString &)));
+
     QMap <QString, QString> flist = doc->clipManager()->documentFolderList();
     QMapIterator<QString, QString> f(flist);
     while (f.hasNext()) {
index 9adaa8a5098547d84bcdd5edff15a83f8edfa448..60e283bfa1ac003896309743b05f1a1cc96daa7e 100644 (file)
@@ -149,7 +149,7 @@ public slots:
     void slotResetProjectList();
     void slotOpenClip();
     void slotEditClip();
-    void slotReloadClip();
+    void slotReloadClip(const QString &id = QString());
     void slotAddColorClip();
     void regenerateTemplate(const QString &id);