X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fclient%2Fmessagemodel.h;h=d37100cd0d18a17680c8e61b752538d24bbae5e7;hb=dbdca302fc349d0e3d46aa0d8091c08b2df28af5;hp=32e4438e8f3696d3783fb9ef0e25753f2303a41c;hpb=16c2a9940b223cf5538efdcb8a6eb011b8258150;p=quassel.git diff --git a/src/client/messagemodel.h b/src/client/messagemodel.h index 32e4438e..d37100cd 100644 --- a/src/client/messagemodel.h +++ b/src/client/messagemodel.h @@ -22,29 +22,40 @@ #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, UserRole }; + enum ColumnType { + TimestampColumn, SenderColumn, TextColumn, 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 +66,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