X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fchatitem.h;h=340050a8f14f5c52842183eb4dd56bed171d1cf0;hp=116041cce5d96e59c2df93c4ccacd7bc528479b0;hb=148f1953967cdd1fc8febbdfd9bb103335dc8c91;hpb=14dbd6c44d159c7ca96db9424923962011f7b861 diff --git a/src/qtui/chatitem.h b/src/qtui/chatitem.h index 116041cc..340050a8 100644 --- a/src/qtui/chatitem.h +++ b/src/qtui/chatitem.h @@ -73,6 +73,7 @@ protected: virtual inline QTextLayout *layout() const { return _layout; } virtual inline void setLayout(QTextLayout *l) { _layout = l; } + virtual inline QVector additionalFormats() const { return QVector(); } qint16 posToCursor(const QPointF &pos); virtual qreal computeHeight(); @@ -132,39 +133,50 @@ public: protected: virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event); + virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event); virtual void hoverEnterEvent(QGraphicsSceneHoverEvent *event); virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *event); virtual void hoverMoveEvent(QGraphicsSceneHoverEvent *event); virtual inline QTextLayout *layout() const; virtual void setLayout(QTextLayout *l); + virtual QVector additionalFormats() const; private: struct LayoutData; struct Clickable; class WrapColumnFinder; + inline LayoutData *layoutData() const; + qreal computeHeight(); - void analyze(); + QList findClickables(); LayoutData *_layoutData; }; struct ContentsChatItem::Clickable { + // Don't change these enums without also changing the regexps in analyze()! enum Type { - Url, - Channel, - Nick + Invalid = -1, + Url = 0, + Channel = 1, + Nick = 2 }; + Type type; quint16 start; quint16 length; - Type type; + + inline Clickable() : type(Invalid) {}; + inline Clickable(Type type_, quint16 start_, quint16 length_) : type(type_), start(start_), length(length_) {}; + inline bool isValid() const { return type != Invalid; } }; struct ContentsChatItem::LayoutData { QTextLayout *layout; QList clickables; + Clickable currentClickable; LayoutData() { layout = 0; } ~LayoutData() { delete layout; } @@ -193,6 +205,8 @@ private: // Avoid circular include deps #include "chatline.h" int ChatItem::row() const { return static_cast(parentItem())->row(); } + QTextLayout *ContentsChatItem::layout() const { return _layoutData->layout; } +ContentsChatItem::LayoutData *ContentsChatItem::layoutData() const { Q_ASSERT(_layoutData); return _layoutData; } #endif