return;
}
+ if (event->modifiers() & Qt::ShiftModifier) {
+ setDragMode(QGraphicsView::RubberBandDrag);
+ if (!(event->modifiers() & Qt::ControlModifier)) {
+ resetSelectionGroup();
+ scene()->clearSelection();
+ }
+ QGraphicsView::mousePressEvent(event);
+ m_blockRefresh = false;
+ m_operationMode = RUBBERSELECTION;
+ return;
+ }
+
m_blockRefresh = true;
m_dragItem = NULL;
m_dragGuide = NULL;
return;
}
- if (event->modifiers() & Qt::ShiftModifier && collisionList.count() == 0) {
- setDragMode(QGraphicsView::RubberBandDrag);
- if (!(event->modifiers() & Qt::ControlModifier)) {
- resetSelectionGroup();
- scene()->clearSelection();
- }
- QGraphicsView::mousePressEvent(event);
- m_blockRefresh = false;
- m_operationMode = RUBBERSELECTION;
- return;
- }
-
// if a guide and a clip were pressed, just select the guide
for (int i = 0; i < collisionList.count(); ++i) {
if (collisionList.at(i)->type() == GUIDEITEM) {
QUndoCommand *moveCommand = new QUndoCommand();
moveCommand->setText(i18n("Edit clip"));
ItemInfo clipInfo = m_dragItem->info();
- if (d.duration() < m_dragItem->duration() || d.cropStart() != clipInfo.cropStart) {
+ if (d.duration() < m_dragItem->cropDuration() || d.cropStart() != clipInfo.cropStart) {
// duration was reduced, so process it first
ItemInfo startInfo = clipInfo;
clipInfo.endPos = clipInfo.startPos + d.duration();
clipInfo.endPos = m_dragItem->endPos() + (clipInfo.startPos - startInfo.startPos);
new MoveClipCommand(this, startInfo, clipInfo, true, moveCommand);
}
- if (d.duration() > m_dragItem->duration()) {
+ if (d.duration() > m_dragItem->cropDuration()) {
// duration was increased, so process it after move
ItemInfo startInfo = clipInfo;
clipInfo.endPos = clipInfo.startPos + d.duration();
ClipItem *clip = static_cast <ClipItem *>(children.at(i));
ItemInfo info = clip->info();
kDebug() << " / / INSERT : " << pos.x();
- QRectF shape = QRectF(clip->startPos().frames(m_document->fps()), clip->track() * m_tracksHeight + 1, clip->duration().frames(m_document->fps()) - 0.02, m_tracksHeight - 1);
+ QRectF shape = QRectF(clip->startPos().frames(m_document->fps()), clip->track() * m_tracksHeight + 1, clip->cropDuration().frames(m_document->fps()) - 0.02, m_tracksHeight - 1);
kDebug() << " / / INSERT RECT: " << shape;
path = path.united(QPolygonF(shape));
}
ClipItem *transitionClip = NULL;
const int transitiontrack = getPreviousVideoTrack(info.track);
GenTime pos = GenTime((int)(mapToScene(m_menuPosition).x()), m_document->fps());
- if (pos < item->startPos() + item->duration() / 2) {
+ if (pos < item->startPos() + item->cropDuration() / 2) {
// add transition to clip start
info.startPos = item->startPos();
if (transitiontrack != 0) transitionClip = getClipItemAt((int) info.startPos.frames(m_document->fps()), m_document->tracksCount() - transitiontrack);
m_selectionGroup = new AbstractGroupItem(m_document->fps());
scene()->addItem(m_selectionGroup);
for (int i = 0; i < selection.count(); i++) {
- if (selection.at(i)->type() == AVWIDGET || selection.at(i)->type() == TRANSITIONWIDGET)
+ if ((!selection.at(i)->parentItem()) && (selection.at(i)->type() == AVWIDGET || selection.at(i)->type() == TRANSITIONWIDGET || selection.at(i)->type() == GROUPWIDGET)) {
m_selectionGroup->addToGroup(selection.at(i));
- selection.at(i)->setFlags(QGraphicsItem::ItemIsSelectable);
+ selection.at(i)->setFlags(QGraphicsItem::ItemIsSelectable);
+ }
}
// Move graphic items
m_selectionGroup->translate(0, m_tracksHeight);
// adjust track number
QList<QGraphicsItem *> children = m_selectionGroup->childItems();
for (int i = 0; i < children.count(); i++) {
+ if (children.at(i)->type() == GROUPWIDGET) {
+ AbstractGroupItem *grp = static_cast<AbstractGroupItem*>(children.at(i));
+ children << grp->childItems();
+ continue;
+ }
AbstractClipItem *item = static_cast <AbstractClipItem *>(children.at(i));
item->updateItem();
ItemInfo clipinfo = item->info();
}
}
resetSelectionGroup(false);
-
}
+
int maxHeight = m_tracksHeight * m_document->tracksCount();
for (int i = 0; i < m_guides.count(); i++) {
QLineF l = m_guides.at(i)->line();
m_selectionGroup = new AbstractGroupItem(m_document->fps());
scene()->addItem(m_selectionGroup);
for (int i = 0; i < selection.count(); i++) {
- if (selection.at(i)->type() == AVWIDGET || selection.at(i)->type() == TRANSITIONWIDGET) {
+ if ((!selection.at(i)->parentItem()) && (selection.at(i)->type() == AVWIDGET || selection.at(i)->type() == TRANSITIONWIDGET || selection.at(i)->type() == GROUPWIDGET)) {
m_selectionGroup->addToGroup(selection.at(i));
selection.at(i)->setFlags(QGraphicsItem::ItemIsSelectable);
}
QList<QGraphicsItem *> children = m_selectionGroup->childItems();
//kDebug() << "// FOUND CLIPS TO MOVE: " << children.count();
for (int i = 0; i < children.count(); i++) {
+ if (children.at(i)->type() == GROUPWIDGET) {
+ AbstractGroupItem *grp = static_cast<AbstractGroupItem*>(children.at(i));
+ children << grp->childItems();
+ continue;
+ }
if (children.at(i)->type() == AVWIDGET) {
ClipItem *clip = static_cast <ClipItem *>(children.at(i));
clip->updateItem();
int ix = item->hasEffect("volume", "fadeout");
if (ix != -1) {
QDomElement oldeffect = item->effectAt(ix);
- int end = (item->duration() + item->cropStart()).frames(m_document->fps());
+ int end = (item->cropDuration() + item->cropStart()).frames(m_document->fps());
int start = item->fadeOut();
if (start == 0) {
slotDeleteEffect(item, oldeffect);
ix = item->hasEffect("brightness", "fade_to_black");
if (ix != -1) {
QDomElement oldeffect = item->effectAt(ix);
- int end = (item->duration() + item->cropStart()).frames(m_document->fps());
+ int end = (item->cropDuration() + item->cropStart()).frames(m_document->fps());
int start = item->fadeOut();
if (start == 0) {
slotDeleteEffect(item, oldeffect);
if (itemList.at(i)->type() == AVWIDGET) {
ClipItem *item = static_cast <ClipItem *>(itemList.at(i));
if (item->parentItem()) resetGroup = true;
+ //kDebug()<<"// DELETE CLP AT: "<<item->info().startPos.frames(25);
new AddTimelineClipCommand(this, item->xml(), item->clipProducer(), item->info(), item->effectList(), true, true, deleteSelected);
emit clipItemSelected(NULL);
} else if (itemList.at(i)->type() == TRANSITIONWIDGET) {
Transition *item = static_cast <Transition *>(itemList.at(i));
+ //kDebug()<<"// DELETE TRANS AT: "<<item->info().startPos.frames(25);
if (item->parentItem()) resetGroup = true;
new AddTransitionCommand(this, item->info(), item->transitionEndTrack(), item->toXML(), true, true, deleteSelected);
emit transitionItemSelected(NULL);
void CustomTrackView::updateSnapPoints(AbstractClipItem *selected, QList <GenTime> offsetList, bool skipSelectedItems)
{
QList <GenTime> snaps;
- if (selected && offsetList.isEmpty()) offsetList.append(selected->duration());
+ if (selected && offsetList.isEmpty()) offsetList.append(selected->cropDuration());
QList<QGraphicsItem *> itemList = items();
for (int i = 0; i < itemList.count(); i++) {
if (itemList.at(i) == selected) continue;
kDebug() << "// CHK DOC TRK:" << freetrack << ", DUR:" << m_document->renderer()->mltTrackDuration(freetrack);
if (m_document->trackInfoAt(freetrack - 1).type == AUDIOTRACK) {
kDebug() << "// CHK DOC TRK:" << freetrack << ", DUR:" << m_document->renderer()->mltTrackDuration(freetrack);
- if (m_document->renderer()->mltTrackDuration(freetrack) < start || m_document->renderer()->mltGetSpaceLength(pos, freetrack, false) >= clip->duration().frames(m_document->fps())) {
+ if (m_document->renderer()->mltTrackDuration(freetrack) < start || m_document->renderer()->mltGetSpaceLength(pos, freetrack, false) >= clip->cropDuration().frames(m_document->fps())) {
kDebug() << "FOUND SPACE ON TRK: " << freetrack;
break;
}