void MonitorScene::mousePressEvent(QGraphicsSceneMouseEvent* event)
{
+ QList <QGraphicsItem *> selected = selectedItems();
+
QGraphicsScene::mousePressEvent(event);
+ if (selected.count() != selectedItems().count()) {
+ // mouse click on item not in selection group
+ // -> select only this item
+ foreach (QGraphicsItem *item, selected)
+ item->setSelected(false);
+ }
+
if (event->isAccepted() && selectedItems().count() > 1) {
// multiple items selected + mouse pressed on an item
- QList <QGraphicsItem *> selected = selectedItems();
+ selected = selectedItems();
foreach (QGraphicsItem *item, selected) {
if (qgraphicsitem_cast<BPointItem*>(item)) {
// works with rotoscoping only for now
m_monitor(monitor),
m_showScene(true),
m_in(in),
- m_out(out),
- m_pos(0)
+ m_out(out)
{
QVBoxLayout *l = new QVBoxLayout(this);
m_keyframeWidget = new SimpleKeyframeWidget(t, m_out - m_in - 1, this);
pos += m_in;
+ QList <BPoint> p;
+
if (m_data.canConvert(QVariant::Map)) {
QMap <QString, QVariant> map = m_data.toMap();
QMap <QString, QVariant>::const_iterator i = map.constBegin();
if (keyframe1 != keyframe2 && pos < keyframe2) {
QList <BPoint> p1 = getPoints(keyframe1);
QList <BPoint> p2 = getPoints(keyframe2);
- QList <BPoint> p;
qreal relPos = (pos - keyframe1) / (qreal)(keyframe2 - keyframe1 + 1);
int count = qMin(p1.count(), p2.count());
m_item->setEnabled(false);
m_scene->setEnabled(false);
} else {
- m_item->setPoints(getPoints(keyframe2));
+ p = getPoints(keyframe2);
+ // only update if necessary to preserve the current point selection
+ if (p != m_item->getPoints())
+ m_item->setPoints(p);
m_item->setEnabled(pos == keyframe2);
m_scene->setEnabled(pos == keyframe2);
}
} else {
- m_item->setPoints(getPoints(-1));
+ p = getPoints(-1);
+ // only update if necessary to preserve the current point selection
+ if (p != m_item->getPoints())
+ m_item->setPoints(p);
m_item->setEnabled(true);
m_scene->setEnabled(true);
}