From fe9316d603bb2da1f779493975ac12051f7e04b9 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Sat, 3 Dec 2011 14:35:31 +0100 Subject: [PATCH 1/1] Editing a clip sometimes caused unnecessary clip reloads --- src/clipproperties.cpp | 6 ++++-- src/docclipbase.cpp | 11 +++++++++++ src/docclipbase.h | 3 +++ src/mainwindow.cpp | 10 +++++----- src/monitor.cpp | 7 +++++++ src/monitor.h | 1 + src/monitormanager.cpp | 5 ++++- src/monitormanager.h | 2 +- src/projectlist.cpp | 6 +++--- 9 files changed, 39 insertions(+), 12 deletions(-) diff --git a/src/clipproperties.cpp b/src/clipproperties.cpp index b59b5ed4..42214833 100644 --- a/src/clipproperties.cpp +++ b/src/clipproperties.cpp @@ -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 props = properties(); + emit applyNewClipProperties(m_clip->getId(), m_clip->currentProperties(props), props, needsTimelineRefresh(), needsTimelineReload()); + } m_view.buttonBox->button(QDialogButtonBox::Apply)->setEnabled(false); } diff --git a/src/docclipbase.cpp b/src/docclipbase.cpp index 5d43417c..6cdc6698 100644 --- a/src/docclipbase.cpp +++ b/src/docclipbase.cpp @@ -1075,6 +1075,17 @@ QMap DocClipBase::properties() const return m_properties; } +QMap DocClipBase::currentProperties(QMap props) +{ + QMap currentProps; + QMap::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; diff --git a/src/docclipbase.h b/src/docclipbase.h index 64b78c1c..896680f3 100644 --- a/src/docclipbase.h +++ b/src/docclipbase.h @@ -266,7 +266,10 @@ public slots: uint getClipThumbFrame() const; void setProperties(QMap properties); void setMetadata(QMap properties); + /** Returns all current properties for this clip */ QMap properties() const; + /** Return the current values for a set of properties */ + QMap currentProperties(QMap props); QMap metadata() const; void slotExtractImage(QList frames); diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 95003ae9..314c86f4 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -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 cliplist, QMapclipType() == 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++) diff --git a/src/monitor.cpp b/src/monitor.cpp index 47d09b67..2b7cc30f 100644 --- a/src/monitor.cpp +++ b/src/monitor.cpp @@ -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) diff --git a/src/monitor.h b/src/monitor.h index c0697f26..04e5af2d 100644 --- a/src/monitor.h +++ b/src/monitor.h @@ -120,6 +120,7 @@ public: void updateMarkers(DocClipBase *source); MonitorEditWidget *getEffectEdit(); QWidget *container(); + void reloadProducer(const QString &id); QFrame *m_volumePopup; protected: diff --git a/src/monitormanager.cpp b/src/monitormanager.cpp index 1b0a7c6f..c7fe6b50 100644 --- a/src/monitormanager.cpp +++ b/src/monitormanager.cpp @@ -28,6 +28,7 @@ #include #include + 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(); } diff --git a/src/monitormanager.h b/src/monitormanager.h index eb586344..7fbe5200 100644 --- a/src/monitormanager.h +++ b/src/monitormanager.h @@ -69,7 +69,7 @@ public slots: void slotUpdateAudioMonitoring(); private slots: - void slotRefreshCurrentMonitor(); + void slotRefreshCurrentMonitor(const QString &id); private: Monitor *m_clipMonitor; diff --git a/src/projectlist.cpp b/src/projectlist.cpp index cddd5d5b..ce876f56 100644 --- a/src/projectlist.cpp +++ b/src/projectlist.cpp @@ -762,6 +762,7 @@ void ProjectList::slotUpdateClipProperties(const QString &id, QMap 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 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); } } -- 2.39.2