X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fkdenlivedoc.cpp;h=d76aa59bb8390ac0c548a15bd72150abb585ef6e;hb=5273a3b061a94e37ec3289211f67006731c93cab;hp=b109c9d72668ac1817315910a28e6bef7169dac2;hpb=4f2ff860ac2157cbc10dec34eafac61a41ffc0ce;p=kdenlive diff --git a/src/kdenlivedoc.cpp b/src/kdenlivedoc.cpp index b109c9d7..d76aa59b 100644 --- a/src/kdenlivedoc.cpp +++ b/src/kdenlivedoc.cpp @@ -81,6 +81,7 @@ KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup success = m_document.setContent(&file, false, &errorMsg); file.close(); KIO::NetAccess::removeTempFile(tmpFile); + if (!success) // It is corrupted KMessageBox::error(parent, errorMsg); else { @@ -121,6 +122,7 @@ KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup projectTrack.isMute = e.attribute("mute").toInt(); projectTrack.isBlind = e.attribute("blind").toInt(); projectTrack.isLocked = e.attribute("locked").toInt(); + projectTrack.trackName = e.attribute("trackname"); m_tracksList.append(projectTrack); } } @@ -199,11 +201,11 @@ KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup } } } - } else setProfilePath(profileName); + } // Something went wrong, or a new file was requested: create a new project if (!success) { - setProfilePath(QString()); + setProfilePath(profileName); m_url = KUrl(); m_document = createEmptyDocument(tracks.x(), tracks.y()); } @@ -259,14 +261,8 @@ int KdenliveDoc::setSceneList() return 0; } -QDomDocument KdenliveDoc::createEmptyDocument(const int videotracks, const int audiotracks) +QDomDocument KdenliveDoc::createEmptyDocument(int videotracks, int audiotracks) { - // Creating new document - QDomDocument doc; - QDomElement mlt = doc.createElement("mlt"); - doc.appendChild(mlt); - - TrackInfo videoTrack; videoTrack.type = VIDEOTRACK; videoTrack.isMute = false; @@ -279,6 +275,25 @@ QDomDocument KdenliveDoc::createEmptyDocument(const int videotracks, const int a audioTrack.isBlind = true; audioTrack.isLocked = false; + m_tracksList.clear(); + + for (int i = 0; i < audiotracks; i++) { + m_tracksList.append(audioTrack); + } + for (int i = 0; i < videotracks; i++) { + m_tracksList.append(videoTrack); + } + return createEmptyDocument(m_tracksList); +} + +QDomDocument KdenliveDoc::createEmptyDocument(QList tracks) +{ + // Creating new document + QDomDocument doc; + QDomElement mlt = doc.createElement("mlt"); + doc.appendChild(mlt); + + // Create black producer // For some unknown reason, we have to build the black producer here and not in renderer.cpp, otherwise // the composite transitions with the black track are corrupted. @@ -340,7 +355,7 @@ QDomDocument KdenliveDoc::createEmptyDocument(const int videotracks, const int a playlist.appendChild(blank0); // create playlists - int total = audiotracks + videotracks + 1; + int total = tracks.count() + 1; for (int i = 1; i < total; i++) { QDomElement playlist = doc.createElement("playlist"); @@ -353,20 +368,16 @@ QDomDocument KdenliveDoc::createEmptyDocument(const int videotracks, const int a tractor.appendChild(track0); // create audio tracks - for (int i = 1; i < audiotracks + 1; i++) { - QDomElement track = doc.createElement("track"); - track.setAttribute("producer", "playlist" + QString::number(i)); - track.setAttribute("hide", "video"); - tractor.appendChild(track); - m_tracksList.append(audioTrack); - } - - // create video tracks - for (int i = audiotracks + 1; i < total; i++) { + for (int i = 1; i < total; i++) { QDomElement track = doc.createElement("track"); track.setAttribute("producer", "playlist" + QString::number(i)); + if (tracks.at(i - 1).type == AUDIOTRACK) + track.setAttribute("hide", "video"); + else if (tracks.at(i - 1).isBlind) + track.setAttribute("hide", "video"); + if (tracks.at(i - 1).isMute) + track.setAttribute("hide", "audio"); tractor.appendChild(track); - m_tracksList.append(videoTrack); } for (int i = 2; i < total ; i++) { @@ -518,6 +529,7 @@ bool KdenliveDoc::saveSceneList(const QString &path, const QString &scene) trackinfo.setAttribute("mute", info.isMute); trackinfo.setAttribute("blind", info.isBlind); trackinfo.setAttribute("locked", info.isLocked); + trackinfo.setAttribute("trackname", info.trackName); tracksinfo.appendChild(trackinfo); } addedXml.appendChild(tracksinfo); @@ -638,11 +650,12 @@ MltVideoProfile KdenliveDoc::mltProfile() const return m_profile; } -void KdenliveDoc::setProfilePath(QString path) +bool KdenliveDoc::setProfilePath(QString path) { if (path.isEmpty()) path = KdenliveSettings::default_profile(); if (path.isEmpty()) path = "dv_pal"; m_profile = ProfilesDialog::getVideoProfile(path); + bool current_fps = m_fps; if (m_profile.path.isEmpty()) { // Profile not found, use embedded profile QDomElement profileInfo = m_document.elementsByTagName("profileinfo").at(0).toElement(); @@ -695,6 +708,7 @@ void KdenliveDoc::setProfilePath(QString path) kDebug() << "Kdenlive document, init timecode from path: " << path << ", " << m_fps; if (m_fps == 30000.0 / 1001.0) m_timecode.setFormat(m_fps, true); else m_timecode.setFormat(m_fps); + return (current_fps != m_fps); } double KdenliveDoc::dar() @@ -743,8 +757,10 @@ void KdenliveDoc::updatePreviewSettings() { m_clipManager->updatePreviewSettings(); m_render->updatePreviewSettings(); + QList prods = m_render->producersList(); m_clipManager->resetProducersList(m_render->producersList()); - + qDeleteAll(prods); + prods.clear(); } Render *KdenliveDoc::renderer() @@ -752,7 +768,7 @@ Render *KdenliveDoc::renderer() return m_render; } -void KdenliveDoc::updateClip(const QString &id) +void KdenliveDoc::updateClip(const QString id) { emit updateClipDisplay(id); } @@ -861,30 +877,7 @@ void KdenliveDoc::addClip(QDomElement elem, QString clipId, bool createClipItem) if (elem.attribute("type").toInt() == SLIDESHOW) { extension = KUrl(path).fileName(); path = KUrl(path).directory(); - } /*else if (elem.attribute("type").toInt() == TEXT && QFile::exists(path) == false) { - kDebug() << "// TITLE: " << elem.attribute("name") << " Preview file: " << elem.attribute("resource") << " DOES NOT EXIST"; - QString titlename = elem.attribute("name"); - QString titleresource; - if (titlename.isEmpty()) { - QStringList titleInfo = TitleWidget::getFreeTitleInfo(projectFolder()); - titlename = titleInfo.at(0); - titleresource = titleInfo.at(1); - elem.setAttribute("name", titlename); - kDebug() << "// New title set to: " << titlename; - } else { - titleresource = TitleWidget::getFreeTitleInfo(projectFolder()).at(1); - //titleresource = TitleWidget::getTitleResourceFromName(projectFolder(), titlename); - } - TitleWidget *dia_ui = new TitleWidget(KUrl(), KUrl(titleresource).directory(), m_render, kapp->activeWindow()); - QDomDocument doc; - doc.setContent(elem.attribute("xmldata")); - dia_ui->setXml(doc); - QImage pix = dia_ui->renderedPixmap(); - pix.save(titleresource); - elem.setAttribute("resource", titleresource); - setNewClipResource(clipId, titleresource); - delete dia_ui; - }*/ + } if (path.isEmpty() == false && QFile::exists(path) == false && elem.attribute("type").toInt() != TEXT && !elem.hasAttribute("placeholder")) { kDebug() << "// FOUND MISSING CLIP: " << path << ", TYPE: " << elem.attribute("type").toInt(); @@ -940,8 +933,7 @@ void KdenliveDoc::addClip(QDomElement elem, QString clipId, bool createClipItem) if (createClipItem) { emit addProjectClip(clip); - qApp->processEvents(); - m_render->getFileProperties(clip->toXML(), clip->getId(), true); + //qApp->processEvents(); } } @@ -1038,12 +1030,12 @@ void KdenliveDoc::addClipInfo(QDomElement elem, QDomElement orig, QString clipId } } -void KdenliveDoc::deleteProjectClip(QList ids) +void KdenliveDoc::deleteProjectClip(QStringList ids) { for (int i = 0; i < ids.size(); ++i) { emit deleteTimelineClip(ids.at(i)); - m_clipManager->slotDeleteClip(ids.at(i)); } + m_clipManager->slotDeleteClips(ids); setModified(true); } @@ -1097,10 +1089,6 @@ void KdenliveDoc::slotCreateTextClip(QString group, const QString &groupId, cons KStandardDirs::makeDir(titlesFolder); TitleWidget *dia_ui = new TitleWidget(templatePath, m_timecode, titlesFolder, m_render, kapp->activeWindow()); if (dia_ui->exec() == QDialog::Accepted) { - /*QStringList titleInfo = TitleWidget::getFreeTitleInfo(projectFolder()); - QImage pix = dia_ui->renderedPixmap(); - pix.save(titleInfo.at(1));*/ - //dia_ui->saveTitle(path + ".kdenlivetitle"); m_clipManager->slotAddTextClipFile(i18n("Title clip"), dia_ui->duration(), dia_ui->xml().toString(), group, groupId); setModified(true); emit selectLastAddedClip(QString::number(m_clipManager->lastClipId())); @@ -1117,15 +1105,9 @@ void KdenliveDoc::slotCreateTextTemplateClip(QString group, const QString &group if (path.isEmpty()) return; - QStringList titleInfo = TitleWidget::getFreeTitleInfo(projectFolder(), true); - //TODO: rewrite with new title system (just set resource) - /*TitleWidget *dia_ui = new TitleWidget(path, titlesFolder, m_render, kapp->activeWindow()); - QImage pix = dia_ui->renderedPixmap(); - pix.save(titleInfo.at(1)); - delete dia_ui; - m_clipManager->slotAddTextTemplateClip(titleInfo.at(0), titleInfo.at(1), path, group, groupId); - setModified(true);*/ + m_clipManager->slotAddTextTemplateClip(i18n("Template title clip"), path, group, groupId); + setModified(true); emit selectLastAddedClip(QString::number(m_clipManager->lastClipId())); } @@ -1176,6 +1158,7 @@ void KdenliveDoc::setTrackType(int ix, TrackInfo type) m_tracksList[ix].isMute = type.isMute; m_tracksList[ix].isBlind = type.isBlind; m_tracksList[ix].isLocked = type.isLocked; + m_tracksList[ix].trackName = type.trackName; } const QList KdenliveDoc::tracksList() const