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::paint(QPainter *p, const QStyleOptionGraphicsItem *option, QWidget *)
{
- const double scale = option->matrix.m11();
QColor bgcolor(100, 100, 200, 100);
QRectF bound = option->exposedRect.adjusted(0, 0, 1, 1);
p->setClipRect(bound);
- p->fillRect(option->exposedRect, bgcolor);
+ const QRectF mapped = p->worldTransform().mapRect(option->exposedRect);
+ p->setWorldMatrixEnabled(false);
+ p->setBrush(bgcolor);
QPen pen = p->pen();
pen.setColor(QColor(200, 90, 90));
pen.setStyle(Qt::DashLine);
pen.setWidthF(0.0);
- //pen.setCosmetic(true);
p->setPen(pen);
- p->drawRect(boundingRect().adjusted(0, 0, - 1 / scale, 0));
+ p->drawRoundedRect(mapped, 3, 3);
}
//virtual
//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();
+ e.setAttribute("kdenlive_ix", 0);
CustomTrackView *view = (CustomTrackView *) scene()->views()[0];
- if (view) view->slotAddGroupEffect(e, this);
+ QPointF dropPos = event->scenePos();
+ QList<QGraphicsItem *> selection = scene()->items(dropPos);
+ AbstractClipItem *dropChild = NULL;
+ for (int i = 0; i < selection.count(); i++) {
+ if (selection.at(i)->type() == AVWIDGET) {
+ dropChild = (AbstractClipItem *) selection.at(i);
+ break;
+ }
+ }
+ if (view) view->slotAddGroupEffect(e, this, dropChild);
}
//virtual
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;