From 8e514e8841c1a6dfd0f5ae42188f5612035d0d90 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Sun, 5 Apr 2009 23:04:31 +0000 Subject: [PATCH] Fix several title clips problems, including: http://www.kdenlive.org/mantis/view.php?id=597 svn path=/trunk/kdenlive/; revision=3229 --- src/clipmanager.cpp | 2 +- src/kdenlivedoc.cpp | 31 ++++++++++++++++++------------- src/kdenlivedoc.h | 3 ++- src/mainwindow.cpp | 6 +++++- src/renderer.cpp | 1 + src/renderer.h | 1 + src/trackview.cpp | 21 +++++++++++++++++++-- 7 files changed, 47 insertions(+), 18 deletions(-) diff --git a/src/clipmanager.cpp b/src/clipmanager.cpp index 5616f48d..c43b583d 100644 --- a/src/clipmanager.cpp +++ b/src/clipmanager.cpp @@ -336,7 +336,7 @@ void ClipManager::slotAddTextClipFile(const QString titleName, const QString ima QDomElement prod = doc.createElement("producer"); doc.appendChild(prod); prod.setAttribute("resource", imagePath); - prod.setAttribute("titlename", titleName); + prod.setAttribute("name", titleName); prod.setAttribute("xmldata", xml); uint id = m_clipIdCounter++; prod.setAttribute("id", QString::number(id)); diff --git a/src/kdenlivedoc.cpp b/src/kdenlivedoc.cpp index 4476473d..d81e705d 100644 --- a/src/kdenlivedoc.cpp +++ b/src/kdenlivedoc.cpp @@ -249,7 +249,7 @@ KdenliveDoc::~KdenliveDoc() void KdenliveDoc::setSceneList() { m_render->setSceneList(m_document.toString(), m_startPos); - checkProjectClips(); + //checkProjectClips(); } QDomDocument KdenliveDoc::createEmptyDocument(const int videotracks, const int audiotracks) @@ -1195,6 +1195,10 @@ void KdenliveDoc::setRenderer(Render *render) { void KdenliveDoc::checkProjectClips() { if (m_render == NULL) return; + m_clipManager->resetProducersList(m_render->producersList()); + return; + + // Useless now... QList prods = m_render->producersList(); QString id ; QString prodId ; @@ -1207,20 +1211,20 @@ void KdenliveDoc::checkProjectClips() if (clip) clip->setProducer(prods.at(i)); if (clip && clip->clipType() == TEXT && !QFile::exists(clip->fileURL().path())) { // regenerate text clip image if required - kDebug() << "// TITLE: " << clip->getProperty("titlename") << " Preview file: " << clip->getProperty("resource") << " DOES NOT EXIST"; - QString titlename = clip->getProperty("titlename"); + //kDebug() << "// TITLE: " << clip->getProperty("titlename") << " Preview file: " << clip->getProperty("resource") << " DOES NOT EXIST"; + QString titlename = clip->getProperty("name"); QString titleresource; if (titlename.isEmpty()) { QStringList titleInfo = TitleWidget::getFreeTitleInfo(projectFolder()); titlename = titleInfo.at(0); titleresource = titleInfo.at(1); - clip->setProperty("titlename", titlename); + clip->setProperty("name", titlename); kDebug() << "// New title set to: " << titlename; } else { - titleresource = TitleWidget::getTitleResourceFromName(projectFolder(), titlename); + titleresource = TitleWidget::getFreeTitleInfo(projectFolder()).at(1); + //titleresource = TitleWidget::getTitleResourceFromName(projectFolder(), titlename); } - QString titlepath = projectFolder().path() + "/titles/"; - TitleWidget *dia_ui = new TitleWidget(KUrl(), titlepath, m_render, kapp->activeWindow()); + TitleWidget *dia_ui = new TitleWidget(KUrl(), KUrl(titleresource).directory(), m_render, kapp->activeWindow()); QDomDocument doc; doc.setContent(clip->getProperty("xmldata")); dia_ui->setXml(doc); @@ -1383,26 +1387,27 @@ void KdenliveDoc::addClip(QDomElement elem, QString clipId, bool createClipItem) extension = KUrl(path).fileName(); path = KUrl(path).directory(); } else if (elem.attribute("type").toInt() == TEXT && QFile::exists(path) == false) { - kDebug() << "// TITLE: " << elem.attribute("titlename") << " Preview file: " << elem.attribute("resource") << " DOES NOT EXIST"; - QString titlename = elem.attribute("titlename"); + kDebug() << "// TITLE: " << elem.attribute("name") << " Preview file: " << elem.attribute("resource") << " DOES NOT EXIST"; + QString titlename = elem.attribute("name"); QString titleresource; if (titlename.isEmpty()) { QStringList titleInfo = TitleWidget::getFreeTitleInfo(projectFolder()); titlename = titleInfo.at(0); titleresource = titleInfo.at(1); - elem.setAttribute("titlename", titlename); + elem.setAttribute("name", titlename); kDebug() << "// New title set to: " << titlename; } else { - titleresource = TitleWidget::getTitleResourceFromName(projectFolder(), titlename); + titleresource = TitleWidget::getFreeTitleInfo(projectFolder()).at(1); + //titleresource = TitleWidget::getTitleResourceFromName(projectFolder(), titlename); } - QString titlepath = projectFolder().path() + "/titles/"; - TitleWidget *dia_ui = new TitleWidget(KUrl(), titlepath, m_render, kapp->activeWindow()); + TitleWidget *dia_ui = new TitleWidget(KUrl(), KUrl(titleresource).directory(), m_render, kapp->activeWindow()); QDomDocument doc; doc.setContent(elem.attribute("xmldata")); dia_ui->setXml(doc); QImage pix = dia_ui->renderedPixmap(); pix.save(titleresource); elem.setAttribute("resource", titleresource); + setNewClipResource(clipId, titleresource); delete dia_ui; } if (path.isEmpty() == false && QFile::exists(path) == false && elem.attribute("type").toInt() != TEXT) { diff --git a/src/kdenlivedoc.h b/src/kdenlivedoc.h index a2fdc171..0bf427f4 100644 --- a/src/kdenlivedoc.h +++ b/src/kdenlivedoc.h @@ -148,7 +148,7 @@ private: bool convertDocument(double version); QDomDocument createEmptyDocument(const int videotracks, const int audiotracks); QString colorToString(const QColor& c); - void checkProjectClips(); + void setNewClipResource(const QString &id, const QString &path); QString searchFileRecursively(const QDir &dir, const QString &matchSize, const QString &matchHash) const; void moveProjectData(KUrl url); @@ -157,6 +157,7 @@ public slots: void slotCreateTextClip(QString group, const QString &groupId); /** Set to true if document needs saving, false otherwise */ void setModified(bool mod = true); + void checkProjectClips(); private slots: void slotAutoSave(); diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index d956bb40..8f5fc1b9 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -1071,8 +1071,10 @@ void MainWindow::setupActions() KStandardAction::fullScreen(this, SLOT(slotFullScreen()), this, collection); + /* + //TODO: Add status tooltip to actions ? connect(collection, SIGNAL(actionHovered(QAction*)), - this, SLOT(slotDisplayActionMessage(QAction*))); + this, SLOT(slotDisplayActionMessage(QAction*)));*/ QAction *addClip = new KAction(KIcon("kdenlive-add-clip"), i18n("Add Clip"), this); @@ -1709,6 +1711,7 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc) //cha disconnect(m_projectMonitor, SIGNAL(zoneUpdated(QPoint)), m_activeTimeline, SLOT(slotSetZone(QPoint))); disconnect(m_projectMonitor, SIGNAL(durationChanged(int)), m_activeTimeline, SLOT(setDuration(int))); disconnect(m_projectList, SIGNAL(projectModified()), m_activeDocument, SLOT(setModified())); + disconnect(m_projectMonitor->render, SIGNAL(refreshDocumentProducers()), m_activeDocument, SLOT(checkProjectClips())); disconnect(m_activeDocument, SIGNAL(guidesUpdated()), this, SLOT(slotGuidesUpdated())); @@ -1766,6 +1769,7 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc) //cha connect(m_projectMonitor, SIGNAL(renderPosition(int)), trackView, SLOT(moveCursorPos(int))); connect(m_projectMonitor, SIGNAL(zoneUpdated(QPoint)), trackView, SLOT(slotSetZone(QPoint))); connect(m_projectMonitor, SIGNAL(durationChanged(int)), trackView, SLOT(setDuration(int))); + connect(m_projectMonitor->render, SIGNAL(refreshDocumentProducers()), doc, SLOT(checkProjectClips())); connect(doc, SIGNAL(addProjectClip(DocClipBase *, bool)), m_projectList, SLOT(slotAddClip(DocClipBase *, bool))); connect(doc, SIGNAL(resetProjectList()), m_projectList, SLOT(slotResetProjectList())); connect(doc, SIGNAL(signalDeleteProjectClip(const QString &)), m_projectList, SLOT(slotDeleteClip(const QString &))); diff --git a/src/renderer.cpp b/src/renderer.cpp index c88fc355..01ba6e42 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp @@ -868,6 +868,7 @@ void Render::setSceneList(QString playlist, int position) } m_isBlocked = false; blockSignals(false); + emit refreshDocumentProducers(); //kDebug()<<"// SETSCN LST, POS: "<