From d18eaa998a96b0f8d9dd43e5b7dd2fb9574e71a1 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Wed, 15 Feb 2012 13:41:43 +0100 Subject: [PATCH] Cleanup slideshow clip method, prepare for improved sequence support (still needs MLT changes) --- src/clipmanager.cpp | 23 ++++--------- src/clipmanager.h | 5 +-- src/kdenlivedoc.cpp | 12 ++----- src/kdenlivedoc.h | 8 +---- src/projectlist.cpp | 59 +++++++++++++++++++++++++-------- src/slideshowclip.cpp | 10 +++++- src/slideshowclip.h | 3 ++ src/widgets/slideshowclip_ui.ui | 38 ++++++++++----------- 8 files changed, 88 insertions(+), 70 deletions(-) diff --git a/src/clipmanager.cpp b/src/clipmanager.cpp index 45f1fc9f..af4522a6 100644 --- a/src/clipmanager.cpp +++ b/src/clipmanager.cpp @@ -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 properties, const QString &group, const QString &groupId) { QDomDocument doc; QDomElement prod = doc.createElement("producer"); doc.appendChild(prod); - prod.setAttribute("resource", path); + QMap::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); diff --git a/src/clipmanager.h b/src/clipmanager.h index fe31b853..ce508927 100644 --- a/src/clipmanager.h +++ b/src/clipmanager.h @@ -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 properties, const QString &group, const QString &groupId); DocClipBase *getClipById(QString clipId); const QList getClipByResource(QString resource); void slotDeleteClips(QStringList ids); diff --git a/src/kdenlivedoc.cpp b/src/kdenlivedoc.cpp index 26dc37ad..d16167cb 100644 --- a/src/kdenlivedoc.cpp +++ b/src/kdenlivedoc.cpp @@ -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 properties, QString group, const QString &groupId) +{ + m_clipManager->slotAddSlideshowClipFile(properties, group, groupId); setModified(true); emit selectLastAddedClip(QString::number(m_clipManager->lastClipId())); } diff --git a/src/kdenlivedoc.h b/src/kdenlivedoc.h index 2e241148..fcdb0979 100644 --- a/src/kdenlivedoc.h +++ b/src/kdenlivedoc.h @@ -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 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); diff --git a/src/projectlist.cpp b/src/projectlist.cpp index 7be51928..ce01e828 100644 --- a/src/projectlist.cpp +++ b/src/projectlist.cpp @@ -1656,11 +1656,18 @@ void ProjectList::slotAddClip(const QList 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 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 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 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); } diff --git a/src/slideshowclip.cpp b/src/slideshowclip.cpp index 488ce636..db30cfc0 100644 --- a/src/slideshowclip.cpp +++ b/src/slideshowclip.cpp @@ -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" diff --git a/src/slideshowclip.h b/src/slideshowclip.h index 69fc496f..4189987b 100644 --- a/src/slideshowclip.h +++ b/src/slideshowclip.h @@ -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; }; diff --git a/src/widgets/slideshowclip_ui.ui b/src/widgets/slideshowclip_ui.ui index c2b34e2f..9fec467c 100644 --- a/src/widgets/slideshowclip_ui.ui +++ b/src/widgets/slideshowclip_ui.ui @@ -6,7 +6,7 @@ 0 0 - 290 + 294 507 @@ -317,35 +317,35 @@ - KIntSpinBox - QSpinBox -
knuminput.h
-
- - KUrlRequester - QFrame -
kurlrequester.h
-
- - KListWidget - QListWidget -
klistwidget.h
+ KComboBox + QComboBox +
kcombobox.h
KLineEdit QLineEdit
klineedit.h
- - KComboBox - QComboBox -
kcombobox.h
-
KRestrictedLine KLineEdit
krestrictedline.h
+ + KIntSpinBox + QSpinBox +
knuminput.h
+
+ + KListWidget + QListWidget +
klistwidget.h
+
+ + KUrlRequester + QFrame +
kurlrequester.h
+
-- 2.39.2