summaryrefslogtreecommitdiffstats
path: root/kopete/libkopete/kopetechatsessionmanager.h
diff options
context:
space:
mode:
Diffstat (limited to 'kopete/libkopete/kopetechatsessionmanager.h')
-rw-r--r--kopete/libkopete/kopetechatsessionmanager.h192
1 files changed, 192 insertions, 0 deletions
diff --git a/kopete/libkopete/kopetechatsessionmanager.h b/kopete/libkopete/kopetechatsessionmanager.h
new file mode 100644
index 00000000..e41eb14d
--- /dev/null
+++ b/kopete/libkopete/kopetechatsessionmanager.h
@@ -0,0 +1,192 @@
+/*
+ kopetechatsessionmanager.h - Creates chat sessions
+
+ Copyright (c) 2002-2003 by Duncan Mac-Vicar Prett <duncan@kde.org>
+
+ Kopete (c) 2002-2003 by the Kopete developers <kopete-devel@kde.org>
+
+ *************************************************************************
+ * *
+ * This library is free software; you can redistribute it and/or *
+ * modify it under the terms of the GNU Lesser General Public *
+ * License as published by the Free Software Foundation; either *
+ * version 2 of the License, or (at your option) any later version. *
+ * *
+ *************************************************************************
+*/
+
+#ifndef KOPETEMESSAGEMANAGERFACTORY_H
+#define KOPETEMESSAGEMANAGERFACTORY_H
+
+#include <qobject.h>
+#include <qptrlist.h>
+#include <qintdict.h>
+#include <qvaluelist.h>
+
+#include "kopetechatsession.h"
+#include "kopetemessage.h"
+
+#include "kopete_export.h"
+
+class KopeteView;
+
+namespace Kopete
+{
+
+class Contact;
+class Protocol;
+class MessageEvent;
+
+typedef QPtrList<Contact> ContactPtrList;
+typedef QValueList<Message> MessageList;
+
+/**
+ * @author Duncan Mac-Vicar Prett <duncan@kde.org>
+ *
+ * Kopete::ChatSessionManager is responsible for creating and tracking Kopete::ChatSession
+ * instances for each chat.
+ */
+class KOPETE_EXPORT ChatSessionManager : public QObject
+{
+ Q_OBJECT
+
+public:
+ static ChatSessionManager* self();
+
+ ~ChatSessionManager();
+
+ /**
+ * Create a new chat session. Provided is the initial list of contacts in
+ * the session. If a session with exactly these contacts already exists,
+ * it will be reused. Otherwise a new session is created.
+ * @param user The local user in the session.
+ * @param chatContacts The list of contacts taking part in the chat.
+ * @param protocol The protocol that the chat is using.
+ * @return A pointer to a new or reused Kopete::ChatSession.
+ */
+ Kopete::ChatSession* create( const Kopete::Contact *user,
+ Kopete::ContactPtrList chatContacts, Kopete::Protocol *protocol);
+
+ /**
+ * Find a chat session, if one exists, that matches the given list of contacts.
+ * @param user The local user in the session.
+ * @param chatContacts The list of contacts taking part in the chat.
+ * @param protocol The protocol that the chat is using.
+ * @return A pointer to an existing Kopete::ChatSession, or 0L if none was found.
+ */
+ Kopete::ChatSession* findChatSession( const Kopete::Contact *user,
+ Kopete::ContactPtrList chatContacts, Kopete::Protocol *protocol);
+
+ /**
+ * Registers a Kopete::ChatSession (or subclass thereof) with the Kopete::ChatSessionManager
+ */
+ void registerChatSession(Kopete::ChatSession *);
+
+ /**
+ * Get a list of all open sessions.
+ */
+ QValueList<ChatSession*> sessions();
+
+ /**
+ * @internal
+ * called by the kmm itself when it gets deleted
+ */
+ void removeSession( Kopete::ChatSession *session );
+
+ /**
+ * create a new view for the manager.
+ * only the manager should call this function
+ */
+ KopeteView *createView( Kopete::ChatSession * , const QString &requestedPlugin = QString::null );
+
+ /**
+ * Post a new event. this will emit the @ref newEvent signal
+ */
+ void postNewEvent(Kopete::MessageEvent*);
+
+ /**
+ * Returns the current active Kopete view
+ */
+ KopeteView *activeView();
+
+signals:
+ /**
+ * This signal is emitted whenever a message
+ * is about to be displayed by the KopeteChatWindow.
+ * Please remember that both messages sent and
+ * messages received will emit this signal!
+ * Plugins may connect to this signal to change
+ * the message contents before it's going to be displayed.
+ */
+ void aboutToDisplay( Kopete::Message& message );
+
+ /**
+ * Plugins may connect to this signal
+ * to manipulate the contents of the
+ * message that is being sent.
+ */
+ void aboutToSend( Kopete::Message& message );
+
+ /**
+ * Plugins may connect to this signal
+ * to manipulate the contents of the
+ * message that is being received.
+ *
+ * This signal is emitted before @ref aboutToDisplay()
+ */
+ void aboutToReceive( Kopete::Message& message );
+
+ /**
+ * A new view has been created
+ */
+ void viewCreated( KopeteView * );
+
+ /**
+ * A view as been activated(manually only?).
+ */
+ void viewActivated( KopeteView *view );
+
+ /*
+ * A view is about to close.
+ */
+ void viewClosing( KopeteView *view );
+
+ /**
+ * a new KMM has been created
+ */
+ void chatSessionCreated( Kopete::ChatSession *);
+
+ /**
+ * the message is ready to be displayed
+ */
+ void display( Kopete::Message& message, Kopete::ChatSession * );
+
+ /**
+ * A new event has been posted.
+ */
+ void newEvent(Kopete::MessageEvent *);
+
+ /**
+ * The global shortcut for sending message has been used
+ */
+ void readMessage();
+
+public slots:
+ void slotReadMessage();
+
+private:
+ ChatSessionManager( QObject* parent = 0, const char* name = 0 );
+
+ class Private;
+ Private *d;
+
+ static ChatSessionManager *s_self;
+
+};
+
+}
+
+#endif
+
+// vim: set noet ts=4 sts=4 sw=4:
+