uistyle: Add more type-safety to UiStyle, and clean up a bit
[quassel.git] / src / qtui / chatlinemodelitem.h
index bc32668..e48b1cd 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2005-08 by the Quassel Project                          *
+ *   Copyright (C) 2005-2016 by the Quassel Project                        *
  *   devel@quassel-irc.org                                                 *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
  *   You should have received a copy of the GNU General Public License     *
  *   along with this program; if not, write to the                         *
  *   Free Software Foundation, Inc.,                                       *
- *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
+ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.         *
  ***************************************************************************/
 
-#ifndef CHATLINEMODELITEM_H_
-#define CHATLINEMODELITEM_H_
+#pragma once
 
-#include <QVector>
+#include "messagemodel.h"
 
-#include "chatlinemodel.h"
 #include "uistyle.h"
 
-class ChatLineModelItemPrivate;
-
-class ChatLineModelItem : public MessageModelItem {
+class ChatLineModelItem : public MessageModelItem
+{
 public:
-  ChatLineModelItem(const Message &);
+    ChatLineModelItem(const Message &);
+
+    virtual QVariant data(int column, int role) const;
+    virtual bool setData(int column, const QVariant &value, int role);
+
+    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 inline bool setData(int column, const QVariant &value, int role) { Q_UNUSED(column); Q_UNUSED(value); Q_UNUSED(role); return false; }
+    virtual inline void invalidateWrapList() { _wrapList.clear(); }
+
+    /// 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:
-  void computeWrapList() const;
+    QVariant timestampData(int role) const;
+    QVariant senderData(int role) const;
+    QVariant contentsData(int role) const;
 
-  struct ChatLinePart {
-    QString plainText;
-    UiStyle::FormatList formatList;
-  };
-  ChatLinePart _timestamp, _sender, _contents;
+    QVariant backgroundBrush(UiStyle::FormatType subelement, bool selected = false) const;
+    UiStyle::MessageLabel messageLabel() const;
 
-  ChatLineModelItemPrivate *_data;
+    void computeWrapList() const;
 
-  static unsigned char *TextBoundaryFinderBuffer;
-  static int TextBoundaryFinderBufferSize;
-};
+    mutable WrapList _wrapList;
+    UiStyle::StyledMessage _styledMsg;
 
-#endif
+    static unsigned char *TextBoundaryFinderBuffer;
+    static int TextBoundaryFinderBufferSize;
+};