modernize: Pass arguments by value and move in constructors
[quassel.git] / src / qtui / chatitem.h
index 0bf8ee2..a945795 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2005-2013 by the Quassel Project                        *
+ *   Copyright (C) 2005-2018 by the Quassel Project                        *
  *   devel@quassel-irc.org                                                 *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
@@ -31,6 +31,7 @@
 #include "qtui.h"
 
 #include <QTextLayout>
+#include <utility>
 
 class ChatLine;
 class ChatView;
@@ -66,7 +67,7 @@ public:
     QPointF mapToScene(const QPointF &) const;
     QPointF mapFromScene(const QPointF &) const;
 
-    virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
+    virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr);
     virtual inline int type() const { return ChatScene::ChatItemType; }
 
     QVariant data(int role) const;
@@ -112,9 +113,8 @@ protected:
     virtual UiStyle::FormatList formatList() const;
 
     void paintBackground(QPainter *);
-    QVector<QTextLayout::FormatRange> selectionFormats() const;
     virtual QVector<QTextLayout::FormatRange> additionalFormats() const;
-    void overlayFormat(UiStyle::FormatList &fmtList, int start, int end, quint32 overlayFmt) const;
+    void overlayFormat(UiStyle::FormatList &fmtList, quint16 start, quint16 end, UiStyle::FormatType overlayFmt) const;
 
     inline qint16 selectionStart() const { return _selectionStart; }
     inline void setSelectionStart(qint16 start) { _selectionStart = start; }
@@ -124,6 +124,9 @@ protected:
     inline void setSelectionMode(SelectionMode mode) { _selectionMode = mode; }
     void setSelection(SelectionMode mode, qint16 selectionStart, qint16 selectionEnd);
 
+    virtual bool hasActiveClickable() const;
+    virtual std::pair<quint16, quint16> activeClickableRange() const;
+
     qint16 posToCursor(const QPointF &pos) const;
 
     inline void setGeometry(qreal width, qreal height) { clearCache(); _boundingRect.setSize(QSizeF(width, height)); }
@@ -156,8 +159,8 @@ class TimestampChatItem : public ChatItem
 {
 public:
     TimestampChatItem(const QRectF &boundingRect, ChatLine *parent) : ChatItem(boundingRect, parent) {}
-    virtual inline int type() const { return ChatScene::TimestampChatItemType; }
-    virtual inline ChatLineModel::ColumnType column() const { return ChatLineModel::TimestampColumn; }
+    inline int type() const override { return ChatScene::TimestampChatItemType; }
+    inline ChatLineModel::ColumnType column() const override { return ChatLineModel::TimestampColumn; }
 };
 
 
@@ -169,13 +172,13 @@ class SenderChatItem : public ChatItem
 {
 public:
     SenderChatItem(const QRectF &boundingRect, ChatLine *parent) : ChatItem(boundingRect, parent) {}
-    virtual inline ChatLineModel::ColumnType column() const { return ChatLineModel::SenderColumn; }
-    virtual void handleClick(const QPointF &pos, ChatScene::ClickMode clickMode);
+    inline ChatLineModel::ColumnType column() const override { return ChatLineModel::SenderColumn; }
+    void handleClick(const QPointF &pos, ChatScene::ClickMode clickMode) override;
 
 protected:
-    virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
-    virtual inline int type() const { return ChatScene::SenderChatItemType; }
-    virtual void initLayout(QTextLayout *layout) const;
+    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override;
+    inline int type() const override { return ChatScene::SenderChatItemType; }
+    void initLayout(QTextLayout *layout) const override;
 };
 
 
@@ -191,29 +194,30 @@ class ContentsChatItem : public ChatItem
 
 public:
     ContentsChatItem(const QPointF &pos, const qreal &width, ChatLine *parent);
-    ~ContentsChatItem();
+    ~ContentsChatItem() override;
 
-    virtual inline int type() const { return ChatScene::ContentsChatItemType; }
+    inline int type() const override { return ChatScene::ContentsChatItemType; }
 
-    inline ChatLineModel::ColumnType column() const { return ChatLineModel::ContentsColumn; }
+    inline ChatLineModel::ColumnType column() const override { return ChatLineModel::ContentsColumn; }
     QFontMetricsF *fontMetrics() const;
 
-    virtual void clearCache();
+    void clearCache() override;
 
 protected:
-    virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
-    virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *event);
-    virtual void hoverMoveEvent(QGraphicsSceneHoverEvent *event);
-    virtual void handleClick(const QPointF &pos, ChatScene::ClickMode clickMode);
+    void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override;
+    void hoverLeaveEvent(QGraphicsSceneHoverEvent *event) override;
+    void hoverMoveEvent(QGraphicsSceneHoverEvent *event) override;
+    void handleClick(const QPointF &pos, ChatScene::ClickMode clickMode) override;
 
-    virtual void addActionsToMenu(QMenu *menu, const QPointF &itemPos);
-    virtual void copyLinkToClipboard();
+    bool hasActiveClickable() const override;
+    std::pair<quint16, quint16> activeClickableRange() const override;
 
-    virtual QVector<QTextLayout::FormatRange> additionalFormats() const;
+    void addActionsToMenu(QMenu *menu, const QPointF &itemPos) override;
+    virtual void copyLinkToClipboard();
 
-    virtual void initLayout(QTextLayout *layout) const;
-    virtual void doLayout(QTextLayout *layout) const;
-    virtual UiStyle::FormatList formatList() const;
+    void initLayout(QTextLayout *layout) const override;
+    void doLayout(QTextLayout *layout) const override;
+    UiStyle::FormatList formatList() const override;
 
 private:
     class ActionProxy;
@@ -246,7 +250,7 @@ struct ContentsChatItemPrivate {
     Clickable currentClickable;
     Clickable activeClickable;
 
-    ContentsChatItemPrivate(const ClickableList &c, ContentsChatItem *parent) : contentsItem(parent), clickables(c) {}
+    ContentsChatItemPrivate(ClickableList c, ContentsChatItem *parent) : contentsItem(parent), clickables(std::move(c)) {}
 };
 
 class ContentsChatItem::WrapColumnFinder