+ // 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);
+ virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
+
+ virtual inline QTextLayout *layout() const { return _layout; }
+ virtual inline void setLayout(QTextLayout *l) { _layout = l; }
+ qint16 posToCursor(const QPointF &pos);
+
+ virtual qreal computeHeight();
+
+ QRectF _boundingRect;
+
+private:
+ // internal selection stuff
+ void setSelection(int start, int length);
+
+ QFontMetricsF *_fontMetrics;
+
+ enum SelectionMode { NoSelection, PartialSelection, FullSelection };
+ SelectionMode _selectionMode;
+ qint16 _selectionStart, _selectionEnd;
+
+ QTextLayout *_layout;
+};
+
+/*************************************************************************************************/
+
+//! A ChatItem for the timestamp column
+class TimestampChatItem : public ChatItem {
+
+public:
+ TimestampChatItem(QAbstractItemModel *model, QGraphicsItem *parent) : ChatItem(column(), model, parent) {}
+ inline ChatLineModel::ColumnType column() const { return ChatLineModel::TimestampColumn; }
+
+};
+
+/*************************************************************************************************/
+
+//! A ChatItem for the sender column
+class SenderChatItem : public ChatItem {
+
+public:
+ SenderChatItem(QAbstractItemModel *model, QGraphicsItem *parent) : ChatItem(column(), model, parent) {}
+ inline ChatLineModel::ColumnType column() const { return ChatLineModel::SenderColumn; }
+
+ virtual void updateLayout();