X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fabstractgroupitem.cpp;h=79364deb60109700e0b875eacbbcf532c33f4fbd;hb=5656bd3de057eaaa103f921348d4e62eeeb968d5;hp=e4286b6592123dfcd596aad0af21cd554656ac7c;hpb=35a5c83d59396a357f49d73a7c5127cc06bbb686;p=kdenlive diff --git a/src/abstractgroupitem.cpp b/src/abstractgroupitem.cpp index e4286b65..79364deb 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 @@ -355,7 +355,7 @@ QVariant AbstractGroupItem::itemChange(GraphicsItemChange change, const QVariant //virtual void AbstractGroupItem::dropEvent(QGraphicsSceneDragDropEvent * event) { - QString effects = QString(event->mimeData()->data("kdenlive/effectslist")); + QString effects = QString::fromUtf8(event->mimeData()->data("kdenlive/effectslist")); QDomDocument doc; doc.setContent(effects, true); QDomElement e = doc.documentElement(); @@ -371,7 +371,7 @@ void AbstractGroupItem::dragEnterEvent(QGraphicsSceneDragDropEvent *event) void AbstractGroupItem::dragLeaveEvent(QGraphicsSceneDragDropEvent *event) { - Q_UNUSED(event); + Q_UNUSED(event) } // virtual @@ -383,6 +383,33 @@ void AbstractGroupItem::mousePressEvent(QGraphicsSceneMouseEvent * event) } else QGraphicsItem::mousePressEvent(event); } +void AbstractGroupItem::resizeStart(int diff) +{ + bool info = false; + if (m_resizeInfos.isEmpty()) + info = true; + int maximum = diff; + QList children = childItems(); + QList items; + int itemcount = 0; + for (int i = 0; i < children.count(); ++i) { + AbstractClipItem *item = static_cast (children.at(i)); + if (item && item->type() == AVWIDGET) { + items << item; + if (info) + m_resizeInfos << item->info(); + item->resizeStart((int)(m_resizeInfos.at(itemcount).startPos.frames(item->fps())) + diff); + int itemdiff = (int)(item->startPos() - m_resizeInfos.at(itemcount).startPos).frames(item->fps()); + if (qAbs(itemdiff) < qAbs(maximum)) + maximum = itemdiff; + ++itemcount; + } + } + + for (int i = 0; i < items.count(); ++i) + items.at(i)->resizeStart((int)(m_resizeInfos.at(i).startPos.frames(items.at(i)->fps())) + maximum); +} + void AbstractGroupItem::resizeEnd(int diff) { bool info = false;