Prevent ChatView from scrolling up 1px on buffer switch, fixes #544
[quassel.git] / src / client / clientbacklogmanager.h
index 5ead663..5a8585b 100644 (file)
@@ -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  *
@@ -22,6 +22,9 @@
 #define CLIENTBACKLOGMANAGER_H
 
 #include "backlogmanager.h"
+#include "message.h"
+
+class BacklogRequester;
 
 class ClientBacklogManager : public BacklogManager {
   Q_OBJECT
@@ -29,13 +32,30 @@ class ClientBacklogManager : public BacklogManager {
 public:
   ClientBacklogManager(QObject *parent = 0);
 
-  virtual const QMetaObject *syncMetaObject() const { return &BacklogManager::staticMetaObject; }
+  // helper for the backlogRequester, as it isn't a QObject and can't emit itself
+  inline void emitMessagesRequested(const QString &msg) const { emit messagesRequested(msg); }
+
+  void reset();
 
 public slots:
-  virtual void receiveBacklog(BufferId bufferId, int lastMsgs, int offset, QVariantList msgs);
+  virtual void receiveBacklog(BufferId bufferId, MsgId first, MsgId last, int limit, int additional, QVariantList msgs);
+  virtual void receiveBacklogAll(MsgId first, MsgId last, int limit, int additional, QVariantList msgs);
+  void requestInitialBacklog();
 
 signals:
-  void backlog(BufferId bufferId, const QVariantList &msgs);
+  void messagesReceived(BufferId bufferId, int count) const;
+  void messagesRequested(const QString &) const;
+  void messagesProcessed(const QString &) const;
+
+  void updateProgress(int, int);
+
+private:
+  bool isBuffering();
+  void stopBuffering();
+
+  void dispatchMessages(const MessageList &messages, bool sort = false);
+
+  BacklogRequester *_requester;
 };
 
 #endif // CLIENTBACKLOGMANAGER_H