diff options
Diffstat (limited to 'kopete/libkopete/kopetechatsessionmanager.h')
-rw-r--r-- | kopete/libkopete/kopetechatsessionmanager.h | 192 |
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: + |