Refactoring the GUI. Work in progress.
[quassel.git] / gui / gui.h
diff --git a/gui/gui.h b/gui/gui.h
new file mode 100644 (file)
index 0000000..6ec1dba
--- /dev/null
+++ b/gui/gui.h
@@ -0,0 +1,124 @@
+/***************************************************************************
+ *   Copyright (C) 2005-07 by The Quassel IRC Development Team             *
+ *   devel@quassel-irc.org                                                 *
+ *                                                                         *
+ *   This program is free software; you can redistribute it and/or modify  *
+ *   it under the terms of the GNU General Public License as published by  *
+ *   the Free Software Foundation; either version 2 of the License, or     *
+ *   (at your option) any later version.                                   *
+ *                                                                         *
+ *   This program is distributed in the hope that it will be useful,       *
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
+ *   GNU General Public License for more details.                          *
+ *                                                                         *
+ *   You should have received a copy of the GNU General Public License     *
+ *   along with this program; if not, write to the                         *
+ *   Free Software Foundation, Inc.,                                       *
+ *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
+ ***************************************************************************/
+
+#ifndef _GUI_H_
+#define _GUI_H_
+
+#include <QtCore>
+#include <QtGui>
+#include <QtNetwork>
+
+#include "global.h"
+#include "buffer.h"
+#include "message.h"
+#include "guiproxy.h"
+
+class MainWin;
+class ClientProxy;
+class BufferTreeModel;
+
+class Client : public QObject {
+  Q_OBJECT
+
+  public:
+    static Client *instance();
+    static void destroy();
+
+    static Buffer *buffer(BufferId);
+    static BufferId statusBufferId(QString net);
+    static BufferId bufferId(QString net, QString buf);
+
+    static BufferTreeModel *bufferModel();
+
+  signals:
+    void sendInput(BufferId, QString message);
+    void showBuffer(Buffer *);
+    void bufferSelected(Buffer *);
+    void bufferUpdated(Buffer *);
+    void bufferActivity(Buffer::ActivityLevel, Buffer *);
+    void bufferDestroyed(Buffer *);
+    void backlogReceived(Buffer *, QList<Message>);
+    void requestBacklog(BufferId, QVariant, QVariant);
+
+    void recvPartialItem(quint32 avail, quint32 size);
+    void coreConnectionError(QString errorMsg);
+
+  public slots:
+    //void selectBuffer(Buffer *);
+    void connectToCore(QString host, quint16 port);
+    void disconnectFromCore();
+
+  private slots:
+    void updateCoreData(UserId, QString);
+    void updateLocalData(QString, QVariant);
+    void recvProxySignal(ClientSignal sig, QVariant arg1, QVariant arg2, QVariant arg3);
+
+    void serverError(QAbstractSocket::SocketError);
+    void serverHasData();
+    void coreConnected();
+    void coreDisconnected();
+
+    void userInput(BufferId, QString);
+    void networkConnected(QString);
+    void networkDisconnected(QString);
+    void recvNetworkState(QString, QVariant);
+    void recvMessage(Message message);
+    void recvStatusMsg(QString network, QString message);
+    void setTopic(QString net, QString buf, QString);
+    void addNick(QString net, QString nick, VarMap props);
+    void removeNick(QString net, QString nick);
+    void renameNick(QString net, QString oldnick, QString newnick);
+    void updateNick(QString net, QString nick, VarMap props);
+    void setOwnNick(QString net, QString nick);
+    void recvBacklogData(BufferId, QList<QVariant>, bool);
+    void updateBufferId(BufferId);
+
+    void layoutMsg();
+
+  private:
+    Client();
+    ~Client();
+    void init();
+    static Client *instanceptr;
+
+    void syncToCore();
+
+    enum ClientMode { LocalCore, RemoteCore };
+    static ClientMode clientMode;
+
+    MainWin *mainWin;
+    ClientProxy *clientProxy;
+    BufferTreeModel *_bufferModel;
+
+    QTcpSocket socket;
+    quint32 blockSize;
+
+    static QHash<BufferId, Buffer *> buffers;
+    static QHash<uint, BufferId> bufferIds;
+    static QHash<QString, QHash<QString, VarMap> > nicks;
+    static QHash<QString, bool> connected;
+    static QHash<QString, QString> ownNick;
+    static QList<BufferId> coreBuffers;
+
+    QTimer *layoutTimer;
+    QList<Message> layoutQueue;
+};
+
+#endif