wvuing/wvuieng/EngSrc/CCAChatContainer.h
changeset 0 094583676ce7
--- /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