X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fchatitem.h;h=3d5ad2ff6d57b450115497325edf9f82c5e566d9;hp=5796f5e90fbf3c8eaab8a7a0ae501e2fbf4b4368;hb=960ed1ea65124794286c15a2d03bce60577556ee;hpb=68cd9a2621c71005cda0ed4fb796bbf5fcbe007e diff --git a/src/qtui/chatitem.h b/src/qtui/chatitem.h index 5796f5e9..3d5ad2ff 100644 --- a/src/qtui/chatitem.h +++ b/src/qtui/chatitem.h @@ -27,6 +27,7 @@ #include "chatlinemodel.h" #include "chatscene.h" +#include "clickable.h" #include "uistyle.h" #include "qtui.h" @@ -48,10 +49,11 @@ public: void initLayoutHelper(QTextLayout *layout, QTextOption::WrapMode, Qt::Alignment = Qt::AlignLeft) const; virtual inline void initLayout(QTextLayout *layout) const { - initLayoutHelper(layout, QTextOption::WrapAnywhere); + initLayoutHelper(layout, QTextOption::NoWrap); doLayout(layout); } virtual void doLayout(QTextLayout *) const; + virtual UiStyle::FormatList formatList() const; virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0); enum { Type = ChatScene::ChatItemType }; @@ -83,8 +85,10 @@ protected: virtual void mousePressEvent(QGraphicsSceneMouseEvent *event); virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); - virtual QTextLayout::FormatRange selectionFormat() const; - virtual inline QVector additionalFormats() const { return QVector(); } + void paintBackground(QPainter *); + QVector selectionFormats() const; + virtual QVector additionalFormats() const; + void overlayFormat(UiStyle::FormatList &fmtList, int start, int end, quint32 overlayFmt) const; inline qint16 selectionStart() const { return _selectionStart; } inline void setSelectionStart(qint16 start) { _selectionStart = start; } @@ -161,7 +165,7 @@ struct ContentsChatItemPrivate; //! A ChatItem for the contents column class ContentsChatItem : public ChatItem { - Q_DECLARE_TR_FUNCTIONS(ContentsChatItem); + Q_DECLARE_TR_FUNCTIONS(ContentsChatItem) public: ContentsChatItem(const qreal &width, const QPointF &pos, QGraphicsItem *parent); @@ -185,20 +189,19 @@ protected: virtual QVector additionalFormats() const; virtual inline void initLayout(QTextLayout *layout) const { - initLayoutHelper(layout, QTextOption::WrapAnywhere); + initLayoutHelper(layout, QTextOption::WrapAtWordBoundaryOrAnywhere); doLayout(layout); } virtual void doLayout(QTextLayout *layout) const; + virtual UiStyle::FormatList formatList() const; private: - struct Clickable; class ActionProxy; class WrapColumnFinder; ContentsChatItemPrivate *_data; ContentsChatItemPrivate *privateData() const; - QList findClickables() const; Clickable clickableAt(const QPointF &pos) const; void endHoverMode(); @@ -215,31 +218,13 @@ private: static ActionProxy _actionProxy; }; -struct ContentsChatItem::Clickable { - // Don't change these enums without also changing the regexps in analyze()! - enum Type { - Invalid = -1, - Url = 0, - Channel = 1, - Nick = 2 - }; - - Type type; - quint16 start; - quint16 length; - - 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 ContentsChatItemPrivate { ContentsChatItem *contentsItem; - QList clickables; - ContentsChatItem::Clickable currentClickable; - ContentsChatItem::Clickable activeClickable; + ClickableList clickables; + Clickable currentClickable; + Clickable activeClickable; - ContentsChatItemPrivate(const QList &c, ContentsChatItem *parent) : contentsItem(parent), clickables(c) {} + ContentsChatItemPrivate(const ClickableList &c, ContentsChatItem *parent) : contentsItem(parent), clickables(c) {} }; class ContentsChatItem::WrapColumnFinder { @@ -247,7 +232,7 @@ public: WrapColumnFinder(const ChatItem *parent); ~WrapColumnFinder(); - qint16 nextWrapColumn(); + qint16 nextWrapColumn(qreal width); private: const ChatItem *item;