]> git.sesse.net Git - kdenlive/commitdiff
- Avoid adding an undo command when no clips are actually added. [1]
authorAlberto Villa <avilla@FreeBSD.org>
Wed, 12 May 2010 14:01:31 +0000 (14:01 +0000)
committerAlberto Villa <avilla@FreeBSD.org>
Wed, 12 May 2010 14:01:31 +0000 (14:01 +0000)
- 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
src/clipmanager.h

index 99acb330d2f8e30247ce5b2b8105afbff3c7967d..7db3a4af928144868505aacb9d31a257af2fb8b7 100644 (file)
@@ -265,24 +265,24 @@ void ClipManager::resetProducersList(const QList <Mlt::Producer *> 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 <b>%1</b><br />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 <b>%1</b><br />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 <b>%1</b><br />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);
 }
 
 
index b3f06e649ccbfdf7c7be89bca8efa3bbf46f49d4..bb45d4ffc9f720d2175611dde6bc056c93a45830 100644 (file)
  *   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 <qdom.h>
 #include <QPixmap>
 #include <QObject>
@@ -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);