+// inlines
+QModelIndex MessageModel::index(int row, int column, const QModelIndex& parent) const
+{
+ if (row < 0 || row >= rowCount(parent) || column < 0 || column >= columnCount(parent))
+ return {};
+
+ return createIndex(row, column);
+}
+
+// **************************************************
+// MessageModelItem
+// **************************************************
+//! 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).
+ */
+class CLIENT_EXPORT MessageModelItem
+{
+public:
+ inline virtual ~MessageModelItem() = default;
+
+ 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& 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;
+ bool operator==(const MessageModelItem&) const;
+ bool operator>(const MessageModelItem&) const;
+ static bool lessThan(const MessageModelItem* m1, const MessageModelItem* m2);
+
+private:
+ BufferId _redirectedTo;