wvuing/wvuiprocess/Inc/CCAMessageFlowHandlerPC.h
changeset 0 094583676ce7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wvuing/wvuiprocess/Inc/CCAMessageFlowHandlerPC.h	Thu Dec 17 08:41:52 2009 +0200
@@ -0,0 +1,197 @@
+/*
+* Copyright (c) 2006 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:  Flow controller for messages
+*
+*/
+
+
+
+#ifndef CCAMESSAGEFLOWHANDLERPC_H
+#define CCAMESSAGEFLOWHANDLERPC_H
+
+//  INCLUDES
+#include <e32base.h>
+#include "MCAMessageObserver.h"
+#include "MCASettingsObserver.h"
+#include "MCAMessageFlowHandlerPC.h"
+
+// FORWARD DECLARATIONS
+class MCAMessagesReadInterface;
+class MCASettings;
+class MCAConversationManagerPC;
+class MCARecordedChatsPC;
+
+
+// CLASS DECLARATION
+
+/**
+*  Flow controller for messages
+*
+*  @lib wvuiprocessng.dll
+*  @since Series 60 3 dot 2
+*/
+class CCAMessageFlowHandlerPC : public CTimer, public MCAMessageObserver,
+            public MCASettingsObserver, public MCAMessageFlowHandlerPC
+    {
+
+
+
+    public:
+
+        /**
+         * Should we fetch new messages or not
+         * @param aFetch ETrue if this chat is in foreground and should
+         *               receive messages, EFalse otherwise.
+         */
+        void FetchMessages( TBool aFetch );
+
+
+
+    protected: // Functions from MCAMessageObserver
+
+        /**
+         * Handle events.
+         * @param aEvent Event to handle.
+         * @param aIndex, Index of message which is affected by event.
+         */
+        void HandleMessageEvent( TMessageEventType aEvent, TInt aIndex );
+
+    protected:  // Functions from CTimer
+
+        /**
+         * @see CTimer
+         */
+        void RunL();
+
+        /**
+         * @see CActive
+         */
+        TInt RunError( TInt aError );
+
+    protected:  // Functions from MCASettingsObserver
+
+        /**
+         * Handles setting changes.
+         * @param aChangedSettingEnum specifies the changed setting.
+         */
+        void HandleSettingsChangeL( TInt aChangedSettingEnum );
+
+
+    private:  // New functions
+
+        /**
+         * Get flow control value from settings
+         */
+        void UpdateTimeIntervalL();
+
+        /**
+         * Is opening on going or not.
+         * @since Series 60 v3.2
+         * @return ETrue if opening on going, EFalse otherwise.
+         */
+        TBool IsOpening() const;
+
+        /**
+         * Corrects the real index to current index of messages.
+         * This is needed when opening a chat, because messages
+         * are not added to container in additional order.
+         * @param aIndex Real index of message in container
+         * @return current index of message in container.
+         */
+        TInt MessageIndexCorrection( TInt aIndex ) const;
+
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CCAMessageFlowHandlerPC( MCAMessageContainer& aMessageContainer,
+                                 MCAMessagesReadInterface& aReadInterface,
+                                 MCASettings& aSettings );
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL( TBool aRecordedChatHandler );
+
+    public:  // Constructors and destructor
+
+        /**
+         * Two-phased constructor.
+         * @param aMessageContainer Interface to UI side message container
+         * @param aReadInterface Message read interface
+         * @param aSettings Interface to settings manager
+         * @param aRecordedChatHandler Is this handler for recorded chat
+         *                             or not.
+         */
+        static CCAMessageFlowHandlerPC* NewL(
+            MCAMessageContainer& aMessageContainer,
+            MCAMessagesReadInterface& aReadInterface,
+            MCASettings& aSettings,
+            TBool aRecordedChatHandler );
+
+        /**
+         * Destructor.
+         */
+        virtual ~CCAMessageFlowHandlerPC();
+
+
+    private:    // Data
+
+        // Interface for UI side message container
+        // Not owned
+        MCAMessageContainer& iMessages;
+
+        // Interface for fetching messages
+        // Not owned
+        MCAMessagesReadInterface& iReadInterface;
+
+        // interface for settings manager
+        MCASettings& iSettings;
+
+        // time interval for receiving messages
+        TTimeIntervalMicroSeconds32 iTimeInterval;
+
+        // Is chat deleted already
+        TBool iChatDeleted;
+
+        // Should we fetch new messages
+        TBool iFetchMessages;
+
+        // Index for fetching messages
+        TInt iMsgIndex;
+
+        // Initial count for messages
+        TInt iInitialMsgCount;
+
+        // Is new message received while opening the chat
+        TBool iNewMsgWhileOpening;
+
+        // Flag is read from CR variation in class construction
+        // ETrue in releases >= 3.2
+        // EFalse in releases < 3.2
+        // Set to EFalse if this handler is used to handle
+        // recorded chat
+        TBool iBgOpeningMode;
+
+        TInt iAddedUnreadMsgs;
+
+        // allow unit tests to access protected member functions
+        friend class UT_CCAMessageFlowHandler; // CSI: 36 # see above
+
+    };
+
+#endif      // CCAMESSAGEFLOWHANDLERPC_H
+
+// End of File