--- /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