Fixes #410 - away log (you'll find it in the views menu)
[quassel.git] / src / qtui / chatlinemodel.h
index a1e2c69..12770d2 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2005-08 by the Quassel IRC Team                         *
+ *   Copyright (C) 2005-09 by the Quassel Project                          *
  *   devel@quassel-irc.org                                                 *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
 
 #include "messagemodel.h"
 
+#include <QList>
+#include "chatlinemodelitem.h"
+
 class ChatLineModel : public MessageModel {
   Q_OBJECT
 
-  public:
-    enum ChatLineRole {
-      WrapListRole = MessageModel::UserRole
-    };
+public:
+  enum ChatLineRole {
+    WrapListRole = MessageModel::UserRole
+  };
+
+  ChatLineModel(QObject *parent = 0);
 
-    ChatLineModel(QObject *parent = 0);
-    virtual ~ChatLineModel();
+  typedef ChatLineModelItem::Word Word;
+  typedef ChatLineModelItem::WrapList WrapList;
 
-    /// Used to store information about words to be used for wrapping
-    struct Word {
-      quint16 start;
-      qreal width;
-      qreal trailing;
-    };
+protected:
+//   virtual MessageModelItem *createMessageModelItem(const Message &);
 
-    typedef QVector<Word> WrapList;
-  
-  protected:
-    virtual MessageModelItem *createMessageModelItem(const Message &);
+  virtual inline int messageCount() const { return _messageList.count(); }
+  virtual inline bool messagesIsEmpty() const { return _messageList.isEmpty(); }
+  virtual inline const MessageModelItem *messageItemAt(int i) const { return &_messageList[i]; }
+  virtual inline MessageModelItem *messageItemAt(int i) { return &_messageList[i]; }
+  virtual inline const MessageModelItem *firstMessageItem() const { return &_messageList.first(); }
+  virtual inline MessageModelItem *firstMessageItem() { return &_messageList.first(); }
+  virtual inline const MessageModelItem *lastMessageItem() const { return &_messageList.last(); }
+  virtual inline MessageModelItem *lastMessageItem() { return &_messageList.last(); }
+  virtual inline void insertMessage__(int pos, const Message &msg) { _messageList.insert(pos, ChatLineModelItem(msg)); }
+  virtual void insertMessages__(int pos, const QList<Message> &);
+  virtual inline void removeMessageAt(int i) { _messageList.removeAt(i); }
+  virtual inline void removeAllMessages() { _messageList.clear(); }
+  virtual Message takeMessageAt(int i);
 
+private:
+  QList<ChatLineModelItem> _messageList;
 };
 
 QDataStream &operator<<(QDataStream &out, const ChatLineModel::WrapList);
 QDataStream &operator>>(QDataStream &in, ChatLineModel::WrapList &);
 
-Q_DECLARE_METATYPE(ChatLineModel::WrapList);
+Q_DECLARE_METATYPE(ChatLineModel::WrapList)
 
 #endif