Improve ChatMonitorFilter to use Message::Backlog rather than the timestamp
[quassel.git] / src / qtui / chatitem.h
index b0375d6..44cbaaa 100644 (file)
@@ -34,34 +34,36 @@ class QTextLayout;
 class ChatItem : public QGraphicsItem {
 
   public:
-  ChatItem(int col, QAbstractItemModel *, QGraphicsItem *parent);
+    ChatItem(int col, QAbstractItemModel *, QGraphicsItem *parent);
     virtual ~ChatItem();
 
-  inline const QAbstractItemModel *model() const { return chatScene() ? chatScene()->model() : 0; }
-  int row() const;
-  inline int column() const { return _col; }
-  inline ChatScene *chatScene() const { return qobject_cast<ChatScene *>(scene()); }
+    inline const QAbstractItemModel *model() const { return chatScene() ? chatScene()->model() : 0; }
+    int row() const;
+    inline int column() const { return _col; }
+    inline ChatScene *chatScene() const { return qobject_cast<ChatScene *>(scene()); }
 
     inline QFontMetricsF *fontMetrics() const { return _fontMetrics; }
     inline virtual QRectF boundingRect() const { return _boundingRect; }
     inline qreal width() const { return _boundingRect.width(); }
     inline qreal height() const { return _boundingRect.height(); }
 
-    inline bool haveLayout() const { return _layout != 0; }
-    void clearLayout();
+    inline bool haveLayout() const { return _layoutData != 0 && layout() != 0; }
+    void clearLayoutData();
     void updateLayout();
     virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
 
     virtual QVariant data(int role) const;
 
     // returns height
-    qreal setWidth(qreal width);
+    qreal setGeometry(qreal width, qreal height = -1);
 
     // selection stuff, to be called by the scene
     void clearSelection();
     void setFullSelection();
     void continueSelecting(const QPointF &pos);
 
+  QList<QRectF> findWords(const QString &searchWord, Qt::CaseSensitivity caseSensitive);
+
   protected:
     virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
     virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
@@ -73,6 +75,11 @@ class ChatItem : public QGraphicsItem {
     virtual void hoverMoveEvent(QGraphicsSceneHoverEvent *event);
 
   private:
+    struct LayoutData;
+    class WrapColumnFinder;
+
+    inline QTextLayout *layout() const;
+    void setLayout(QTextLayout *);
     qint16 posToCursor(const QPointF &pos);
     qreal computeHeight();
     QTextLayout *createLayout(QTextOption::WrapMode, Qt::Alignment = Qt::AlignLeft);
@@ -85,14 +92,18 @@ class ChatItem : public QGraphicsItem {
     int _col;
     quint8 _lines;
 
-    QTextLayout * _layout;
-    QList<quint16> _wrapPositions;
-
     enum SelectionMode { NoSelection, PartialSelection, FullSelection };
     SelectionMode _selectionMode;
     qint16 _selectionStart, _selectionEnd;
 
-    class WrapColumnFinder;
+    LayoutData *_layoutData;
+};
+
+struct ChatItem::LayoutData {
+  QTextLayout *layout;
+
+  LayoutData() { layout = 0; }
+  ~LayoutData() { delete layout; }
 };
 
 class ChatItem::WrapColumnFinder {
@@ -115,6 +126,6 @@ class ChatItem::WrapColumnFinder {
 
 #include "chatline.h"
 inline int ChatItem::row() const { return static_cast<ChatLine *>(parentItem())->row(); }
-
+inline QTextLayout *ChatItem::layout() const { return _layoutData->layout; }
 
 #endif