}
void CustomTrackView::slotAddTransition(ClipItem* clip, ItemInfo transitionInfo, int endTrack, QDomElement transition) {
+ if (transitionInfo.startPos >= transitionInfo.endPos) {
+ emit displayMessage(i18n("Invalid transition"), ErrorMessage);
+ return;
+ }
AddTransitionCommand* command = new AddTransitionCommand(this, transitionInfo, endTrack, transition, false, true);
m_commandStack->push(command);
m_document->setModified(true);
void CustomTrackView::addTransition(ItemInfo transitionInfo, int endTrack, QDomElement params) {
Transition *tr = new Transition(transitionInfo, endTrack, m_document->fps(), params, true);
- scene()->addItem(tr);
-
//kDebug() << "---- ADDING transition " << params.attribute("value");
- m_document->renderer()->mltAddTransition(tr->transitionTag(), endTrack, m_document->tracksCount() - transitionInfo.track, transitionInfo.startPos, transitionInfo.endPos, tr->toXML());
- m_document->setModified(true);
+ if (m_document->renderer()->mltAddTransition(tr->transitionTag(), endTrack, m_document->tracksCount() - transitionInfo.track, transitionInfo.startPos, transitionInfo.endPos, tr->toXML())) {
+ scene()->addItem(tr);
+ m_document->setModified(true);
+ } else {
+ emit displayMessage(i18n("Cannot add transition"), ErrorMessage);
+ delete tr;
+ }
}
void CustomTrackView::deleteTransition(ItemInfo transitionInfo, int endTrack, QDomElement params) {
// add transparency transition
int endTrack = getPreviousVideoTrack(info.track);
Transition *tr = new Transition(info, endTrack, m_document->fps(), MainWindow::transitions.getEffectByTag("composite", "alphatransparency"), true);
- scene()->addItem(tr);
- m_document->renderer()->mltAddTransition(tr->transitionTag(), endTrack, m_document->tracksCount() - info.track, info.startPos, info.endPos, tr->toXML());
+ if (m_document->renderer()->mltAddTransition(tr->transitionTag(), endTrack, m_document->tracksCount() - info.track, info.startPos, info.endPos, tr->toXML())) {
+ scene()->addItem(tr);
+ } else {
+ emit displayMessage(i18n("Cannot add transition"), ErrorMessage);
+ delete tr;
+ }
}
info.track = m_document->tracksCount() - item->track();
m_document->renderer()->mltInsertClip(info, item->xml(), item->baseClip()->producer(item->track()));
}
}
if (m_dragItem->type() == TRANSITIONWIDGET && (m_dragItemInfo.startPos != info.startPos || m_dragItemInfo.track != info.track)) {
- MoveTransitionCommand *command = new MoveTransitionCommand(this, m_dragItemInfo, info, false);
- m_commandStack->push(command);
- Transition *transition = (Transition *) m_dragItem;
- transition->updateTransitionEndTrack(getPreviousVideoTrack(m_dragItem->track()));
- m_document->renderer()->mltMoveTransition(transition->transitionTag(), (int)(m_document->tracksCount() - m_dragItemInfo.track), (int)(m_document->tracksCount() - m_dragItem->track()), transition->transitionEndTrack(), m_dragItemInfo.startPos, m_dragItemInfo.endPos, info.startPos, info.endPos);
+ Transition *transition = static_cast <Transition *>(m_dragItem);
+ if (!m_document->renderer()->mltMoveTransition(transition->transitionTag(), (int)(m_document->tracksCount() - m_dragItemInfo.track), (int)(m_document->tracksCount() - m_dragItem->track()), transition->transitionEndTrack(), m_dragItemInfo.startPos, m_dragItemInfo.endPos, info.startPos, info.endPos)) {
+ MoveTransitionCommand *command = new MoveTransitionCommand(this, info, m_dragItemInfo, true);
+ m_commandStack->push(command);
+ } else {
+ MoveTransitionCommand *command = new MoveTransitionCommand(this, m_dragItemInfo, info, false);
+ m_commandStack->push(command);
+ transition->updateTransitionEndTrack(getPreviousVideoTrack(m_dragItem->track()));
+ }
}
} else {
// Moving several clips. We need to delete them and readd them to new position,
ItemInfo trInfo = transition->info();
ItemInfo newTrInfo = trInfo;
newTrInfo.startPos = m_dragItem->startPos();
- new MoveTransitionCommand(this, trInfo, newTrInfo, true, resizeCommand);
+ if (newTrInfo.startPos < newTrInfo.endPos)
+ new MoveTransitionCommand(this, trInfo, newTrInfo, true, resizeCommand);
}
// Check if there is an automatic transition on that clip (upper track)
transition = getTransitionItemAtStart(m_dragItemInfo.startPos, m_dragItemInfo.track - 1);
ItemInfo newTrInfo = trInfo;
newTrInfo.startPos = m_dragItem->startPos();
ClipItem * upperClip = getClipItemAt(m_dragItemInfo.startPos, m_dragItemInfo.track - 1);
- if (!upperClip || !upperClip->baseClip()->isTransparent()) {
+ if ((!upperClip || !upperClip->baseClip()->isTransparent()) && newTrInfo.startPos < newTrInfo.endPos) {
new MoveTransitionCommand(this, trInfo, newTrInfo, true, resizeCommand);
}
}
emit displayMessage(i18n("Error when resizing clip"), ErrorMessage);
}
} else if (m_dragItem->type() == TRANSITIONWIDGET) {
- MoveTransitionCommand *command = new MoveTransitionCommand(this, m_dragItemInfo, info, false);
- m_commandStack->push(command);
Transition *transition = static_cast <Transition *>(m_dragItem);
- m_document->renderer()->mltMoveTransition(transition->transitionTag(), (int)(m_document->tracksCount() - m_dragItemInfo.track), (int)(m_document->tracksCount() - m_dragItemInfo.track), transition->transitionEndTrack(), m_dragItemInfo.startPos, m_dragItemInfo.endPos, info.startPos, info.endPos);
+ if (!m_document->renderer()->mltMoveTransition(transition->transitionTag(), (int)(m_document->tracksCount() - m_dragItemInfo.track), (int)(m_document->tracksCount() - m_dragItemInfo.track), transition->transitionEndTrack(), m_dragItemInfo.startPos, m_dragItemInfo.endPos, info.startPos, info.endPos)) {
+ emit displayMessage(i18n("Cannot move transition"), ErrorMessage);
+ MoveTransitionCommand *command = new MoveTransitionCommand(this, info, m_dragItemInfo, true);
+ m_commandStack->push(command);
+ } else {
+ MoveTransitionCommand *command = new MoveTransitionCommand(this, m_dragItemInfo, info, false);
+ m_commandStack->push(command);
+ }
+
}
//m_document->renderer()->doRefresh();
ItemInfo trInfo = tr->info();
ItemInfo newTrInfo = trInfo;
newTrInfo.endPos = m_dragItem->endPos();
- new MoveTransitionCommand(this, trInfo, newTrInfo, true, resizeCommand);
+ if (newTrInfo.endPos > newTrInfo.startPos) new MoveTransitionCommand(this, trInfo, newTrInfo, true, resizeCommand);
}
// Check if there is an automatic transition on that clip (upper track)
ItemInfo newTrInfo = trInfo;
newTrInfo.endPos = m_dragItem->endPos();
ClipItem * upperClip = getClipItemAtEnd(m_dragItemInfo.endPos, m_dragItemInfo.track - 1);
- if (!upperClip || !upperClip->baseClip()->isTransparent()) {
+ if ((!upperClip || !upperClip->baseClip()->isTransparent()) && newTrInfo.endPos > newTrInfo.startPos) {
new MoveTransitionCommand(this, trInfo, newTrInfo, true, resizeCommand);
}
}
emit displayMessage(i18n("Error when resizing clip"), ErrorMessage);
}
} else if (m_dragItem->type() == TRANSITIONWIDGET) {
- MoveTransitionCommand *command = new MoveTransitionCommand(this, m_dragItemInfo, info, false);
- m_commandStack->push(command);
Transition *transition = static_cast <Transition *>(m_dragItem);
- m_document->renderer()->mltMoveTransition(transition->transitionTag(), (int)(m_document->tracksCount() - m_dragItemInfo.track), (int)(m_document->tracksCount() - m_dragItemInfo.track), 0, m_dragItemInfo.startPos, m_dragItemInfo.endPos, info.startPos, info.endPos);
+ if (!m_document->renderer()->mltMoveTransition(transition->transitionTag(), (int)(m_document->tracksCount() - m_dragItemInfo.track), (int)(m_document->tracksCount() - m_dragItemInfo.track), 0, m_dragItemInfo.startPos, m_dragItemInfo.endPos, info.startPos, info.endPos)) {
+ emit displayMessage(i18n("Cannot move transition"), ErrorMessage);
+ MoveTransitionCommand *command = new MoveTransitionCommand(this, info, m_dragItemInfo, true);
+ m_commandStack->push(command);
+ } else {
+ MoveTransitionCommand *command = new MoveTransitionCommand(this, m_dragItemInfo, info, false);
+ m_commandStack->push(command);
+ }
}
//m_document->renderer()->doRefresh();
} else if (m_operationMode == FADEIN) {
// add transparency transition
int endTrack = getPreviousVideoTrack(info.track);
Transition *tr = new Transition(info, endTrack, m_document->fps(), MainWindow::transitions.getEffectByTag("composite", "alphatransparency"), true);
- scene()->addItem(tr);
- m_document->renderer()->mltAddTransition(tr->transitionTag(), endTrack, m_document->tracksCount() - info.track, info.startPos, info.endPos, tr->toXML());
+ if (m_document->renderer()->mltAddTransition(tr->transitionTag(), endTrack, m_document->tracksCount() - info.track, info.startPos, info.endPos, tr->toXML())) scene()->addItem(tr);
+ else {
+ emit displayMessage(i18n("Cannot add transition"), ErrorMessage);
+ delete tr;
+ }
+
}
baseclip->addReference();
info.endPos = tr->endPos() + offset;
info.track = tr->track() + trackOffset;
if (canBePastedTo(info, TRANSITIONWIDGET)) {
- new AddTransitionCommand(this, info, tr->transitionEndTrack() + trackOffset, tr->toXML(), false, true, pasteClips);
+ if (info.startPos >= info.endPos) {
+ emit displayMessage(i18n("Invalid transition"), ErrorMessage);
+ } else new AddTransitionCommand(this, info, tr->transitionEndTrack() + trackOffset, tr->toXML(), false, true, pasteClips);
} else emit displayMessage(i18n("Cannot paste transition to selected place"), ErrorMessage);
}
}