From a6aafb4cb3d09e17564f60bce207e7678b507a95 Mon Sep 17 00:00:00 2001 From: Alberto Villa Date: Wed, 12 May 2010 14:01:31 +0000 Subject: [PATCH] - Avoid adding an undo command when no clips are actually added. [1] - Fix a possible breakage of title clips duration on load. - Remove code duplication. PR: http://kdenlive.org/mantis/view.php?id=1406 [1] svn path=/trunk/kdenlive/; revision=4433 --- src/clipmanager.cpp | 71 ++++++++++++--------------------------------- src/clipmanager.h | 22 +++++++++++--- 2 files changed, 37 insertions(+), 56 deletions(-) diff --git a/src/clipmanager.cpp b/src/clipmanager.cpp index 99acb330..7db3a4af 100644 --- a/src/clipmanager.cpp +++ b/src/clipmanager.cpp @@ -265,24 +265,24 @@ void ClipManager::resetProducersList(const QList prods) void ClipManager::slotAddClipList(const KUrl::List urls, const QString group, const QString &groupId) { QUndoCommand *addClips = new QUndoCommand(); - addClips->setText(i18n("Add clips")); foreach(const KUrl &file, urls) { if (KIO::NetAccess::exists(file, KIO::NetAccess::SourceSide, NULL)) { + if (!getClipByResource(file.path()).empty()) { + if (KMessageBox::warningContinueCancel(kapp->activeWindow(), i18n("Clip %1
already exists in project, what do you want to do?", file.path()), i18n("Clip already exists")) == KMessageBox::Cancel) + continue; + } + kDebug() << "Adding clip: " << file.path(); QDomDocument doc; QDomElement prod = doc.createElement("producer"); doc.appendChild(prod); + prod.setAttribute("resource", file.path()); + uint id = m_clipIdCounter++; + prod.setAttribute("id", QString::number(id)); if (!group.isEmpty()) { prod.setAttribute("groupname", group); prod.setAttribute("groupid", groupId); } - prod.setAttribute("resource", file.path()); - if (!getClipByResource(prod.attribute("resource")).empty()) { - if (KMessageBox::warningContinueCancel(kapp->activeWindow(), i18n("Clip %1
already exists in project, what do you want to do?", prod.attribute("resource")), i18n("Clip already exists")) == KMessageBox::Cancel) - continue; - } - uint id = m_clipIdCounter++; - prod.setAttribute("id", QString::number(id)); KMimeType::Ptr type = KMimeType::findByUrl(file); if (type->name().startsWith("image/")) { prod.setAttribute("type", (int) IMAGE); @@ -295,62 +295,29 @@ void ClipManager::slotAddClipList(const KUrl::List urls, const QString group, co if (txtfile.open(QIODevice::ReadOnly) && txtdoc.setContent(&txtfile)) { txtfile.close(); prod.setAttribute("type", (int) TEXT); - prod.setAttribute("resource", file.path()); prod.setAttribute("xmldata", txtdoc.toString()); prod.setAttribute("transparency", 1); prod.setAttribute("in", 0); int out = txtdoc.documentElement().attribute("out").toInt(); - if (out > 0) prod.setAttribute("out", out); - else prod.setAttribute("out", m_doc->getFramePos(KdenliveSettings::image_duration()) - 1); - } else txtfile.close(); + if (out > 0) + prod.setAttribute("out", out); + else + prod.setAttribute("out", m_doc->getFramePos(KdenliveSettings::image_duration()) - 1); + } else + txtfile.close(); } new AddClipCommand(m_doc, doc.documentElement(), QString::number(id), true, addClips); } } - m_doc->commandStack()->push(addClips); + if (addClips->childCount() > 0) { + addClips->setText(i18np("Add clip", "Add clips", addClips->childCount())); + m_doc->commandStack()->push(addClips); + } } void ClipManager::slotAddClipFile(const KUrl url, const QString group, const QString &groupId) { - kDebug() << "///// CLIP MANAGER, ADDING CLIP: " << url; - QDomDocument doc; - QDomElement prod = doc.createElement("producer"); - doc.appendChild(prod); - prod.setAttribute("resource", url.path()); - if (!getClipByResource(prod.attribute("resource")).empty()) { - if (KMessageBox::warningContinueCancel(kapp->activeWindow(), i18n("Clip %1
already exists in project, what do you want to do?", prod.attribute("resource")), i18n("Clip already exists")) == KMessageBox::Cancel) - return; - } - uint id = m_clipIdCounter++; - prod.setAttribute("id", QString::number(id)); - if (!group.isEmpty()) { - prod.setAttribute("groupname", group); - prod.setAttribute("groupid", groupId); - } - KMimeType::Ptr type = KMimeType::findByUrl(url); - if (type->name().startsWith("image/")) { - prod.setAttribute("type", (int) IMAGE); - prod.setAttribute("in", "0"); - prod.setAttribute("out", m_doc->getFramePos(KdenliveSettings::image_duration()) - 1); - } else if (type->name() == "application/x-kdenlivetitle") { - // opening a title file - QDomDocument txtdoc("titledocument"); - QFile txtfile(url.path()); - if (txtfile.open(QIODevice::ReadOnly) && txtdoc.setContent(&txtfile)) { - txtfile.close(); - prod.setAttribute("type", (int) TEXT); - prod.setAttribute("resource", QString()); - prod.setAttribute("xmldata", txtdoc.toString()); - GenTime outPos(txtdoc.documentElement().attribute("out").toDouble() / 1000.0); - prod.setAttribute("transparency", 1); - prod.setAttribute("in", 0); - int out = (int) outPos.frames(m_doc->fps()); - if (out > 0) prod.setAttribute("out", out); - else prod.setAttribute("out", m_doc->getFramePos(KdenliveSettings::image_duration()) - 1); - } else txtfile.close(); - } - AddClipCommand *command = new AddClipCommand(m_doc, doc.documentElement(), QString::number(id), true); - m_doc->commandStack()->push(command); + slotAddClipList(KUrl::List(url), group, groupId); } diff --git a/src/clipmanager.h b/src/clipmanager.h index b3f06e64..bb45d4ff 100644 --- a/src/clipmanager.h +++ b/src/clipmanager.h @@ -17,13 +17,15 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ +/** + * @class ClipManager + * @brief Manages the list of clips in a document. + * @author Jean-Baptiste Mardelle + */ + #ifndef CLIPMANAGER_H #define CLIPMANAGER_H -/**ClipManager manages the list of clips in a document - *@author Jean-Baptiste Mardelle - */ - #include #include #include @@ -55,7 +57,19 @@ Q_OBJECT public: void addClip(DocClipBase *clip); DocClipBase *getClipAt(int pos); void deleteClip(const QString &clipId); + + /** @brief Add a file to the project. + * @ref slotAddClipList + * @param url file to add + * @param group name of the group to insert the file in (can be empty) + * @param groupId id of the group (if any) */ void slotAddClipFile(const KUrl url, const QString group, const QString &groupId); + + /** @brief Adds a list of files to the project. + * @param urls files to add + * @param group name of the group to insert the files in (can be empty) + * @param groupId id of the group (if any) + * It checks for duplicated items and asks to the user for instructions. */ void slotAddClipList(const KUrl::List urls, const QString group, const QString &groupId); void slotAddTextClipFile(const QString titleName, int out, const QString xml, const QString group, const QString &groupId); void slotAddTextTemplateClip(QString titleName, const KUrl path, const QString group, const QString &groupId); -- 2.39.2