From 17e2a7534690a9f99adf6a3e27d4952d47bd1ce5 Mon Sep 17 00:00:00 2001 From: Till Theato Date: Tue, 21 Sep 2010 17:51:58 +0000 Subject: [PATCH] When locking tracks also lock the groups on them svn path=/trunk/kdenlive/; revision=4919 --- src/abstractgroupitem.cpp | 14 ++++++------- src/customtrackview.cpp | 44 +++++++++++++++++++++++++++++++-------- 2 files changed, 42 insertions(+), 16 deletions(-) diff --git a/src/abstractgroupitem.cpp b/src/abstractgroupitem.cpp index d8f2527f..40923afa 100644 --- a/src/abstractgroupitem.cpp +++ b/src/abstractgroupitem.cpp @@ -57,14 +57,14 @@ int AbstractGroupItem::track() const void AbstractGroupItem::setItemLocked(bool locked) { - if (locked) { + if (locked) setSelected(false); - setFlag(QGraphicsItem::ItemIsMovable, false); - setFlag(QGraphicsItem::ItemIsSelectable, false); - } else { - setFlag(QGraphicsItem::ItemIsMovable, true); - setFlag(QGraphicsItem::ItemIsSelectable, true); - } + + setFlag(QGraphicsItem::ItemIsMovable, !locked); + setFlag(QGraphicsItem::ItemIsSelectable, !locked); + + foreach (QGraphicsItem *child, childItems()) + ((AbstractClipItem *)child)->setItemLocked(locked); } bool AbstractGroupItem::isItemLocked() const diff --git a/src/customtrackview.cpp b/src/customtrackview.cpp index 429ce272..12b3d424 100644 --- a/src/customtrackview.cpp +++ b/src/customtrackview.cpp @@ -2695,15 +2695,41 @@ void CustomTrackView::lockTrack(int ix, bool lock, bool requestUpdate) QList selection = m_scene->items(0, ix * m_tracksHeight + m_tracksHeight / 2, sceneRect().width(), m_tracksHeight / 2 - 2); for (int i = 0; i < selection.count(); i++) { - if (selection.at(i)->type() != AVWIDGET && selection.at(i)->type() != TRANSITIONWIDGET) continue; - if (selection.at(i)->isSelected()) { - if (selection.at(i)->type() == AVWIDGET) emit clipItemSelected(NULL); - else emit transitionItemSelected(NULL); - } - clip = static_cast (selection.at(i)); - clip->setItemLocked(lock); - if (clip == m_dragItem) - m_dragItem = NULL; + if (selection.at(i)->type() == GROUPWIDGET && (AbstractGroupItem *)selection.at(i) != m_selectionGroup) { + bool changeGroupLock = true; + QList children = selection.at(i)->childItems(); + for (int j = 0; j < children.count(); ++j) { + if (children.at(j)->isSelected()) { + if (children.at(j)->type() == AVWIDGET) + emit clipItemSelected(NULL); + else if (children.at(j)->type() == TRANSITIONWIDGET) + emit transitionItemSelected(NULL); + else + continue; + } + + AbstractClipItem * child = static_cast (children.at(j)); + if (child == m_dragItem) + m_dragItem = NULL; + + // only unlock group, if it is not locked by another track too + if (!lock && child->track() != ix && m_document->trackInfoAt(m_document->tracksCount() - child->track() - 1).isLocked) + changeGroupLock = false; + } + if (changeGroupLock) + ((AbstractGroupItem*)selection.at(i))->setItemLocked(lock); + } else if(selection.at(i)->type() == AVWIDGET || selection.at(i)->type() == TRANSITIONWIDGET) { + if (selection.at(i)->isSelected()) { + if (selection.at(i)->type() == AVWIDGET) + emit clipItemSelected(NULL); + else + emit transitionItemSelected(NULL); + } + clip = static_cast (selection.at(i)); + clip->setItemLocked(lock); + if (clip == m_dragItem) + m_dragItem = NULL; + } } kDebug() << "NEXT TRK STATE: " << m_document->trackInfoAt(tracknumber).isLocked; viewport()->update(); -- 2.39.2