diff -r 000000000000 -r 094583676ce7 wvuing/wvuiprocess/Inc/CCAMessageFlowHandlerPC.h --- /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 +#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