X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fclipmanager.cpp;h=a01e958f0016d51333660a02a76b32e6475df88c;hb=93e45d239c3f3a1a80b0a087100e9df0c76525ce;hp=67f933cc3ad51a72521911e78c57b2e9024e3c92;hpb=aa1fa33654ce7a6568c41df395f5ce5cb5bf7a12;p=kdenlive diff --git a/src/clipmanager.cpp b/src/clipmanager.cpp index 67f933cc..a01e958f 100644 --- a/src/clipmanager.cpp +++ b/src/clipmanager.cpp @@ -18,93 +18,129 @@ ***************************************************************************/ #include #include +#include #include "addclipcommand.h" #include "kdenlivesettings.h" #include "clipmanager.h" #include "docclipbase.h" +#include "kdenlivedoc.h" -ClipManager::ClipManager(KdenliveDoc *doc):m_doc(doc) -{ - m_clipIdCounter = 1; +ClipManager::ClipManager(KdenliveDoc *doc): m_doc(doc) { + m_clipIdCounter = 1; + m_audioThumbsEnabled = KdenliveSettings::audiothumbnails(); } -ClipManager::~ClipManager() -{ +ClipManager::~ClipManager() { + qDeleteAll(m_clipList); } -void ClipManager::setThumbsProgress(KUrl url, int progress) -{ - m_doc->setThumbsProgress(url, progress); +void ClipManager::checkAudioThumbs() { + if (m_audioThumbsEnabled == KdenliveSettings::audiothumbnails()) return; + m_audioThumbsEnabled = KdenliveSettings::audiothumbnails(); + for (int i = 0; i < m_clipList.count(); i++) { + if (m_audioThumbsEnabled) m_clipList.at(i)->slotRequestAudioThumbs(); + else m_clipList.at(i)->slotClearAudioCache(); + } } +void ClipManager::setThumbsProgress(const QString &message, int progress) { + m_doc->setThumbsProgress(message, progress); +} -void ClipManager::addClip(DocClipBase *clip) -{ - m_clipList.append(clip); +QList ClipManager::documentClipList() { + return m_clipList; } -void ClipManager::slotDeleteClip(uint clipId) -{ - for (int i = 0; i < m_clipList.count(); i++) { - if (m_clipList.at(i)->getId() == clipId) { - //m_clipList.removeAt(i); - AddClipCommand *command = new AddClipCommand(m_doc, m_clipList.at(i)->toXML(), clipId, false); - m_doc->commandStack()->push(command); - break; +void ClipManager::addClip(DocClipBase *clip) { + m_clipList.append(clip); + QString id = clip->getId(); + if (id.toInt() >= m_clipIdCounter) m_clipIdCounter = id.toInt() + 1; +} + +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; + } } - } } -void ClipManager::deleteClip(uint clipId) -{ - for (int i = 0; i < m_clipList.count(); i++) { - if (m_clipList.at(i)->getId() == clipId) { - m_clipList.removeAt(i); - break; +void ClipManager::deleteClip(const QString &clipId) { + for (int i = 0; i < m_clipList.count(); i++) { + if (m_clipList.at(i)->getId() == clipId) { + m_clipList.removeAt(i); + break; + } } - } } -DocClipBase *ClipManager::getClipAt(int pos) -{ - return m_clipList.at(pos); +DocClipBase *ClipManager::getClipAt(int pos) { + return m_clipList.at(pos); } -DocClipBase *ClipManager::getClipById(int clipId) -{ - kDebug()<<"++++ CLIP MAN, LOOKING FOR CLIP ID: "<getId() == clipId) - { - kDebug()<<"++++ CLIP MAN, FOUND FOR CLIP ID: "<getId() == clipId) { + //kDebug() << "++++ CLIP MAN, FOUND FOR CLIP ID: " << clipId; + return m_clipList.at(i); + } } - } - return NULL; + return NULL; } -void ClipManager::slotAddClipFile(const KUrl url, const QString group) -{ - kDebug()<<"///// CLIP MANAGER, ADDING CLIP: "<setText(i18n("Add clips")); + + foreach(const KUrl file, urls) { + if (KIO::NetAccess::exists(file, KIO::NetAccess::SourceSide, NULL)) { + QDomDocument doc; + QDomElement prod = doc.createElement("producer"); + if (!group.isEmpty()) { + prod.setAttribute("groupname", group); + prod.setAttribute("groupid", groupId); + } + prod.setAttribute("resource", file.path()); + 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); + prod.setAttribute("in", "0"); + prod.setAttribute("out", m_doc->getFramePos(KdenliveSettings::image_duration()) - 1); + } + new AddClipCommand(m_doc, prod, QString::number(id), true, addClips); + } + } + 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"); prod.setAttribute("resource", url.path()); uint id = m_clipIdCounter++; prod.setAttribute("id", QString::number(id)); - if (!group.isEmpty()) prod.setAttribute("group", group); + 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())); + prod.setAttribute("type", (int) IMAGE); + prod.setAttribute("in", "0"); + prod.setAttribute("out", m_doc->getFramePos(KdenliveSettings::image_duration()) - 1); } - AddClipCommand *command = new AddClipCommand(m_doc, prod, id, true); + AddClipCommand *command = new AddClipCommand(m_doc, prod, QString::number(id), true); m_doc->commandStack()->push(command); } -void ClipManager::slotAddColorClipFile(const QString name, const QString color, QString duration, const QString group) -{ +void ClipManager::slotAddColorClipFile(const QString name, const QString color, QString duration, const QString group, const QString &groupId) { QDomDocument doc; QDomElement prod = doc.createElement("producer"); prod.setAttribute("mlt_service", "colour"); @@ -113,9 +149,68 @@ void ClipManager::slotAddColorClipFile(const QString name, const QString color, uint id = m_clipIdCounter++; prod.setAttribute("id", QString::number(id)); prod.setAttribute("in", "0"); - prod.setAttribute("out", m_doc->getFramePos(duration)); + prod.setAttribute("out", m_doc->getFramePos(duration) - 1); + prod.setAttribute("name", name); + if (!group.isEmpty()) { + prod.setAttribute("groupname", group); + prod.setAttribute("groupid", groupId); + } + AddClipCommand *command = new AddClipCommand(m_doc, prod, QString::number(id), true); + m_doc->commandStack()->push(command); +} + +void ClipManager::slotAddSlideshowClipFile(const QString name, const QString path, int count, const QString duration, const bool loop, const bool fade, const QString &luma_duration, const QString &luma_file, const int softness, QString group, const QString &groupId) { + QDomDocument doc; + QDomElement prod = doc.createElement("producer"); + prod.setAttribute("resource", path); + 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 - 1); + prod.setAttribute("ttl", m_doc->getFramePos(duration)); + prod.setAttribute("luma_duration", m_doc->getFramePos(luma_duration)); prod.setAttribute("name", name); - AddClipCommand *command = new AddClipCommand(m_doc, prod, id, true); + prod.setAttribute("loop", loop); + prod.setAttribute("fade", fade); + prod.setAttribute("softness", QString::number(softness)); + prod.setAttribute("luma_file", luma_file); + if (!group.isEmpty()) { + prod.setAttribute("groupname", group); + prod.setAttribute("groupid", groupId); + } + AddClipCommand *command = new AddClipCommand(m_doc, prod, QString::number(id), true); + m_doc->commandStack()->push(command); +} + + + +void ClipManager::slotAddTextClipFile(const QString titleName, const QString imagePath, const QString xml, const QString group, const QString &groupId) { + QDomDocument doc; + QDomElement prod = doc.createElement("producer"); + prod.setAttribute("resource", imagePath); + prod.setAttribute("titlename", titleName); + prod.setAttribute("xmldata", xml); + 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, prod, QString::number(id), true); m_doc->commandStack()->push(command); } +int ClipManager::getFreeClipId() { + return m_clipIdCounter++; +} + +int ClipManager::lastClipId() const { + return m_clipIdCounter - 1; +} + +