From: Marcus Eggenberger Date: Sat, 11 Oct 2008 13:59:54 +0000 (+0200) Subject: just some internal clean up X-Git-Tag: 0.3.1~193 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=e88a5b5f44c84f3892c120b98e6a376032a32644 just some internal clean up --- diff --git a/src/qtui/chatitem.h b/src/qtui/chatitem.h index 51b59f97..5877040c 100644 --- a/src/qtui/chatitem.h +++ b/src/qtui/chatitem.h @@ -80,11 +80,18 @@ protected: // a) calling prepareGeometryChange() immediately before setColumns() // b) calling Chatline::setPos() immediately afterwards inline void setGeometry(qreal width, qreal height) { + prepareGeometryChange(); _boundingRect.setWidth(width); _boundingRect.setHeight(height); } - inline void setHeight(const qreal &height) { _boundingRect.setHeight(height); } - inline void setWidth(const qreal &width) { _boundingRect.setWidth(width); } + inline void setHeight(const qreal &height) { + prepareGeometryChange(); + _boundingRect.setHeight(height); + } + inline void setWidth(const qreal &width) { + prepareGeometryChange(); + _boundingRect.setWidth(width); + } private: // internal selection stuff diff --git a/src/qtui/chatline.cpp b/src/qtui/chatline.cpp index 00220bb9..f0772b31 100644 --- a/src/qtui/chatline.cpp +++ b/src/qtui/chatline.cpp @@ -75,9 +75,10 @@ ChatItem &ChatLine::item(ChatLineModel::ColumnType column) { // NOTE: senderPos and contentsPos are in ChatLines coordinate system! qreal ChatLine::setColumns(const qreal ×tampWidth, const qreal &senderWidth, const qreal &contentsWidth, const QPointF &senderPos, const QPointF &contentsPos) { - _height = _contentsItem.setGeometryByWidth(contentsWidth); - _senderItem.setGeometry(senderWidth, _height); - _timestampItem.setGeometry(timestampWidth, _height); + prepareGeometryChange(); + qreal height = _contentsItem.setGeometryByWidth(contentsWidth); + _senderItem.setGeometry(senderWidth, height); + _timestampItem.setGeometry(timestampWidth, height); _senderItem.setPos(senderPos); _contentsItem.setPos(contentsPos); @@ -86,6 +87,9 @@ qreal ChatLine::setColumns(const qreal ×tampWidth, const qreal &senderWidth _senderItem.clearLayout(); _timestampItem.clearLayout(); + + _height = height; + return _height; } @@ -93,11 +97,13 @@ qreal ChatLine::setColumns(const qreal ×tampWidth, const qreal &senderWidth // a) calling prepareGeometryChange() immediately before setColumns() // b) calling Chatline::setPos() immediately afterwards qreal ChatLine::setGeometryByWidth(const qreal &width, const qreal &contentsWidth) { - _width = width; - _height = _contentsItem.setGeometryByWidth(contentsWidth); - _timestampItem.setHeight(_height); - _senderItem.setHeight(_height); + prepareGeometryChange(); + qreal height = _contentsItem.setGeometryByWidth(contentsWidth); + _timestampItem.setHeight(height); + _senderItem.setHeight(height); _contentsItem.clearLayout(); + _height = height; + _width = width; return _height; } diff --git a/src/qtui/chatscene.cpp b/src/qtui/chatscene.cpp index 67415cc3..40a0c8b0 100644 --- a/src/qtui/chatscene.cpp +++ b/src/qtui/chatscene.cpp @@ -22,6 +22,7 @@ #include #include #include +#include #include "chatitem.h" #include "chatline.h" @@ -38,9 +39,9 @@ const qreal minContentsWidth = 200; -class ClearWebPreviewEvent : public QEvent { +class ChatScene::ClearWebPreviewEvent : public QEvent { public: - inline ClearWebPreviewEvent() : QEvent(QEvent::User) {} + inline ClearWebPreviewEvent() : QEvent((QEvent::Type)ChatScene::ClearWebPreviewEventType) {} }; ChatScene::ChatScene(QAbstractItemModel *model, const QString &idString, qreal width, QObject *parent) @@ -93,6 +94,9 @@ ChatScene::ChatScene(QAbstractItemModel *model, const QString &idString, qreal w webPreview.delayTimer.setSingleShot(true); connect(&webPreview.delayTimer, SIGNAL(timeout()), this, SLOT(showWebPreview())); + + // installEventFilter(this); + // setItemIndexMethod(QGraphicsScene::NoIndex); } ChatScene::~ChatScene() { @@ -202,7 +206,6 @@ void ChatScene::rowsInserted(const QModelIndex &index, int start, int end) { if(atBottom || (!atTop && !moveTop)) { emit lastLineChanged(_lines.last(), h); } - } void ChatScene::rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end) { @@ -557,14 +560,17 @@ void ChatScene::updateSceneRect(qreal width) { void ChatScene::updateSceneRect(const QRectF &rect) { _sceneRect = rect; setSceneRect(rect); + update(); } void ChatScene::customEvent(QEvent *event) { - if(event->type() != QEvent::User) + switch(event->type()) { + case ClearWebPreviewEventType: + clearWebPreviewEvent((ClearWebPreviewEvent *)event); + break; + default: return; - - event->accept(); - clearWebPreviewEvent(); + } } void ChatScene::loadWebPreview(ChatItem *parentItem, const QString &url, const QRectF &urlRect) { @@ -620,8 +626,9 @@ void ChatScene::showWebPreview() { #endif } -void ChatScene::clearWebPreviewEvent() { +void ChatScene::clearWebPreviewEvent(ClearWebPreviewEvent *event) { #ifdef HAVE_WEBKIT + event->accept(); if(webPreview.previewItem) { if(webPreview.previewItem->scene()) { removeItem(webPreview.previewItem); @@ -634,3 +641,9 @@ void ChatScene::clearWebPreviewEvent() { webPreview.urlRect = QRectF(); #endif } + +bool ChatScene::eventFilter(QObject *watched, QEvent *event) { + qDebug() << watched << event; + return false; +} + diff --git a/src/qtui/chatscene.h b/src/qtui/chatscene.h index 04182326..2204d667 100644 --- a/src/qtui/chatscene.h +++ b/src/qtui/chatscene.h @@ -39,6 +39,11 @@ class ChatScene : public QGraphicsScene { Q_OBJECT public: + enum MyEventTypes { + ClearWebPreviewEventType = QEvent::User + }; + class ClearWebPreviewEvent; + ChatScene(QAbstractItemModel *model, const QString &idString, qreal width, QObject *parent); virtual ~ChatScene(); @@ -54,6 +59,8 @@ public: inline ColumnHandleItem *firstColumnHandle() const { return firstColHandle; } inline ColumnHandleItem *secondColumnHandle() const { return secondColHandle; } + virtual bool eventFilter(QObject *watched, QEvent *event); + public slots: void updateForViewport(qreal width, qreal height); void setWidth(qreal, bool forceReposition = false); @@ -85,7 +92,7 @@ protected slots: private slots: void handlePositionChanged(qreal xpos); void showWebPreview(); - void clearWebPreviewEvent(); + void clearWebPreviewEvent(ClearWebPreviewEvent *event); private: void setHandleXLimits(); diff --git a/src/qtui/chatview.cpp b/src/qtui/chatview.cpp index 0c3d4bbe..b3c27f4a 100644 --- a/src/qtui/chatview.cpp +++ b/src/qtui/chatview.cpp @@ -58,6 +58,7 @@ void ChatView::init(MessageFilter *filter) { connect(_scene, SIGNAL(sceneRectChanged(const QRectF &)), this, SLOT(sceneRectChanged(const QRectF &))); connect(_scene, SIGNAL(lastLineChanged(QGraphicsItem *, qreal)), this, SLOT(lastLineChanged(QGraphicsItem *, qreal))); setScene(_scene); + // installEventFilter(_scene); connect(verticalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(verticalScrollbarChanged(int))); }