#include "message.h"
#include "types.h"
-class MessageItem;
-class MsgId;
+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:
- enum {
- TimestampColumn, SenderColumn, TextColumn
- };
- 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;
virtual bool setData(int column, const QVariant &value, int role) = 0;