From 3d3f2a6ba8826e70f65d65b4090456be50e4a690 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Wed, 4 Nov 2009 14:08:42 +0000 Subject: [PATCH] Spacer should not move locked tracks svn path=/trunk/kdenlive/; revision=4094 --- src/abstractgroupitem.cpp | 17 +++++++++++++++++ src/abstractgroupitem.h | 4 +++- src/customtrackview.cpp | 9 +++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/abstractgroupitem.cpp b/src/abstractgroupitem.cpp index 788e015b..f99fd3ee 100644 --- a/src/abstractgroupitem.cpp +++ b/src/abstractgroupitem.cpp @@ -54,6 +54,23 @@ int AbstractGroupItem::track() const return (int)(scenePos().y() / KdenliveSettings::trackheight()); } +void AbstractGroupItem::setItemLocked(bool locked) +{ + if (locked) { + setSelected(false); + setFlag(QGraphicsItem::ItemIsMovable, false); + setFlag(QGraphicsItem::ItemIsSelectable, false); + } else { + setFlag(QGraphicsItem::ItemIsMovable, true); + setFlag(QGraphicsItem::ItemIsSelectable, true); + } +} + +bool AbstractGroupItem::isItemLocked() const +{ + return !(flags() & (QGraphicsItem::ItemIsSelectable)); +} + CustomTrackScene* AbstractGroupItem::projectScene() { if (scene()) return static_cast (scene()); diff --git a/src/abstractgroupitem.h b/src/abstractgroupitem.h index ba0b213b..c6c59521 100644 --- a/src/abstractgroupitem.h +++ b/src/abstractgroupitem.h @@ -41,7 +41,9 @@ public: int track() const; QPainterPath clipGroupShape(QPointF) const; QPainterPath transitionGroupShape(QPointF) const; -// ItemInfo info() const; + void setItemLocked(bool locked); + bool isItemLocked() const; + // ItemInfo info() const; protected: virtual QVariant itemChange(GraphicsItemChange change, const QVariant &value); diff --git a/src/customtrackview.cpp b/src/customtrackview.cpp index c91a6cb6..8234f6ce 100644 --- a/src/customtrackview.cpp +++ b/src/customtrackview.cpp @@ -816,6 +816,12 @@ void CustomTrackView::mousePressEvent(QMouseEvent * event) if (event->modifiers() == Qt::ControlModifier) { // Ctrl + click, select all items on track after click position int track = (int)(mapToScene(m_clickEvent).y() / m_tracksHeight); + if (m_document->trackInfoAt(m_document->tracksCount() - track - 1).isLocked) { + // Cannot use spacer on locked track + emit displayMessage(i18n("Cannot use spacer in a locked track"), ErrorMessage); + return; + } + QRectF rect(mapToScene(m_clickEvent).x(), track * m_tracksHeight + m_tracksHeight / 2, sceneRect().width() - mapToScene(m_clickEvent).x(), m_tracksHeight / 2 - 2); bool isOk; @@ -840,11 +846,13 @@ void CustomTrackView::mousePressEvent(QMouseEvent * event) for (int i = 0; i < selection.count(); i++) { if (selection.at(i)->parentItem() == 0 && (selection.at(i)->type() == AVWIDGET || selection.at(i)->type() == TRANSITIONWIDGET)) { AbstractClipItem *item = static_cast(selection.at(i)); + if (item->isItemLocked()) continue; offsetList.append(item->startPos()); offsetList.append(item->endPos()); m_selectionGroup->addToGroup(selection.at(i)); selection.at(i)->setFlag(QGraphicsItem::ItemIsMovable, false); } else if (selection.at(i)->parentItem() == 0 && selection.at(i)->type() == GROUPWIDGET) { + if (static_cast(selection.at(i))->isItemLocked()) continue; QList children = selection.at(i)->childItems(); for (int j = 0; j < children.count(); j++) { AbstractClipItem *item = static_cast(children.at(j)); @@ -854,6 +862,7 @@ void CustomTrackView::mousePressEvent(QMouseEvent * event) m_selectionGroup->addToGroup(selection.at(i)); selection.at(i)->setFlag(QGraphicsItem::ItemIsMovable, false); } else if (selection.at(i)->parentItem()) { + if (static_cast(selection.at(i)->parentItem())->isItemLocked()) continue; m_selectionGroup->addToGroup(selection.at(i)->parentItem()); selection.at(i)->parentItem()->setFlag(QGraphicsItem::ItemIsMovable, false); } -- 2.39.2