+void ColumnHandleItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event) {
+ if(event->buttons() & Qt::LeftButton && _moving) {
+ if(contains(event->lastPos())) {
+ qreal newx = x() + (event->scenePos() - event->lastScenePos()).x();
+ if(newx < _minXPos) newx = _minXPos;
+ else if(newx + width() > _maxXPos) newx = _maxXPos - width();
+ setPos(newx, 0);
+ }
+ event->accept();
+ } else {
+ event->ignore();
+ }
+}
+
+void ColumnHandleItem::mousePressEvent(QGraphicsSceneMouseEvent *event) {
+ if(event->buttons() & Qt::LeftButton) {
+ setCursor(QCursor(Qt::ClosedHandCursor));
+ _moving = true;
+ event->accept();
+ } else {
+ event->ignore();
+ }
+}
+
+void ColumnHandleItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) {
+ if(_moving) {
+ _moving = false;
+ setCursor(QCursor(Qt::OpenHandCursor));
+ emit positionChanged(x() + width()/2);
+ event->accept();
+ } else {
+ event->ignore();
+ }
+}
+
+void ColumnHandleItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event) {
+ Q_UNUSED(event);
+
+ _timeLine.setDirection(QTimeLine::Forward);
+ if(_timeLine.state() != QTimeLine::Running)
+ _timeLine.start();
+}
+
+void ColumnHandleItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *event) {
+ Q_UNUSED(event);
+
+ _timeLine.setDirection(QTimeLine::Backward);
+ if(_timeLine.state() != QTimeLine::Running)
+ _timeLine.start();
+}
+
+void ColumnHandleItem::hoverChanged(qreal value) {
+ _hover = value;
+ update();
+}
+