]> git.sesse.net Git - kdenlive/commitdiff
When locking tracks also lock the groups on them
authorTill Theato <root@ttill.de>
Tue, 21 Sep 2010 17:51:58 +0000 (17:51 +0000)
committerTill Theato <root@ttill.de>
Tue, 21 Sep 2010 17:51:58 +0000 (17:51 +0000)
svn path=/trunk/kdenlive/; revision=4919

src/abstractgroupitem.cpp
src/customtrackview.cpp

index d8f2527f248a025ba77b2629573ba052f9954e6a..40923afafe1276fdad0850ebb838ab65e89cf706 100644 (file)
@@ -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
index 429ce27297751df61c296a5711d5485ad2772a05..12b3d4245fd0c1e8525a4a11e7ec307dc627e6db 100644 (file)
@@ -2695,15 +2695,41 @@ void CustomTrackView::lockTrack(int ix, bool lock, bool requestUpdate)
     QList<QGraphicsItem *> 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 <AbstractClipItem *>(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 <QGraphicsItem *> 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 <AbstractClipItem *>(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 <AbstractClipItem *>(selection.at(i));
+            clip->setItemLocked(lock);
+            if (clip == m_dragItem)
+                m_dragItem = NULL;
+        }
     }
     kDebug() << "NEXT TRK STATE: " << m_document->trackInfoAt(tracknumber).isLocked;
     viewport()->update();