]> git.sesse.net Git - kdenlive/commitdiff
Editing a clip sometimes caused unnecessary clip reloads
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Sat, 3 Dec 2011 13:35:31 +0000 (14:35 +0100)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Sat, 3 Dec 2011 13:35:31 +0000 (14:35 +0100)
src/clipproperties.cpp
src/docclipbase.cpp
src/docclipbase.h
src/mainwindow.cpp
src/monitor.cpp
src/monitor.h
src/monitormanager.cpp
src/monitormanager.h
src/projectlist.cpp

index b59b5ed4b3a9bfc59fbb433270cf0f1de3cd6790..42214833f5530e79867ee2a720a2dbe5e304f2ca 100644 (file)
@@ -611,8 +611,10 @@ ClipProperties::~ClipProperties()
 
 void ClipProperties::slotApplyProperties()
 {
-    if (m_clip != NULL)
-        emit applyNewClipProperties(m_clip->getId(), m_clip->properties(), properties(), needsTimelineRefresh(), needsTimelineReload());
+    if (m_clip != NULL) {
+        QMap <QString, QString> props = properties();
+        emit applyNewClipProperties(m_clip->getId(), m_clip->currentProperties(props), props, needsTimelineRefresh(), needsTimelineReload());
+    }
     m_view.buttonBox->button(QDialogButtonBox::Apply)->setEnabled(false);
 }
 
index 5d43417c3272a852819f25e719a4b77acb0b4e72..6cdc66980c49dcf061770a02c3715527a539905c 100644 (file)
@@ -1075,6 +1075,17 @@ QMap <QString, QString> DocClipBase::properties() const
     return m_properties;
 }
 
+QMap <QString, QString> DocClipBase::currentProperties(QMap <QString, QString> props)
+{
+    QMap <QString, QString> currentProps;
+    QMap<QString, QString>::const_iterator i = props.constBegin();
+    while (i != props.constEnd()) {
+        currentProps.insert(i.key(), m_properties.value(i.key()));
+        ++i;
+    }
+    return currentProps;
+}
+
 bool DocClipBase::getAudioThumbs()
 {
     if (m_thumbProd == NULL || isPlaceHolder() || !KdenliveSettings::audiothumbnails()) return false;
index 64b78c1c227f67b314bd4c40bc854696aca2db46..896680f33aca73e9d0028b380cb674e4d6ce6a28 100644 (file)
@@ -266,7 +266,10 @@ public slots:
     uint getClipThumbFrame() const;
     void setProperties(QMap <QString, QString> properties);
     void setMetadata(QMap <QString, QString> properties);
+    /** Returns all current properties for this clip */
     QMap <QString, QString> properties() const;
+    /** Return the current values for a set of properties */
+    QMap <QString, QString> currentProperties(QMap <QString, QString> props);
     QMap <QString, QString> metadata() const;
     void slotExtractImage(QList <int> frames);
 
index 95003ae9e4de34ad2b28a4d6a41ff6925e1c8c46..314c86f45598b0036fd0f4db74e2de4fcb37a5b2 100644 (file)
@@ -228,7 +228,7 @@ MainWindow::MainWindow(const QString &MltPath, const KUrl & Url, const QString &
     connect(m_projectList, SIGNAL(updateRenderStatus()), this, SLOT(slotCheckRenderStatus()));
     connect(m_projectList, SIGNAL(clipNeedsReload(const QString&)),this, SLOT(slotUpdateClip(const QString &)));
     connect(m_projectList, SIGNAL(updateProfile(const QString &)), this, SLOT(slotUpdateProjectProfile(const QString &)));
-    connect(m_projectList, SIGNAL(refreshClip(const QString &, bool)), m_monitorManager, SLOT(slotRefreshCurrentMonitor()));
+    connect(m_projectList, SIGNAL(refreshClip(const QString &, bool)), m_monitorManager, SLOT(slotRefreshCurrentMonitor(const QString &)));
     connect(m_projectList, SIGNAL(findInTimeline(const QString&)), this, SLOT(slotClipInTimeline(const QString&)));
     connect(m_clipMonitor, SIGNAL(zoneUpdated(QPoint)), m_projectList, SLOT(slotUpdateClipCut(QPoint)));
 
@@ -3204,7 +3204,7 @@ void MainWindow::slotShowClipProperties(DocClipBase *clip)
                 else newprops.insert("templatetext", description);
                 //newprops.insert("xmldata", m_projectList->generateTemplateXml(newtemplate, description).toString());
                 if (!newprops.isEmpty()) {
-                    EditClipCommand *command = new EditClipCommand(m_projectList, clip->getId(), clip->properties(), newprops, true);
+                    EditClipCommand *command = new EditClipCommand(m_projectList, clip->getId(), clip->currentProperties(newprops), newprops, true);
                     m_activeDocument->commandStack()->push(command);
                 }
             }
@@ -3234,7 +3234,7 @@ void MainWindow::slotShowClipProperties(DocClipBase *clip)
                     dia_ui->saveTitle(path);
                 } else newprops.insert("resource", QString());
             }
-            EditClipCommand *command = new EditClipCommand(m_projectList, clip->getId(), clip->properties(), newprops, true);
+            EditClipCommand *command = new EditClipCommand(m_projectList, clip->getId(), clip->currentProperties(newprops), newprops, true);
             m_activeDocument->commandStack()->push(command);
             //m_activeTimeline->projectView()->slotUpdateClip(clip->getId());
             m_activeDocument->setModified(true);
@@ -3282,9 +3282,9 @@ void MainWindow::slotShowClipProperties(QList <DocClipBase *> cliplist, QMap<QSt
         for (int i = 0; i < cliplist.count(); i++) {
             DocClipBase *clip = cliplist.at(i);
             if (clip->clipType() == IMAGE)
-                new EditClipCommand(m_projectList, clip->getId(), clip->properties(), newImageProps, true, command);
+                new EditClipCommand(m_projectList, clip->getId(), clip->currentProperties(newImageProps), newImageProps, true, command);
             else 
-                new EditClipCommand(m_projectList, clip->getId(), clip->properties(), newProps, true, command);
+                new EditClipCommand(m_projectList, clip->getId(), clip->currentProperties(newProps), newProps, true, command);
         }
         m_activeDocument->commandStack()->push(command);
         for (int i = 0; i < cliplist.count(); i++)
index 47d09b67e12065783f3673f7a272fded1c33fda0..2b7cc30fd7ad89af0caeaa0b784542e371cab1bb 100644 (file)
@@ -1045,6 +1045,13 @@ AbstractRender *Monitor::abstractRender()
     return render;
 }
 
+void Monitor::reloadProducer(const QString &id)
+{
+    if (!m_currentClip) return;
+    if (m_currentClip->getId() == id)
+        slotSetClipProducer(m_currentClip, m_currentClip->zone(), true);
+}
+
 MonitorRefresh::MonitorRefresh(QWidget* parent) :
     QWidget(parent)
     , m_renderer(NULL)
index c0697f2645d887af1f41e5731d8c4f54a6dc8294..04e5af2d98bee6b4736d3829e70e3a2f78e5ac8e 100644 (file)
@@ -120,6 +120,7 @@ public:
     void updateMarkers(DocClipBase *source);
     MonitorEditWidget *getEffectEdit();
     QWidget *container();
+    void reloadProducer(const QString &id);
     QFrame *m_volumePopup;
 
 protected:
index 1b0a7c6fb278400d20a2867947a0648408ea4681..c7fe6b505e0fad8d3d31b46884c16d5e046db4dd 100644 (file)
@@ -28,6 +28,7 @@
 #include <QTimer>
 #include <KDebug>
 
+
 MonitorManager::MonitorManager(QWidget *parent) :
         QObject(parent),
         m_clipMonitor(NULL),
@@ -195,8 +196,10 @@ void MonitorManager::slotResetProfiles()
     emit checkColorScopes();
 }
 
-void MonitorManager::slotRefreshCurrentMonitor()
+void MonitorManager::slotRefreshCurrentMonitor(const QString &id)
 {
+    // Clip producer was modified, check if clip is currently displayed in clip monitor
+    m_clipMonitor->reloadProducer(id);
     if (m_activeMonitor == m_clipMonitor) m_clipMonitor->refreshMonitor();
     else m_projectMonitor->refreshMonitor();
 }
index eb58634486ba0fa957173f7242ae62a170dcca49..7fbe52002aba3514328fda2575ee242c93f5a489 100644 (file)
@@ -69,7 +69,7 @@ public slots:
     void slotUpdateAudioMonitoring();
 
 private slots:
-    void slotRefreshCurrentMonitor();
+    void slotRefreshCurrentMonitor(const QString &id);
 
 private:
     Monitor *m_clipMonitor;
index cddd5d5bec1f1097c70aed23bcddd80f554ec215..ce876f56d723e34cd91f08a221afeed35c5eb0c2 100644 (file)
@@ -762,6 +762,7 @@ void ProjectList::slotUpdateClipProperties(const QString &id, QMap <QString, QSt
     if (item) {
         slotUpdateClipProperties(item, properties);
         if (properties.contains("out") || properties.contains("force_fps") || properties.contains("resource")) {
+            kDebug()<<"/// ARGH FORCE RELOAD";
             slotReloadClip(id);
         } else if (properties.contains("colour") ||
                    properties.contains("xmldata") ||
@@ -770,7 +771,6 @@ void ProjectList::slotUpdateClipProperties(const QString &id, QMap <QString, QSt
                    properties.contains("templatetext")) {
             slotRefreshClipThumbnail(item);
             emit refreshClip(id, true);
-            emit clipSelected(item->referencedClip(), item->referencedClip()->zone(), true);
         } else if (properties.contains("full_luma") || properties.contains("force_colorspace") || properties.contains("loop")) {
             emit refreshClip(id, false);
         }
@@ -2683,7 +2683,7 @@ void ProjectList::updateProxyConfig()
                 newProps.insert("replace", "1");
                 // insert required duration for proxy
                 newProps.insert("proxy_out", item->referencedClip()->producerProperty("out"));
-                new EditClipCommand(this, item->clipId(), item->referencedClip()->properties(), newProps, true, command);
+                new EditClipCommand(this, item->clipId(), item->referencedClip()->currentProperties(newProps), newProps, true, command);
             }
         }
         else if (t == IMAGE && item->referencedClip() != NULL) {
@@ -2806,7 +2806,7 @@ void ProjectList::slotDeleteProxy(const QString proxyPath)
             if (item->referencedClip()->getProperty("proxy") == proxyPath) {
                 QMap <QString, QString> props;
                 props.insert("proxy", QString());
-                new EditClipCommand(this, item->clipId(), item->referencedClip()->properties(), props, true, proxyCommand);
+                new EditClipCommand(this, item->clipId(), item->referencedClip()->currentProperties(props), props, true, proxyCommand);
             
             }
         }