X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fkdenlivedoc.cpp;h=4f098d2e61e232f62cd7dddfbb61325cdc9b4fd1;hb=13a9ea0bddfc28b81492b3b00008c37b802796f8;hp=35c81324b04c857e2b3ce95e51adad9f21557553;hpb=1f91eb9e679b2aa34658289e5cac37f6a6b7fcd3;p=kdenlive diff --git a/src/kdenlivedoc.cpp b/src/kdenlivedoc.cpp index 35c81324..4f098d2e 100644 --- a/src/kdenlivedoc.cpp +++ b/src/kdenlivedoc.cpp @@ -92,26 +92,26 @@ KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup setProfilePath(profilePath); // Build tracks - QString xmltracks = infoXml.attribute("tracks"); - TrackInfo videoTrack; - videoTrack.type = VIDEOTRACK; - videoTrack.isMute = false; - videoTrack.isBlind = false; - videoTrack.isLocked = false; - - TrackInfo audioTrack; - audioTrack.type = AUDIOTRACK; - audioTrack.isMute = false; - audioTrack.isBlind = true; - audioTrack.isLocked = false; - - for (int i = 0; i < xmltracks.size(); i++) { - if (xmltracks.data()[i] == 'v') m_tracksList.append(videoTrack); - else m_tracksList.append(audioTrack); + QDomElement e; + QDomNode tracksinfo = m_document.elementsByTagName("tracksinfo").at(0); + TrackInfo projectTrack; + if (!tracksinfo.isNull()) { + QDomNodeList trackslist = tracksinfo.childNodes(); + int maxchild = trackslist.count(); + for (int k = 0; k < maxchild; k++) { + e = trackslist.at(k).toElement(); + if (e.tagName() == "trackinfo") { + if (e.attribute("type") == "audio") projectTrack.type = AUDIOTRACK; + else projectTrack.type = VIDEOTRACK; + projectTrack.isMute = e.attribute("mute").toInt(); + projectTrack.isBlind = e.attribute("blind").toInt(); + projectTrack.isLocked = e.attribute("locked").toInt(); + m_tracksList.append(projectTrack); + } + } + westley.removeChild(tracksinfo); } - - QDomElement e; QDomElement orig; QDomNodeList producers = m_document.elementsByTagName("producer"); QDomNodeList infoproducers = m_document.elementsByTagName("kdenlive_producer"); @@ -377,7 +377,27 @@ int KdenliveDoc::zoom() const { bool KdenliveDoc::convertDocument(double version) { kDebug() << "Opening a document with version " << version; - if (version == 0.81) return true; + if (version == 0.82) return true; + + if (version == 0.81) { + // Add correct tracks info + QDomNode kdenlivedoc = m_document.elementsByTagName("kdenlivedoc").at(0); + QDomElement infoXml = kdenlivedoc.toElement(); + QString currentTrackOrder = infoXml.attribute("tracks"); + QDomElement tracksinfo = m_document.createElement("tracksinfo"); + for (int i = 0; i < currentTrackOrder.size(); i++) { + QDomElement trackinfo = m_document.createElement("trackinfo"); + if (currentTrackOrder.data()[i] == 'a') { + trackinfo.setAttribute("type", "audio"); + trackinfo.setAttribute("blind", true); + } else trackinfo.setAttribute("blind", false); + trackinfo.setAttribute("mute", false); + trackinfo.setAttribute("locked", false); + tracksinfo.appendChild(trackinfo); + } + infoXml.appendChild(tracksinfo); + return true; + } // Opening a old Kdenlive document if (version == 0.5 || version == 0.7 || version > 0.81) { @@ -388,21 +408,25 @@ bool KdenliveDoc::convertDocument(double version) { if (version == 0.8) { // Add the tracks information - QString tracksOrder; QDomNodeList tracks = m_document.elementsByTagName("track"); int max = tracks.count(); - for (int i = 0; i < max; i++) { - QDomElement t = tracks.at(i).toElement(); - if (t.attribute("hide") == "video") - tracksOrder.append('a'); - else if (t.attribute("producer") != "black_track") - tracksOrder.append('v'); - } + QDomNode kdenlivedoc = m_document.elementsByTagName("kdenlivedoc").at(0); QDomElement infoXml = kdenlivedoc.toElement(); - QString currentTrackOrder = infoXml.attribute("tracks"); - if (currentTrackOrder.isEmpty()) infoXml.setAttribute("tracks", tracksOrder); + QDomElement tracksinfo = m_document.createElement("tracksinfo"); + for (int i = 0; i < max; i++) { + QDomElement trackinfo = m_document.createElement("trackinfo"); + QDomElement t = tracks.at(i).toElement(); + if (t.attribute("hide") == "video") { + trackinfo.setAttribute("type", "audio"); + trackinfo.setAttribute("blind", true); + } else trackinfo.setAttribute("blind", false); + trackinfo.setAttribute("mute", false); + trackinfo.setAttribute("locked", false); + if (t.attribute("producer") != "black_track") tracksinfo.appendChild(trackinfo); + } + infoXml.appendChild(tracksinfo); return TRUE; } @@ -478,17 +502,6 @@ bool KdenliveDoc::convertDocument(double version) { } tractor.removeChild(multitrack); - // write tracks order now that they've been sorted - QString tracksOrder; - QDomNodeList tracks = m_document.elementsByTagName("track"); - for (int i = 0; i < tracks.count(); ++i) { - QDomElement track = tracks.at(i).toElement(); - if (track.attribute("hide") == "video") - tracksOrder.append('a'); - else if (track.attribute("producer") != "black_track") - tracksOrder.append('v'); - } - // audio track mixing transitions should not be added to track view, so add required attribute QDomNodeList transitions = m_document.elementsByTagName("transition"); max = transitions.count(); @@ -723,7 +736,24 @@ bool KdenliveDoc::convertDocument(double version) { westley0.removeChild(kdenlivedoc); QDomElement kdenlivedoc_new = m_document.createElement("kdenlivedoc"); kdenlivedoc_new.setAttribute("profile", profile); - kdenlivedoc_new.setAttribute("tracks", tracksOrder); + + // Add tracks info + QDomNodeList tracks = m_document.elementsByTagName("track"); + max = tracks.count(); + QDomElement tracksinfo = m_document.createElement("tracksinfo"); + for (int i = 0; i < max; i++) { + QDomElement trackinfo = m_document.createElement("trackinfo"); + QDomElement t = tracks.at(i).toElement(); + if (t.attribute("hide") == "video") { + trackinfo.setAttribute("type", "audio"); + trackinfo.setAttribute("blind", true); + } else trackinfo.setAttribute("blind", false); + trackinfo.setAttribute("mute", false); + trackinfo.setAttribute("locked", false); + if (t.attribute("producer") != "black_track") tracksinfo.appendChild(trackinfo); + } + kdenlivedoc_new.appendChild(tracksinfo); + // Add all the producers that has a ressource in westley QDomElement westley_element = westley0.toElement(); if (westley_element.isNull()) { @@ -892,15 +922,26 @@ bool KdenliveDoc::saveSceneList(const QString &path, QDomDocument sceneList) { QDomElement addedXml = sceneList.createElement("kdenlivedoc"); QDomElement markers = sceneList.createElement("markers"); - addedXml.setAttribute("version", "0.81"); + addedXml.setAttribute("version", "0.82"); addedXml.setAttribute("profile", profilePath()); addedXml.setAttribute("position", m_render->seekPosition().frames(m_fps)); addedXml.setAttribute("zonein", m_zoneStart); addedXml.setAttribute("zoneout", m_zoneEnd); addedXml.setAttribute("projectfolder", m_projectFolder.path()); - addedXml.setAttribute("tracks", getTracksInfo()); addedXml.setAttribute("zoom", m_zoom); + // tracks info + QDomElement tracksinfo = sceneList.createElement("tracksinfo"); + foreach(const TrackInfo &info, m_tracksList) { + QDomElement trackinfo = sceneList.createElement("trackinfo"); + if (info.type == AUDIOTRACK) trackinfo.setAttribute("type", "audio"); + trackinfo.setAttribute("mute", info.isMute); + trackinfo.setAttribute("blind", info.isBlind); + trackinfo.setAttribute("locked", info.isLocked); + tracksinfo.appendChild(trackinfo); + } + addedXml.appendChild(tracksinfo); + // save project folders QMap folderlist = m_clipManager->documentFolderList(); @@ -1469,6 +1510,10 @@ void KdenliveDoc::switchTrackLock(int ix, bool lock) { m_tracksList[ix].isLocked = lock; } +bool KdenliveDoc::isTrackLocked(int ix) const { + return m_tracksList[ix].isLocked; +} + void KdenliveDoc::switchTrackVideo(int ix, bool hide) { m_tracksList[ix].isBlind = hide; // !m_tracksList.at(ix).isBlind; } @@ -1503,15 +1548,6 @@ QPoint KdenliveDoc::getTracksCount() const { return QPoint(video, audio); } -QString KdenliveDoc::getTracksInfo() const { - QString result; - foreach(const TrackInfo &info, m_tracksList) { - if (info.type == VIDEOTRACK) result.append('v'); - else result.append('a'); - } - return result; -} - void KdenliveDoc::cachePixmap(const QString &fileId, const QPixmap &pix) const { pix.save(m_projectFolder.path() + "/thumbs/" + fileId + ".png"); }