X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fchatitem.cpp;h=05f0944361083850e5ffe9f1a2ab0f1c8ad09500;hp=4855f0c168eae123c7b2a1f78985f942a6f11e75;hb=ff39958dd98644e73b7b77bdd986944134f78d09;hpb=6330f7fe3d19113cbf29944a9b6e8b503893d4a9 diff --git a/src/qtui/chatitem.cpp b/src/qtui/chatitem.cpp index 4855f0c1..05f09443 100644 --- a/src/qtui/chatitem.cpp +++ b/src/qtui/chatitem.cpp @@ -48,6 +48,39 @@ ChatItem::ChatItem(const QRectF &boundingRect, ChatLine *parent) } +ChatLine *ChatItem::chatLine() const { + return _parent; +} + +ChatScene *ChatItem::chatScene() const { + return chatLine()->chatScene(); +} + +const QAbstractItemModel *ChatItem::model() const { + return chatLine()->model(); +} + +int ChatItem::row() const { + return chatLine()->row(); +} + +QPointF ChatItem::mapToLine(const QPointF &p) const { + return p + pos(); +} + +QPointF ChatItem::mapFromLine(const QPointF &p) const { + return p - pos(); +} + +// relative to the ChatLine +QPointF ChatItem::mapToScene(const QPointF &p) const { + return chatLine()->mapToScene(p /* + pos() */); +} + +QPointF ChatItem::mapFromScene(const QPointF &p) const { + return chatLine()->mapFromScene(p) /* - pos() */; +} + QVariant ChatItem::data(int role) const { QModelIndex index = model()->index(row(), column()); if(!index.isValid()) { @@ -116,6 +149,8 @@ void ChatItem::paintBackground(QPainter *painter) { // This is a deliberate trade-off. (-> selectFmt creation, data() call) void ChatItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { Q_UNUSED(option); Q_UNUSED(widget); + painter->save(); + painter->setClipRect(boundingRect()); paintBackground(painter); QTextLayout layout; @@ -150,6 +185,8 @@ void ChatItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, // } // 3) draw bounding rect // painter->drawRect(_boundingRect.adjusted(0, 0, -1, -1)); + + painter->restore(); } void ChatItem::overlayFormat(UiStyle::FormatList &fmtList, int start, int end, quint32 overlayFmt) const { @@ -344,6 +381,8 @@ void ChatItem::addActionsToMenu(QMenu *menu, const QPointF &pos) { void SenderChatItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { Q_UNUSED(option); Q_UNUSED(widget); + painter->save(); + painter->setClipRect(boundingRect()); paintBackground(painter); QTextLayout layout; @@ -385,6 +424,19 @@ void SenderChatItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *op } else { layout.draw(painter, pos(), additionalFormats(), boundingRect()); } + painter->restore(); +} + +void SenderChatItem::handleClick(const QPointF &pos, ChatScene::ClickMode clickMode) { + if(clickMode == ChatScene::DoubleClick) { + BufferInfo curBufInfo = Client::networkModel()->bufferInfo(data(MessageModel::BufferIdRole).value()); + QString nick = data(MessageModel::EditRole).toString(); + // check if the nick is a valid ircUser + if(!nick.isEmpty() && Client::network(curBufInfo.networkId())->ircUser(nick)) + Client::bufferModel()->switchToOrStartQuery(curBufInfo.networkId(), nick); + } + else + ChatItem::handleClick(pos, clickMode); } // ************************************************************