#define MESSAGEMODEL_H_
#include <QAbstractItemModel>
+#include <QDateTime>
-class Message;
-class MessageItem;
-class MsgId;
+#include "message.h"
+#include "types.h"
+
+class MessageModelItem;
+struct MsgId;
class MessageModel : public QAbstractItemModel {
Q_OBJECT
public:
- enum MessageRoles {
+ enum MessageRole {
MsgIdRole = Qt::UserRole,
BufferIdRole,
TypeRole,
FlagsRole,
TimestampRole,
+ DisplayRole,
+ FormatRole,
+ ColumnTypeRole,
UserRole
};
+ enum ColumnType {
+ TimestampColumn, SenderColumn, ContentsColumn, UserColumnType
+ };
+
MessageModel(QObject *parent);
virtual ~MessageModel();
void insertMessage(const Message &);
void insertMessages(const QList<Message> &);
+ void clear();
+
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:
- 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 = 0;
+ virtual QVariant data(int column, int role) const;
virtual bool setData(int column, const QVariant &value, int role) = 0;
+ private:
+ QDateTime _timestamp;
+ MsgId _msgId;
+ BufferId _bufferId;
+ Message::Type _type;
+ Message::Flags _flags;
};
#endif