X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fcolumnhandleitem.cpp;h=7d382c1b47ad16de2233adea612bd8d36175dbc2;hp=3b84f5783ef08e06cc99b75de2f3f25f5f89fc4e;hb=d6111192cd2aad81a2f31497ff5ba51147fb5319;hpb=206ce9444661cc7b2f65bdd8c8c0d1c365e6306f diff --git a/src/qtui/columnhandleitem.cpp b/src/qtui/columnhandleitem.cpp index 3b84f578..7d382c1b 100644 --- a/src/qtui/columnhandleitem.cpp +++ b/src/qtui/columnhandleitem.cpp @@ -20,21 +20,36 @@ #include #include +#include #include -#include - #include "columnhandleitem.h" -ColumnHandleItem::ColumnHandleItem(qreal w, QGraphicsItem *parent) : QGraphicsItem(parent) { - _width = w; +ColumnHandleItem::ColumnHandleItem(qreal w, QGraphicsItem *parent) + : QGraphicsItem(parent), + _width(w), + _hover(0), + _moving(false), + _timeLine(150), + _minXPos(0), + _maxXPos(0) +{ + setAcceptsHoverEvents(true); setZValue(10); setCursor(QCursor(Qt::OpenHandCursor)); - setFlag(ItemIsMovable); + + connect(&_timeLine, SIGNAL(valueChanged(qreal)), this, SLOT(hoverChanged(qreal))); } void ColumnHandleItem::setXPos(qreal xpos) { - setPos(xpos - width()/2, (qreal)0); + setPos(xpos - width()/2, 0); +} + +void ColumnHandleItem::setXLimits(qreal min, qreal max) { + _minXPos = min; + _maxXPos = max; + //if(x() < min) setPos(min, 0); + //else if(x() > max) setPos(max - width(), 0); } void ColumnHandleItem::sceneRectChanged(const QRectF &rect) { @@ -43,25 +58,69 @@ void ColumnHandleItem::sceneRectChanged(const QRectF &rect) { } void ColumnHandleItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event) { - - QGraphicsItem::mouseMoveEvent(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) { qDebug() << "pressed!"; - setCursor(QCursor(Qt::ClosedHandCursor)); - QGraphicsItem::mousePressEvent(event); +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) { - setCursor(QCursor(Qt::OpenHandCursor)); - QGraphicsItem::mouseReleaseEvent(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(); } void ColumnHandleItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { Q_UNUSED(option); Q_UNUSED(widget); - painter->drawRect(boundingRect()); - - + QLinearGradient gradient(0, 0, width(), 0); + gradient.setColorAt(0.25, Qt::transparent); + gradient.setColorAt(0.5, QColor(0, 0, 0, _hover * 200)); + gradient.setColorAt(0.75, Qt::transparent); + painter->fillRect(boundingRect(), gradient); } +