+ m_reloadAction->setEnabled(true);
+ m_transcodeAction->setEnabled(true);
+ if (clip->clipType() == IMAGE && !KdenliveSettings::defaultimageapp().isEmpty()) {
+ m_openAction->setIcon(KIcon(KdenliveSettings::defaultimageapp()));
+ m_openAction->setEnabled(true);
+ } else if (clip->clipType() == AUDIO && !KdenliveSettings::defaultaudioapp().isEmpty()) {
+ m_openAction->setIcon(KIcon(KdenliveSettings::defaultaudioapp()));
+ m_openAction->setEnabled(true);
+ } else m_openAction->setEnabled(false);
+ }
+}
+
+QString ProjectList::currentClipUrl() const
+{
+ ProjectItem *item;
+ if (!m_listView->currentItem() || m_listView->currentItem()->type() == PROJECTFOLDERTYPE) return QString();
+ if (m_listView->currentItem()->type() == PROJECTSUBCLIPTYPE) {
+ // subitem
+ item = static_cast <ProjectItem*>(m_listView->currentItem()->parent());
+ } else item = static_cast <ProjectItem*>(m_listView->currentItem());
+ if (item == NULL) return QString();
+ return item->clipUrl().path();
+}
+
+void ProjectList::regenerateTemplate(const QString &id)
+{
+ ProjectItem *clip = getItemById(id);
+ if (clip) regenerateTemplate(clip);
+}
+
+void ProjectList::regenerateTemplate(ProjectItem *clip)
+{
+ //TODO: remove this unused method, only force_reload is necessary
+ clip->referencedClip()->producer()->set("force_reload", 1);
+}
+
+QDomDocument ProjectList::generateTemplateXml(QString path, const QString &replaceString)
+{
+ QDomDocument doc;
+ QFile file(path);
+ if (!file.open(QIODevice::ReadOnly)) {
+ kWarning() << "ERROR, CANNOT READ: " << path;
+ return doc;
+ }
+ if (!doc.setContent(&file)) {
+ kWarning() << "ERROR, CANNOT READ: " << path;
+ file.close();
+ return doc;
+ }
+ file.close();
+ QDomNodeList texts = doc.elementsByTagName("content");
+ for (int i = 0; i < texts.count(); i++) {
+ QString data = texts.item(i).firstChild().nodeValue();
+ data.replace("%s", replaceString);
+ texts.item(i).firstChild().setNodeValue(data);
+ }
+ return doc;
+}
+
+
+void ProjectList::slotAddClipCut(const QString &id, int in, int out)
+{
+ ProjectItem *clip = getItemById(id);
+ if (clip == NULL) return;
+ if (clip->referencedClip()->hasCutZone(QPoint(in, out))) return;
+ AddClipCutCommand *command = new AddClipCutCommand(this, id, in, out, QString(), true, false);
+ m_commandStack->push(command);
+}
+
+void ProjectList::addClipCut(const QString &id, int in, int out, const QString desc, bool newItem)
+{
+ ProjectItem *clip = getItemById(id);
+ if (clip) {
+ DocClipBase *base = clip->referencedClip();
+ base->addCutZone(in, out);
+ m_listView->blockSignals(true);
+ SubProjectItem *sub = new SubProjectItem(clip, in, out, desc);
+ if (newItem && desc.isEmpty() && !m_listView->isColumnHidden(1)) {
+ if (!clip->isExpanded()) clip->setExpanded(true);
+ m_listView->editItem(sub, 1);
+ }
+ QPixmap p = clip->referencedClip()->thumbProducer()->extractImage(in, (int)(sub->sizeHint(0).height() * m_render->dar()), sub->sizeHint(0).height() - 2);
+ sub->setData(0, Qt::DecorationRole, p);
+ m_doc->cachePixmap(clip->getClipHash() + '#' + QString::number(in), p);
+ m_listView->blockSignals(false);
+ }
+ emit projectModified();
+}
+
+void ProjectList::removeClipCut(const QString &id, int in, int out)
+{
+ ProjectItem *clip = getItemById(id);
+ if (clip) {
+ DocClipBase *base = clip->referencedClip();
+ base->removeCutZone(in, out);
+ SubProjectItem *sub = getSubItem(clip, QPoint(in, out));
+ if (sub) {
+ m_listView->blockSignals(true);
+ delete sub;
+ m_listView->blockSignals(false);
+ }