imstutils/imconversationview/imcvuiapp/src/cimcvappviewcontrol.cpp
changeset 0 5e5d6b214f4f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/imstutils/imconversationview/imcvuiapp/src/cimcvappviewcontrol.cpp	Tue Feb 02 10:12:18 2010 +0200
@@ -0,0 +1,358 @@
+/*
+* Copyright (c) 2007-2008 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:  text view control container 
+*
+*/
+
+
+// INCLUDE FILES
+#include    "cimcvappviewcontrol.h"
+
+#include    "cimcvapprichtextcontainer.h"
+#include 	"cimcvappui.h"
+#include	"cimcvappmessageflowhandler.h"
+#include    <AknUtils.h>
+#include    <AknSettingCache.h>
+#include    <aknenv.h>
+#include    <aknconsts.h>
+#include    <avkon.mbg>
+#include    <eikrted.h>
+#include 	"imcvlogger.h"
+#include	"mimcvtapeventobserver.h"
+#include    "mimcvenginemessagesreadinterface.h"
+#include    "mimcvenginemessagecontainerinfo.h"
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CIMCVAppViewControl::CIMCVAppViewControl
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CIMCVAppViewControl::CIMCVAppViewControl()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CIMCVAppViewControl::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CIMCVAppViewControl::ConstructL( const TRect& aRect, 
+                        const CCoeControl& aParent,
+                        MIMCVEngineMessageReadInterface& aReadInterface,
+                        CIMCVAppMessageExtensionsHandler& aExtensionsHandler,
+                        CGulIcon* aFromMe,
+                        CGulIcon* aToMe,
+                        CIMCVAppRichTextContainerCache& aRTContainerCache,
+                        CIMCVEngine& aActiveEngine,
+                        TBool aScrollOver )
+    {
+	IM_CV_LOGS(TXT("CIMCVAppViewContainer::ConstructL() start") );   
+	 
+	CWindowGc& gc = SystemGc();
+	CBitmapDevice* device = static_cast<CBitmapDevice*>( gc.Device() ); 
+
+	TInt serviceId = aActiveEngine.GetServiceId();
+	// text container
+	// Load the container from the cache
+	iTextContainer = aRTContainerCache.LoadContainer(serviceId, aReadInterface.TargetId().Target() );
+	if(NULL == iTextContainer )
+	    {
+		//If container not found in cache, create a new and add it to cache
+	    iTextContainer = CIMCVAppRichTextContainer::NewL(static_cast<CIMCVAppUi*>( iEikonEnv->AppUi() ),
+	            this, 
+	            &aExtensionsHandler,
+	            aFromMe, aToMe,device, 
+	            aReadInterface.TargetId().Target(),
+	            serviceId,
+	            aScrollOver
+	             );
+	    
+	    aRTContainerCache.StoreContainer(iTextContainer);
+	    }
+	else
+	    {
+		//If container is loaded from the cache, Then Provide it with the Parent's object address
+	    iTextContainer->Initialize( static_cast<CIMCVAppUi*>( iEikonEnv->AppUi() ),
+                this, 
+                &aExtensionsHandler,
+                aFromMe, aToMe,device, 
+                aScrollOver );
+	    }
+
+
+	// construct base class
+	CIMCVAppTextViewControl::ConstructL( aRect, aParent, 
+	                                iTextContainer->TextLayout() );
+
+	// create flow handler and fetch messages
+	// Use aScrollOver to determine is this recorded chat or not,
+	// it is EFalse only with recorded chats.
+	SetPenBehaviour( EPenProcessEvent );
+	iFlowHandler = CIMCVAppMessageFlowHandler::NewL( *iTextContainer,
+												aReadInterface,
+												aActiveEngine,
+												!aScrollOver );
+	IM_CV_LOGS(TXT("CIMCVAppViewContainer::ConstructL() end") );   
+    }
+
+// -----------------------------------------------------------------------------
+// CIMCVAppViewControl::SetTapObserver
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CIMCVAppViewControl::SetTapObserver( MIMCVTapEventObserver* aObserver, TUint aId )
+    {
+    iTapObserver = aObserver;
+    iTapControlId = aId;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CIMCVAppViewControl::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CIMCVAppViewControl* CIMCVAppViewControl::NewL( const TRect& aRect, 
+                        const CCoeControl& aParent,
+                        MIMCVEngineMessageReadInterface& aReadInterface,
+                        CIMCVAppMessageExtensionsHandler& aExtensionsHandler,
+                        CGulIcon* aFromMe,
+                        CGulIcon* aToMe,
+                        CIMCVAppRichTextContainerCache& aRTContainerCache,
+                        CIMCVEngine& aActiveEngine,
+                        TBool aScrollOver /*= ETrue*/ )
+    {
+    IM_CV_LOGS(TXT("CIMCVAppViewContainer::NewL() start") );   
+    CIMCVAppViewControl* self = new( ELeave ) CIMCVAppViewControl;
+    CleanupStack::PushL( self );
+    self->ConstructL( aRect, aParent, aReadInterface,  
+                      aExtensionsHandler,aFromMe, aToMe,aRTContainerCache,
+                      aActiveEngine,
+                      aScrollOver );
+    CleanupStack::Pop( self );
+    IM_CV_LOGS(TXT("CIMCVAppViewContainer::NewL() end") );   
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CIMCVAppViewControl::~CIMCVAppViewControl
+//  Destructor
+// -----------------------------------------------------------------------------
+
+CIMCVAppViewControl::~CIMCVAppViewControl()
+    {
+    delete iFlowHandler;
+    }
+
+    
+
+// -----------------------------------------------------------------------------
+// CIMCVAppViewControl::SelectedItem
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+HBufC* CIMCVAppViewControl::SelectedItemL()
+    {
+    return iTextContainer->SelectedItemL();
+    }
+    
+// -----------------------------------------------------------------------------
+// CIMCVAppViewControl::SelectedItemType
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CIMCVAppViewControl::SelectedItemType()
+    {
+    return iTextContainer->SelectedItemType();
+    }
+
+
+// -----------------------------------------------------------------------------
+// CIMCVAppViewControl::DisableHighlightL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CIMCVAppViewControl::DisableHighlightL()
+    {
+    IM_CV_LOGS(TXT("CIMCVAppViewContainer::DisableHighlightL()	start") );   
+    iTextContainer->DisableHighlightL();
+    IM_CV_LOGS(TXT("CIMCVAppViewContainer::DisableHighlightL()	end") );   
+    }
+    
+// -----------------------------------------------------------------------------
+// CIMCVAppViewControl::Highlighted
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TBool CIMCVAppViewControl::Highlighted()
+    {
+    IM_CV_LOGS(TXT("CIMCVAppViewContainer::Highlighted()	start") );
+    
+    IM_CV_LOGS(TXT("CIMCVAppViewContainer::Highlighted()	end") );      
+    return iTextContainer->Highlighted();
+    }
+
+// -----------------------------------------------------------------------------
+// CIMCVAppViewControl::SetHighlight
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CIMCVAppViewControl::SetHighlight( TBool aHighlight )
+    {
+    iTextContainer->SetItemHighlight( aHighlight );
+    }
+
+// -----------------------------------------------------------------------------
+// CIMCVAppViewControl::OfferKeyEventL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TKeyResponse CIMCVAppViewControl::OfferKeyEventL( const TKeyEvent& aKeyEvent, 
+                                                 TEventCode aType )
+    {
+    IM_CV_LOGS(TXT("CIMCVAppViewContainer::OfferKeyEventL()	start") );   
+    if( aType != EEventKey )
+        {
+        return EKeyWasNotConsumed;
+        }
+
+    CIMCVAppRichTextContainer::THighlightMovement movement( 
+                                                CIMCVAppRichTextContainer::ENext );
+    
+    switch( aKeyEvent.iCode )
+        {
+        case EKeyUpArrow:
+            {
+            movement = CIMCVAppRichTextContainer::EPrevious;
+            // flowthrough
+			}
+        case EKeyDownArrow:
+            {                        
+            return iTextContainer->MoveHighlightL( movement ) == KErrNone ? 
+                        EKeyWasConsumed : EKeyWasNotConsumed;
+            }
+
+        default:
+            {
+            // No handling for other events
+            break;
+            }
+        }
+    IM_CV_LOGS(TXT("CIMCVAppViewContainer::OfferKeyEventL()	end") );   
+    return EKeyWasNotConsumed;
+    }
+
+// -----------------------------------------------------------------------------
+// CIMCVAppViewControl::ProcessStylusEventL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CIMCVAppViewControl::ProcessStylusEventL( 
+    const TPointerEvent& aPointerEvent )
+    {
+    IM_CV_LOGS(TXT("CIMCVAppViewContainer::ProcessStylusEventL()	start") );   
+    // We end up here only if the pointer event started inside
+    // the text area.
+    if( aPointerEvent.iType == TPointerEvent::EButton1Down ||
+        aPointerEvent.iType == TPointerEvent::EDrag )
+        {
+        // Reset poiter flags
+        if( aPointerEvent.iType == TPointerEvent::EButton1Down )
+            {
+            iWaitForDoubleTap = iWaitForSingleTap;
+            iWaitForSingleTap = ETrue;
+             }
+        
+        TInt pos = FindDocPos( aPointerEvent.iPosition );
+        if( pos != KErrNotFound )
+            {
+            TInt res = iTextContainer->HighlightItemAtPosL( pos );
+            if( res == KErrNone )  
+                
+                {
+                // New item/message was highlighted 
+                if( aPointerEvent.iType == TPointerEvent::EDrag )
+                    {
+                    // Single tap is not possible if highlight was changed
+                    // with draging
+                    iWaitForSingleTap = EFalse;
+                    }
+                // doubletap is not possible for now
+                iWaitForDoubleTap = EFalse;
+                }
+            }
+         }
+    
+    if( iTapObserver )
+        {
+        if( aPointerEvent.iType == TPointerEvent::EButton1Down )
+            {
+            // Start
+            iTapObserver->HandleTapEventL( 
+                MIMCVTapEventObserver::EStartTap, iTapControlId );
+            }
+        }
+    
+   	IM_CV_LOGS(TXT("CIMCVAppViewContainer::ProcessStylusEventL()	end") );   
+    }
+
+// -----------------------------------------------------------------------------
+// CIMCVAppViewControl::SizeChanged
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CIMCVAppViewControl::SizeChanged()
+    {
+    IM_CV_LOGS(TXT("CIMCVAppViewContainer::SizeChanged()	start") );   
+    SetHighlighted( Highlighted() );
+    CIMCVAppTextViewControl::SizeChanged();
+    IM_CV_LOGS(TXT("CIMCVAppViewContainer::SizeChanged()	end") );   
+    }
+
+// -----------------------------------------------------------------------------
+// CIMCVAppViewControl::MoveHighlightL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CIMCVAppViewControl::MoveHighlightL( 
+                            CIMCVAppRichTextContainer::THighlightMovement aMovement)
+    {
+    IM_CV_LOGS(TXT("CIMCVAppViewContainer::MoveHighlightL()	start") );   
+    iWaitForSingleTap = ETrue;
+    iTextContainer->MoveHighlightL( aMovement );
+    IM_CV_LOGS(TXT("CIMCVAppViewContainer::MoveHighlightL()	end") );   
+    }
+// -----------------------------------------------------------------------------
+// CIMCVAppViewControl::GetMessageCount
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CIMCVAppViewControl::GetMessageCount()
+	{
+	return iTextContainer->GetMessageCount();	
+	}
+
+// -----------------------------------------------------------------------------
+// CIMCVAppViewControl::FetchMessages
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CIMCVAppViewControl::FetchMessages( TBool aFetch )
+    {
+    iFlowHandler->FetchMessages( aFetch );
+    }
+
+//  End of File