#include "kdenlivesettings.h"
#include "docclipbase.h"
#include "kdenlivedoc.h"
+#include "abstractclipitem.h"
#include <mlt++/Mlt.h>
#include <KFileDialog>
#include <kio/netaccess.h>
+#include <QGraphicsItemGroup>
+
ClipManager::ClipManager(KdenliveDoc *doc): m_doc(doc), m_audioThumbsEnabled(false), m_audioThumbsQueue(QList <QString> ()), m_generatingAudioId(QString()) {
m_clipIdCounter = 1;
m_folderIdCounter = 1;
m_folderList.remove(id);
}
+void ClipManager::setGroups(QList <QGraphicsItem *> 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 <QGraphicsItem *> children = static_cast <QGraphicsItemGroup *>(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 <AbstractClipItem *>(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();
+}
class KdenliveDoc;
class DocClipBase;
+class QGraphicsItem;
namespace Mlt {
class Producer;
class ClipManager: public QObject {
Q_OBJECT public:
-
ClipManager(KdenliveDoc *doc);
virtual ~ ClipManager();
void addClip(DocClipBase *clip);
void addFolder(const QString&, const QString&);
void deleteFolder(const QString&);
void clear();
+ void setGroups(QList <QGraphicsItem *> groups);
+ QDomElement groupsXml() const;
public slots:
void updatePreviewSettings();
private: // Private attributes
/** the list of clips in the document */
QList <DocClipBase*> m_clipList;
+ /** the list of groups in the document */
+ QList <QGraphicsItem *> m_groupsList;
QMap <QString, QString> m_folderList;
QList <QString> m_audioThumbsQueue;
/** the document undo stack*/
selection.at(i)->setFlags(QGraphicsItem::ItemIsSelectable);
}
}
+ syncGroups();
KdenliveSettings::setSnaptopoints(snap);
} else {
m_selectionGroup = new AbstractGroupItem(m_document->fps());
}
}
+void CustomTrackView::syncGroups() {
+ // create groups list
+ QList<QGraphicsItem*> 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"
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:
}
}
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);