vtuis/videotelui/src/features/dialer/cvtuidialercontainer.cpp
changeset 0 ed9695c8bcbe
child 3 b1602a5ab0a3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vtuis/videotelui/src/features/dialer/cvtuidialercontainer.cpp	Mon Nov 23 14:47:47 2009 +0200
@@ -0,0 +1,482 @@
+/*
+* 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:  Dialer feature
+*
+*/
+
+
+#include    <cvtlogger.h>
+#include    <cvideodtmfdialer.h>
+#include    <aknsdrawutils.h>
+#include    <aknsutils.h>
+#include    <aknlayoutscalable_apps.cdl.h>
+#include    <aknlayoutscalable_avkon.cdl.h>
+#include    <layoutmetadata.cdl.h>
+#include    <featmgr.h>
+#include    <aknsbasicbackgroundcontrolcontext.h>
+
+#include    "VtUiUtility.h"
+#include    "VtUiLayout.h"
+#include    "mvtuicomponentmanager.h"
+#include    "cvtuidialercontainer.h"
+#include    "cvtuidialervideocontrol.h"
+#include    "tvtuiwsevent.h"
+#include    "tvtuistates.h"
+#include    "cvtuidialerskmodifier.h"
+#include    "cvtuifeaturemanager.h"
+#include    "CVtUiAppUi.h"
+#include    "mvtuicommandmanager.h"
+#include    "cvtuidtmfbuffer.h"
+
+// Index of white color.
+const TInt KVtUiColorWhite = 0;
+
+// Implementation of TVtUiMiniDialerComponentState
+
+// ---------------------------------------------------------------------------
+// TVtUiDialerComponentState::TVtUiDialerComponentState
+// ---------------------------------------------------------------------------
+//
+TVtUiDialerComponentState::TVtUiDialerComponentState(
+    MVtUiComponent& aComponent ) :
+    TVtUiComponentState( aComponent,
+        TVtUiBlockListBitField(
+            MVtUiComponent::EComponentIdToolbar |
+            MVtUiComponent::EComponentIdNumberEntry ) )
+    {
+    }
+
+// Implementation of CVtUiDialerContainer
+
+// ---------------------------------------------------------------------------
+// CVtUiDialerContainer::NewL
+// ---------------------------------------------------------------------------
+//
+CVtUiDialerContainer* CVtUiDialerContainer::NewL(
+    CVtUiFeatureManager& aFeatureManager )
+    {
+    __VTPRINTENTER( "DialContainer.NewL" )
+    CVtUiDialerContainer* self =
+        new ( ELeave ) CVtUiDialerContainer( aFeatureManager );
+    CleanupStack::PushL( self );
+    self->ConstructL( aFeatureManager.AppUi().BitmapManager() );
+    CleanupStack::Pop(); // self
+    __VTPRINTEXIT( "DialContainer.NewL" )
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CVtUiDialerContainer::~CVtUiDialerContainer
+// ---------------------------------------------------------------------------
+//
+CVtUiDialerContainer::~CVtUiDialerContainer()
+    {
+    __VTPRINTENTER( "DialContainer.~" )
+    delete iAsyncDeactivate;
+    delete iVideoControl;
+    delete iDialer;
+    delete iSKModifier;
+    delete iInputBuffer;
+    delete iBgContext;
+    AknsUtils::DeregisterControlPosition( this );
+    __VTPRINTEXIT( "DialContainer.~" )
+    }
+
+// ---------------------------------------------------------------------------
+// CVtUiDialerContainer::HandleResourceChangeL
+// ---------------------------------------------------------------------------
+//
+void CVtUiDialerContainer::HandleResourceChangeL( TInt aType )
+    {
+    __VTPRINTENTER( "DialContainer.HandleResourceChangeL" )
+    switch ( aType )
+        {
+    case KEikDynamicLayoutVariantSwitch:
+    case KAknsMessageSkinChange:
+        LayoutDialerContainer();
+        break;
+    default:
+        break;
+        }
+    __VTPRINTEXIT( "DialContainer.HandleResourceChangeL" )
+    }
+
+// ---------------------------------------------------------------------------
+// CVtUiDialerContainer::ComponentId
+// ---------------------------------------------------------------------------
+//
+MVtUiComponent::TComponentId CVtUiDialerContainer::ComponentId() const
+    {
+    return EComponentIdDialer;
+    }
+
+// ---------------------------------------------------------------------------
+// CVtUiDialerContainer::ComponentAsControl
+// ---------------------------------------------------------------------------
+//
+CCoeControl* CVtUiDialerContainer::ComponentAsControl()
+    {
+    return iVideoControl;
+    }
+
+// ---------------------------------------------------------------------------
+// CVtUiDialerContainer::DoActivateL
+// ---------------------------------------------------------------------------
+//
+void CVtUiDialerContainer::DoActivateL()
+    {
+    __VTPRINTENTER( "DialContainer.DoActivateL" )
+    iUiStates.SetIsDialerActivating( EFalse );
+    LayoutDialerContainer();
+    Reset();
+    iVideoControl->MakeVisible( ETrue );
+    iDialer->MakeVisible( ETrue );
+    MakeVisible( ETrue );
+    User::LeaveIfError( iFeatureManager->
+        CommandManager().AddCommandModifier( *iSKModifier ) );
+    iInputBuffer->Activate();
+    iMode = CVtUiAppUi::ERenderingModeDialer;
+    TVtUiWsEvent< CVtUiAppUi::TRenderingMode > renderingEvent(
+        EVtUiWsEventBeginRenderingMode, &iMode );
+    iCoeEnv->WsSession().SendEventToWindowGroup(
+        Window().WindowGroupId(), renderingEvent );
+    iUiStates.SetIsDialerOpen( ETrue );
+    iAsyncDeactivate->Cancel();
+    __VTPRINTEXIT( "DialContainer.DoActivateL" )
+    }
+
+// ---------------------------------------------------------------------------
+// CVtUiDialerContainer::DoDeactivateL
+// ---------------------------------------------------------------------------
+//
+void CVtUiDialerContainer::DoDeactivateL()
+    {
+    __VTPRINTENTER( "DialContainer.DoDeactivateL" )
+    iFeatureManager->CommandManager().
+        RemoveCommandModifier( *iSKModifier );
+    iUiStates.SetIsDialerOpen( EFalse );
+    iVideoControl->MakeVisible( EFalse );
+    iDialer->MakeVisible( EFalse );
+    MakeVisible( EFalse );
+    Reset();
+    iInputBuffer->Deactivate();
+    iAsyncDeactivate->CallBack();
+    __VTPRINTEXIT( "DialContainer.DoDeactivateL" )
+    }
+
+// ---------------------------------------------------------------------------
+// CVtUiDialerContainer::GetContents
+// ---------------------------------------------------------------------------
+//
+void CVtUiDialerContainer::GetContents( TDes& aContents ) const
+    {
+    __VTPRINTENTER( "DialContainer.GetContents" )
+    iInputBuffer->GetContents( aContents );
+    __VTPRINTEXIT( "DialContainer.GetContents" )
+    }
+
+// ---------------------------------------------------------------------------
+// CVtUiDialerContainer::OfferKeyEventL
+// ---------------------------------------------------------------------------
+//
+TKeyResponse CVtUiDialerContainer::OfferKeyEventL( const TKeyEvent& aEvent,
+    TEventCode aType )
+    {
+    __VTPRINTENTER( "DialContainer.OfferKeyEventL" )
+    TKeyResponse response( EKeyWasNotConsumed );
+    TChar dtmfTone;
+    if ( VtUiUtility::IsDTMFEvent( aEvent, dtmfTone ) &&
+         ( aType == EEventKey ) )
+        {
+        response = EKeyWasConsumed;
+        AppendDigit( dtmfTone );
+        }
+    __VTPRINTEXIT( "DialContainer.OfferKeyEventL" )
+    return response;
+    }
+
+// ---------------------------------------------------------------------------
+// CVtUiDialerContainer::Draw
+// ---------------------------------------------------------------------------
+//
+void CVtUiDialerContainer::Draw( const TRect& ) const
+    {
+    __VTPRINTENTER( "DialContainer.Draw" )
+    CWindowGc& gc( SystemGc() );
+    gc.SetBrushStyle( CWindowGc::ESolidBrush );
+    gc.SetPenStyle( CGraphicsContext::ENullPen );
+    gc.SetBrushColor( AKN_LAF_COLOR( KVtUiColorWhite ) );
+    gc.Clear();
+    MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+    MAknsControlContext* cc = AknsDrawUtils::ControlContext( this );
+    AknsDrawUtils::Background( skin, cc, this, gc, Rect() );
+    __VTPRINTEXIT( "DialContainer.Draw" )
+    }
+
+// ---------------------------------------------------------------------------
+// CVtUiDialerContainer::SizeChanged
+// ---------------------------------------------------------------------------
+//
+void CVtUiDialerContainer::SizeChanged()
+    {
+    __VTPRINTENTER( "DialContainer.SizeChanged" )
+    TRect bgRect;
+    AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EScreen, bgRect );
+    iBgContext->SetRect( bgRect );
+
+    AknsUtils::RegisterControlPosition( this );
+    CCoeControl::SizeChanged();
+    __VTPRINTEXIT( "DialContainer.SizeChanged" )
+    }
+
+// ---------------------------------------------------------------------------
+// CVtUiDialerContainer::PositionChanged
+// ---------------------------------------------------------------------------
+//
+void CVtUiDialerContainer::PositionChanged()
+    {
+    __VTPRINTENTER( "DialContainer.PositionChanged" )
+    AknsUtils::RegisterControlPosition( this );
+    CCoeControl::PositionChanged();
+    __VTPRINTEXIT( "DialContainer.PositionChanged" )
+    }
+
+// ---------------------------------------------------------------------------
+// CVtUiDialerContainer::CountComponentControls
+// ---------------------------------------------------------------------------
+//
+TInt CVtUiDialerContainer::CountComponentControls() const
+    {
+    return iDialer ? 1 : 0;
+    }
+
+// ---------------------------------------------------------------------------
+// CVtUiDialerContainer::ComponentControl
+// ---------------------------------------------------------------------------
+//
+CCoeControl* CVtUiDialerContainer::ComponentControl( TInt aIndex ) const
+    {
+    CCoeControl* result = NULL;
+    switch ( aIndex )
+        {
+    case 0:
+        result = iDialer;
+        break;
+    default:
+        break;
+        }
+    return result;
+    }
+
+// ---------------------------------------------------------------------------
+// CVtUiDialerContainer::CVtUiDialerContainer
+// ---------------------------------------------------------------------------
+//
+CVtUiDialerContainer::CVtUiDialerContainer(
+    CVtUiFeatureManager& aFeatureManager ) :
+    iComponentState( *this ),
+    iFeatureManager( &aFeatureManager ),
+    iComponentManager( &aFeatureManager.ComponentManager() ),
+    iUiStates( aFeatureManager.UiStates() )
+    {
+    __VTPRINTENTER( "DialContainer.ctor" )
+    __VTPRINTEXIT( "DialContainer.ctor" )
+    }
+
+// ---------------------------------------------------------------------------
+// CVtUiDialerContainer::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CVtUiDialerContainer::ConstructL( CVtUiBitmapManager& aBitmapManager )
+    {
+    __VTPRINTENTER( "DialContainer.ConstructL" )
+    iBgContext = CAknsBasicBackgroundControlContext::NewL(
+                      KAknsIIDQsnBgScreen, Rect(), ETrue );
+    CreateWindowL();
+    DrawableWindow()->SetPointerGrab( ETrue );
+    SetExtent( TPoint(), TSize() );
+    ActivateL();
+    MakeVisible( EFalse );
+    iInputBuffer = CVtUiDTMFBuffer::NewL( *iCoeEnv );
+    iVideoControl = CVtUiDialerVideoControl::NewL( aBitmapManager );
+    iDialer = CVideoDTMFDialer::NewL( *this, *iVideoControl, DialerRect() );
+    iSKModifier = CVtUiDialerSKModifier::NewL( *iFeatureManager );
+    // Disable fading when using DP (eliminates nasty color error)
+    if ( FeatureManager::FeatureSupported( KFeatureIdDisplayPost ) )
+        {
+        Window().SetNonFading( ETrue );
+        }
+    iAsyncDeactivate = new ( ELeave ) CAsyncCallBack(
+        TCallBack( ASyncDoDeactivate, this ), CActive::EPriorityLow );
+    __VTPRINTEXIT( "DialContainer.ConstructL" )
+    }
+
+// ---------------------------------------------------------------------------
+// CVtUiDialerContainer::RegisterComponentL
+// ---------------------------------------------------------------------------
+//
+void CVtUiDialerContainer::RegisterComponentL()
+    {
+    __VTPRINTENTER( "DialContainer.RegisterComponentL" )
+    User::LeaveIfError( iComponentManager->ChangeResourceChangeRegistration(
+        *this, MVtUiComponentManager::ERegister ) );
+    User::LeaveIfError(
+        iComponentManager->ChangeComponentRegistration(
+        iComponentState, MVtUiComponentManager::ERegister ) );
+    User::LeaveIfError( iComponentManager->ChangeKeyEventRegistration(
+        *this, MVtUiComponentManager::ERegister ) );
+    __VTPRINTEXIT( "DialContainer.RegisterComponentL" )
+    }
+
+// ---------------------------------------------------------------------------
+// CVtUiDialerContainer::UnregisterComponent
+// ---------------------------------------------------------------------------
+//
+void CVtUiDialerContainer::UnregisterComponent()
+    {
+    __VTPRINTENTER( "DialContainer.UnregisterComponent" )
+    iComponentManager->ChangeComponentRegistration(
+        iComponentState, MVtUiComponentManager::EUnregister );
+    iComponentManager->ChangeResourceChangeRegistration(
+        *this, MVtUiComponentManager::EUnregister );
+    iComponentManager->ChangeKeyEventRegistration(
+        *this, MVtUiComponentManager::EUnregister );
+    __VTPRINTEXIT( "DialContainer.UnregisterComponent" )
+    }
+
+// ---------------------------------------------------------------------------
+// CVtUiDialerContainer::UnregisterComponent
+// ---------------------------------------------------------------------------
+//
+MVtUiVideoWindow* CVtUiDialerContainer::ComponentAsVideoWindow()
+    {
+    __VTPRINTENTER( "DialContainer.ComponentAsVideoWindow" )
+    __VTPRINTEXIT( "DialContainer.ComponentAsVideoWindow" )
+    return iVideoControl;
+    }
+
+// ---------------------------------------------------------------------------
+// CVtUiDialerContainer::LayoutDialerContainer
+// ---------------------------------------------------------------------------
+//
+void CVtUiDialerContainer::LayoutDialerContainer()
+    {
+    __VTPRINTENTER( "DialContainer.LayoutDialerContainer" )
+
+    TAknWindowLineLayout mainPaneLL;
+
+    if ( Layout_Meta_Data::IsLandscapeOrientation() )
+        {
+        // Landscape: Option11 (thin status pane, lsc)
+        mainPaneLL = AknLayoutScalable_Avkon::main_pane( 9 ).LayoutLine();
+        }
+    else
+        {
+        // Portrait: main pane with status pane off, control pane on
+        mainPaneLL = AknLayoutScalable_Avkon::main_pane( 7 ).LayoutLine();
+        }
+
+    TRect appWinRect;
+    AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EApplicationWindow,
+        appWinRect );
+
+    // Layout container
+    AknLayoutUtils::LayoutControl( this, appWinRect, mainPaneLL );
+
+    // Layout dialer
+    const TInt variety( Layout_Meta_Data::IsLandscapeOrientation() ?
+        1 : 0 );
+    TAknWindowLineLayout dialerLLout(
+        AknLayoutScalable_Apps::main_video_tele_dialer_pane(
+            variety ).LayoutLine() );
+    AknLayoutUtils::LayoutControl( iDialer, Rect(), dialerLLout );
+
+    // Layout video control
+    AknLayoutUtils::LayoutControl( iVideoControl, iDialer->Rect(),
+         AknLayoutScalable_Apps::video_down_pane_cp(
+            variety ).LayoutLine() );
+
+    __VTPRINTEXIT( "DialContainer.LayoutDialerContainer" )
+    }
+
+// ---------------------------------------------------------------------------
+// CVtUiDialerContainer::DialerRect
+// ---------------------------------------------------------------------------
+//
+TRect CVtUiDialerContainer::DialerRect() const
+    {
+    __VTPRINTENTER( "DialContainer.DialerRect" )
+    TRect mainPaneRect;
+    AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane,
+        mainPaneRect );
+    __VTPRINTEXIT( "DialContainer.DialerRect" )
+    return mainPaneRect;
+    }
+
+// ---------------------------------------------------------------------------
+// CVtUiDialerContainer::Reset
+// ---------------------------------------------------------------------------
+//
+void CVtUiDialerContainer::Reset()
+    {
+    __VTPRINTENTER( "DialContainer.Reset" )
+    iInputBuffer->Reset();
+    __VTPRINTEXIT( "DialContainer.Reset" )
+    }
+
+// ---------------------------------------------------------------------------
+// CVtUiDialerContainer::AppendDigit
+// ---------------------------------------------------------------------------
+//
+void CVtUiDialerContainer::AppendDigit( TChar aDigit )
+    {
+    __VTPRINTENTER( "DialContainer.AppendDigit" )
+    iInputBuffer->Append( aDigit );
+    __VTPRINTEXIT( "DialContainer.AppendDigit" )
+    }
+
+// ---------------------------------------------------------------------------
+// CVtUiDialerContainer::MopSupplyObject
+// ---------------------------------------------------------------------------
+//
+TTypeUid::Ptr CVtUiDialerContainer::MopSupplyObject( TTypeUid aId )
+ {
+     __VTPRINTENTER( "CVtUiDialerContainer.MopSupplyObject" )
+ // Required during rendering of the background skin in Draw()
+ if (aId.iUid == MAknsControlContext::ETypeId)
+     {
+      __VTPRINTEXIT( "CVtUiDialerContainer.MopSupplyObject.1" )
+     return MAknsControlContext::SupplyMopObject( aId, iBgContext );
+     }
+    __VTPRINTEXIT( "CVtUiDialerContainer.MopSupplyObject.2" )
+ return CCoeControl::MopSupplyObject( aId );
+ }
+
+// ---------------------------------------------------------------------------
+// CVtUiDialerContainer::ASyncDoDeactivate
+// ---------------------------------------------------------------------------
+//
+TInt CVtUiDialerContainer::ASyncDoDeactivate( TAny* aSelf )
+    {
+    __VTPRINTENTER( "DialContainer.ASyncDoDeactivate" )
+    CVtUiDialerContainer* self =
+        reinterpret_cast< CVtUiDialerContainer* >( aSelf );
+    self->iMode = CVtUiAppUi::ERenderingModeDialer;
+    TVtUiWsEvent< CVtUiAppUi::TRenderingMode > renderingEvent(
+        EVtUiWsEventEndRenderingMode, &self->iMode );
+    self->iCoeEnv->WsSession().SendEventToWindowGroup(
+        self->Window().WindowGroupId(), renderingEvent );
+    __VTPRINTEXIT( "DialContainer.ASyncDoDeactivate" )
+    return KErrNone;
+    }