/* kopetechatsessionmanager.h - Creates chat sessions Copyright (c) 2002-2003 by Duncan Mac-Vicar Prett Kopete (c) 2002-2003 by the Kopete developers ************************************************************************* * * * 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 #include #include #include #include "kopetechatsession.h" #include "kopetemessage.h" #include "kopete_export.h" class KopeteView; namespace Kopete { class Contact; class Protocol; class MessageEvent; typedef TQPtrList ContactPtrList; typedef TQValueList MessageList; /** * @author Duncan Mac-Vicar Prett * * Kopete::ChatSessionManager is responsible for creating and tracking Kopete::ChatSession * instances for each chat. */ class KOPETE_EXPORT ChatSessionManager : public TQObject { 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. */ TQValueList 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 TQString &requestedPlugin = TQString() ); /** * 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( TQObject* parent = 0, const char* name = 0 ); class Private; Private *d; static ChatSessionManager *s_self; }; } #endif // vim: set noet ts=4 sts=4 sw=4: