+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, QString group, const QString &groupId)
+{
+ QDomDocument doc;
+ QDomElement prod = doc.createElement("producer");
+ doc.appendChild(prod);
+ 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);
+ 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);
+ }
+ AddClipCommand *command = new AddClipCommand(m_doc, doc.documentElement(), QString::number(id), true);
+ m_doc->commandStack()->push(command);
+}
+
+
+
+void ClipManager::slotAddTextClipFile(const QString titleName, int out, const QString xml, 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("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", out);
+ AddClipCommand *command = new AddClipCommand(m_doc, doc.documentElement(), QString::number(id), true);
+ m_doc->commandStack()->push(command);
+}
+
+void ClipManager::slotAddTextTemplateClip(QString titleName, const KUrl path, const QString group, const QString &groupId)
+{
+ QDomDocument doc;
+ QDomElement prod = doc.createElement("producer");
+ doc.appendChild(prod);
+ prod.setAttribute("name", titleName);
+ prod.setAttribute("resource", 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");
+
+ int out = 0;
+ QDomDocument titledoc;
+ QFile txtfile(path.path());
+ if (txtfile.open(QIODevice::ReadOnly) && titledoc.setContent(&txtfile)) {
+ txtfile.close();
+ out = titledoc.documentElement().attribute("out").toInt();
+ } else txtfile.close();
+
+ if (out == 0) out = m_doc->getFramePos(KdenliveSettings::image_duration());
+ prod.setAttribute("out", out);
+
+ AddClipCommand *command = new AddClipCommand(m_doc, doc.documentElement(), QString::number(id), true);
+ m_doc->commandStack()->push(command);
+}
+
+int ClipManager::getFreeClipId()
+{
+ return m_clipIdCounter++;
+}
+
+int ClipManager::getFreeFolderId()
+{
+ return m_folderIdCounter++;
+}
+
+int ClipManager::lastClipId() const
+{
+ return m_clipIdCounter - 1;
+}
+
+QString ClipManager::projectFolder() const
+{
+ return m_doc->projectFolder().path();
+}
+
+void ClipManager::addFolder(const QString &id, const QString &name)
+{
+ m_folderList.insert(id, name);
+}
+
+void ClipManager::deleteFolder(const QString &id)
+{
+ m_folderList.remove(id);
+}
+
+AbstractGroupItem *ClipManager::createGroup()
+{
+ AbstractGroupItem *group = new AbstractGroupItem(m_doc->fps());
+ m_groupsList.append(group);
+ return group;
+}
+
+void ClipManager::removeGroup(AbstractGroupItem *group)
+{
+ m_groupsList.removeAll(group);
+}
+
+QDomElement ClipManager::groupsXml() const
+{
+ QDomDocument doc;
+ QDomElement groups = doc.createElement("groups");
+ doc.appendChild(groups);
+ for (int i = 0; i < m_groupsList.count(); i++) {
+ QDomElement group = doc.createElement("group");
+ groups.appendChild(group);
+ QList <QGraphicsItem *> children = m_groupsList.at(i)->childItems();
+ for (int j = 0; j < children.count(); j++) {
+ if (children.at(j)->type() == AVWIDGET || children.at(j)->type() == TRANSITIONWIDGET) {
+ AbstractClipItem *item = static_cast <AbstractClipItem *>(children.at(j));
+ ItemInfo info = item->info();
+ if (item->type() == AVWIDGET) {
+ QDomElement clip = doc.createElement("clipitem");
+ clip.setAttribute("track", info.track);
+ clip.setAttribute("position", info.startPos.frames(m_doc->fps()));
+ group.appendChild(clip);
+ } else if (item->type() == TRANSITIONWIDGET) {
+ QDomElement clip = doc.createElement("transitionitem");
+ clip.setAttribute("track", info.track);
+ clip.setAttribute("position", info.startPos.frames(m_doc->fps()));
+ group.appendChild(clip);
+ }
+ }
+ }
+ }
+ return doc.documentElement();
+}
+
+
+void ClipManager::slotClipModified(const QString &path)
+{
+ //kDebug() << "// CLIP: " << path << " WAS MODIFIED";
+ const QList <DocClipBase *> list = getClipByResource(path);
+ for (int i = 0; i < list.count(); i++) {
+ DocClipBase *clip = list.at(i);
+ if (clip != NULL) {
+ QString id = clip->getId();
+ if (!m_modifiedClips.contains(id))
+ emit modifiedClip(id);
+ m_modifiedClips[id] = QTime::currentTime();
+ }
+ }
+ if (!m_modifiedTimer.isActive()) m_modifiedTimer.start();
+}
+
+void ClipManager::slotProcessModifiedClips()
+{
+ if (!m_modifiedClips.isEmpty()) {
+ QMapIterator<QString, QTime> i(m_modifiedClips);
+ while (i.hasNext()) {
+ i.next();
+ if (QTime::currentTime().msecsTo(i.value()) <= -1500) {
+ emit reloadClip(i.key());
+ m_modifiedClips.remove(i.key());
+ break;
+ }
+ }
+ }
+ if (m_modifiedClips.isEmpty()) m_modifiedTimer.stop();
+}
+
+void ClipManager::slotClipMissing(const QString &path)
+{
+ // kDebug() << "// CLIP: " << path << " WAS MISSING";
+ const QList <DocClipBase *> list = getClipByResource(path);
+ for (int i = 0; i < list.count(); i++) {
+ DocClipBase *clip = list.at(i);
+ if (clip != NULL) emit missingClip(clip->getId());
+ }
+}
+
+void ClipManager::slotClipAvailable(const QString &path)
+{
+ // kDebug() << "// CLIP: " << path << " WAS ADDED";
+ const QList <DocClipBase *> list = getClipByResource(path);
+ for (int i = 0; i < list.count(); i++) {
+ DocClipBase *clip = list.at(i);
+ if (clip != NULL) emit availableClip(clip->getId());
+ }
+}
+
+int ClipManager::clipsCount() const
+{
+ return m_clipList.count();
+}
+
+