+// 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
+// **************************************************
+class MessageModelItem
+{
+public:
+ //! 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() {}
+ inline virtual ~MessageModelItem() {}
+
+ virtual QVariant data(int column, int role) const;
+ virtual bool setData(int column, const QVariant &value, int role);
+
+ virtual const Message &message() const = 0;
+ virtual const QDateTime ×tamp() 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;
+ bool operator==(const MessageModelItem &) const;
+ bool operator>(const MessageModelItem &) const;
+ static bool lessThan(const MessageModelItem *m1, const MessageModelItem *m2);
+
+private:
+ BufferId _redirectedTo;
+};