Fixe movement of DiveHandlers when moving the NotificationArea

The QGraphicsView system moves every selected item when the user
clicks and drags one. This patch makes a cache of all selected
items and removes the selection on them. When the user stops dragging
the Notification, the selection is restored.

Signed-off-by: Tomaz Canabrava <tomaz.canabrava@intel.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Tomaz Canabrava 2014-05-23 21:06:30 -03:00 committed by Dirk Hohndel
parent ea4d4ac020
commit 963178d3d4
2 changed files with 14 additions and 0 deletions

View file

@ -1,5 +1,6 @@
#include "divetooltipitem.h"
#include "divecartesianaxis.h"
#include "profilewidget2.h"
#include "profile.h"
#include "dive.h"
#include "membuffer.h"
@ -180,6 +181,9 @@ void ToolTipItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
persistPos();
QGraphicsPathItem::mouseReleaseEvent(event);
Q_FOREACH (QGraphicsItem *item, oldSelection) {
item->setSelected(true);
}
}
void ToolTipItem::persistPos()
@ -231,3 +235,10 @@ void ToolTipItem::refresh(const QPointF &pos)
addToolTip(item->toolTip());
}
}
void ToolTipItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
oldSelection = scene()->selectedItems();
scene()->clearSelection();
QGraphicsItem::mousePressEvent(event);
}

View file

@ -45,6 +45,7 @@ public:
bool isExpanded() const;
void persistPos();
void readPos();
void mousePressEvent(QGraphicsSceneMouseEvent *event);
void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
void setTimeAxis(DiveCartesianAxis *axis);
void setPlotInfo(const plot_info &plot);
@ -64,6 +65,8 @@ private:
DiveCartesianAxis *timeAxis;
plot_info pInfo;
int lastTime;
QList<QGraphicsItem*> oldSelection;
};
#endif // DIVETOOLTIPITEM_H