+void CustomTrackView::adjustTimelineClips(EDITMODE mode, ClipItem *item, ItemInfo posinfo, QUndoCommand *command)
+{
+ bool snap = KdenliveSettings::snaptopoints();
+ KdenliveSettings::setSnaptopoints(false);
+ if (mode == OVERWRITEEDIT) {
+ // if we are in overwrite mode, move clips accordingly
+ ItemInfo info;
+ if (item == NULL) info = posinfo;
+ else 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, 5);
+ QList<QGraphicsItem *> selection = m_scene->items(rect);
+ if (item) selection.removeAll(item);
+ for (int i = 0; i < selection.count(); i++) {
+ if (!selection.at(i)->isEnabled()) continue;
+ 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 - clipInfo.startPos;
+ dupInfo.startPos = info.startPos;
+ dupInfo.cropStart += diff;
+ dupInfo.cropDuration = clipInfo.endPos - info.startPos;
+ ItemInfo newdupInfo = dupInfo;
+ GenTime diff2 = info.endPos - info.startPos;
+ newdupInfo.startPos = info.endPos;
+ newdupInfo.cropStart += diff2;
+ newdupInfo.cropDuration = clipInfo.endPos - info.endPos;
+ 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, false, 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()));
+ }
+ }
+ }
+ } else if (mode == INSERTEDIT) {
+ // if we are in push mode, move clips accordingly
+ ItemInfo info;
+ if (item == NULL) info = posinfo;
+ else 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, 5);
+ QList<QGraphicsItem *> selection = m_scene->items(rect);
+ if (item) 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.startPos) {
+ ItemInfo clipInfo = clip->info();
+ ItemInfo dupInfo = clipInfo;
+ GenTime diff = info.startPos - clipInfo.startPos;
+ dupInfo.startPos = info.startPos;
+ dupInfo.cropStart += diff;
+ dupInfo.cropDuration = clipInfo.endPos - info.startPos;
+ new RazorClipCommand(this, clipInfo, info.startPos, false, command);
+ // Commented out; variable dup unused. --granjow
+ //ClipItem *dup = cutClip(clipInfo, info.startPos, true, false);
+ cutClip(clipInfo, info.startPos, true, false);
+ }
+ }
+ // TODO: add insertspacecommand
+ }
+ }
+ }
+
+ KdenliveSettings::setSnaptopoints(snap);
+}
+
+
+void CustomTrackView::adjustTimelineTransitions(EDITMODE mode, Transition *item, QUndoCommand *command)
+{
+ if (mode == OVERWRITEEDIT) {
+ // if we are in overwrite or push mode, move clips accordingly
+ bool snap = KdenliveSettings::snaptopoints();
+ KdenliveSettings::setSnaptopoints(false);
+ ItemInfo info = item->info();
+ QRectF rect(info.startPos.frames(m_document->fps()), info.track * m_tracksHeight + m_tracksHeight, (info.endPos - info.startPos).frames(m_document->fps()) - 1, 5);
+ QList<QGraphicsItem *> selection = m_scene->items(rect);
+ selection.removeAll(item);
+ for (int i = 0; i < selection.count(); i++) {
+ if (!selection.at(i)->isEnabled()) continue;
+ if (selection.at(i)->type() == TRANSITIONWIDGET) {
+ Transition *tr = static_cast<Transition *>(selection.at(i));
+ if (tr->startPos() < info.startPos) {
+ ItemInfo firstPos = tr->info();
+ ItemInfo newPos = firstPos;
+ firstPos.endPos = item->startPos();
+ newPos.startPos = item->endPos();
+ new MoveTransitionCommand(this, tr->info(), firstPos, true, command);
+ if (tr->endPos() > info.endPos) {
+ // clone transition
+ new AddTransitionCommand(this, newPos, tr->transitionEndTrack(), tr->toXML(), false, true, command);
+ }
+ } else if (tr->endPos() > info.endPos) {
+ // just resize
+ ItemInfo firstPos = tr->info();
+ firstPos.startPos = item->endPos();
+ new MoveTransitionCommand(this, tr->info(), firstPos, true, command);
+ } else {
+ // remove transition
+ new AddTransitionCommand(this, tr->info(), tr->transitionEndTrack(), tr->toXML(), true, true, command);
+ }
+ }
+ }
+ KdenliveSettings::setSnaptopoints(snap);
+ }
+}