diff -r 000000000000 -r 094583676ce7 wvuing/wvuieng/EngSrc/CCAChatContainer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wvuing/wvuieng/EngSrc/CCAChatContainer.h Thu Dec 17 08:41:52 2009 +0200 @@ -0,0 +1,293 @@ +/* +* Copyright (c) 2004-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Container for message containers +* +*/ + + +#ifndef CCACHATCONTAINER_H +#define CCACHATCONTAINER_H + +#include "impsbuilddefinitions.h" +#include "MCABufferMemoryHandler.h" +#include "MCAChatInterface.h" +#include "MCAChatObserver.h" + +// FORWARD CLASS DECLERATIONS +class CCAMessageContainer; +class MCASettings; + +// CLASS DECLARATION + +/** + * Container for message containers + * + * @lib CAEngine.dll + * @since 3.0 + */ +class CCAChatContainer : public CBase, + public MCAChatInterface, + public MCABufferMemoryHandler, + public MCAChatObserver + { + public: // Construction + + /** + * Construction + */ + static CCAChatContainer* NewL( MCASettings& aSettingsInterface ); + + /** + * Destruction + */ + ~CCAChatContainer(); + + private: // Construction + + /** + * Constructor + */ + CCAChatContainer( MCASettings& aSettingsInterface ); + + private: // Methods from MCAChatInterface + + /** + * @see MCAChatInterface + */ + MCAMessagesReadInterface& MessageReadInterfaceL( + const TDesC& aServerAddress, + const TDesC& aUserId, + const TDesC& aTargetId, + MCAMessagesReadInterface::TContainerType aType ); + + /** + * @see MCAChatInterface + */ + MCAMessagesWriteInterface& MessageWriteInterfaceL( + const TDesC& aServerAddress, + const TDesC& aUserId, + const TDesC& aTargetId, + MCAMessagesReadInterface::TContainerType aType ); + + /** + * @see MCAChatInterface + */ + void DeleteChatL( const TDesC& aServerAddress, + const TDesC& aUserId, + const TDesC& aTargetId ); + + /** + * @see MCAChatInterface + */ + void CloseAllContainers(); + + /** + * @see MCAChatInterface + */ + MCAMessagesReadInterface* ChatExistsL( const TDesC& aServerAddress, + const TDesC& aUserId, + const TDesC& aTargetId ); + + /** + * @see MCAChatInterface + */ + MCAMessagesReadInterface& ChangeChatIdL( + const TDesC& aOldServerAddress, + const TDesC& aOldUserId, + const TDesC& aOldTargetId, + const TDesC& aNewServerAddress, + const TDesC& aNewUserId, + const TDesC& aNewTargetId, + MCAMessagesReadInterface::TContainerType aType ); + + + + /** + * @see MCAChatInterface + */ + TInt GroupCount() const; + + /** + * @see MCAChatInterface + */ + TInt ChatCount() const; + + /** + * @see MCAChatInterface + */ + MCAMessagesReadInterface& GroupAt( TInt aIndex ) const; + + /** + * @see MCAChatInterface + */ + MCAMessagesReadInterface& ChatAt( TInt aIndex ) const; + + /** + * @see MCAChatInterface + */ + TInt RegisterChatObserver( MCAChatObserver* aObserver ); + + /** + * @see MCAChatInterface + */ + TInt UnregisterChatObserver( MCAChatObserver* aObserver ); + + /** + * @see MCAChatInterface + */ + void ResetPendingCount(); + + /** + * @see MCAChatInterface + */ + TInt MessagesPendingCount( TInt& aCountOfChats, + MCAMessagesReadInterface::TUnreadFilter aUnreadFilter = + MCAMessagesReadInterface::EUnreadAll ) const; + + /** + * @see MCAChatInterface + */ + MCAMessageContainerInfo* PendingMessageInfo() const; + +#ifdef RD_CHAT_GROUP_MESSAGE_INDICATION_NEW + /** + * @see MCAChatInterface + */ + TInt ChatGroupMessagesPendingCount( TInt& aCountOfChats ) const; + + /** + * @see MCAChatInterface + */ + MCAMessageContainerInfo* ChatGroupPendingMessageInfo() const; + +#endif // RD_CHAT_GROUP_MESSAGE_INDICATION_NEW + + private: // Methods from MCABufferMemoryHandler + + /** + * @see MCABufferMemoryHandler + */ + TBool FreeMemoryIfNeededL( TInt aSize ); + + /** + * @see MCABufferMemoryHandler + */ + void SetAccessInterface( MCAChatInterface* aAccess ); + + private: // Methods from MCAChatObserver + + /** + * @see MCAChatObserver + */ + void HandleChatEvent( TChatEventType aEvent, + MCAMessage* aMessage = NULL ); + + public: // New methods + + /** + * Resolve recipient of message identified by operation code. + * @param aOperationCode, Identifier for getting right message. + * @param aStatus. Status of operation. KErrNone/KErrNotFound + * @return Message recipient + */ + const TDesC& MessageRecipient( TInt aOperationCode, + TInt& aStatus ) const; + + /** + * Set external memoryhandler. Set with NULL, + * if wanted to reset external handler. + */ + void SetExternalMemoryHandler( MCABufferMemoryHandler* aMemoryHandler ); + + private: // New helper methods + + /** + * Return index to chat. Try to create if does not exists. + * Leave if not possible. e.g. KErrNoMemory. + * @param aServerAddress Part of identifier to identify container. + * @param aUserId Part of identifier to identify container. + * @param aTargetId Part of identifier to identify container. + * @return Index of container. + */ + TInt ChatL( const TDesC& aServerAddress, + const TDesC& aUserId, + const TDesC& aTargetId, + MCAMessagesReadInterface::TContainerType aType = + MCAMessagesReadInterface::ENoneContainer ); + + /** + * Returns latest found item by index. + * FindChat or ChatL( id, type ) must be called before this one. + * @param aIndex, Index of needed item. + * @param aResetLatest. Reset type of latest found container. + * ETrue, Reset, EFalse, No reseting. + * @return Pointer to right container. + */ + CCAMessageContainer* ChatL( TInt aIndex, TBool aResetLatest = ETrue ); + + /** + * FindChat or ChatL( id, type ) must be called before this one. + * @param aIndex, Index of needed item. + * @param aResetLatest. Reset type of latest found container. + * ETrue, Reset, EFalse, No reset. + */ + void RemoveChat( TInt aIndex, TBool aResetLatest = ETrue ); + + /** + * Finds if container exists and returns index. + * @param aChat Reference chat. + * @return Index of container. If container is not found, + * KErrNotFound is returned. + */ + TInt FindChat( const CCAMessageContainer& aChat ); + + /** + * Create new container. Change aServerAddress and userid to + * current ones, if KNullDesC used. + * @see CCAMessageContainer + */ + CCAMessageContainer* CreateContainerLC( + const TDesC& aServerAddress, + const TDesC& aUserId, + const TDesC& aTargetId, + MCABufferMemoryHandler& aMemoryHandler, + MCAMessagesReadInterface::TContainerType aType ); + private: // Member data + + /// Access to settings + MCASettings& iSettingsInterface; + + /// Container of chats. Owns items. + RPointerArray< CCAMessageContainer > iChatContainer; + + /// Container of groups. Owns items. + RPointerArray< CCAMessageContainer > iGroupContainer; + + /// Container of send buffers. Owns items. + RPointerArray< CCAMessageContainer > iSendContainer; + + /// Container of observers. Does not own items. + RPointerArray< MCAChatObserver > iObservers; + + /// External memory handler if set. + MCABufferMemoryHandler* iExternalMemoryHandler; + + /// Last found item type + MCAMessagesReadInterface::TContainerType iLatestType; + }; + + +#endif // CCACHATCONTAINER_H + +// End of File