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
//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();
void AbstractGroupItem::dragLeaveEvent(QGraphicsSceneDragDropEvent *event)
{
- Q_UNUSED(event);
+ Q_UNUSED(event)
}
// virtual
} else QGraphicsItem::mousePressEvent(event);
}
+void AbstractGroupItem::resizeStart(int diff)
+{
+ bool info = false;
+ if (m_resizeInfos.isEmpty())
+ info = true;
+ int maximum = diff;
+ QList <QGraphicsItem *> children = childItems();
+ QList <AbstractClipItem *> items;
+ int itemcount = 0;
+ for (int i = 0; i < children.count(); ++i) {
+ AbstractClipItem *item = static_cast <AbstractClipItem *>(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;
// m_resizeInfos.clear() will crash in some cases for unknown reasons - ttill
m_resizeInfos = QList <ItemInfo>();
}
+
+GenTime AbstractGroupItem::duration()
+{
+ QList <QGraphicsItem *> children = childItems();
+ GenTime start = GenTime(-1.0);
+ GenTime end = GenTime();
+ for (int i = 0; i < children.count(); ++i) {
+ if (children.at(i)->type() != GROUPWIDGET) {
+ AbstractClipItem *item = static_cast <AbstractClipItem *>(children.at(i));
+ if (item) {
+ if (start < GenTime() || item->startPos() < start)
+ start = item->startPos();
+ if (item->endPos() > end)
+ end = item->endPos();
+ }
+ } else {
+ children << children.at(i)->childItems();
+ }
+ }
+ return end - start;
+}