#ifndef _BUFFER_H_
#define _BUFFER_H_
+#include <QDateTime>
+
class AbstractUiMsg;
class IrcChannel;
class NickModel;
#include "message.h"
#include "bufferinfo.h"
-#include <QVariantMap>
-
-//!\brief Encapsulates the contents of a single channel, query or server status context.
-/** A Buffer maintains a list of existing nicks and their status.
+/// Encapsulates the contents of a single channel, query or server status context.
+/**
*/
class Buffer : public QObject {
Q_OBJECT
public:
- Buffer(BufferInfo, QObject *parent = 0);
- virtual ~Buffer();
-
- enum Type {
- StatusType,
- ChannelType,
- QueryType
- };
-
enum Activity {
NoActivity = 0x00,
OtherActivity = 0x01,
};
Q_DECLARE_FLAGS(ActivityLevel, Activity)
- bool isStatusBuffer() const;
- Type bufferType() const;
- bool isActive() const;
+ Buffer(BufferInfo, QObject *parent = 0);
BufferInfo bufferInfo() const;
- void updateBufferInfo(BufferInfo bufferid);
-
- BufferId uid() const;
- NetworkId networkId() const;
-
- QString networkName() const;
- QString name() const;
-
- QList<AbstractUiMsg *> contents() const;
-
- QVariantMap nickList() const;
- QString topic() const;
- QString ownNick() const;
-
- //! Returns a pointer to the associated IrcChannel object for the buffer.
- /** A buffer has an IrcChannel object only if it is a channel buffer
- * (i.e. bufferType() == ChannelType), and if it is active at the moment.
- * \returns A pointer to the associated IrcChannel object, if the buffer is a channel and online; 0 else.
- */
- IrcChannel *ircChannel() const;
- NickModel *nickModel() const;
+ const QList<AbstractUiMsg *> &contents() const;
+ inline bool isVisible() const { return _isVisible; }
+ inline MsgId lastSeenMsg() const { return _lastSeenMsg; }
+ inline ActivityLevel activityLevel() const { return _activityLevel; }
signals:
- void userInput(const BufferInfo &, QString);
- void nickListChanged(QVariantMap nicks);
- void topicSet(QString topic);
- void ownNickSet(QString ownNick);
- void bufferUpdated(Buffer *);
-
void msgAppended(AbstractUiMsg *);
void msgPrepended(AbstractUiMsg *);
void layoutQueueEmpty();
public slots:
- void setActive(bool active = true);
void appendMsg(const Message &);
void prependMsg(const Message &);
bool layoutMsg();
- void setIrcChannel(IrcChannel *chan = 0);
-
- // no longer needed
-// void setTopic(QString);
-// //void setNicks(QStringList);
-// void addNick(QString nick, QVariantMap props);
-// void renameNick(QString oldnick, QString newnick);
-// void removeNick(QString nick);
-// void updateNick(QString nick, QVariantMap props);
-// void setOwnNick(QString nick);
-
- void processUserInput(QString);
+ void setVisible(bool visible);
+ void setLastSeenMsg(const MsgId &msgId);
+ void setActivityLevel(ActivityLevel level);
private:
BufferInfo _bufferInfo;
- bool _active;
- Type _type;
- BufferState *state;
- QPointer<IrcChannel> _ircChannel;
- QPointer<NickModel> _nickModel;
+ bool _isVisible;
+ MsgId _lastSeenMsg;
+ ActivityLevel _activityLevel;
- QList<Message> layoutQueue;
+ QLinkedList<Message> layoutQueue;
QList<AbstractUiMsg *> layoutedMsgs;
+ void updateActivityLevel(const Message &msg);
};
+
Q_DECLARE_OPERATORS_FOR_FLAGS(Buffer::ActivityLevel)
#endif