wvuing/wvuiave/AppSrc/CCAChatViewControl.cpp
branchRCL_3
changeset 13 a941bc465d9f
parent 0 094583676ce7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wvuing/wvuiave/AppSrc/CCAChatViewControl.cpp	Wed Sep 01 12:31:13 2010 +0100
@@ -0,0 +1,518 @@
+/*
+* 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:  Text viewer component
+*
+*/
+
+
+
+// INCLUDE FILES
+#include    "CCAChatViewControl.h"
+#include    "MCAMessageFlowHandlerPC.h"
+
+#include    "CCACustomDraw.h"
+#include    "CCAPicture.h"
+#include    "CCAAppUi.h"
+#include    "mcatapeventobserver.h"
+#include	"MCASettingsPC.h"
+
+#include    <AknUtils.h>
+#include    <aknsettingcache.h>
+#include    <aknenv.h>
+#include    <aknconsts.h>
+#include    <avkon.mbg>
+#include    <eikrted.h>
+
+#include	"MCAProcessManager.h"
+#include	"IMMessageUtilsPC.h"
+
+#include	"MCAMsgAddedToRichTxtCtrlObserver.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CCAChatViewControl::CCAChatViewControl
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CCAChatViewControl::CCAChatViewControl()
+    {
+    }
+// -----------------------------------------------------------------------------
+// CCAChatViewControl::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CCAChatViewControl::ConstructL( const TRect& aRect,
+                                     const CCoeControl& aParent,
+                                     MCAGroupPC& aMsgRWInterfacePC,
+                                     MCASettingsPC& aSettingsInterface,
+                                     CCAMessageExtensionsHandler& aExtensionsHandler,
+                                     CGulIcon*& aFromMe,
+                                     CGulIcon*& aToMe,
+                                     CGulIcon*& aUnsupported,
+                                     CGulIcon*& aCorrupted,
+                                     TBool aScrollOver,
+                                     MCAMsgAddedToRichTxtCtrlObserver* aAddMsgObserver )
+    {
+    // get the graphics device
+    CWindowGc& gc = SystemGc();
+    CBitmapDevice* device = static_cast<CBitmapDevice*>( gc.Device() );
+
+    // text container
+    iTextContainer = CCARichTextContainer::NewL(
+                         static_cast<CCAAppUi&>( *iEikonEnv->AppUi() ),
+                         aSettingsInterface, *this,
+                         aExtensionsHandler,
+                         aFromMe, aToMe, aUnsupported,
+                         aCorrupted,
+                         *device, aScrollOver,
+                         aAddMsgObserver );
+
+    // construct base class
+    CCATextViewControl::ConstructL( aRect, aParent,
+                                    iTextContainer->TextLayout() );
+
+    // Initialise flow handler and fetch messages
+    iFlowHandlerPC = IMMessageUtilsPC::CreateInstanceL( *iTextContainer,
+                                                        aMsgRWInterfacePC,
+                                                        !aScrollOver ) ;
+
+    // We want to handle all the events which occur inside the text area.
+    // Rest is done by the base class.
+    SetPenBehaviour( EPenProcessEvent );
+    }
+// -----------------------------------------------------------------------------
+// CCAChatViewControl::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CCAChatViewControl::ConstructL( const TRect& aRect,
+                                     const CCoeControl& aParent,
+                                     MCAConversationPC& aMsgRWInterfacePC,
+                                     MCASettingsPC& aSettingsInterface,
+                                     CCAMessageExtensionsHandler& aExtensionsHandler,
+                                     CGulIcon*& aFromMe,
+                                     CGulIcon*& aToMe,
+                                     CGulIcon*& aUnsupported,
+                                     CGulIcon*& aCorrupted,
+                                     TBool aScrollOver,
+                                     MCAMsgAddedToRichTxtCtrlObserver* aAddMsgObserver )
+    {
+    // get the graphics device
+    CWindowGc& gc = SystemGc();
+    CBitmapDevice* device = static_cast<CBitmapDevice*>( gc.Device() );
+
+    // text container
+    iTextContainer = CCARichTextContainer::NewL(
+                         static_cast<CCAAppUi&>( *iEikonEnv->AppUi() ),
+                         aSettingsInterface, *this,
+                         aExtensionsHandler,
+                         aFromMe, aToMe, aUnsupported,
+                         aCorrupted,
+                         *device, aScrollOver,
+                         aAddMsgObserver );
+
+    // construct base class
+    CCATextViewControl::ConstructL( aRect, aParent,
+                                    iTextContainer->TextLayout() );
+
+    // Initialise flow handler and fetch messages
+    iFlowHandlerPC = IMMessageUtilsPC::CreateInstanceL( *iTextContainer,
+                                                        aMsgRWInterfacePC,
+                                                        !aScrollOver ) ;
+
+    // We want to handle all the events which occur inside the text area.
+    // Rest is done by the base class.
+    SetPenBehaviour( EPenProcessEvent );
+    }
+
+void CCAChatViewControl::ConstructL( const TRect& aRect,
+                                     const CCoeControl& aParent,
+                                     MCARecordedChatsPC& aRecordedChatsPC,
+                                     MCASettingsPC& aSettingsInterface,
+                                     CCAMessageExtensionsHandler& aExtensionsHandler,
+                                     CGulIcon*& aFromMe,
+                                     CGulIcon*& aToMe,
+                                     CGulIcon*& aUnsupported,
+                                     CGulIcon*& aCorrupted,
+                                     TBool aScrollOver,
+                                     MCAMsgAddedToRichTxtCtrlObserver* aAddMsgObserver )
+    {
+    // get the graphics device
+    CWindowGc& gc = SystemGc();
+    CBitmapDevice* device = static_cast<CBitmapDevice*>( gc.Device() );
+
+    // text container
+    iTextContainer = CCARichTextContainer::NewL(
+                         static_cast<CCAAppUi&>( *iEikonEnv->AppUi() ),
+                         aSettingsInterface, *this,
+                         aExtensionsHandler,
+                         aFromMe, aToMe, aUnsupported,
+                         aCorrupted,
+                         *device, aScrollOver, aAddMsgObserver );
+
+    // construct base class
+    CCATextViewControl::ConstructL( aRect, aParent,
+                                    iTextContainer->TextLayout() );
+
+    // Initialise flow handler and fetch messages
+    iFlowHandlerPC = IMMessageUtilsPC::CreateInstanceL( *iTextContainer,
+                                                        aRecordedChatsPC,
+                                                        !aScrollOver ) ;
+
+    // We want to handle all the events which occur inside the text area.
+    // Rest is done by the base class.
+    SetPenBehaviour( EPenProcessEvent );
+    }
+
+// -----------------------------------------------------------------------------
+// CCAChatViewControl::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CCAChatViewControl* CCAChatViewControl::NewL( const TRect& aRect,
+                                              const CCoeControl& aParent,
+                                              MCAGroupPC& aMsgRWInterfacePC,
+                                              MCASettingsPC& aSettingsInterface,
+                                              CCAMessageExtensionsHandler& aExtensionsHandler,
+                                              CGulIcon*& aFromMe,
+                                              CGulIcon*& aToMe,
+                                              CGulIcon*& aUnsupported,
+                                              CGulIcon*& aCorrupted,
+                                              TBool aScrollOver /*= ETrue*/,
+                                              MCAMsgAddedToRichTxtCtrlObserver* aAddMsgObserver /*=NULL*/ )
+    {
+    CCAChatViewControl* self = new( ELeave ) CCAChatViewControl;
+    CleanupStack::PushL( self );
+    self->ConstructL( aRect, aParent, aMsgRWInterfacePC, aSettingsInterface,
+                      aExtensionsHandler, aFromMe, aToMe,
+                      aUnsupported, aCorrupted,
+                      aScrollOver, aAddMsgObserver );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CCAChatViewControl::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CCAChatViewControl* CCAChatViewControl::NewL( const TRect& aRect,
+                                              const CCoeControl& aParent,
+                                              MCAConversationPC& aMsgRWInterfacePC,
+                                              MCASettingsPC& aSettingsInterface,
+                                              CCAMessageExtensionsHandler& aExtensionsHandler,
+                                              CGulIcon*& aFromMe,
+                                              CGulIcon*& aToMe,
+                                              CGulIcon*& aUnsupported,
+                                              CGulIcon*& aCorrupted,
+                                              TBool aScrollOver /*= ETrue*/,
+                                              MCAMsgAddedToRichTxtCtrlObserver* aAddMsgObserver /*=NULL*/ )
+    {
+    CCAChatViewControl* self = new( ELeave ) CCAChatViewControl;
+    CleanupStack::PushL( self );
+    self->ConstructL( aRect, aParent, aMsgRWInterfacePC, aSettingsInterface,
+                      aExtensionsHandler, aFromMe, aToMe,
+                      aUnsupported, aCorrupted,
+                      aScrollOver, aAddMsgObserver );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+CCAChatViewControl* CCAChatViewControl::NewL( const TRect& aRect,
+                                              const CCoeControl& aParent,
+                                              MCARecordedChatsPC& aRecordedChatsPC,
+                                              MCASettingsPC& aSettingsInterface,
+                                              CCAMessageExtensionsHandler& aExtensionsHandler,
+                                              CGulIcon*& aFromMe,
+                                              CGulIcon*& aToMe,
+                                              CGulIcon*& aUnsupported,
+                                              CGulIcon*& aCorrupted,
+                                              TBool aScrollOver /*= ETrue*/,
+                                              MCAMsgAddedToRichTxtCtrlObserver* aAddMsgObserver /*= NULL*/ )
+    {
+    CCAChatViewControl* self = new( ELeave ) CCAChatViewControl;
+    CleanupStack::PushL( self );
+    self->ConstructL( aRect, aParent, aRecordedChatsPC, aSettingsInterface,
+                      aExtensionsHandler, aFromMe, aToMe,
+                      aUnsupported, aCorrupted,
+                      aScrollOver, aAddMsgObserver );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+
+// Destructor
+CCAChatViewControl::~CCAChatViewControl()
+    {
+    delete iTextContainer;
+    delete iFlowHandlerPC;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CCAChatViewControl::FetchMessages
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CCAChatViewControl::FetchMessages( TBool aFetch )
+    {
+    iFlowHandlerPC->FetchMessages( aFetch );
+    }
+
+// -----------------------------------------------------------------------------
+// CCAChatViewControl::SelectedMessage
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+MCAConversationMessage* CCAChatViewControl::SelectedMessage()
+    {
+    return iTextContainer->SelectedMessage();
+    }
+
+// -----------------------------------------------------------------------------
+// CCAChatViewControl::SelectedItem
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+HBufC* CCAChatViewControl::SelectedItemL()
+    {
+    return iTextContainer->SelectedItemL();
+    }
+
+// -----------------------------------------------------------------------------
+// CCAChatViewControl::SelectedItemType
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CCAChatViewControl::SelectedItemType()
+    {
+    return iTextContainer->SelectedItemType();
+    }
+
+// -----------------------------------------------------------------------------
+// CCAChatViewControl::SetHighlight
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CCAChatViewControl::SetHighlight( TBool aHighlight )
+    {
+    iTextContainer->SetItemHighlight( aHighlight );
+    }
+
+// -----------------------------------------------------------------------------
+// CCAChatViewControl::DisableHighlightL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CCAChatViewControl::DisableHighlightL()
+    {
+    iTextContainer->DisableHighlightL();
+    }
+
+// -----------------------------------------------------------------------------
+// CCAChatViewControl::Highlighted
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TBool CCAChatViewControl::Highlighted()
+    {
+    return iTextContainer->Highlighted();
+    }
+
+
+// -----------------------------------------------------------------------------
+// CCAChatViewControl::OfferKeyEventL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TKeyResponse CCAChatViewControl::OfferKeyEventL( const TKeyEvent& aKeyEvent,
+                                                 TEventCode aType )
+    {
+    if ( aType != EEventKey )
+        {
+        return EKeyWasNotConsumed;
+        }
+
+    CCARichTextContainer::THighlightMovement movement(
+        CCARichTextContainer::ENext );
+
+    switch ( aKeyEvent.iCode )
+        {
+        case EKeyUpArrow:
+            {
+            movement = CCARichTextContainer::EPrevious;
+            // flowthrough
+            }
+        case EKeyDownArrow:
+            {
+            return iTextContainer->MoveHighlightL( movement ) == KErrNone ?
+                   EKeyWasConsumed : EKeyWasNotConsumed;
+            }
+
+        default:
+            {
+            // No handling for other events
+            break;
+            }
+        }
+
+    return EKeyWasNotConsumed;
+    }
+
+// -----------------------------------------------------------------------------
+// CCAChatViewControl::ProcessStylusEventL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CCAChatViewControl::ProcessStylusEventL(
+    const TPointerEvent& aPointerEvent )
+    {
+    // 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;
+            iStylusOutsideMessage = EFalse;
+            }
+
+        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;
+                }
+            }
+        else
+            {
+            // Stylus was moved/activated outside text elements
+            iStylusOutsideMessage = ETrue;
+            }
+        }
+
+    // Notify Observers
+    if ( iTapObserver )
+        {
+        if ( aPointerEvent.iType == TPointerEvent::EButton1Down )
+            {
+            // Start
+            iTapObserver->HandleTapEventL(
+                MCATapEventObserver::EStartTap, iTapControlId );
+            }
+        else if ( aPointerEvent.iType == TPointerEvent::EButton1Up )
+            {
+            // Release
+            iTapObserver->HandleTapEventL(
+                MCATapEventObserver::EReleaseTap, iTapControlId );
+            if ( iWaitForSingleTap && !iStylusOutsideMessage )
+                {
+                // Single tap
+                iTapObserver->HandleTapEventL(
+                    MCATapEventObserver::ESingleTap, iTapControlId );
+                }
+            if ( iWaitForDoubleTap && !iStylusOutsideMessage )
+                {
+                // Double Tap
+                iTapObserver->HandleTapEventL(
+                    MCATapEventObserver::EDoubleTap, iTapControlId );
+                }
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CCAChatViewControl::SizeChanged
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CCAChatViewControl::SizeChanged()
+    {
+    SetHighlighted( Highlighted() );
+    CCATextViewControl::SizeChanged();
+    }
+
+// -----------------------------------------------------------------------------
+// CCAChatViewControl::MoveHighlightL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CCAChatViewControl::MoveHighlightL(
+    CCARichTextContainer::THighlightMovement aMovement )
+    {
+    iWaitForSingleTap = ETrue;
+    iTextContainer->MoveHighlightL( aMovement );
+    }
+
+// -----------------------------------------------------------------------------
+// CCAChatViewControl::SetTapObserver
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CCAChatViewControl::SetTapObserver( MCATapEventObserver* aObserver, TUint aId )
+    {
+    iTapObserver = aObserver;
+    iTapControlId = aId;
+    }
+
+// -----------------------------------------------------------------------------
+// CCAChatViewControl::IsDeleted
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TBool CCAChatViewControl::IsDeleted() const
+    {
+    return iTextContainer->IsDeleted();
+    }
+
+
+// -----------------------------------------------------------------------------
+// CCAChatViewControl::GetMessageCount
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CCAChatViewControl::GetMessageCount()
+    {
+    return iTextContainer->GetMessageCount();
+    }
+
+//when user navigate among tab.
+// -----------------------------------------------------------------------------
+// CCAChatViewControl::UnRegisterRichTxtCtrlObserver
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CCAChatViewControl::UnRegisterRichTxtCtrlObserver()
+    {
+    return iTextContainer->UnRegisterRichTxtCtrlObserver();
+    }
+
+//  End of File