included qca2 into build system
[quassel.git] / src / client / messagemodel.h
index 5da8309..2439d1e 100644 (file)
@@ -34,10 +34,12 @@ class MessageModel : public QAbstractItemModel {
   Q_OBJECT
 
 public:
-  enum MessageRole {
+  enum MessageModelRole {
     DisplayRole = Qt::DisplayRole,
     EditRole = Qt::EditRole,
-    MsgIdRole = Qt::UserRole,
+    BackgroundRole = Qt::BackgroundRole,
+    MessageRole = Qt::UserRole,
+    MsgIdRole,
     BufferIdRole,
     TypeRole,
     FlagsRole,
@@ -54,7 +56,7 @@ public:
 
   MessageModel(QObject *parent);
 
-  inline QModelIndex index(int row, int column, const QModelIndex &/*parent*/ = QModelIndex()) const { return createIndex(row, column); }
+  inline QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const;
   inline QModelIndex parent(const QModelIndex &) const { return QModelIndex(); }
   inline int rowCount(const QModelIndex &parent = QModelIndex()) const { return parent.isValid() ? 0 : messageCount(); }
   inline int columnCount(const QModelIndex &/*parent*/ = QModelIndex()) const { return 3; }
@@ -69,10 +71,14 @@ public:
 
   void clear();
 
+signals:
+  void finishedBacklogFetch(BufferId bufferId);
+
 public slots:
   void requestBacklog(BufferId bufferId);
   void messagesReceived(BufferId bufferId, int count);
   void buffersPermanentlyMerged(BufferId bufferId1, BufferId bufferId2);
+  void insertErrorMessage(BufferInfo bufferInfo, const QString &errorString);
 
 protected:
 //   virtual MessageModelItem *createMessageModelItem(const Message &) = 0;
@@ -108,6 +114,14 @@ private:
   QHash<BufferId, int> _messagesWaiting;
 };
 
+// inlines
+QModelIndex MessageModel::index(int row, int column, const QModelIndex &parent) const {
+  if(row < 0 || row >= rowCount(parent) || column < 0 || column >= columnCount(parent))
+    return QModelIndex();
+
+  return createIndex(row, column);
+}
+
 // **************************************************
 //  MessageModelItem
 // **************************************************
@@ -118,19 +132,19 @@ public:
    *  Subclasses need to provide Qt::DisplayRole at least, which should describe the plaintext
    *  strings without formattings (e.g. for searching purposes).
    */
-  MessageModelItem(const Message &);
+  MessageModelItem() {}
   inline virtual ~MessageModelItem() {}
 
   virtual QVariant data(int column, int role) const;
   virtual bool setData(int column, const QVariant &value, int role);
 
-  inline const Message &message() const { return _msg; }
-  inline const QDateTime &timestamp() const { return _msg.timestamp(); }
-  inline const MsgId &msgId() const { return _msg.msgId(); }
-  inline const BufferId &bufferId() const { return _msg.bufferId(); }
-  inline void setBufferId(BufferId bufferId) { _msg.setBufferId(bufferId); }
-  inline Message::Type msgType() const { return _msg.type(); }
-  inline Message::Flags msgFlags() const { return _msg.flags(); }
+  virtual const Message &message() const = 0;
+  virtual const QDateTime &timestamp() const = 0;
+  virtual const MsgId &msgId() const = 0;
+  virtual const BufferId &bufferId() const = 0;
+  virtual void setBufferId(BufferId bufferId) = 0;
+  virtual Message::Type msgType() const = 0;
+  virtual Message::Flags msgFlags() const = 0;
 
   // For sorting
   bool operator<(const MessageModelItem &) const;
@@ -139,7 +153,6 @@ public:
   static bool lessThan(const MessageModelItem *m1, const MessageModelItem *m2);
 
 private:
-  Message _msg;
   BufferId _redirectedTo;
 };