else if (dragGroup && dragGroup->isSelected())
itemSelected = true;
- if (event->modifiers() == Qt::ControlModifier || itemSelected == false) {
+ if ((event->modifiers() == Qt::ControlModifier) || itemSelected == false) {
if (event->modifiers() != Qt::ControlModifier) {
resetSelectionGroup(false);
m_scene->clearSelection();
// A refresh seems necessary otherwise in zoomed mode, some clips disappear
viewport()->update();
- } else resetSelectionGroup();
+ } else {
+ resetSelectionGroup();
+ }
dragGroup = NULL;
if (m_dragItem->parentItem() && m_dragItem->parentItem()->type() == GROUPWIDGET) {
dragGroup = static_cast <AbstractGroupItem *>(m_dragItem->parentItem());
}
bool selected = !m_dragItem->isSelected();
- if (dragGroup)
+ /*if (dragGroup)
dragGroup->setSelected(selected);
- else
+ else*/
m_dragItem->setSelected(selected);
-
+ if (selected == false) {
+ m_dragItem = NULL;
+ }
groupSelectedItems();
- ClipItem *clip = static_cast <ClipItem *>(m_dragItem);
- updateClipTypeActions(dragGroup == NULL ? clip : NULL);
- m_pasteEffectsAction->setEnabled(m_copiedItems.count() == 1);
+ if (m_dragItem) {
+ ClipItem *clip = static_cast <ClipItem *>(m_dragItem);
+ updateClipTypeActions(dragGroup == NULL ? clip : NULL);
+ m_pasteEffectsAction->setEnabled(m_copiedItems.count() == 1);
+ }
+ else updateClipTypeActions(NULL);
}
if (collisionClip != NULL || m_dragItem == NULL) {
}
// If clicked item is selected, allow move
- if (event->modifiers() != Qt::ControlModifier && m_operationMode == NONE) QGraphicsView::mousePressEvent(event);
+ //if (!(event->modifiers() | Qt::ControlModifier) && m_operationMode == NONE)
+ QGraphicsView::mousePressEvent(event);
- m_clickPoint = QPoint((int)(mapToScene(event->pos()).x() - m_dragItem->startPos().frames(m_document->fps())), (int)(event->pos().y() - m_dragItem->pos().y()));
+ if (m_dragItem) {
+ m_clickPoint = QPoint((int)(mapToScene(event->pos()).x() - m_dragItem->startPos().frames(m_document->fps())), (int)(event->pos().y() - m_dragItem->pos().y()));
if (m_selectionGroup && m_dragItem->parentItem() == m_selectionGroup) {
// all other modes break the selection, so the user probably wants to move it
m_operationMode = MOVE;
}
else m_operationMode = m_dragItem->operationMode(mapToScene(event->pos()));
}
+ } else m_operationMode = NONE;
m_controlModifier = (event->modifiers() == Qt::ControlModifier);
// Update snap points
pasteInfo.startPos = GenTime(m_cursorPos, m_document->fps());
pasteInfo.endPos = pasteInfo.startPos + info.endPos;
pasteInfo.track = selectedTrack();
- if (!canBePastedTo(pasteInfo, AVWIDGET)) {
+ bool ok = canBePastedTo(pasteInfo, AVWIDGET);
+ if (!ok) {
+ // Cannot be inserted at cursor pos, insert at end of track
+ int duration = m_document->renderer()->mltTrackDuration(m_document->tracksCount() - pasteInfo.track) + 1;
+ pasteInfo.startPos = GenTime(duration, m_document->fps());
+ pasteInfo.endPos = pasteInfo.startPos + info.endPos;
+ ok = canBePastedTo(pasteInfo, AVWIDGET);
+ }
+ if (!ok) {
emit displayMessage(i18n("Cannot insert clip in timeline"), ErrorMessage);
return;
}
// Check if clips can be inserted at that position
for (int i = 0; i < ids.size(); ++i) {
- DocClipBase *clip = m_document->getBaseClip(ids.at(i));
+ QString clipData = ids.at(i);
+ DocClipBase *clip = m_document->getBaseClip(clipData.section('/', 0, 0));
if (clip == NULL) {
kDebug() << " WARNING))))))))) CLIP NOT FOUND : " << ids.at(i);
return false;
}
ItemInfo info;
info.startPos = start;
- info.cropDuration = clip->duration();
- info.endPos = info.startPos + info.cropDuration;
+ if (clipData.contains('/')) {
+ // this is a clip zone, set in / out
+ int in = clipData.section('/', 1, 1).toInt();
+ int out = clipData.section('/', 2, 2).toInt();
+ info.cropStart = GenTime(in, m_document->fps());
+ info.cropDuration = GenTime(out - in, m_document->fps());
+ }
+ else {
+ info.cropDuration = clip->duration();
+ }
+ info.endPos = info.startPos + info.cropDuration;
info.track = track;
infoList.append(info);
- start += clip->duration();
+ start += info.cropDuration;
}
if (!canBePastedTo(infoList, AVWIDGET)) {
return true;
m_selectionGroup = new AbstractGroupItem(m_document->fps());
start = GenTime();
for (int i = 0; i < ids.size(); ++i) {
- DocClipBase *clip = m_document->getBaseClip(ids.at(i));
+ QString clipData = ids.at(i);
+ DocClipBase *clip = m_document->getBaseClip(clipData.section('/', 0, 0));
ItemInfo info;
info.startPos = start;
- info.cropDuration = clip->duration();
- info.endPos = info.startPos + info.cropDuration;
+ if (clipData.contains('/')) {
+ // this is a clip zone, set in / out
+ int in = clipData.section('/', 1, 1).toInt();
+ int out = clipData.section('/', 2, 2).toInt();
+ info.cropStart = GenTime(in, m_document->fps());
+ info.cropDuration = GenTime(out - in, m_document->fps());
+ }
+ else {
+ info.cropDuration = clip->duration();
+ }
+ info.endPos = info.startPos + info.cropDuration;
info.track = 0;
start += info.cropDuration;
offsetList.append(start);
clearSelection(false);
clip->setSelected(true);
m_dragItem = clip;
- emit clipItemSelected(clip);
}
+ emit clipItemSelected(clip);
break;
}
}
}
+ else {
+ for (int i = 0; i < itemList.count(); i++) {
+ if (itemList.at(i)->type() == AVWIDGET) {
+ ClipItem *clip = static_cast<ClipItem *>(itemList.at(i));
+ if (clip->isMainSelectedClip()) {
+ emit clipItemSelected(clip);
+ break;
+ }
+ }
+ }
+ }
} else delete effectCommand;
}
void CustomTrackView::mouseReleaseEvent(QMouseEvent * event)
{
if (m_moveOpMode == SEEK) m_moveOpMode = NONE;
- QGraphicsView::mouseReleaseEvent(event);
+ if (!m_controlModifier) QGraphicsView::mouseReleaseEvent(event);
setViewportUpdateMode(QGraphicsView::MinimalViewportUpdate);
#if QT_VERSION >= 0x040600
if (m_dragItem) m_dragItem->setGraphicsEffect(NULL);
{
painter->setClipRect(rect);
QPen pen1 = painter->pen();
- pen1.setColor(palette().dark().color());
+ QColor lineColor = palette().dark().color();
+ lineColor.setAlpha(100);
+ pen1.setColor(lineColor);
painter->setPen(pen1);
double min = rect.left();
double max = rect.right();