Switch some dirty hacking to using real infrastructure. A Chatline now contains three...
[quassel.git] / src / client / messagemodel.h
index 336c07e..5b2786a 100644 (file)
 #include "message.h"
 #include "types.h"
 
-class MessageItem;
+class MessageModelItem;
 class MsgId;
 
 class MessageModel : public QAbstractItemModel {
   Q_OBJECT
 
   public:
-    enum MessageRoles {
+    enum MessageRole {
       MsgIdRole = Qt::UserRole,
       BufferIdRole,
       TypeRole,
       FlagsRole,
       TimestampRole,
+      DisplayRole,
+      FormatRole,
       UserRole
     };
 
+    enum ColumnType {
+      TimestampColumn, SenderColumn, ContentsColumn, UserColumnType
+    };
+
     MessageModel(QObject *parent);
     virtual ~MessageModel();
 
@@ -60,24 +66,26 @@ class MessageModel : public QAbstractItemModel {
     void insertMessages(const QList<Message> &);
 
   protected:
-    virtual MessageItem *createMessageItem(const Message &) = 0;
+    virtual MessageModelItem *createMessageModelItem(const Message &) = 0;
 
   private:
-    QList<MessageItem *> _messageList;
+    QList<MessageModelItem *> _messageList;
 
     int indexForId(MsgId);
 
 };
 
-class MessageItem {
+class MessageModelItem {
 
   public:
-    enum {
-      TimestampColumn, SenderColumn, TextColumn
-    };
 
-    MessageItem(const Message &);
-    virtual ~MessageItem();
+    //! Creates a MessageModelItem from a Message object.
+    /** This baseclass implementation takes care of all Message data *except* the stylable strings.
+     *  Subclasses need to provide Qt::DisplayRole at least, which should describe the plaintext
+     *  strings without formattings (e.g. for searching purposes).
+     */
+    MessageModelItem(const Message &);
+    virtual ~MessageModelItem();
 
     virtual QVariant data(int column, int role) const;
     virtual bool setData(int column, const QVariant &value, int role) = 0;