X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fcolumnhandleitem.cpp;h=f79019c468961a174e4f779d854948f681e2c801;hp=8ab7331b7ed05e99cc2bb96a40b6da6943ef3b25;hb=5fdea974f0c3cc72715d968c0f616ba7e02677d6;hpb=9806418efa4c59dae71fd628ea9c57453ca81434 diff --git a/src/qtui/columnhandleitem.cpp b/src/qtui/columnhandleitem.cpp index 8ab7331b..f79019c4 100644 --- a/src/qtui/columnhandleitem.cpp +++ b/src/qtui/columnhandleitem.cpp @@ -1,5 +1,5 @@ /*************************************************************************** -* Copyright (C) 2005-08 by the Quassel IRC Team * +* Copyright (C) 2005-09 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -18,61 +18,92 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ +#include "columnhandleitem.h" + +#include #include #include #include #include +#include #include -#include "columnhandleitem.h" - ColumnHandleItem::ColumnHandleItem(qreal w, QGraphicsItem *parent) : QGraphicsItem(parent), _width(w), + _boundingRect(-_width/2, 0, _width, 0), _hover(0), - _timeLine(150) + _moving(false), + _minXPos(0), + _maxXPos(0), + _timeLine(350), + _rulerColor(QApplication::palette().windowText().color()) { + _timeLine.setUpdateInterval(20); + 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, 0); + QRectF sceneBRect = _boundingRect.translated(x(), 0); + _sceneLeft = sceneBRect.left(); + _sceneRight = sceneBRect.right(); +} + +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) { - if(rect.height() != boundingRect().height()) - prepareGeometryChange(); + prepareGeometryChange(); + _boundingRect = QRectF(-_width/2, rect.y(), _width, rect.height()); } 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); -} - -void ColumnHandleItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { - Q_UNUSED(option); - Q_UNUSED(widget); - - 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); + 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) { @@ -96,3 +127,17 @@ void ColumnHandleItem::hoverChanged(qreal value) { update(); } +void ColumnHandleItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { + Q_UNUSED(option); + Q_UNUSED(widget); + + QLinearGradient gradient(boundingRect().topLeft(), boundingRect().topRight()); + QColor _rulerColor = QApplication::palette().windowText().color(); + _rulerColor.setAlphaF(_hover); + gradient.setColorAt(0, Qt::transparent); + gradient.setColorAt(0.4, _rulerColor); + gradient.setColorAt(0.6, _rulerColor); + gradient.setColorAt(1, Qt::transparent); + painter->fillRect(boundingRect(), gradient); +} +