From e78b1cb3e0a8ca3b9656b37a4dbbd314bca1b446 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Thu, 19 Mar 2009 12:44:41 +0000 Subject: [PATCH] rebuild clip groups when loading a project svn path=/trunk/kdenlive/; revision=3164 --- src/customtrackview.cpp | 29 +++++++++++++++++++++++++++-- src/customtrackview.h | 2 ++ src/trackview.cpp | 4 ++++ 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/customtrackview.cpp b/src/customtrackview.cpp index 2b9f17d2..d8f9659e 100644 --- a/src/customtrackview.cpp +++ b/src/customtrackview.cpp @@ -2766,8 +2766,8 @@ ClipItem *CustomTrackView::getClipItemAt(GenTime pos, int track) { return getClipItemAt(framepos, track); } -Transition *CustomTrackView::getTransitionItemAt(GenTime pos, int track) { - QList list = scene()->items(QPointF(pos.frames(m_document->fps()), (track + 1) * m_tracksHeight)); +Transition *CustomTrackView::getTransitionItemAt(int pos, int track) { + QList list = scene()->items(QPointF(pos, (track + 1) * m_tracksHeight)); Transition *clip = NULL; for (int i = 0; i < list.size(); i++) { if (list.at(i)->type() == TRANSITIONWIDGET) { @@ -2778,6 +2778,10 @@ Transition *CustomTrackView::getTransitionItemAt(GenTime pos, int track) { return clip; } +Transition *CustomTrackView::getTransitionItemAt(GenTime pos, int track) { + return getTransitionItemAt(pos.frames(m_document->fps()), track); +} + Transition *CustomTrackView::getTransitionItemAtEnd(GenTime pos, int track) { int framepos = (int)(pos.frames(m_document->fps())); QList list = scene()->items(QPointF(framepos - 1, (track + 1) * m_tracksHeight)); @@ -3961,4 +3965,25 @@ void CustomTrackView::getTransitionAvailableSpace(AbstractClipItem *item, GenTim } +void CustomTrackView::loadGroups(const QDomNodeList groups) { + for (int i = 0; i < groups.count(); i++) { + QDomNodeList children = groups.at(i).childNodes(); + scene()->clearSelection(); + for (int nodeindex = 0; nodeindex < children.count(); nodeindex++) { + QDomNode n = children.item(nodeindex); + QDomElement elem = n.toElement(); + int pos = elem.attribute("position").toInt(); + int track = elem.attribute("track").toInt(); + if (elem.tagName() == "clipitem") { + ClipItem *clip = getClipItemAt(pos, track); //m_document->tracksCount() - transitiontrack); + if (clip) clip->setSelected(true); + } else { + Transition *clip = getTransitionItemAt(pos, track); //m_document->tracksCount() - transitiontrack); + if (clip) clip->setSelected(true); + } + } + groupSelectedItems(false, true); + } +} + #include "customtrackview.moc" diff --git a/src/customtrackview.h b/src/customtrackview.h index 8b0d95b6..7af5a097 100644 --- a/src/customtrackview.h +++ b/src/customtrackview.h @@ -112,6 +112,7 @@ public: void lockTrack(int ix, bool lock); void groupClips(bool group = true); void doGroupClips(QList clipInfos, QList transitionInfos, bool group); + void loadGroups(const QDomNodeList groups); public slots: void setCursorPos(int pos, bool seek = true); @@ -189,6 +190,7 @@ private: ClipItem *getClipItemAt(GenTime pos, int track); ClipItem *getClipItemAtEnd(GenTime pos, int track); ClipItem *getClipItemAtStart(GenTime pos, int track); + Transition *getTransitionItemAt(int pos, int track); Transition *getTransitionItemAt(GenTime pos, int track); Transition *getTransitionItemAtEnd(GenTime pos, int track); Transition *getTransitionItemAtStart(GenTime pos, int track); diff --git a/src/trackview.cpp b/src/trackview.cpp index 9ad4ec63..23803a3d 100644 --- a/src/trackview.cpp +++ b/src/trackview.cpp @@ -316,6 +316,10 @@ void TrackView::parseDocument(QDomDocument doc) { m_trackview->addGuide(pos, comment); } + // Rebuild groups + QDomNodeList groups = doc.elementsByTagName("group"); + m_trackview->loadGroups(groups); + m_trackview->setDuration(duration); kDebug() << "/////////// TOTAL PROJECT DURATION: " << duration; slotRebuildTrackHeaders(); -- 2.39.2