]> git.sesse.net Git - kdenlive/commitdiff
Cleanup slideshow clip method, prepare for improved sequence support (still needs...
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Wed, 15 Feb 2012 12:41:43 +0000 (13:41 +0100)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Wed, 15 Feb 2012 12:41:43 +0000 (13:41 +0100)
src/clipmanager.cpp
src/clipmanager.h
src/kdenlivedoc.cpp
src/kdenlivedoc.h
src/projectlist.cpp
src/slideshowclip.cpp
src/slideshowclip.h
src/widgets/slideshowclip_ui.ui

index 45f1fc9fd940c9d37843467d6e101c69659f2992..af4522a6cdeb76c9dfc48d460195e920ee85a7ea 100644 (file)
@@ -582,29 +582,18 @@ void ClipManager::slotAddColorClipFile(const QString &name, const QString &color
     m_doc->commandStack()->push(command);
 }
 
-void ClipManager::slotAddSlideshowClipFile(const QString &name, const QString &path, int count, const QString &duration,
-        const bool loop, const bool crop, const bool fade,
-        const QString &luma_duration, const QString &luma_file, const int softness,
-        const QString &animation, const QString &group, const QString &groupId)
+void ClipManager::slotAddSlideshowClipFile(QMap <QString, QString> properties, const QString &group, const QString &groupId)
 {
     QDomDocument doc;
     QDomElement prod = doc.createElement("producer");
     doc.appendChild(prod);
-    prod.setAttribute("resource", path);
+    QMap<QString, QString>::const_iterator i = properties.constBegin();
+    while (i != properties.constEnd()) {
+        prod.setAttribute(i.key(), i.value());
+        ++i;
+    }
     prod.setAttribute("type", (int) SLIDESHOW);
     uint id = m_clipIdCounter++;
-    prod.setAttribute("id", QString::number(id));
-    prod.setAttribute("in", "0");
-    prod.setAttribute("out", m_doc->getFramePos(duration) * count);
-    prod.setAttribute("ttl", m_doc->getFramePos(duration));
-    prod.setAttribute("luma_duration", m_doc->getFramePos(luma_duration));
-    prod.setAttribute("name", name);
-    prod.setAttribute("loop", loop);
-    prod.setAttribute("crop", crop);
-    prod.setAttribute("fade", fade);
-    prod.setAttribute("softness", QString::number(softness));
-    prod.setAttribute("luma_file", luma_file);
-    prod.setAttribute("animation", animation);
     if (!group.isEmpty()) {
         prod.setAttribute("groupname", group);
         prod.setAttribute("groupid", groupId);
index fe31b853d440526c7d090a0ab84be8cfb76a069f..ce5089278a6a8f91e2d39be969988c137ca945aa 100644 (file)
@@ -84,10 +84,7 @@ Q_OBJECT public:
     void slotAddTextTemplateClip(QString titleName, const KUrl &path, const QString &group, const QString &groupId);
     void slotAddXmlClipFile(const QString &name, const QDomElement &xml, const QString &group, const QString &groupId);
     void slotAddColorClipFile(const QString &name, const QString &color, QString duration, const QString &group, const QString &groupId);
-    void slotAddSlideshowClipFile(const QString &name, const QString &path, int count, const QString &duration,
-                                  const bool loop, const bool crop,const bool fade,
-                                  const QString &luma_duration, const QString &luma_file, const int softness,
-                                  const QString &animation, const QString &group, const QString &groupId);
+    void slotAddSlideshowClipFile(QMap <QString, QString> properties, const QString &group, const QString &groupId);
     DocClipBase *getClipById(QString clipId);
     const QList <DocClipBase *> getClipByResource(QString resource);
     void slotDeleteClips(QStringList ids);
index 26dc37ad594881ae7e9343b1f77c78c8dfd18c5d..d16167cbed876f0df7b855cede0951a1d02a2f58 100644 (file)
@@ -1252,15 +1252,9 @@ void KdenliveDoc::slotCreateColorClip(const QString &name, const QString &color,
     emit selectLastAddedClip(QString::number(m_clipManager->lastClipId()));
 }
 
-void KdenliveDoc::slotCreateSlideshowClipFile(const QString &name, const QString &path, int count, const QString &duration,
-        const bool loop, const bool crop, const bool fade,
-        const QString &luma_duration, const QString &luma_file, const int softness,
-        const QString &animation, QString group, const QString &groupId)
-{
-    m_clipManager->slotAddSlideshowClipFile(name, path, count, duration, loop,
-                                            crop, fade, luma_duration,
-                                            luma_file, softness,
-                                            animation, group, groupId);
+void KdenliveDoc::slotCreateSlideshowClipFile(QMap <QString, QString> properties, QString group, const QString &groupId)
+{
+    m_clipManager->slotAddSlideshowClipFile(properties, group, groupId);
     setModified(true);
     emit selectLastAddedClip(QString::number(m_clipManager->lastClipId()));
 }
index 2e2411486d6cc2334150d02e86a9481bc05bb6a7..fcdb0979170f8d6d5735103a16fcaff25314a04b 100644 (file)
@@ -210,13 +210,7 @@ private:
 public slots:
     void slotCreateXmlClip(const QString &name, const QDomElement xml, QString group, const QString &groupId);
     void slotCreateColorClip(const QString &name, const QString &color, const QString &duration, QString group, const QString &groupId);
-    void slotCreateSlideshowClipFile(const QString &name, const QString &path,
-                                     int count, const QString &duration,
-                                     const bool loop, const bool crop,
-                                     const bool fade, const QString &luma_duration,
-                                     const QString &luma_file, const int softness,
-                                     const QString &animation, QString group,
-                                     const QString &groupId);
+    void slotCreateSlideshowClipFile(QMap <QString, QString> properties, QString group, const QString &groupId);
     void slotCreateTextClip(QString group, const QString &groupId, const QString &templatePath = QString());
     void slotCreateTextTemplateClip(QString group, const QString &groupId, KUrl path);
 
index 7be5192807e4b3684a8736533d48cb5cbbde3f2e..ce01e8281801206d05a52ef6ca029df2134d6303 100644 (file)
@@ -1656,11 +1656,18 @@ void ProjectList::slotAddClip(const QList <QUrl> givenList, const QString &group
                         while (fileName.at(fileName.size() - 1).isDigit()) {
                             fileName.chop(1);
                         }
-
-                        m_doc->slotCreateSlideshowClipFile(fileName, pattern, count, m_timecode.reformatSeparators(KdenliveSettings::sequence_duration()),
-                                                           false, false, false,
-                                                           m_timecode.getTimecodeFromFrames(int(ceil(m_timecode.fps()))), QString(), 0,
-                                                           QString(), groupInfo.at(0), groupInfo.at(1));
+                        QMap <QString, QString> properties;
+                        properties.insert("name", fileName);
+                        properties.insert("resource", pattern);
+                        properties.insert("in", "0");
+                        QString duration = m_timecode.reformatSeparators(KdenliveSettings::sequence_duration());
+                        properties.insert("out", QString::number(m_doc->getFramePos(duration) * count));
+                        properties.insert("ttl", QString::number(m_doc->getFramePos(duration)));
+                        properties.insert("loop", QString::number(false));
+                        properties.insert("crop", QString::number(false));
+                        properties.insert("fade", QString::number(false));
+                        properties.insert("luma_duration", QString::number(m_doc->getFramePos(m_timecode.getTimecodeFromFrames(int(ceil(m_timecode.fps()))))));
+                        m_doc->slotCreateSlideshowClipFile(properties, groupInfo.at(0), groupInfo.at(1));
                         return;
                     }
                 }
@@ -1821,10 +1828,27 @@ void ProjectList::slotAddSlideshowClip()
 
     if (dia->exec() == QDialog::Accepted) {
         QStringList groupInfo = getGroup();
-        m_doc->slotCreateSlideshowClipFile(dia->clipName(), dia->selectedPath(), dia->imageCount(), dia->clipDuration(),
-                                           dia->loop(), dia->crop(), dia->fade(),
-                                           dia->lumaDuration(), dia->lumaFile(), dia->softness(),
-                                           dia->animation(), groupInfo.at(0), groupInfo.at(1));
+        
+        QMap <QString, QString> properties;
+        properties.insert("name", dia->clipName());
+        int begin = dia->begin();
+        if (begin > 0) 
+            properties.insert("resource", dia->selectedPath() + "?" + QString::number(begin));
+        else
+            properties.insert("resource", dia->selectedPath());
+        properties.insert("in", "0");
+        properties.insert("out", QString::number(m_doc->getFramePos(dia->clipDuration()) * dia->imageCount()));
+        properties.insert("ttl", QString::number(m_doc->getFramePos(dia->clipDuration())));
+        properties.insert("loop", QString::number(dia->loop()));
+        properties.insert("crop", QString::number(dia->crop()));
+        properties.insert("fade", QString::number(dia->fade()));
+        properties.insert("luma_duration", dia->lumaDuration());
+        properties.insert("luma_file", dia->lumaFile());
+        properties.insert("softness", QString::number(dia->softness()));
+        properties.insert("animation", dia->animation());
+        properties.insert("begin", QString::number(dia->begin()));
+        
+        m_doc->slotCreateSlideshowClipFile(properties, groupInfo.at(0), groupInfo.at(1));
     }
     delete dia;
 }
@@ -2604,10 +2628,19 @@ void ProjectList::slotAddOrUpdateSequence(const QString frameName)
         } else {
             // Create sequence
             QStringList groupInfo = getGroup();
-            m_doc->slotCreateSlideshowClipFile(fileName, pattern, count, m_timecode.reformatSeparators(KdenliveSettings::sequence_duration()),
-                                               false, false, false,
-                                               m_timecode.getTimecodeFromFrames(int(ceil(m_timecode.fps()))), QString(), 0,
-                                               QString(), groupInfo.at(0), groupInfo.at(1));
+            QMap <QString, QString> properties;
+            properties.insert("name", fileName);
+            properties.insert("resource", pattern);
+            properties.insert("in", "0");
+            QString duration = m_timecode.reformatSeparators(KdenliveSettings::sequence_duration());
+            properties.insert("out", QString::number(m_doc->getFramePos(duration) * count));
+            properties.insert("ttl", QString::number(m_doc->getFramePos(duration)));
+            properties.insert("loop", QString::number(false));
+            properties.insert("crop", QString::number(false));
+            properties.insert("fade", QString::number(false));
+            properties.insert("luma_duration", m_timecode.getTimecodeFromFrames(int(ceil(m_timecode.fps()))));
+                        
+            m_doc->slotCreateSlideshowClipFile(properties, groupInfo.at(0), groupInfo.at(1));
         }
     } else emit displayMessage(i18n("Sequence not found"), -2);
 }
index 488ce636d1e0d8803ecc8ee214278000a806a96d..db30cfc0e4ec54b8ff77d1cfd5e6a321246b4d8c 100644 (file)
@@ -31,6 +31,7 @@
 SlideshowClip::SlideshowClip(Timecode tc, QWidget * parent) :
     QDialog(parent),
     m_count(0),
+    m_patternBegin(0),
     m_timecode(tc),
     m_thumbJob(NULL)
 {
@@ -157,6 +158,7 @@ void SlideshowClip::slotEnableLumaFile(int state)
 }
 
 // static
+//TODO: sequence begin
 int SlideshowClip::sequenceCount(KUrl file)
 {
     // find pattern
@@ -220,9 +222,10 @@ void SlideshowClip::parseFolder()
             filter.remove(filter.size() - 1, 1);
         }
         int precision = fullSize - filter.size();
+        m_patternBegin = m_view.pattern_url->url().fileName().section('.', 0, -2).right(precision).toInt();
         QString path;
         int gap = 0;
-        for (int i = 0; gap < 100; i++) {
+        for (int i = m_patternBegin; gap < 100; i++) {
             path = filter + QString::number(i).rightJustified(precision, '0', false) + ext;
             if (dir.exists(path)) {
                 result.append(path);
@@ -464,6 +467,11 @@ QString SlideshowClip::animationToGeometry(const QString &animation, int &ttl)
     return geometry;
 }
 
+int SlideshowClip::begin() const
+{
+   return m_patternBegin;
+}
+
 #include "slideshowclip.moc"
 
 
index 69fc496fcbcfee1c950aa8b21a6541a62ddcffbd..4189987bde1846134f0a5f33bbb4b15ce88c7db1 100644 (file)
@@ -48,6 +48,8 @@ public:
     QString lumaFile() const;
     int softness() const;
     QString animation() const;
+    /** @brief Return the first number for the sequence begining */
+    int begin() const;
 
     /** @brief Check if there are several files with filename pattern, like: image_001.jpg, image_002.jpg,... */
     static int sequenceCount(KUrl file);
@@ -72,6 +74,7 @@ private slots:
 private:
     Ui::SlideshowClip_UI m_view;
     int m_count;
+    int m_patternBegin;
     Timecode m_timecode;
     KIO::PreviewJob *m_thumbJob;
 };
index c2b34e2ffc1b82bcc41c809fdb9c8809d0ae60c6..9fec467c080b65d8419618bdd9dd87dbe9d8ffec 100644 (file)
@@ -6,7 +6,7 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>290</width>
+    <width>294</width>
     <height>507</height>
    </rect>
   </property>
  </widget>
  <customwidgets>
   <customwidget>
-   <class>KIntSpinBox</class>
-   <extends>QSpinBox</extends>
-   <header>knuminput.h</header>
-  </customwidget>
-  <customwidget>
-   <class>KUrlRequester</class>
-   <extends>QFrame</extends>
-   <header>kurlrequester.h</header>
-  </customwidget>
-  <customwidget>
-   <class>KListWidget</class>
-   <extends>QListWidget</extends>
-   <header>klistwidget.h</header>
+   <class>KComboBox</class>
+   <extends>QComboBox</extends>
+   <header>kcombobox.h</header>
   </customwidget>
   <customwidget>
    <class>KLineEdit</class>
    <extends>QLineEdit</extends>
    <header>klineedit.h</header>
   </customwidget>
-  <customwidget>
-   <class>KComboBox</class>
-   <extends>QComboBox</extends>
-   <header>kcombobox.h</header>
-  </customwidget>
   <customwidget>
    <class>KRestrictedLine</class>
    <extends>KLineEdit</extends>
    <header>krestrictedline.h</header>
   </customwidget>
+  <customwidget>
+   <class>KIntSpinBox</class>
+   <extends>QSpinBox</extends>
+   <header>knuminput.h</header>
+  </customwidget>
+  <customwidget>
+   <class>KListWidget</class>
+   <extends>QListWidget</extends>
+   <header>klistwidget.h</header>
+  </customwidget>
+  <customwidget>
+   <class>KUrlRequester</class>
+   <extends>QFrame</extends>
+   <header>kurlrequester.h</header>
+  </customwidget>
  </customwidgets>
  <resources/>
  <connections>