X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fprojectlist.cpp;h=d393a286e39fd80b953724e49c8606f9dc049066;hb=9aad78d75990fd8fd7002ed8f96d095bc7174ee9;hp=ccb1599af834305bbda924710927bfd9d11d6d47;hpb=5741c8a544171480d054fe853098a5dfe317fde9;p=kdenlive diff --git a/src/projectlist.cpp b/src/projectlist.cpp index ccb1599a..d393a286 100644 --- a/src/projectlist.cpp +++ b/src/projectlist.cpp @@ -203,6 +203,8 @@ void ProjectList::slotOpenClip() } } + + void ProjectList::slotReloadClip() { ProjectItem *item = static_cast (m_listView->currentItem()); @@ -298,6 +300,10 @@ void ProjectList::slotItemEdited(QTreeWidgetItem *item, int column) slotUpdateClipProperties(clip, newprops); EditClipCommand *command = new EditClipCommand(this, clip->clipId(), oldprops, newprops, false); m_commandStack->push(command); + if (!clip->referencedClip()->getProperty("xmltemplate").isEmpty()) { + // This is a text template clip, update the image + regenerateTemplate(clip); + } } } else if (column == 1) { if (clip->isGroup()) { @@ -604,21 +610,10 @@ void ProjectList::slotAddClip(const QList givenList, QString group) } if (list.isEmpty()) return; - QString groupId; if (group.isEmpty()) { - ProjectItem *item = static_cast (m_listView->currentItem()); - if (item && !item->isGroup()) { - while (item->parent()) { - item = static_cast (item->parent()); - if (item->isGroup()) break; - } - } - if (item && item->isGroup()) { - group = item->groupName(); - groupId = item->clipId(); - } - } - m_doc->slotAddClipList(list, group, groupId); + QStringList groupInfo = getGroup(); + m_doc->slotAddClipList(list, groupInfo.at(0), groupInfo.at(1)); + } else m_doc->slotAddClipList(list, group, QString()); } void ProjectList::slotRemoveInvalidClip(const QString &id, bool replace) @@ -651,22 +646,8 @@ void ProjectList::slotAddColorClip() if (dia->exec() == QDialog::Accepted) { QString color = dia_ui->clip_color->color().name(); color = color.replace(0, 1, "0x") + "ff"; - - QString group; - QString groupId; - ProjectItem *item = static_cast (m_listView->currentItem()); - if (item && !item->isGroup()) { - while (item->parent()) { - item = static_cast (item->parent()); - if (item->isGroup()) break; - } - } - if (item && item->isGroup()) { - group = item->groupName(); - groupId = item->clipId(); - } - - m_doc->clipManager()->slotAddColorClipFile(dia_ui->clip_name->text(), color, dia_ui->clip_duration->text(), group, groupId); + QStringList groupInfo = getGroup(); + m_doc->clipManager()->slotAddColorClipFile(dia_ui->clip_name->text(), color, dia_ui->clip_duration->text(), groupInfo.at(0), groupInfo.at(1)); m_doc->setModified(true); } delete dia_ui; @@ -680,22 +661,8 @@ void ProjectList::slotAddSlideshowClip() SlideshowClip *dia = new SlideshowClip(m_timecode, this); if (dia->exec() == QDialog::Accepted) { - - QString group; - QString groupId; - ProjectItem *item = static_cast (m_listView->currentItem()); - if (item && !item->isGroup()) { - while (item->parent()) { - item = static_cast (item->parent()); - if (item->isGroup()) break; - } - } - if (item && item->isGroup()) { - group = item->groupName(); - groupId = item->clipId(); - } - - m_doc->clipManager()->slotAddSlideshowClipFile(dia->clipName(), dia->selectedPath(), dia->imageCount(), dia->clipDuration(), dia->loop(), dia->fade(), dia->lumaDuration(), dia->lumaFile(), dia->softness(), group, groupId); + QStringList groupInfo = getGroup(); + m_doc->clipManager()->slotAddSlideshowClipFile(dia->clipName(), dia->selectedPath(), dia->imageCount(), dia->clipDuration(), dia->loop(), dia->fade(), dia->lumaDuration(), dia->lumaFile(), dia->softness(), groupInfo.at(0), groupInfo.at(1)); m_doc->setModified(true); } delete dia; @@ -703,8 +670,19 @@ void ProjectList::slotAddSlideshowClip() void ProjectList::slotAddTitleClip() { - QString group; - QString groupId; + QStringList groupInfo = getGroup(); + m_doc->slotCreateTextClip(groupInfo.at(0), groupInfo.at(1)); +} + +void ProjectList::slotAddTitleTemplateClip() +{ + QStringList groupInfo = getGroup(); + m_doc->slotCreateTextTemplateClip(groupInfo.at(0), groupInfo.at(1)); +} + +QStringList ProjectList::getGroup() const +{ + QStringList result; ProjectItem *item = static_cast (m_listView->currentItem()); if (item && !item->isGroup()) { while (item->parent()) { @@ -713,11 +691,10 @@ void ProjectList::slotAddTitleClip() } } if (item && item->isGroup()) { - group = item->groupName(); - groupId = item->clipId(); - } - - m_doc->slotCreateTextClip(group, groupId); + result << item->groupName(); + result << item->clipId(); + } else result << QString() << QString(); + return result; } void ProjectList::setDocument(KdenliveDoc *doc) @@ -914,4 +891,38 @@ QString ProjectList::currentClipUrl() const return item->clipUrl().path(); } +void ProjectList::regenerateTemplate(const QString &id) +{ + ProjectItem *clip = getItemById(ix); + if (clip) regenerateTemplate(clip); +} + +void ProjectList::regenerateTemplate(ProjectItem *clip) +{ + // Generate image for template clip + const QString comment = clip->referencedClip()->getProperty("description"); + const QString path = clip->referencedClip()->getProperty("xmltemplate"); + QDomDocument doc; + QFile file(path); + if (!file.open(QIODevice::ReadOnly)) + return; + if (!doc.setContent(&file)) { + file.close(); + return; + } + 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", comment); + texts.item(i).firstChild().setNodeValue(data); + } + TitleWidget *dia_ui = new TitleWidget(KUrl(), QString(), m_render, this); + dia_ui->setXml(doc); + QImage pix = dia_ui->renderedPixmap(); + pix.save(clip->clipUrl().path()); + delete dia_ui; + clip->referencedClip()->producer()->set("force_reload", 1); +} + #include "projectlist.moc"