#define MESSAGEMODEL_H_
#include <QAbstractItemModel>
+#include <QDateTime>
-class MessageItem;
+#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();
- inline QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const { return createIndex(row, column); }
- inline QModelIndex parent(const QModelIndex &index) const { return QModelIndex(); }
- inline int rowCount(const QModelIndex &parent = QModelIndex()) const { return _messageList.count(); }
- inline int columnCount(const QModelIndex &parent = QModelIndex()) const { return 3; }
+ inline QModelIndex index(int row, int column, const QModelIndex &/*parent*/ = QModelIndex()) const { return createIndex(row, column); }
+ inline QModelIndex parent(const QModelIndex &) const { return QModelIndex(); }
+ inline int rowCount(const QModelIndex &/*parent*/ = QModelIndex()) const { return _messageList.count(); }
+ inline int columnCount(const QModelIndex &/*parent*/ = QModelIndex()) const { return 3; }
virtual QVariant data(const QModelIndex &index, int role) const;
virtual bool setData(const QModelIndex &index, const QVariant &value, int role);
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