+ prepareGeometryChange();
+ _boundingRect = QRectF(-_width/2, rect.y(), _width, rect.height());
+}
+
+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));
+ QRectF sceneBRect = _boundingRect.translated(x(), 0);
+ _sceneLeft = sceneBRect.left();
+ _sceneRight = sceneBRect.right();
+ emit positionChanged(x());
+ 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();