diff -r 000000000000 -r 5f000ab63145 phoneapp/phoneuiview/src/cphonedialerview.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneapp/phoneuiview/src/cphonedialerview.cpp Mon Jan 18 20:18:27 2010 +0200 @@ -0,0 +1,432 @@ +/* +* Copyright (c) 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: The dialer view of PhoneUI +* +*/ + + +// INCLUDE FILES +#include "phoneconstants.h" +#include "cphonedialerview.h" + +#include +#include +#include +#include + +#include // iWindowSrvSession + +#include +#include +#include // DrawUtils, egul.lib +#include +#include +#include +#include + +#include "cphonestatuspane.h" +#include "tphonecmdparambitmap.h" +#include "phonelogger.h" + +#include // needed for AKN_LAF_COLOR in 3.0 environment + + +#include "phoneui.hrh" +#include "phoneviewcommanddefinitions.h" +// Scalable UI +#include +#include +#include +#include +#include + +enum TPhoneBgLayers + { + EPhoneBgFirstLayer = 0, + EPhoneBgLayersN = 1 + }; + +#define LSC_VARIETY 0 +#define PRT_VARIETY 6 + +// ================= MEMBER FUNCTIONS ======================= + +// ----------------------------------------------------------------------------- +// CPhoneDialerView::CPhoneDialerView +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CPhoneDialerView::CPhoneDialerView() : + iSecurityMode ( EFalse ) + { + } + +// ----------------------------------------------------------------------------- +// CPhoneDialerView::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CPhoneDialerView::ConstructL( TRect aRect ) + { + // Create background control context for skins. + iBgContext = CAknsLayeredBackgroundControlContext::NewL( + KAknsIIDQsnBgScreen, aRect, ETrue /*Parent absolute*/, + EPhoneBgLayersN ); + + CreateWindowL(); + DrawableWindow()->SetPointerGrab( ETrue ); + + SetRect( aRect ); + } + +// ----------------------------------------------------------------------------- +// CPhoneDialerView::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CPhoneDialerView* CPhoneDialerView::NewL( TRect aRect ) + { + CPhoneDialerView* self = new ( ELeave ) CPhoneDialerView(); + + CleanupStack::PushL( self ); + self->ConstructL( aRect ); + CleanupStack::Pop( self ); + return self; + } + +// Destructor +CPhoneDialerView::~CPhoneDialerView() + { + __LOGMETHODSTARTEND(EPhoneUIView, "CPhoneDialerView::~CPhoneDialerView"); + delete iBgContext; + iRegion.Close(); + } + +// ----------------------------------------------------------------------------- +// CPhoneDialerView::ViewId +// ----------------------------------------------------------------------------- +// +TVwsViewId CPhoneDialerView::ViewId() const + { + TVwsViewId id( + iEikonEnv->EikAppUi()->Application()->AppDllUid(), + KUidViewId ); + return id; + } + +// ----------------------------------------------------------------------------- +// CPhoneDialerView::ViewActivatedL +// ----------------------------------------------------------------------------- +// +void CPhoneDialerView::ViewActivatedL( + const TVwsViewId& /*aPrevViewId*/, + TUid /*aCustomMessageId*/, + const TDesC8& /*aCustomMessage*/ ) + { + } + +// ----------------------------------------------------------------------------- +// CPhoneDialerView::ViewDeactivated +// ----------------------------------------------------------------------------- +// +void CPhoneDialerView::ViewDeactivated() + { + } + +// ----------------------------------------------------------------------------- +// CPhoneDialerView::SetControl +// +// Change the control. +// ----------------------------------------------------------------------------- +// +void CPhoneDialerView::SetControl( CCoeControl* aControl ) + { + __LOGMETHODSTARTEND(EPhoneUIView, "CPhoneDialerView::SetControl()"); + iControl = aControl; + UpdateControlRect(); + iControl->MakeVisible( ETrue ); + } + + +// ----------------------------------------------------------------------------- +// CPhoneDialerView::Control +// ----------------------------------------------------------------------------- +// +CCoeControl* CPhoneDialerView::Control() const + { + return iControl; + } + +// ----------------------------------------------------------------------------- +// CPhoneDialerView::ComponentControl +// ----------------------------------------------------------------------------- +// +CCoeControl* CPhoneDialerView::ComponentControl( TInt /*aIndex*/ ) const + { + return iControl; + } + +// ----------------------------------------------------------------------------- +// CPhoneDialerView::CountComponentControls +// ----------------------------------------------------------------------------- +// +TInt CPhoneDialerView::CountComponentControls() const + { + __LOGMETHODSTARTEND(EPhoneUIView, "CPhoneDialerView::CountComponentControls()"); + TInt count = 0; + + if ( iControl ) + { + count = 1; + } + + return count; + } + +// ----------------------------------------------------------------------------- +// CPhoneDialerView::MopSupplyObject +// ----------------------------------------------------------------------------- +// +TTypeUid::Ptr CPhoneDialerView::MopSupplyObject( TTypeUid aId ) + { + __LOGMETHODSTARTEND(EPhoneUIView, "CPhoneDialerView::MopSupplyObject()"); + // Required during rendering of the background skin in Draw() + if (aId.iUid == MAknsControlContext::ETypeId) + { + return MAknsControlContext::SupplyMopObject( aId, iBgContext ); + } + return CCoeControl::MopSupplyObject( aId ); + } + +// ----------------------------------------------------------------------------- +// CPhoneDialerView::SetRect +// ----------------------------------------------------------------------------- +// +void CPhoneDialerView::SetRect( const TRect &aRect ) + { + __LOGMETHODSTARTEND(EPhoneUIView, "CPhoneDialerView::SetRect()"); + if ( !AknLayoutUtils::PenEnabled() ) + { + CCoeControl::SetRect( aRect ); + } + else + { + if ( iSecurityMode ) + { + // In security mode aRect is ok. + CCoeControl::SetRect( aRect ); + iControlRect = Rect(); + } + else + { + TAknLayoutRect viewRect; + + TRect screenRect; + AknLayoutUtils::LayoutMetricsRect( + AknLayoutUtils::EScreen, + screenRect ); + + // dialer view + viewRect.LayoutRect( + screenRect, + TAknWindowComponentLayout::Compose( + AknLayoutScalable_Avkon::application_window( 0 ), + AknLayoutScalable_Avkon::main_pane( 7 ) ) ); + + CCoeControl::SetRect( viewRect.Rect() ); + + TInt variety ( PRT_VARIETY ) ; // portrait + if ( Layout_Meta_Data::IsLandscapeOrientation() ) + { + variety = LSC_VARIETY; + } + + // reduce toolbar + TAknLayoutRect toolbarRect; + toolbarRect.LayoutRect( + screenRect, + TAknWindowComponentLayout::Compose( + AknLayoutScalable_Avkon::application_window( 0 ), + AknLayoutScalable_Avkon::area_side_right_pane( variety ) ) ); + + if ( toolbarRect.Rect().Intersects( viewRect.Rect() ) ) + { + iControlRect = Rect(); + if ( variety == PRT_VARIETY ) // portrait + { + iControlRect.iBr.iY -= toolbarRect.Rect().Height(); + } + else + { + iControlRect.iBr.iX -= toolbarRect.Rect().Width(); + } + } + else + { + iControlRect = Rect(); + } + } + } + } + +// ----------------------------------------------------------------------------- +// CPhoneDialerView::Draw +// ----------------------------------------------------------------------------- +// +void CPhoneDialerView::Draw( const TRect& aRect ) const + { + __LOGMETHODSTARTEND(EPhoneUIView, "CPhoneDialerView::Draw()"); + TRect rect = Rect(); + + if ( !rect.iTl.iY ) + { + CWindowGc& gc = SystemGc(); + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + MAknsControlContext* cc = AknsDrawUtils::ControlContext( this ); + + if ( iSecurityMode || + !AknsDrawUtils::Background( skin, cc, this, gc, aRect ) ) + { + gc.SetPenStyle(CGraphicsContext::ENullPen); + gc.SetBrushColor( AKN_LAF_COLOR( 0 ) ); // 0 for white + gc.SetBrushStyle(CGraphicsContext::ESolidBrush); + gc.DrawRect( aRect ); + } + } + } + +// ----------------------------------------------------------------------------- +// CPhoneDialerView::HandlePointerEventL +// ----------------------------------------------------------------------------- +// +void CPhoneDialerView::HandlePointerEventL( const TPointerEvent& aPointerEvent ) + { + // Calling base class implementation + CCoeControl::HandlePointerEventL( aPointerEvent ); + } + +// ----------------------------------------------------------------------------- +// CPhoneDialerView::ActivateL +// ----------------------------------------------------------------------------- +// +void CPhoneDialerView::ActivateL() + { + __LOGMETHODSTARTEND(EPhoneUIView, "CPhoneDialerView::ActivateL()"); + CCoeControl::ActivateL(); + } + +// ----------------------------------------------------------------------------- +// CPhoneDialerView::SizeChanged() +// +// Expects that the controls are initialised otherwise. +// ----------------------------------------------------------------------------- +// +void CPhoneDialerView::SizeChanged() + { + __LOGMETHODSTARTEND(EPhoneUIView, "CPhoneDialerView::SizeChanged()"); + AknsUtils::RegisterControlPosition( this ); + + TRect screen; + AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EScreen, screen ); + iBgContext->SetLayerImage( EPhoneBgFirstLayer, KAknsIIDQsnBgScreen ); + iBgContext->SetParentPos( screen.iTl ); + iBgContext->SetLayerRect( EPhoneBgFirstLayer, screen ) ; + + UpdateControlRect(); + } + +// ----------------------------------------------------------------------------- +// CPhoneDialerView::PositionChanged +// ----------------------------------------------------------------------------- +// +void CPhoneDialerView::PositionChanged() + { + __LOGMETHODSTARTEND(EPhoneUIView, "CPhoneDialerView::PositionChanged()"); + AknsUtils::RegisterControlPosition( this ); + } + +// ----------------------------------------------------------------------------- +// CPhoneDialerView::FocusChanged +// ----------------------------------------------------------------------------- +// +void CPhoneDialerView::FocusChanged( TDrawNow /*aDrawNow*/ ) + { + iControl->SetFocus( IsFocused () ); + } + +// ----------------------------------------------------------------------------- +// CPhoneDialerView::UpdateControlRect +// ----------------------------------------------------------------------------- +// +void CPhoneDialerView::UpdateControlRect() + { + __LOGMETHODSTARTEND(EPhoneUIView, "CPhoneDialerView::UpdateControlRect()"); + if ( iControl ) + { + if ( !AknLayoutUtils::PenEnabled() ) + { + if ( Rect() != iControl->Rect() ) + { + iControl->SetRect( Rect() ); + } + } + else + { + if ( iControlRect != iControl->Rect() ) + { + iControl->SetRect( iControlRect ); + } + } + } + } + +// ----------------------------------------------------------------------------- +// CPhoneDialerView::HandleResourceChangeL +// ----------------------------------------------------------------------------- +// +void CPhoneDialerView::HandleResourceChange( TInt aType ) + { + __LOGMETHODSTARTEND(EPhoneUIView, "CPhoneDialerView::HandleResourceChange()"); + + if ( aType == KAknsMessageSkinChange || + aType == KEikDynamicLayoutVariantSwitch ) + { + DrawDeferred(); + } + } + +// ----------------------------------------------------------------------------- +// CPhoneDialerView::SetSecurityMode +// ----------------------------------------------------------------------------- +// +void CPhoneDialerView::SetSecurityMode ( TBool aStatus ) + { + if ( iSecurityMode != aStatus ) + { + iSecurityMode = aStatus; + SizeChanged(); + } + } + +// ----------------------------------------------------------------------------- +// CPhoneDialerView::IsSecurityMode +// ----------------------------------------------------------------------------- +// +TBool CPhoneDialerView::IsSecurityMode() + { + return iSecurityMode; + } + +// End of File