+void CustomTrackView::groupClips(bool group) {
+ QList<QGraphicsItem *> itemList = scene()->selectedItems();
+ QList <ItemInfo> clipInfos;
+ QList <ItemInfo> transitionInfos;
+ GenTime currentPos = GenTime(m_cursorPos, m_document->fps());
+
+ // Expand groups
+ int max = itemList.count();
+ for (int i = 0; i < max; i++) {
+ if (itemList.at(i)->type() == GROUPWIDGET) {
+ itemList += itemList.at(i)->childItems();
+ }
+ }
+
+ for (int i = 0; i < itemList.count(); i++) {
+ if (itemList.at(i)->type() == AVWIDGET) {
+ AbstractClipItem *clip = static_cast <AbstractClipItem *>(itemList.at(i));
+ if (!clip->isItemLocked()) clipInfos.append(clip->info());
+ } else if (itemList.at(i)->type() == TRANSITIONWIDGET) {
+ AbstractClipItem *clip = static_cast <AbstractClipItem *>(itemList.at(i));
+ if (!clip->isItemLocked()) transitionInfos.append(clip->info());
+ }
+ }
+ if (clipInfos.count() > 0) {
+ GroupClipsCommand *command = new GroupClipsCommand(this, clipInfos, transitionInfos, group, true);
+ m_commandStack->push(command);
+ }
+}
+
+void CustomTrackView::doGroupClips(QList <ItemInfo> clipInfos, QList <ItemInfo> transitionInfos, bool group) {
+ resetSelectionGroup();
+ m_scene->clearSelection();
+ if (!group) {
+ 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()));
+ 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()));
+ tr->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
+ }
+ m_document->setModified(true);
+ return;
+ }
+
+ QList <QGraphicsItemGroup *> groups;
+ for (int i = 0; i < clipInfos.count(); i++) {
+ ClipItem *clip = getClipItemAt(clipInfos.at(i).startPos, clipInfos.at(i).track);
+ if (clip) {
+ clip->setSelected(true);
+ }
+ }
+ for (int i = 0; i < transitionInfos.count(); i++) {
+ Transition *clip = getTransitionItemAt(transitionInfos.at(i).startPos, transitionInfos.at(i).track);
+ if (clip) {
+ clip->setSelected(true);
+ }
+ }
+
+ groupSelectedItems(false, true);
+ m_document->setModified(true);
+}
+