X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fchatscene.cpp;h=cab42c65988501372759cf24736f15bef64735c9;hp=ed8e68d2947551d02fb75c04cd2f5cc58a9a9a06;hb=7cef35ccdcb26ad547383537d3615644df703c9a;hpb=b8519fa2d3e762435765afe92004b1bdcd7c6574 diff --git a/src/qtui/chatscene.cpp b/src/qtui/chatscene.cpp index ed8e68d2..cab42c65 100644 --- a/src/qtui/chatscene.cpp +++ b/src/qtui/chatscene.cpp @@ -34,6 +34,7 @@ #include "qtui.h" #include "qtuistyle.h" #include "chatviewsettings.h" +#include "webpreviewitem.h" const qreal minContentsWidth = 200; @@ -90,6 +91,9 @@ ChatScene::~ChatScene() { void ChatScene::rowsInserted(const QModelIndex &index, int start, int end) { Q_UNUSED(index); + + clearWebPreview(); + qreal h = 0; qreal y = _sceneRect.y(); qreal width = _sceneRect.width(); @@ -175,6 +179,8 @@ void ChatScene::rowsInserted(const QModelIndex &index, int start, int end) { void ChatScene::rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end) { Q_UNUSED(parent); + clearWebPreview(); + qreal h = 0; // total height of removed items; bool atTop = (start == 0); @@ -474,3 +480,45 @@ void ChatScene::updateSceneRect(const QRectF &rect) { _sceneRect = rect; setSceneRect(rect); } + + +void ChatScene::loadWebPreview(ChatItem *parentItem, const QString &url, const QRectF &urlRect) { + if(webPreview.parentItem != parentItem) + webPreview.parentItem = parentItem; + + if(webPreview.url != url) { + webPreview.url = url; + // load a new web view and delete the old one (if exists) + if(webPreview.previewItem) { + removeItem(webPreview.previewItem); + delete webPreview.previewItem; + } + webPreview.previewItem = new WebPreviewItem(url); + addItem(webPreview.previewItem); + } + if(webPreview.urlRect != urlRect) { + webPreview.urlRect = urlRect; + qreal previewY = urlRect.bottom(); + qreal previewX = urlRect.x(); + if(previewY + webPreview.previewItem->boundingRect().height() > sceneRect().bottom()) + previewY = urlRect.y() - webPreview.previewItem->boundingRect().height(); + + if(previewX + webPreview.previewItem->boundingRect().width() > sceneRect().width()) + previewX = sceneRect().right() - webPreview.previewItem->boundingRect().width(); + + webPreview.previewItem->setPos(previewX, previewY); + } +} + +void ChatScene::clearWebPreview(ChatItem *parentItem) { + if(parentItem == 0 || webPreview.parentItem == parentItem) { + if(webPreview.previewItem) { + removeItem(webPreview.previewItem); + delete webPreview.previewItem; + webPreview.previewItem = 0; + } + webPreview.parentItem = 0; + webPreview.url = QString(); + webPreview.urlRect = QRectF(); + } +}