From: Jean-Baptiste Mardelle Date: Wed, 18 Mar 2009 12:51:39 +0000 (+0000) Subject: First steps to save timeline clip groups X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=9b47b342d768fd1f9962fcebb38521fe4c4bbfad;p=kdenlive First steps to save timeline clip groups svn path=/trunk/kdenlive/; revision=3162 --- diff --git a/src/clipmanager.cpp b/src/clipmanager.cpp index 2960180f..5ed26f2b 100644 --- a/src/clipmanager.cpp +++ b/src/clipmanager.cpp @@ -23,6 +23,7 @@ #include "kdenlivesettings.h" #include "docclipbase.h" #include "kdenlivedoc.h" +#include "abstractclipitem.h" #include @@ -30,6 +31,8 @@ #include #include +#include + ClipManager::ClipManager(KdenliveDoc *doc): m_doc(doc), m_audioThumbsEnabled(false), m_audioThumbsQueue(QList ()), m_generatingAudioId(QString()) { m_clipIdCounter = 1; m_folderIdCounter = 1; @@ -339,3 +342,35 @@ void ClipManager::deleteFolder(const QString &id) { m_folderList.remove(id); } +void ClipManager::setGroups(QList groups) { + m_groupsList = groups; +} + +QDomElement ClipManager::groupsXml() const { + QDomDocument doc; + QDomElement groups = doc.createElement("groups"); + doc.appendChild(groups); + for (int i = 0; i < m_groupsList.count(); i++) { + QDomElement group = doc.createElement("group"); + groups.appendChild(group); + QList children = static_cast (m_groupsList.at(i))->childItems(); + for (int j = 0; j < children.count(); j++) { + if (children.at(j)->type() == AVWIDGET || children.at(j)->type() == TRANSITIONWIDGET) { + AbstractClipItem *item = static_cast (children.at(j)); + ItemInfo info = item->info(); + if (item->type() == AVWIDGET) { + QDomElement clip = doc.createElement("clipitem"); + clip.setAttribute("track", info.track); + clip.setAttribute("position", info.startPos.frames(m_doc->fps())); + group.appendChild(clip); + } else if (item->type() == TRANSITIONWIDGET) { + QDomElement clip = doc.createElement("transitionitem"); + clip.setAttribute("track", info.track); + clip.setAttribute("position", info.startPos.frames(m_doc->fps())); + group.appendChild(clip); + } + } + } + } + return doc.documentElement(); +} diff --git a/src/clipmanager.h b/src/clipmanager.h index 2d5f5107..2e1459d3 100644 --- a/src/clipmanager.h +++ b/src/clipmanager.h @@ -38,6 +38,7 @@ class KdenliveDoc; class DocClipBase; +class QGraphicsItem; namespace Mlt { class Producer; @@ -46,7 +47,6 @@ class Producer; class ClipManager: public QObject { Q_OBJECT public: - ClipManager(KdenliveDoc *doc); virtual ~ ClipManager(); void addClip(DocClipBase *clip); @@ -75,6 +75,8 @@ Q_OBJECT public: void addFolder(const QString&, const QString&); void deleteFolder(const QString&); void clear(); + void setGroups(QList groups); + QDomElement groupsXml() const; public slots: void updatePreviewSettings(); @@ -82,6 +84,8 @@ public slots: private: // Private attributes /** the list of clips in the document */ QList m_clipList; + /** the list of groups in the document */ + QList m_groupsList; QMap m_folderList; QList m_audioThumbsQueue; /** the document undo stack*/ diff --git a/src/customtrackview.cpp b/src/customtrackview.cpp index d145b745..d6a2680a 100644 --- a/src/customtrackview.cpp +++ b/src/customtrackview.cpp @@ -912,6 +912,7 @@ void CustomTrackView::groupSelectedItems(bool force, bool createNewGroup) { selection.at(i)->setFlags(QGraphicsItem::ItemIsSelectable); } } + syncGroups(); KdenliveSettings::setSnaptopoints(snap); } else { m_selectionGroup = new AbstractGroupItem(m_document->fps()); @@ -3950,4 +3951,15 @@ void CustomTrackView::getTransitionAvailableSpace(AbstractClipItem *item, GenTim } } +void CustomTrackView::syncGroups() { + // create groups list + QList items = scene()->items(); + int i = 0; + while (i < items.count()) { + if (items.at(i)->type() != GROUPWIDGET) items.removeAt(i); + else i++; + } + m_document->clipManager()->setGroups(items); +} + #include "customtrackview.moc" diff --git a/src/customtrackview.h b/src/customtrackview.h index 8b0d95b6..878f7aa7 100644 --- a/src/customtrackview.h +++ b/src/customtrackview.h @@ -234,6 +234,8 @@ private: void getClipAvailableSpace(AbstractClipItem *item, GenTime &minimum, GenTime &maximum); /** Get available space for transition move (min and max free positions) */ void getTransitionAvailableSpace(AbstractClipItem *item, GenTime &minimum, GenTime &maximum); + /** Send a list of all current groups to clipmanager */ + void syncGroups(); private slots: diff --git a/src/kdenlivedoc.cpp b/src/kdenlivedoc.cpp index 388de585..826413ac 100644 --- a/src/kdenlivedoc.cpp +++ b/src/kdenlivedoc.cpp @@ -984,8 +984,13 @@ bool KdenliveDoc::saveSceneList(const QString &path, const QString &scene) { } } addedXml.appendChild(markers); + + // Add guides if (!m_guidesXml.isNull()) addedXml.appendChild(sceneList.importNode(m_guidesXml, true)); + // Add clip groups + addedXml.appendChild(sceneList.importNode(m_clipManager->groupsXml(), true)); + //wes.appendChild(doc.importNode(kdenliveData, true)); QFile file(path);