X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fcustomtrackview.cpp;h=e2a2a758ae06e42f783c5bbe15a7d9da829be1fc;hb=7d1f818376b25f793ad6e8960b73a24a39605945;hp=fa5dfc466bbd729f84a730e85f5a5629a62f17ae;hpb=9cee0c0825fe45a53c37c61a2061e025ca43012e;p=kdenlive diff --git a/src/customtrackview.cpp b/src/customtrackview.cpp index fa5dfc46..e2a2a758 100644 --- a/src/customtrackview.cpp +++ b/src/customtrackview.cpp @@ -1000,13 +1000,11 @@ void CustomTrackView::groupSelectedItems(bool force, bool createNewGroup) } QList selection = m_scene->selectedItems(); if (selection.isEmpty()) return; - QPointF top = selection.at(0)->sceneBoundingRect().topLeft(); + QRectF rectUnion; // Find top left position of selection - for (int i = 1; i < selection.count(); i++) { + for (int i = 0; i < selection.count(); i++) { if (selection.at(i)->type() == AVWIDGET || selection.at(i)->type() == TRANSITIONWIDGET || selection.at(i)->type() == GROUPWIDGET) { - QPointF currenttop = selection.at(i)->sceneBoundingRect().topLeft(); - if (currenttop.x() < top.x()) top.setX(currenttop.x()); - if (currenttop.y() < top.y()) top.setY(currenttop.y()); + rectUnion = rectUnion.united(selection.at(i)->sceneBoundingRect()); } } @@ -1015,8 +1013,8 @@ void CustomTrackView::groupSelectedItems(bool force, bool createNewGroup) KdenliveSettings::setSnaptopoints(false); if (createNewGroup) { AbstractGroupItem *newGroup = m_document->clipManager()->createGroup(); - newGroup->translate(-top.x(), -top.y() + 1); - newGroup->setPos(top.x(), top.y() - 1); + newGroup->translate(-rectUnion.left(), -rectUnion.top() + 1); + newGroup->setPos(rectUnion.left(), rectUnion.top() - 1); scene()->addItem(newGroup); // CHeck if we are trying to include a group in a group @@ -1045,8 +1043,8 @@ void CustomTrackView::groupSelectedItems(bool force, bool createNewGroup) KdenliveSettings::setSnaptopoints(snap); } else { m_selectionGroup = new AbstractGroupItem(m_document->fps()); - m_selectionGroup->translate(-top.x(), -top.y() + 1); - m_selectionGroup->setPos(top.x(), top.y() - 1); + m_selectionGroup->translate(-rectUnion.left(), -rectUnion.top() + 1); + m_selectionGroup->setPos(rectUnion.left(), rectUnion.top() - 1); scene()->addItem(m_selectionGroup); for (int i = 0; i < selection.count(); i++) { if (selection.at(i)->parentItem() == NULL && (selection.at(i)->type() == AVWIDGET || selection.at(i)->type() == TRANSITIONWIDGET || selection.at(i)->type() == GROUPWIDGET)) { @@ -3413,8 +3411,10 @@ void CustomTrackView::moveGroup(QList startClip, QList sta ClipItem *clip = getClipItemAt(startClip.at(i).startPos, startClip.at(i).track); if (clip) { clip->setItemLocked(false); - if (clip->parentItem()) clip->parentItem()->setSelected(true); - else clip->setSelected(true); + if (clip->parentItem()) { + clip->parentItem()->setSelected(true); + } + clip->setSelected(true); m_document->renderer()->mltRemoveClip(m_document->tracksCount() - startClip.at(i).track, startClip.at(i).startPos); } else kDebug() << "//MISSING CLIP AT: " << startClip.at(i).startPos.frames(25); } @@ -3426,8 +3426,9 @@ void CustomTrackView::moveGroup(QList startClip, QList sta Transition *tr = getTransitionItemAt(startTransition.at(i).startPos, startTransition.at(i).track); if (tr) { tr->setItemLocked(false); - if (tr->parentItem()) tr->parentItem()->setSelected(true); - else tr->setSelected(true); + if (tr->parentItem()) { + tr->parentItem()->setSelected(true); + } else tr->setSelected(true); m_document->renderer()->mltDeleteTransition(tr->transitionTag(), tr->transitionEndTrack(), m_document->tracksCount() - startTransition.at(i).track, startTransition.at(i).startPos, startTransition.at(i).endPos, tr->toXML()); } else kDebug() << "//MISSING TRANSITION AT: " << startTransition.at(i).startPos.frames(25); } @@ -3445,6 +3446,12 @@ void CustomTrackView::moveGroup(QList startClip, QList sta for (int i = 0; i < max; i++) { if (children.at(i)->type() == GROUPWIDGET) { children += children.at(i)->childItems(); + AbstractGroupItem *grp = static_cast(children.at(i)); + //grp->moveBy(offset.frames(m_document->fps()), trackOffset *(qreal) m_tracksHeight); + /*m_document->clipManager()->removeGroup(grp); + m_scene->destroyItemGroup(grp);*/ + children.removeAll(children.at(i)); + i--; } } @@ -3860,7 +3867,7 @@ bool CustomTrackView::addGuide(const GenTime pos, const QString &comment) return false; } } - Guide *g = new Guide(this, pos, comment, m_document->fps(), m_tracksHeight * m_document->tracksCount()); + Guide *g = new Guide(this, pos, comment, m_tracksHeight * m_document->tracksCount()); scene()->addItem(g); m_guides.append(g); qSort(m_guides.begin(), m_guides.end(), sortGuidesList); @@ -4931,4 +4938,54 @@ void CustomTrackView::reloadTransitionLumas() emit transitionItemSelected(NULL); } -#include "customtrackview.moc" +double CustomTrackView::fps() const +{ + return m_document->fps(); +} + +void CustomTrackView::updateProjectFps() +{ + // update all clips to the new fps + resetSelectionGroup(); + scene()->clearSelection(); + m_dragItem = NULL; + QList itemList = items(); + for (int i = 0; i < itemList.count(); i++) { + // remove all items and re-add them one by one + if (itemList.at(i) != m_cursorLine && itemList.at(i)->parentItem() == NULL) m_scene->removeItem(itemList.at(i)); + } + for (int i = 0; i < itemList.count(); i++) { + if (itemList.at(i)->parentItem() == 0 && (itemList.at(i)->type() == AVWIDGET || itemList.at(i)->type() == TRANSITIONWIDGET)) { + AbstractClipItem *clip = static_cast (itemList.at(i)); + clip->updateFps(m_document->fps()); + m_scene->addItem(clip); + } else if (itemList.at(i)->type() == GROUPWIDGET) { + AbstractGroupItem *grp = static_cast (itemList.at(i)); + QList children = grp->childItems(); + for (int j = 0; j < children.count(); j++) { + if (children.at(j)->type() == AVWIDGET || children.at(j)->type() == TRANSITIONWIDGET) { + AbstractClipItem *clip = static_cast (children.at(j)); + clip->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable); + clip->updateFps(m_document->fps()); + } + } + m_document->clipManager()->removeGroup(grp); + m_scene->addItem(grp); + scene()->destroyItemGroup(grp); + for (int j = 0; j < children.count(); j++) { + if (children.at(j)->type() == AVWIDGET || children.at(j)->type() == TRANSITIONWIDGET) { + //children.at(j)->setParentItem(0); + children.at(j)->setSelected(true); + } + } + groupSelectedItems(true, true); + } else if (itemList.at(i)->type() == GUIDEITEM) { + Guide *g = static_cast(itemList.at(i)); + g->updatePos(); + m_scene->addItem(g); + } + } + viewport()->update(); +} + +#include "customtrackview.moc" \ No newline at end of file