#include "docclipbase.h"
#include "kdenlivedoc.h"
#include "abstractclipitem.h"
+#include "abstractgroupitem.h"
#include <mlt++/Mlt.h>
m_folderList.remove(id);
}
-void ClipManager::setGroups(QList <QGraphicsItem *> groups) {
- m_groupsList = groups;
+AbstractGroupItem *ClipManager::createGroup() {
+ AbstractGroupItem *group = new AbstractGroupItem(m_doc->fps());
+ m_groupsList.append(group);
+ return group;
+}
+
+void ClipManager::removeGroup(AbstractGroupItem *group) {
+ m_groupsList.removeAll(group);
}
QDomElement ClipManager::groupsXml() const {
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();
+ QList <QGraphicsItem *> children = 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));
class KdenliveDoc;
class DocClipBase;
-class QGraphicsItem;
+class AbstractGroupItem;
namespace Mlt {
class Producer;
void addFolder(const QString&, const QString&);
void deleteFolder(const QString&);
void clear();
- void setGroups(QList <QGraphicsItem *> groups);
+ AbstractGroupItem *createGroup();
+ void removeGroup(AbstractGroupItem *group);
QDomElement groupsXml() const;
public slots:
/** the list of clips in the document */
QList <DocClipBase*> m_clipList;
/** the list of groups in the document */
- QList <QGraphicsItem *> m_groupsList;
+ QList <AbstractGroupItem *> m_groupsList;
QMap <QString, QString> m_folderList;
QList <QString> m_audioThumbsQueue;
/** the document undo stack*/
children.at(i)->setSelected(selectItems);
// Rebuild groups or they get corrupted (because of translate / move issues)
- QGraphicsItemGroup *group = static_cast <QGraphicsItemGroup *>(children.at(i));
+ AbstractGroupItem *group = static_cast <AbstractGroupItem *>(children.at(i));
//kDebug()<<"// GRP POS:"<<group->scenePos()<<", SELECT:"<<selectionPos;
if (group->scenePos() != selectionPos)
group->translate(selectionPos.x(), selectionPos.y());
//group->setPos(-selectionPos.x(), -selectionPos.y());
QList<QGraphicsItem *> selection = group->childItems();
+ m_document->clipManager()->removeGroup(group);
scene()->destroyItemGroup(group);
if (!selection.isEmpty()) {
QPointF top = selection.at(0)->sceneBoundingRect().topLeft();
}
}
- AbstractGroupItem *newGroup = new AbstractGroupItem(m_document->fps());
+ AbstractGroupItem *newGroup = m_document->clipManager()->createGroup();
newGroup->translate(-top.x(), -top.y() + 1);
newGroup->setPos(top.x(), top.y() - 1);
scene()->addItem(newGroup);
bool snap = KdenliveSettings::snaptopoints();
KdenliveSettings::setSnaptopoints(false);
if (createNewGroup) {
- AbstractGroupItem *newGroup = new AbstractGroupItem(m_document->fps());
+ AbstractGroupItem *newGroup = m_document->clipManager()->createGroup();
newGroup->translate(-top.x(), -top.y() + 1);
newGroup->setPos(top.x(), top.y() - 1);
scene()->addItem(newGroup);
// CHeck if we are trying to include a group in a group
- QList <QGraphicsItemGroup *> groups;
+ QList <AbstractGroupItem *> groups;
for (int i = 0; i < selection.count(); i++) {
- if (selection.at(i)->type() == GROUPWIDGET && !groups.contains(static_cast<QGraphicsItemGroup *>(selection.at(i)))) {
- groups.append(static_cast<QGraphicsItemGroup *>(selection.at(i)));
- } else if (selection.at(i)->parentItem() && !groups.contains(static_cast<QGraphicsItemGroup *>(selection.at(i)->parentItem()))) groups.append(static_cast<QGraphicsItemGroup *>(selection.at(i)->parentItem()));
+ if (selection.at(i)->type() == GROUPWIDGET && !groups.contains(static_cast<AbstractGroupItem *>(selection.at(i)))) {
+ groups.append(static_cast<AbstractGroupItem *>(selection.at(i)));
+ } else if (selection.at(i)->parentItem() && !groups.contains(static_cast<AbstractGroupItem *>(selection.at(i)->parentItem()))) groups.append(static_cast<AbstractGroupItem *>(selection.at(i)->parentItem()));
}
if (!groups.isEmpty()) {
// ungroup previous groups
while (!groups.isEmpty()) {
- QGraphicsItemGroup *grp = groups.takeFirst();
+ AbstractGroupItem *grp = groups.takeFirst();
+ m_document->clipManager()->removeGroup(grp);
scene()->destroyItemGroup(grp);
}
selection = m_scene->selectedItems();
selection.at(i)->setFlags(QGraphicsItem::ItemIsSelectable);
}
}
- syncGroups();
KdenliveSettings::setSnaptopoints(snap);
} else {
m_selectionGroup = new AbstractGroupItem(m_document->fps());
for (int i = 0; i < clipInfos.count(); i++) {
ClipItem *clip = getClipItemAt(clipInfos.at(i).startPos, clipInfos.at(i).track);
if (clip == NULL) continue;
- if (clip->parentItem()) scene()->destroyItemGroup(static_cast <QGraphicsItemGroup *>(clip->parentItem()));
+ if (clip->parentItem() && clip->parentItem()->type() == GROUPWIDGET) {
+ AbstractGroupItem *grp = static_cast <AbstractGroupItem *>(clip->parentItem());
+ m_document->clipManager()->removeGroup(grp);
+ scene()->destroyItemGroup(grp);
+ }
clip->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
}
for (int i = 0; i < transitionInfos.count(); i++) {
Transition *tr = getTransitionItemAt(transitionInfos.at(i).startPos, transitionInfos.at(i).track);
if (tr == NULL) continue;
- if (tr->parentItem()) scene()->destroyItemGroup(static_cast <QGraphicsItemGroup *>(tr->parentItem()));
+ if (tr->parentItem() && tr->parentItem()->type() == GROUPWIDGET) {
+ AbstractGroupItem *grp = static_cast <AbstractGroupItem *>(tr->parentItem());
+ m_document->clipManager()->removeGroup(grp);
+ scene()->destroyItemGroup(grp);
+ }
tr->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
}
m_document->setModified(true);
}
}
-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"