]> git.sesse.net Git - kdenlive/blobdiff - src/clipmanager.cpp
Introducing template based title clips
[kdenlive] / src / clipmanager.cpp
index b3c42c2aa7ee4a7d8625cf5b60194dc38aae9709..c44367777597311faa5d466cb02ef18f9fd1b6c2 100644 (file)
 #include <QGraphicsItemGroup>
 
 ClipManager::ClipManager(KdenliveDoc *doc) :
-        m_audioThumbsQueue(QList <QString> ()),
+        QObject(),
+        m_audioThumbsQueue(),
         m_doc(doc),
         m_audioThumbsEnabled(false),
-        m_generatingAudioId(QString())
+        m_generatingAudioId()
 {
     m_clipIdCounter = 1;
     m_folderIdCounter = 1;
@@ -143,12 +144,10 @@ void ClipManager::addClip(DocClipBase *clip)
 
 void ClipManager::slotDeleteClip(const QString &clipId)
 {
-    for (int i = 0; i < m_clipList.count(); i++) {
-        if (m_clipList.at(i)->getId() == clipId) {
-            AddClipCommand *command = new AddClipCommand(m_doc, m_clipList.at(i)->toXML(), clipId, false);
-            m_doc->commandStack()->push(command);
-            break;
-        }
+    DocClipBase *clip = getClipById(clipId);
+    if (clip) {
+        AddClipCommand *command = new AddClipCommand(m_doc, clip->toXML(), clipId, false);
+        m_doc->commandStack()->push(command);
     }
 }
 
@@ -156,9 +155,7 @@ void ClipManager::deleteClip(const QString &clipId)
 {
     for (int i = 0; i < m_clipList.count(); i++) {
         if (m_clipList.at(i)->getId() == clipId) {
-            DocClipBase *clip = m_clipList.takeAt(i);
-            delete clip;
-            clip = NULL;
+            delete m_clipList.takeAt(i);
             break;
         }
     }
@@ -184,8 +181,11 @@ DocClipBase *ClipManager::getClipById(QString clipId)
 
 DocClipBase *ClipManager::getClipByResource(QString resource)
 {
+    QString clipResource;
     for (int i = 0; i < m_clipList.count(); i++) {
-        if (m_clipList.at(i)->getProperty("resource") == resource) {
+        clipResource = m_clipList.at(i)->getProperty("resource");
+        if (clipResource.isEmpty()) clipResource = m_clipList.at(i)->getProperty("colour");
+        if (clipResource == resource) {
             return m_clipList.at(i);
         }
     }
@@ -335,7 +335,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));
@@ -351,6 +351,28 @@ void ClipManager::slotAddTextClipFile(const QString titleName, const QString ima
     m_doc->commandStack()->push(command);
 }
 
+void ClipManager::slotAddTextTemplateClip(QString titleName, const QString imagePath, const KUrl path, const QString group, const QString &groupId)
+{
+    QDomDocument doc;
+    QDomElement prod = doc.createElement("producer");
+    doc.appendChild(prod);
+    prod.setAttribute("resource", imagePath);
+    prod.setAttribute("name", titleName);
+    prod.setAttribute("xmltemplate", path.path());
+    uint id = m_clipIdCounter++;
+    prod.setAttribute("id", QString::number(id));
+    if (!group.isEmpty()) {
+        prod.setAttribute("groupname", group);
+        prod.setAttribute("groupid", groupId);
+    }
+    prod.setAttribute("type", (int) TEXT);
+    prod.setAttribute("transparency", "1");
+    prod.setAttribute("in", "0");
+    prod.setAttribute("out", m_doc->getFramePos(KdenliveSettings::image_duration()) - 1);
+    AddClipCommand *command = new AddClipCommand(m_doc, doc.documentElement(), QString::number(id), true);
+    m_doc->commandStack()->push(command);
+}
+
 int ClipManager::getFreeClipId()
 {
     return m_clipIdCounter++;