From 5b0af9082dcf0672a98391ac12c6e6bbaaff7a64 Mon Sep 17 00:00:00 2001 From: Manuel Nickschas Date: Sat, 26 Jul 2008 00:35:07 +0200 Subject: [PATCH] Columns are now moveable! --- src/qtui/chatitem.cpp | 2 -- src/qtui/chatscene.cpp | 19 +++++++++++ src/qtui/chatscene.h | 1 + src/qtui/columnhandleitem.cpp | 1 + src/qtui/columnhandleitem.h | 59 ++++++++++++++++++----------------- 5 files changed, 52 insertions(+), 30 deletions(-) diff --git a/src/qtui/chatitem.cpp b/src/qtui/chatitem.cpp index 487c2f2f..235868d0 100644 --- a/src/qtui/chatitem.cpp +++ b/src/qtui/chatitem.cpp @@ -135,8 +135,6 @@ void ChatItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, Q_UNUSED(option); Q_UNUSED(widget); if(!haveLayout()) updateLayout(); _layout->draw(painter, QPointF(0,0), QVector(), boundingRect()); - //painter->drawRect(boundingRect()); - } /* diff --git a/src/qtui/chatscene.cpp b/src/qtui/chatscene.cpp index 6eb07a97..581377d0 100644 --- a/src/qtui/chatscene.cpp +++ b/src/qtui/chatscene.cpp @@ -47,6 +47,9 @@ ChatScene::ChatScene(QAbstractItemModel *model, QObject *parent) : QGraphicsScen firstColHandle = new ColumnHandleItem(QtUi::style()->firstColumnSeparator()); addItem(firstColHandle); secondColHandle = new ColumnHandleItem(QtUi::style()->secondColumnSeparator()); addItem(secondColHandle); + connect(firstColHandle, SIGNAL(positionChanged(qreal)), this, SLOT(handlePositionChanged(qreal))); + connect(secondColHandle, SIGNAL(positionChanged(qreal)), this, SLOT(handlePositionChanged(qreal))); + firstColHandle->setXPos(firstColHandlePos); firstColHandle->setXLimits(0, secondColHandlePos); secondColHandle->setXPos(secondColHandlePos); @@ -103,3 +106,19 @@ void ChatScene::rectChanged(const QRectF &rect) { firstColHandle->sceneRectChanged(rect); secondColHandle->sceneRectChanged(rect); } + +void ChatScene::handlePositionChanged(qreal xpos) { + bool first = (sender() == firstColHandle); + qreal oldx; + if(first) { + oldx = firstColHandlePos; + firstColHandlePos = xpos; + } else { + oldx = secondColHandlePos; + secondColHandlePos = xpos; + } + setWidth(width()); // readjust all chatlines + // we get ugly redraw errors if we don't update this explicitly... :( + // width() should be the same for both handles, so just use firstColHandle regardless + update(qMin(oldx, xpos) - firstColHandle->width()/2, 0, qMax(oldx, xpos) + firstColHandle->width()/2, height()); +} diff --git a/src/qtui/chatscene.h b/src/qtui/chatscene.h index 9d8a5651..a1a32d10 100644 --- a/src/qtui/chatscene.h +++ b/src/qtui/chatscene.h @@ -47,6 +47,7 @@ class ChatScene : public QGraphicsScene { private slots: void rectChanged(const QRectF &); + void handlePositionChanged(qreal xpos); signals: void heightChanged(qreal height); diff --git a/src/qtui/columnhandleitem.cpp b/src/qtui/columnhandleitem.cpp index e8dd97e2..36311688 100644 --- a/src/qtui/columnhandleitem.cpp +++ b/src/qtui/columnhandleitem.cpp @@ -87,6 +87,7 @@ void ColumnHandleItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { if(_moving) { _moving = false; setCursor(QCursor(Qt::OpenHandCursor)); + emit positionChanged(x() + width()/2); event->accept(); } else { event->ignore(); diff --git a/src/qtui/columnhandleitem.h b/src/qtui/columnhandleitem.h index f9d1f7ad..1ed4c46d 100644 --- a/src/qtui/columnhandleitem.h +++ b/src/qtui/columnhandleitem.h @@ -29,34 +29,37 @@ class ColumnHandleItem : public QObject, public QGraphicsItem { Q_OBJECT -public: - ColumnHandleItem(qreal width, QGraphicsItem *parent = 0); - - inline qreal width() const { return _width; } - inline QRectF boundingRect() const { return QRectF(0, 0, _width, scene()->height()); } - void setXPos(qreal xpos); - - void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0); - - void sceneRectChanged(const QRectF &); - void setXLimits(qreal min, qreal max); - -protected: - void hoverEnterEvent(QGraphicsSceneHoverEvent *event); - void hoverLeaveEvent(QGraphicsSceneHoverEvent *event); - void mouseMoveEvent(QGraphicsSceneMouseEvent *event); - void mousePressEvent(QGraphicsSceneMouseEvent *event); - void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); - -private slots: - void hoverChanged(qreal value); - -private: - qreal _width; - qreal _hover; - bool _moving; - qreal _minXPos, _maxXPos; - QTimeLine _timeLine; + public: + ColumnHandleItem(qreal width, QGraphicsItem *parent = 0); + + inline qreal width() const { return _width; } + inline QRectF boundingRect() const { return QRectF(0, 0, _width, scene()->height()); } + void setXPos(qreal xpos); + + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0); + + void sceneRectChanged(const QRectF &); + void setXLimits(qreal min, qreal max); + + protected: + void hoverEnterEvent(QGraphicsSceneHoverEvent *event); + void hoverLeaveEvent(QGraphicsSceneHoverEvent *event); + void mouseMoveEvent(QGraphicsSceneMouseEvent *event); + void mousePressEvent(QGraphicsSceneMouseEvent *event); + void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); + + signals: + void positionChanged(qreal x); + + private slots: + void hoverChanged(qreal value); + + private: + qreal _width; + qreal _hover; + bool _moving; + qreal _minXPos, _maxXPos; + QTimeLine _timeLine; }; #endif -- 2.20.1