+void CustomTrackView::adjustTimelineClips(EDITMODE mode, AbstractClipItem *item, QUndoCommand *command)
+{
+ if (mode == OVERWRITEEDIT) {
+ // if we are in overwrite or push mode, move clips accordingly
+ ItemInfo info = item->info();
+ QRectF rect(info.startPos.frames(m_document->fps()), info.track * m_tracksHeight + m_tracksHeight / 2, (info.endPos - info.startPos).frames(m_document->fps()) - 1, m_tracksHeight / 2 - 2);
+ QList<QGraphicsItem *> selection = m_scene->items(rect);
+ selection.removeAll(item);
+ for (int i = 0; i < selection.count(); i++) {
+ if (selection.at(i)->type() == AVWIDGET) {
+ ClipItem *clip = static_cast<ClipItem *>(selection.at(i));
+ if (clip->startPos() < info.startPos) {
+ if (clip->endPos() > info.endPos) {
+ ItemInfo clipInfo = clip->info();
+ ItemInfo dupInfo = clipInfo;
+ GenTime diff = info.startPos - clip->startPos();
+ dupInfo.startPos = info.startPos;
+ dupInfo.cropStart += diff + GenTime(1, m_document->fps());
+ dupInfo.cropDuration += GenTime() - diff;
+ ItemInfo newdupInfo = dupInfo;
+ GenTime diff2 = info.endPos - info.startPos;
+ newdupInfo.startPos = GenTime(info.endPos.frames(m_document->fps()), m_document->fps());
+ newdupInfo.cropStart += diff2;
+ newdupInfo.cropDuration += GenTime() - diff2;
+ new RazorClipCommand(this, clipInfo, info.startPos, false, command);
+ new ResizeClipCommand(this, dupInfo, newdupInfo, false, false, command);
+ ClipItem *dup = cutClip(clipInfo, info.startPos, true, false);
+ if (dup) dup->resizeStart(info.endPos.frames(m_document->fps()));
+
+ } else {
+ ItemInfo newclipInfo = clip->info();
+ newclipInfo.endPos = info.startPos;
+ new ResizeClipCommand(this, clip->info(), newclipInfo, false, false, command);
+ clip->resizeEnd(info.startPos.frames(m_document->fps()));
+ }
+ } else if (clip->endPos() < info.endPos) {
+ new AddTimelineClipCommand(this, clip->xml(), clip->clipProducer(), clip->info(), clip->effectList(), false, true, command);
+ scene()->removeItem(clip);
+ delete clip;
+ clip = NULL;
+ } else {
+ ItemInfo newclipInfo = clip->info();
+ newclipInfo.startPos = info.endPos;
+ new ResizeClipCommand(this, clip->info(), newclipInfo, false, false, command);
+ clip->resizeStart(info.endPos.frames(m_document->fps()));
+ }
+ }
+ }
+ }
+}
+