X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fclient%2Fmessagemodel.h;h=f6e2538fced0ff04bccde66b701930b6277409a4;hp=32e4438e8f3696d3783fb9ef0e25753f2303a41c;hb=3a9668461efb05bd5b24ba5eb741a7f7f75086c9;hpb=16c2a9940b223cf5538efdcb8a6eb011b8258150 diff --git a/src/client/messagemodel.h b/src/client/messagemodel.h index 32e4438e..f6e2538f 100644 --- a/src/client/messagemodel.h +++ b/src/client/messagemodel.h @@ -22,29 +22,41 @@ #define MESSAGEMODEL_H_ #include +#include -class MessageItem; +#include "message.h" +#include "types.h" + +class MessageModelItem; +class 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); @@ -55,23 +67,36 @@ class MessageModel : public QAbstractItemModel { void insertMessages(const QList &); protected: - virtual MessageItem *createMessageItem(const Message &) = 0; + virtual MessageModelItem *createMessageModelItem(const Message &) = 0; private: - QList _messageList; + QList _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