X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fchatscene.cpp;h=f111781ba3aac5ddce10d7ca1f29cfd4b4864a37;hp=b159dc903a2a349052dc24d622d2d6c5dbc652bd;hb=530908dad5e50d43081c91a9e256a5daafcdce34;hpb=9fd12737c55a0119801c90c399c926b35ffee708 diff --git a/src/qtui/chatscene.cpp b/src/qtui/chatscene.cpp index b159dc90..f111781b 100644 --- a/src/qtui/chatscene.cpp +++ b/src/qtui/chatscene.cpp @@ -92,15 +92,15 @@ ChatScene::ChatScene(QAbstractItemModel *model, const QString &idString, qreal w setHandleXLimits(); + if(model->rowCount() > 0) + rowsInserted(QModelIndex(), 0, model->rowCount() - 1); + connect(model, SIGNAL(rowsInserted(const QModelIndex &, int, int)), this, SLOT(rowsInserted(const QModelIndex &, int, int))); connect(model, SIGNAL(rowsAboutToBeRemoved(const QModelIndex &, int, int)), this, SLOT(rowsAboutToBeRemoved(const QModelIndex &, int, int))); connect(model, SIGNAL(dataChanged(QModelIndex, QModelIndex)), SLOT(dataChanged(QModelIndex, QModelIndex))); - if(model->rowCount() > 0) - rowsInserted(QModelIndex(), 0, model->rowCount() - 1); - #ifdef HAVE_WEBKIT webPreview.timer.setSingleShot(true); connect(&webPreview.timer, SIGNAL(timeout()), this, SLOT(webPreviewNextStep())); @@ -170,7 +170,6 @@ void ChatScene::rowsInserted(const QModelIndex &index, int start, int end) { qreal width = _sceneRect.width(); bool atBottom = (start == _lines.count()); bool atTop = !atBottom && (start == 0); - bool moveTop = false; if(start < _lines.count()) { y = _lines.value(start)->y(); @@ -230,25 +229,11 @@ void ChatScene::rowsInserted(const QModelIndex &index, int start, int end) { } // neither pre- or append means we have to do dirty work: move items... - int moveStart = 0; - int moveEnd = _lines.count() - 1; - qreal offset = h; if(!(atTop || atBottom)) { - // move top means: moving 0 to end (aka: end + 1) - // move top means: moving end + 1 to _lines.count() - 1 (aka: _lines.count() - (end + 1) - if(end + 1 < _lines.count() - end - 1) { - // move top part - moveTop = true; - offset = -offset; - moveEnd = end; - } else { - // move bottom part - moveStart = end + 1; - } ChatLine *line = 0; - for(int i = moveStart; i <= moveEnd; i++) { + for(int i = 0; i <= end; i++) { line = _lines.at(i); - line->setPos(0, line->pos().y() + offset); + line->setPos(0, line->pos().y() - h); } } @@ -285,7 +270,7 @@ void ChatScene::rowsInserted(const QModelIndex &index, int start, int end) { _firstLineRow = -1; } updateSceneRect(); - if(atBottom || (!atTop && !moveTop)) { + if(atBottom) { emit lastLineChanged(_lines.last(), h); } } @@ -438,7 +423,7 @@ void ChatScene::firstHandlePositionChanged(qreal xpos) { if(_firstColHandlePos == xpos) return; - _firstColHandlePos = xpos; + _firstColHandlePos = xpos >= 0 ? xpos : 0; ChatViewSettings viewSettings(this); viewSettings.setValue("FirstColumnHandlePos", _firstColHandlePos); ChatViewSettings defaultSettings; @@ -882,7 +867,7 @@ bool ChatScene::event(QEvent *e) { // Webkit Only stuff // ======================================== #ifdef HAVE_WEBKIT -void ChatScene::loadWebPreview(ChatItem *parentItem, const QString &url, const QRectF &urlRect) { +void ChatScene::loadWebPreview(ChatItem *parentItem, const QUrl &url, const QRectF &urlRect) { if(!_showWebPreview) return; @@ -967,7 +952,7 @@ void ChatScene::webPreviewNextStep() { webPreview.previewItem = 0; } webPreview.parentItem = 0; - webPreview.url = QString(); + webPreview.url = QUrl(); webPreview.urlRect = QRectF(); webPreview.previewState = WebPreview::NoPreview; }