CustomTrackView::~CustomTrackView()
{
qDeleteAll(m_guides);
+ m_guides.clear();
m_waitingThumbs.clear();
}
// special cases (middle click button or ctrl / shift click
if (event->button() == Qt::MidButton) {
- m_document->renderer()->switchPlay();
+ emit playMonitor();
m_blockRefresh = false;
m_operationMode = NONE;
return;
//item->setZValue(10);
item->setFlag(QGraphicsItem::ItemIsMovable, false);
m_selectionGroup->addToGroup(item);
- m_waitingThumbs.append(item);
+ if (!clip->isPlaceHolder()) m_waitingThumbs.append(item);
}
updateSnapPoints(NULL, offsetList);
ClipItem *item = getClipItemAt((int) info.startPos.frames(m_document->fps()), info.track);
if (!item || cutTime >= item->endPos() || cutTime <= item->startPos()) {
emit displayMessage(i18n("Cannot find clip to cut"), ErrorMessage);
- kDebug() << "///////// ERROR CUTTING CLIP : (" << item->startPos().frames(25) << "-" << item->endPos().frames(25) << "), INFO: (" << info.startPos.frames(25) << "-" << info.endPos.frames(25) << ")" << ", CUT: " << cutTime.frames(25);
+ if (item) kDebug() << "///////// ERROR CUTTING CLIP : (" << item->startPos().frames(25) << "-" << item->endPos().frames(25) << "), INFO: (" << info.startPos.frames(25) << "-" << info.endPos.frames(25) << ")" << ", CUT: " << cutTime.frames(25);
+ else kDebug() << "/// ERROR NO CLIP at: " << info.startPos.frames(m_document->fps()) << ", track: " << info.track;
m_blockRefresh = false;
return NULL;
}
bool hasVideoClip = false;
QUndoCommand *addCommand = new QUndoCommand();
addCommand->setText(i18n("Add timeline clip"));
+ QList <ClipItem *> brokenClips;
for (int i = 0; i < items.count(); i++) {
ClipItem *item = static_cast <ClipItem *>(items.at(i));
clipInfo.track = m_document->tracksCount() - item->track();
if (m_document->renderer()->mltInsertClip(clipInfo, item->xml(), item->baseClip()->producer(item->track()), m_scene->editMode() == OVERWRITEEDIT, m_scene->editMode() == INSERTEDIT) == -1) {
emit displayMessage(i18n("Cannot insert clip in timeline"), ErrorMessage);
+ brokenClips.append(item);
+ continue;
}
adjustTimelineClips(m_scene->editMode(), item, ItemInfo(), addCommand);
}
item->setSelected(true);
}
- m_commandStack->push(addCommand);
+ qDeleteAll(brokenClips);
+ brokenClips.clear();
+ if (addCommand->childCount() > 0) m_commandStack->push(addCommand);
+ else delete addCommand;
setDocumentModified();
/*
new ResizeClipCommand(this, clip->info(), newclipInfo, false, false, command);
clip->resizeEnd(info.startPos.frames(m_document->fps()));
}
- } else if (clip->endPos() < info.endPos) {
+ } 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;
void CustomTrackView::addTrack(TrackInfo type, int ix)
{
if (ix == -1 || ix == m_document->tracksCount()) {
- m_document->insertTrack(ix, type);
+ m_document->insertTrack(0, type);
m_document->renderer()->mltInsertTrack(1, type.type == VIDEOTRACK);
} else {
m_document->insertTrack(m_document->tracksCount() - ix, type);
ItemInfo clipinfo = item->info();
if (item->type() == AVWIDGET) {
ClipItem *clip = static_cast <ClipItem *>(item);
- // slowmotion clips are not track dependant, so no need to update them
- if (clip->speed() != 1.0) continue;
+ // slowmotion clips are not track dependant, so no need to update them
+ if (clip->speed() != 1.0) continue;
// We add a move clip command so that we get the correct producer for new track number
if (clip->clipType() == AV || clip->clipType() == AUDIO) {
Mlt::Producer *prod;
}
setDocumentModified();
if (refresh) m_document->renderer()->doRefresh();
- m_waitingThumbs.append(item);
+ if (!baseclip->isPlaceHolder()) m_waitingThumbs.append(item);
m_thumbsTimer.start();
}
void CustomTrackView::slotUpdateAllThumbs()
{
+ if (!isEnabled()) return;
QList<QGraphicsItem *> itemList = items();
//if (itemList.isEmpty()) return;
ClipItem *item;