X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fclient%2Fmessagemodel.h;h=0d540cd5f54f5089b76fa5cb02814187beb387ed;hp=cc61c4f6ad9e11e9de275b1a68235abd50fce056;hb=46d75f41de7c1aaee605c096da28d4b0d8abf138;hpb=756158351d58ce25857f52589f5f8c42236a1c27 diff --git a/src/client/messagemodel.h b/src/client/messagemodel.h index cc61c4f6..0d540cd5 100644 --- a/src/client/messagemodel.h +++ b/src/client/messagemodel.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-08 by the Quassel IRC Team * + * Copyright (C) 2005-09 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -44,6 +44,7 @@ public: TimestampRole, FormatRole, ColumnTypeRole, + RedirectedToRole, UserRole }; @@ -55,7 +56,7 @@ public: 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 rowCount(const QModelIndex &parent = QModelIndex()) const { return parent.isValid() ? 0 : messageCount(); } inline int columnCount(const QModelIndex &/*parent*/ = QModelIndex()) const { return 3; } virtual QVariant data(const QModelIndex &index, int role) const; @@ -68,15 +69,48 @@ public: void clear(); +public slots: + void requestBacklog(BufferId bufferId); + void messagesReceived(BufferId bufferId, int count); + void buffersPermanentlyMerged(BufferId bufferId1, BufferId bufferId2); + protected: - virtual MessageModelItem *createMessageModelItem(const Message &) = 0; +// virtual MessageModelItem *createMessageModelItem(const Message &) = 0; + + virtual int messageCount() const = 0; + virtual bool messagesIsEmpty() const = 0; + virtual const MessageModelItem *messageItemAt(int i) const = 0; + virtual MessageModelItem *messageItemAt(int i) = 0; + virtual const MessageModelItem *firstMessageItem() const= 0; + virtual MessageModelItem *firstMessageItem() = 0; + virtual const MessageModelItem *lastMessageItem() const= 0; + virtual MessageModelItem *lastMessageItem() = 0; + virtual void insertMessage__(int pos, const Message &) = 0; + virtual void insertMessages__(int pos, const QList &) = 0; + virtual void removeMessageAt(int i) = 0; + virtual void removeAllMessages() = 0; + virtual Message takeMessageAt(int i) = 0; + + virtual void customEvent(QEvent *event); + +private slots: + void changeOfDay(); private: - QList _messageList; - + void insertMessageGroup(const QList &); + int insertMessagesGracefully(const QList &); // inserts as many contiguous msgs as possible. returns numer of inserted msgs. int indexForId(MsgId); + + // QList _messageList; + QList _messageBuffer; + QTimer _dayChangeTimer; + QDateTime _nextDayChange; + QHash _messagesWaiting; }; +// ************************************************** +// MessageModelItem +// ************************************************** class MessageModelItem { public: //! Creates a MessageModelItem from a Message object. @@ -84,24 +118,31 @@ public: * Subclasses need to provide Qt::DisplayRole at least, which should describe the plaintext * strings without formattings (e.g. for searching purposes). */ - MessageModelItem(const Message &); + MessageModelItem() {} inline virtual ~MessageModelItem() {} virtual QVariant data(int column, int role) const; - virtual bool setData(int column, const QVariant &value, int role) = 0; - - inline const QDateTime &timeStamp() const { return _timestamp; } - inline MsgId msgId() const { return _msgId; } - inline BufferId bufferId() const { return _bufferId; } - inline Message::Type msgType() const { return _type; } - inline Message::Flags msgFlags() const { return _flags; } - + virtual bool setData(int column, const QVariant &value, int role); + + virtual const Message &message() const = 0; + virtual const QDateTime ×tamp() const = 0; + virtual const MsgId &msgId() const = 0; + virtual const BufferId &bufferId() const = 0; + virtual void setBufferId(BufferId bufferId) = 0; + virtual Message::Type msgType() const = 0; + virtual Message::Flags msgFlags() const = 0; + + // For sorting + bool operator<(const MessageModelItem &) const; + bool operator==(const MessageModelItem &) const; + bool operator>(const MessageModelItem &) const; + static bool lessThan(const MessageModelItem *m1, const MessageModelItem *m2); + private: - QDateTime _timestamp; - MsgId _msgId; - BufferId _bufferId; - Message::Type _type; - Message::Flags _flags; + Message _msg; + BufferId _redirectedTo; }; +QDebug operator<<(QDebug dbg, const MessageModelItem &msgItem); + #endif