Prevent ChatView from scrolling up 1px on buffer switch, fixes #544
[quassel.git] / src / qtui / chatlinemodelitem.h
index f01b4e1..5382a7b 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2005-08 by the Quassel Project                          *
+ *   Copyright (C) 2005-09 by the Quassel Project                          *
  *   devel@quassel-irc.org                                                 *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
 #ifndef CHATLINEMODELITEM_H_
 #define CHATLINEMODELITEM_H_
 
-#include <QVector>
-#include <QPair>
-
 #include "messagemodel.h"
+
 #include "uistyle.h"
 
 class ChatLineModelItem : public MessageModelItem {
+public:
+  ChatLineModelItem(const Message &);
+
+  virtual QVariant data(int column, int role) const;
 
-  public:
-    ChatLineModelItem(const Message &);
-    //virtual ~ChatLineModelItem() {};
+  virtual inline const Message &message() const { return _styledMsg; }
+  virtual inline const QDateTime &timestamp() const { return _styledMsg.timestamp(); }
+  virtual inline const MsgId &msgId() const { return _styledMsg.msgId(); }
+  virtual inline const BufferId &bufferId() const { return _styledMsg.bufferId(); }
+  virtual inline void setBufferId(BufferId bufferId) { _styledMsg.setBufferId(bufferId); }
+  virtual inline Message::Type msgType() const { return _styledMsg.type(); }
+  virtual inline Message::Flags msgFlags() const { return _styledMsg.flags(); }
 
-    virtual QVariant data(int column, int role) const;
-    virtual bool setData(int column, const QVariant &value, int role);
+  /// Used to store information about words to be used for wrapping
+  struct Word {
+    quint16 start;
+    qreal endX;
+    qreal width;
+    qreal trailing;
+  };
+  typedef QVector<Word> WrapList;
 
-  private:
-    typedef QVector<QPair<quint16, quint16> > WrapList;
+private:
+  virtual QVariant timestampData(int role) const;
+  virtual QVariant senderData(int role) const;
+  virtual QVariant contentsData(int role) const;
 
-    void computeWrapList();
+  void computeWrapList() const;
 
-    struct ChatLinePart {
-      QString plainText;
-      UiStyle::FormatList formatList;
-    };
-    ChatLinePart _timestamp, _sender, _contents;
+  mutable WrapList _wrapList;
+  UiStyle::StyledMessage _styledMsg;
 
-    WrapList _wrapList;
+  static unsigned char *TextBoundaryFinderBuffer;
+  static int TextBoundaryFinderBufferSize;
 };
 
 #endif