+ prepareGeometryChange();
+ _boundingRect = QRectF(-_width/2, rect.y(), _width, rect.height());
+}
+
+void ColumnHandleItem::setOpacity(qreal opacity) {
+ _opacity = opacity;
+ update();
+}
+
+void ColumnHandleItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event) {
+ if(event->buttons() & Qt::LeftButton && _moving) {
+ qreal newx = event->scenePos().x() - _offset;
+ 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) {
+ QApplication::setOverrideCursor(Qt::ClosedHandCursor);
+ _moving = true;
+ _offset = event->pos().x();
+ event->accept();
+ } else {
+ event->ignore();
+ }
+}
+
+void ColumnHandleItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) {
+ if(_moving) {
+ _moving = false;
+ QRectF sceneBRect = _boundingRect.translated(x(), 0);
+ _sceneLeft = sceneBRect.left();
+ _sceneRight = sceneBRect.right();
+ emit positionChanged(x());
+ QApplication::restoreOverrideCursor();
+ event->accept();
+ } else {
+ event->ignore();
+ }
+}
+
+void ColumnHandleItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event) {
+ Q_UNUSED(event);
+
+ _animation->setDirection(QPropertyAnimation::Forward);
+ _animation->start();
+}
+
+void ColumnHandleItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *event) {
+ Q_UNUSED(event);
+
+ _animation->setDirection(QPropertyAnimation::Backward);
+ _animation->start();